141 lines
3.8 KiB
PHP
141 lines
3.8 KiB
PHP
<?php
|
|
/**
|
|
* Datetime control class. This class is meant for storing a datetime in the format
|
|
* of `YYYY-MM-DD HH:MM:SS` or `0000-00-00 00:00:00`. You can set the `$show_time`
|
|
* property to `false`.
|
|
*
|
|
* Note that this control should be used in conjunction with the `datetime` setting
|
|
* type or another custom class that can handle the datetime.
|
|
*
|
|
* @package ButterBean
|
|
* @subpackage Admin
|
|
* @author Justin Tadlock <justin@justintadlock.com>
|
|
* @copyright Copyright (c) 2015-2016, Justin Tadlock
|
|
* @link https://github.com/justintadlock/butterbean
|
|
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
*/
|
|
|
|
/**
|
|
* Datetime control class.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
*/
|
|
class ButterBean_Control_Datetime extends ButterBean_Control {
|
|
|
|
/**
|
|
* The type of control.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var string
|
|
*/
|
|
public $type = 'datetime';
|
|
|
|
/**
|
|
* Whether to show the time. Note that settings, particularly the
|
|
* `ButterBean_Setting_Date` class will store the time as `00:00:00` if
|
|
* no time is provided.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @var bool
|
|
*/
|
|
public $show_time = true;
|
|
|
|
/**
|
|
* Adds custom data to the json array. This data is passed to the Underscore template.
|
|
*
|
|
* @since 1.0.0
|
|
* @access public
|
|
* @globl object $wp_locale
|
|
* @return void
|
|
*/
|
|
public function to_json() {
|
|
global $wp_locale;
|
|
|
|
parent::to_json();
|
|
|
|
$this->json['show_time'] = $this->show_time;
|
|
|
|
$field_name = $this->get_field_name();
|
|
|
|
// Get project start/end dates.
|
|
$date = $this->get_value();
|
|
|
|
// Get the year, month, and day.
|
|
$year = $date ? mysql2date( 'Y', $date, false ) : '';
|
|
$month = $date ? mysql2date( 'm', $date, false ) : '';
|
|
$day = $date ? mysql2date( 'd', $date, false ) : '';
|
|
|
|
// Get the hour, minute, and second.
|
|
$hour = $date ? mysql2date( 'H', $date, false ) : '';
|
|
$minute = $date ? mysql2date( 'i', $date, false ) : '';
|
|
$second = $date ? mysql2date( 's', $date, false ) : '';
|
|
|
|
// Year
|
|
$this->json['year'] = array(
|
|
'value' => esc_attr( $year ),
|
|
'label' => esc_html__( 'Year', 'butterbean' ),
|
|
'name' => esc_attr( "{$field_name}_year" ),
|
|
'attr' => sprintf( 'placeholder="%s" size="4" maxlength="4" autocomplete="off"', esc_attr( date_i18n( 'Y' ) ) )
|
|
);
|
|
|
|
// Month
|
|
$this->json['month'] = array(
|
|
'value' => esc_attr( $month ),
|
|
'name' => esc_attr( "{$field_name}_month" ),
|
|
'label' => esc_html__( 'Month', 'butterbean' ),
|
|
'choices' => array(
|
|
array(
|
|
'num' => '',
|
|
'label' => ''
|
|
)
|
|
)
|
|
);
|
|
|
|
for ( $i = 1; $i < 13; $i = $i +1 ) {
|
|
|
|
$monthnum = zeroise( $i, 2 );
|
|
$monthtext = $wp_locale->get_month_abbrev( $wp_locale->get_month( $i ) );
|
|
|
|
$this->json['month']['choices'][] = array(
|
|
'num' => $monthnum,
|
|
'label' => $monthtext
|
|
);
|
|
}
|
|
|
|
// Day
|
|
$this->json['day'] = array(
|
|
'value' => esc_attr( $day ),
|
|
'name' => esc_attr( "{$field_name}_day" ),
|
|
'label' => esc_html__( 'Day', 'butterbean' ),
|
|
'attr' => sprintf( 'placeholder="%s" size="2" maxlength="2" autocomplete="off"', esc_attr( date_i18n( 'd' ) ) )
|
|
);
|
|
|
|
// Hour
|
|
$this->json['hour'] = array(
|
|
'value' => esc_attr( $hour ),
|
|
'name' => esc_attr( "{$field_name}_hour" ),
|
|
'label' => esc_html__( 'Hour', 'butterbean' ),
|
|
'attr' => 'placeholder="00" size="2" maxlength="2" autocomplete="off"'
|
|
);
|
|
|
|
// Minute
|
|
$this->json['minute'] = array(
|
|
'value' => esc_attr( $minute ),
|
|
'name' => esc_attr( "{$field_name}_minute" ),
|
|
'label' => esc_html__( 'Minute', 'butterbean' ),
|
|
'attr' => 'placeholder="00" size="2" maxlength="2" autocomplete="off"'
|
|
);
|
|
|
|
// Second
|
|
$this->json['second'] = array(
|
|
'value' => esc_attr( $second ),
|
|
'name' => esc_attr( "{$field_name}_second" ),
|
|
'label' => esc_html__( 'Second', 'butterbean' ),
|
|
'attr' => 'placeholder="00" size="2" maxlength="2" autocomplete="off"'
|
|
);
|
|
}
|
|
}
|