name = 'date_time_picker';
$this->title = __( 'Date and Time Picker' );
$this->domain = 'acf-date_time_picker';
$this->defaults = array(
'value' => ''
, 'label' => __( 'Choose Time', $this->domain )
, 'time_format' => 'hh:mm'
, 'show_date' => true
, 'date_format' => 'mm/dd/yy'
, 'show_week_number' => false
, 'picker' => 'slider'
);
$this->settings = array(
'path' => $this->helpers_get_path( __FILE__ )
, 'dir' => $this->helpers_get_dir( __FILE__ )
, 'version' => '2.0.5'
);
}
/*
* helpers_get_path
*
* @description: calculates the path (works for plugin / theme folders)
* @since: 3.6
* @created: 30/01/13
*/
function helpers_get_path( $file ) {
return trailingslashit(dirname($file));
}
/*
* helpers_get_dir
*
* @description: calculates the directory (works for plugin / theme folders)
* @since: 3.6
* @created: 30/01/13
*/
function helpers_get_dir( $file ) {
$dir = trailingslashit(dirname($file));
$count = 0;
// sanitize for Win32 installs
$dir = str_replace('\\' ,'/', $dir);
// if file is in plugins folder
$wp_plugin_dir = str_replace('\\' ,'/', WP_PLUGIN_DIR);
$dir = str_replace($wp_plugin_dir, WP_PLUGIN_URL, $dir, $count);
if( $count < 1 )
{
// if file is in wp-content folder
$wp_content_dir = str_replace('\\' ,'/', WP_CONTENT_DIR);
$dir = str_replace($wp_content_dir, WP_CONTENT_URL, $dir, $count);
}
if( $count < 1 )
{
// if file is in ??? folder
$wp_dir = str_replace('\\' ,'/', ABSPATH);
$dir = str_replace($wp_dir, site_url('/'), $dir);
}
return $dir;
}
/*--------------------------------------------------------------------------------------
*
* create_options
* - this function is called from core/field_meta_box.php to create extra options
* for your field
*
* @params
* - $key (int) - the $_POST obejct key required to save the options to the field
* - $field (array) - the field object
*
* @author Elliot Condon
* @since 2.2.0
*
*-------------------------------------------------------------------------------------*/
function create_options( $key, $field ) {
$field = array_merge( $this->defaults, $field );
?>
|
|
parent->create_field( array(
'type' => 'radio'
, 'name' => 'fields['.$key.'][show_date]'
, 'value' => $field['show_date']
, 'layout' => 'horizontal'
, 'choices' => array(
'true' => __( 'Date and Time Picker', $this->domain )
, 'false' => __( 'Time Picker', $this->domain )
)
) );
?>
|
|
domain ); ?> formatDate
|
parent->create_field( array(
'type' => 'text'
, 'name' => 'fields[' . $key . '][date_format]'
, 'value' => $field['date_format']
) );
?>
|
|
formatting time", $this->domain ), "http://trentrichardson.com/examples/timepicker/#tp-formatting" );?>
|
parent->create_field( array(
'type' => 'text'
, 'name' => 'fields[' . $key . '][time_format]'
, 'value' => $field['time_format']
) );
?>
|
|
|
parent->create_field( array(
'type' => 'radio'
, 'name' => 'fields['.$key.'][show_week_number]'
, 'value' => $field['show_week_number']
, 'layout' => 'horizontal'
, 'choices' => array(
'true' => __( 'Yes', $this->domain )
, 'false' => __( 'No', $this->domain )
)
) );
?>
|
|
|
parent->create_field( array(
'type' => 'radio'
, 'name' => 'fields['.$key.'][picker]'
, 'value' => $field['picker']
, 'layout' => 'horizontal'
, 'choices' => array(
'slider' => __( 'Slider', $this->domain )
, 'select' => __( 'Dropdown', $this->domain )
)
) );
?>
|
defaults, $field );
extract( $field, EXTR_SKIP ); //Declare each item in $field as its own variable i.e.: $name, $value, $label, $time_format, $date_format and $show_week_number
if ( $show_date != 'true' ) {
echo '';
} else {
echo '';
}
}
/*--------------------------------------------------------------------------------------
*
* admin_print_scripts / admin_print_styles
* - this function is called in the admin_print_scripts / admin_print_styles where
* your field is created. Use this function to register css and javascript to assist
* your create_field() function.
*
* @author Elliot Condon
* @since 3.0.0
*
*-------------------------------------------------------------------------------------*/
function admin_print_scripts() {
global $wp_locale;
$has_locale = false;
$js_locale = $this->get_js_locale(get_locale());
wp_enqueue_script( 'jquery-ui-timepicker', $this->settings['dir'] . 'js/jquery-ui-timepicker-addon.js', array(
'acf-datepicker',
'jquery-ui-slider'
), $this->settings['version'], true );
if ( file_exists( dirname( __FILE__ ) . '/js/localization/jquery-ui-timepicker-' . $js_locale . '.js' ) ) {
wp_enqueue_script( 'timepicker-localization', $this->settings['dir'] . 'js/localization/jquery-ui-timepicker-' . $js_locale . '.js', array(
'jquery-ui-timepicker'
), $this->settings['version'], true );
wp_enqueue_script( 'timepicker', $this->settings['dir'] . 'js/timepicker.js', array(
'timepicker-localization'
), $this->settings['version'], true );
$has_locale = true;
} else {
wp_enqueue_script( 'timepicker', $this->settings['dir'] . 'js/timepicker.js', array(
'jquery-ui-timepicker'
), $this->settings['version'], true );
}
if ( ! $has_locale && $js_locale != 'en' ) {
$timepicker_locale = array(
'closeText' => __( 'Done', $this->domain )
, 'currentText' => __( 'Today', $this->domain )
, 'prevText' => __( 'Prev', $this->domain )
, 'nextText' => __( 'Next', $this->domain )
, 'monthStatus' => __( 'Show a different month', $this->domain )
, 'weekHeader' => __( 'Wk', $this->domain )
, 'timeText' => __( "Time", $this->domain )
, 'hourText' => __( "Hour", $this->domain )
, 'minuteText' => __( "Minute", $this->domain )
, 'secondText' => __( "Second", $this->domain )
, 'millisecText' => __( "Millisecond", $this->domain )
, 'timezoneText' => __( "Time Zone", $this->domain )
, 'isRTL' => $wp_locale->is_rtl()
);
}
$timepicker_wp_locale = array(
'monthNames' => $this->strip_array_indices( $wp_locale->month )
, 'monthNamesShort' => $this->strip_array_indices( $wp_locale->month_abbrev )
, 'dayNames' => $this->strip_array_indices( $wp_locale->weekday )
, 'dayNamesShort' => $this->strip_array_indices( $wp_locale->weekday_abbrev )
, 'dayNamesMin' => $this->strip_array_indices( $wp_locale->weekday_initial )
, 'showMonthAfterYear' => false
, 'showWeek' => false
, 'firstDay' => get_option( 'start_of_week' )
);
$l10n = ( isset( $timepicker_locale ) ) ? array_merge( $timepicker_wp_locale, $timepicker_locale ) : $timepicker_wp_locale;
wp_localize_script( 'timepicker', 'timepicker_objectL10n', $l10n );
}
/**
* helper function, see: http://www.renegadetechconsulting.com/tutorials/jquery-datepicker-and-wordpress-i18n
* @param array $ArrayToStrip
* @return array
*/
function strip_array_indices( $ArrayToStrip ) {
foreach ( $ArrayToStrip as $objArrayItem ) {
$NewArray[] = $objArrayItem;
}
return $NewArray;
}
function get_js_locale($locale) {
$dir_path = $this->settings['path'] . 'js/localization/';
$exclude_list = array(".", "..");
$languages = $this->ps_preg_filter("/jquery-ui-timepicker-(.*?)\.js/","$1",array_diff(scandir($dir_path), $exclude_list));
$locale = strtolower(str_replace("_", "-", $locale));
if (false !== strpos($locale,'-')) {
$l = explode("-",$locale);
$pattern = array('/' . $locale . '/','/' . $l[0] . '/', '/' . $l[1] . '/');
} else {
$pattern = array('/' . $locale . '/');
}
$res = $this->ps_preg_filter($pattern,"$0",$languages,-1,$count);
return ($count) ? implode("", $res) : 'en';
}
function ps_preg_filter ($pattern, $replace, $subject,$limit = -1, &$count = 0) {
if (function_exists('preg_filter'))
return preg_filter($pattern, $replace, $subject,$limit,$count);
else
return array_diff(preg_replace($pattern, $replace, $subject,$limit,$count), $subject);
}
function admin_print_styles() {
wp_enqueue_style( 'jquery-style', $this->settings['dir'] . 'css/jquery-ui.css' );
wp_enqueue_style( 'timepicker', $this->settings['dir'] . 'css/jquery-ui-timepicker-addon.css', array(
'jquery-style'
), $this->settings['version'] );
}
}