persian_date-8.x-4.1/src/Element/PersianDateTime.php
src/Element/PersianDateTime.php
<?php
/**
* Created by PhpStorm.
* User: evolve
* Date: 9/26/17
* Time: 8:41 PM
*/
namespace Drupal\persian_date\Element;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Datetime\Element\Datetime;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Annotation\FormElement;
use Drupal\persian_date\Plugin\Datetime\PersianDrupalDateTime;
/**
* Class PersianDateTime
* @package Drupal\persian_date\Element
* @FormElement("persian_datetime")
*/
class PersianDateTime extends Datetime
{
public function getInfo()
{
$info = parent::getInfo();
$info['#date_date_element'] = 'text';
return $info;
}
public static function formatExample($format) {
if (!static::$dateExample) {
static::$dateExample = new PersianDrupalDateTime();
}
return static::$dateExample->format($format);
}
public static function valueCallback(&$element, $input, FormStateInterface $form_state)
{
if ($input !== FALSE) {
$date_input = $element['#date_date_element'] != 'none' && !empty($input['date']) ? $input['date'] : '';
$time_input = $element['#date_time_element'] != 'none' && !empty($input['time']) ? $input['time'] : '';
$date_format = $element['#date_date_element'] != 'none' ? static::getHtml5DateFormat($element) : '';
$time_format = $element['#date_time_element'] != 'none' ? static::getHtml5TimeFormat($element) : '';
$timezone = !empty($element['#date_timezone']) ? $element['#date_timezone'] : NULL;
// Seconds will be omitted in a post in case there's no entry.
if (!empty($time_input) && strlen($time_input) == 5) {
$time_input .= ':00';
}
try {
$date_time_format = trim($date_format . ' ' . $time_format);
$date_time_input = trim($date_input . ' ' . $time_input);
$date = PersianDrupalDateTime::createFromFormat($date_time_format, $date_time_input, $timezone);
$date = DrupalDateTime::createFromDateTime($date->getDateTime());
}
catch (\Exception $e) {
$date = NULL;
}
$input = [
'date' => $date_input,
'time' => $time_input,
'object' => $date,
];
}
else {
$date = $element['#default_value'];
if ($date instanceof DrupalDateTime && !$date->hasErrors()) {
$input = [
'date' => $date->format($element['#date_date_format']),
'time' => $date->format($element['#date_time_format']),
'object' => $date,
];
}
else {
$input = [
'date' => '',
'time' => '',
'object' => NULL,
];
}
}
return $input;
}
/**
* @inheritdoc
*/
public static function processDatetime(&$element, FormStateInterface $form_state, &$complete_form) {
// The value callback has populated the #value array.
$date = !empty($element['#value']['object']) ? $element['#value']['object'] : NULL;
if (is_object($date) && get_class($date) === DrupalDateTime::class) {
$element['#value']['object'] = PersianDrupalDateTime::createFromDrupalDateTime($date);
}
return parent::processDatetime($element, $form_state, $complete_form);
}
}
