晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/rainic/www/oldTZh/wp-content/plugins/persian-gravity-forms/includes/ |
Upload File : |
<?php
use Hekmatinasser\Verta\Verta;
defined( 'ABSPATH' ) || exit;
class GFPersian_JalaliDate extends GFPersian_Core {
public function __construct() {
if ( $this->option( 'jalali', '1' ) != '1' ) {
return;
}
add_filter( 'gform_tooltips', [ $this, 'tooltips' ] );
add_action( 'gform_editor_js', [ $this, 'jalali_settings' ] );
add_action( 'gform_field_standard_settings', [ $this, 'jalali_checkbox' ], 20, 2 );
add_action( 'gform_field_standard_settings', [ $this, 'datepicker_theme' ], 21, 2 );
add_action( 'gform_enqueue_scripts', [ $this, 'jalali_datepicker' ], 12, 2 );
add_filter( 'gform_field_validation', [ $this, 'jalali_validator' ], 999999, 4 );
add_filter( 'gform_predefined_choices', [ $this, 'jalali_predefined_choices' ], 1 );
}
/**
* Add tooltip about jalali option
*
* @filter gform_tooltips
*
* @param array $tooltips
*
* @return array
*/
public function tooltips( array $tooltips ): array {
$tooltips['gform_activate_jalali'] = '<h6>فعالسازی تاریخ شمسی</h6>در صورتی که از چند فیلد تاریخ استفاده میکنید، فعالسازی تاریخ شمسی یکی از فیلدها کفایت میکند.<br/>تذکر : با توجه به آزمایشی بودن این قسمت ممکن است تداخل توابع سبب ناسازگاری با برخی قالب ها شود.';
$tooltips['gform_datepicker_theme'] = '<h6>پوسته انتخاب کننده تاریخ</h6> از بین پوسته های تعریف شده جهت متمایز کردن انتخاب کننده، یکی را تنظیم کنید.';
return $tooltips;
}
/**
* Configure jalali settings logic in date field settings
*
* @action gform_editor_js
*
* @return void
*/
public function jalali_settings(): void { ?>
<script type='text/javascript'>
function toggle_datepicker_theme(field) {
let is_jalali_checked = field['check_jalali'] === 1;
let is_datepicker_type = field['dateType'] === 'datepicker';
if (!is_jalali_checked || !is_datepicker_type) {
jQuery('.datepicker_theme_container').hide();
} else {
jQuery('.datepicker_theme_container').show();
}
}
fieldSettings['date'] += ', .jalali_setting';
jQuery(document).on('change', '#field_date_input_type, #check_jalali', function () {
let field = GetSelectedField(); // get current field being edited
toggle_datepicker_theme(field);
});
jQuery(document).bind('gform_load_field_settings', function (event, field, form) {
jQuery('#check_jalali').prop('checked', field['check_jalali'] === 1);
jQuery('#datepicker_theme').val(field['datepicker_theme'] || '');
});
</script>
<?php
}
/**
* Add jalali option to date field
*
* @action gform_field_standard_settings
*
* @param int $position
* @param int $form_id
*
* @return void
*
*/
public function jalali_checkbox( int $position, int $form_id ): void {
if ( $position == 25 ) { ?>
<li class="jalali_setting field_setting">
<input type="checkbox" id="check_jalali"
onclick="SetFieldProperty('check_jalali', jQuery(this).is(':checked') ? 1 : 0);"/>
<label class="inline gfield_value_label" for="check_jalali" class="inline">
فعالسازی تاریخ شمسی
<?php gform_tooltip( "gform_activate_jalali" ) ?>
</label>
</li>
<?php
}
}
public function datepicker_theme( int $position, int $form_id ): void {
if ( $position == 1225 ) { ?>
<li class="jalali_setting field_setting datepicker_theme_container">
<label for="datepicker_theme" class="section_label">
<?php esc_html_e( 'پوسته', 'gravityforms' ); ?>
<?php gform_tooltip( "gform_datepicker_theme" ) ?>
</label>
<select id="datepicker_theme" onchange="SetFieldProperty('datepicker_theme', jQuery(this).val());">
<option value="">پیشفرض</option>
<option value="dark">تیره</option>
<option value="latoja">نقره ای</option>
<option value="lightorang">نارنجی</option>
<option value="melon">قرمز</option>
</select>
</li>
<?php
}
}
/**
* Load and localize jalali-datepicker when jalali option is enabled on field
*
* @action gform_enqueue_scripts
*
* @param array $form
* @param bool $ajax
*
* @return void
*/
public function jalali_datepicker( array $form, bool $ajax ): void {
if ( is_admin() ) {
return;
}
if ( self::is_elementor() ) {
return;
}
if ( ! ( wp_script_is( 'gform_datepicker_init' ) || wp_script_is( 'gform_datepicker_init', 'registered' ) ) ) {
return;
}
foreach ( $form['fields'] as $field ) {
if ( $field['type'] !== 'date' || ! rgar( $field, 'check_jalali', false ) ) {
continue;
}
// Remove jquery and gform datepicker
wp_dequeue_script( 'jquery-ui-datepicker' );
wp_deregister_script( 'jquery-ui-datepicker' );
wp_dequeue_script( 'gform_datepicker_init' );
wp_deregister_script( 'gform_datepicker_init' );
wp_dequeue_script( 'gform_datepicker_legacy' );
wp_deregister_script( 'gform_datepicker_legacy' );
remove_action( 'admin_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 );
remove_action( 'wp_enqueue_scripts', 'wp_localize_jquery_ui_datepicker', 1000 );
// Register persian datepicker
wp_enqueue_style( 'gf-persian-datepicker', GF_PERSIAN_URL . 'assets/js/datepicker/persian-datepicker.css', [], GF_PERSIAN_VERSION );
wp_enqueue_script( 'gf-persian-datepicker', GF_PERSIAN_URL . 'assets/js/datepicker/persian-datepicker' . GFPersian_Core::minified() . '.js', [
'jquery',
'jquery-migrate',
'gform_gravityforms',
], GF_PERSIAN_VERSION, true );
$datepicker_configuration = self::configure_date_picker( $field, $form );
$datepicker_element_id = '#input_' . $form['id'] . '_' . $field['id'];
$inline_script = 'jQuery(function ($) { $("' . $datepicker_element_id . '").persianDatepicker(' . $datepicker_configuration . ') });';
wp_add_inline_script( 'gf-persian-datepicker', $inline_script );
}
}
public static function convert_field_date_format( $date_format ): string {
// The option is based on date field settings
switch ( $date_format ) {
case 'mdy':
return '0M/0D/YYYY';
case 'dmy':
return '0D/0M/YYYY';
case 'dmy_dash':
return '0D-0M-YYYY';
case 'dmy_dot':
return '0D.0M.YYYY';
case 'ymd_slash':
return 'YYYY/0M/0D';
case 'ymd_dash':
return 'YYYY-0M-0D';
case 'ymd_dot':
return 'YYYY.0M.0D';
default:
return 'YYYY/0M/0D';
}
}
public static function configure_date_picker( $field, $form ) {
global $wp_locale;
$date_format = self::convert_field_date_format( rgar( $field, 'dateFormat', 'mdy' ) );
$theme = rgar( $field, 'datepicker_theme', 'default' );
wp_enqueue_style( 'gf-persian-datepicker-theme-' . $theme, GF_PERSIAN_URL . 'assets/js/datepicker/persian-datepicker-' . $theme . '.css', [ 'gf-persian-datepicker' ], GF_PERSIAN_VERSION );
return wp_json_encode(
[
'formatDate' => $date_format,
'months' => [
"فروردین",
"اردیبهشت",
"خرداد",
"تیر",
"مرداد",
"شهریور",
"مهر",
"آبان",
"آذر",
"دی",
"بهمن",
"اسفند",
],
'dowTitle' => [ "شنبه", "یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنج شنبه", "جمعه" ],
'shortDowTitle' => [ "ش", "ی", "د", "س", "چ", "پ", "ج" ],
'showGregorianDate' => false,
'persianNumbers' => true,
'selectedBefore' => false,
'selectedDate' => null,
'startDate' => null,
'endDate' => null,
'prevArrow' => '◄',
'nextArrow' => '►',
'theme' => $theme,
'alwaysShow' => false,
'selectableYears' => null,
'selectableMonths' => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ],
'cellWidth' => 25, // in pixels
'cellHeight' => 20, // in pixels
'fontSize' => 13, // in pixels
'isRTL' => $wp_locale->is_rtl(),
'calendarPosition' => [
'x' => 0,
'y' => 0,
],
]
);
}
/**
* Validate jalali submitted data from date field
*
* @filter gform_field_validation
*
* @param array $result {
*
* @type bool $is_valid
* @type array $message
* }
*
* @param mixed $value
* @param array $form
* @param GF_Field|array $field
*
* @return array
*/
public function jalali_validator( array $result, $value, array $form, $field ): array {
if ( rgar( $field, 'type' ) !== 'date' || ! rgar( $field, 'check_jalali', false ) ) {
return $result;
}
$format = rgar( $field, 'dateFormat', 'mdy' );
$format_name = self::convert_field_date_format( $format );
$message = $format_name && rgar( $field, 'dateType' ) == 'datepicker' ? sprintf( esc_html__( 'Please enter a valid date in the format (%s).', 'gravityforms' ), $format_name ) : esc_html__( 'Please enter a valid date.', 'gravityforms' );
/*این شرط مشخص میکنه فقط اگر خطایی وجود نداشت و یا اگر خطا مربوط به ولیدیت تاریخ بود وارد بررسی شود*/
if ( ! empty( $result['message'] ) && $message != $result['message'] ) {
return $result;
}
if ( is_array( $value ) && rgempty( 0, $value ) && rgempty( 1, $value ) && rgempty( 2, $value ) ) {
$value = null;
}
if ( ! empty( $value ) ) {
$date = GFCommon::parse_date( $value, $format );
$day = intval( rgar( $date, 'day' ) );
$month = intval( rgar( $date, 'month' ) );
$year = intval( rgar( $date, 'year' ) );
$result['is_valid'] = Verta::isValidDate( $year, $month, $day );;
if ( ! $result['is_valid'] && empty( $result['message'] ) ) {
$result['message'] = $message;
}
}
return $result;
}
/**
* Add jalali month to GForm predefined choices
*
* @filter gform_predefined_choices
*
* @param array $choices
*
* @return array
*/
public function jalali_predefined_choices( array $choices ): array {
$month['ماه های ایران'] = [
'فروردین',
'اردیبهشت',
'خرداد',
'تیر',
'مرداد',
'شهریور',
'مهر',
'آبان',
'آذر',
'دی',
'بهمن',
'اسفند',
];
return array_merge( $month, $choices );
}
}
new GFPersian_JalaliDate();