HijriDateList.php in Hijri 3.0.x
File
src/Element/HijriDateList.php
View source
<?php
namespace Drupal\hijri\Element;
use Drupal\Core\Datetime\DateHelper;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\Core\Datetime\Element\Datelist;
use Drupal\Core\Form\FormStateInterface;
class HijriDateList extends Datelist {
public static function valueCallback(&$element, $input, FormStateInterface $form_state) {
if ($input !== FALSE) {
if (isset($input['year']) && $input['year'] > 0) {
$return = $input;
$date = date('c');
$return['object'] = $date;
return $return;
}
}
else {
}
return $input;
}
public static function processDatelist(&$element, FormStateInterface $form_state, &$complete_form) {
$date = !empty($element['#value']['object']) ? $element['#value']['object'] : NULL;
if ($date instanceof DrupalDateTime) {
$element['#date_timezone'] = $date
->getTimezone()
->getName();
}
elseif (!empty($element['#timezone'])) {
}
else {
$element['#date_timezone'] = date_default_timezone_get();
}
$date_helper = new DateHelper();
$element['#tree'] = TRUE;
$order = !empty($element['#date_part_order']) ? $element['#date_part_order'] : [
'year',
'month',
'day',
];
$text_parts = !empty($element['#date_text_parts']) ? $element['#date_text_parts'] : [];
foreach ($order as $part) {
switch ($part) {
case 'day':
$options = $date_helper
->days($element['#required'], 9, 2000);
$format = 'j';
$title = t('Day');
break;
case 'month':
$hijri = \Drupal::service('hijri.formatter');
$options = $hijri
->hijriMonthNames();
$format = 'n';
$title = t('Month');
break;
case 'year':
$hijri = \Drupal::service('hijri.formatter');
$current_year = $hijri
->format(time(), 'custom', 'Y');
$format = 'n';
$title = t('Year');
$min = '';
$max = '';
$range = range(empty($min) ? intval($current_year - 3) : $min, empty($max) ? intval($current_year + 3) : $max);
$range = array_combine($range, $range);
$options = $range;
break;
default:
$format = '';
$options = [];
$title = '';
}
$default = isset($element['#value'][$part]) && trim($element['#value'][$part]) != '' ? $element['#value'][$part] : '';
$value = $date instanceof DrupalDateTime && !$date
->hasErrors() ? $date
->format($format) : $default;
if (!empty($value) && $part != 'ampm') {
$value = intval($value);
}
$element['#attributes']['title'] = $title;
$element[$part] = [
'#type' => in_array($part, $text_parts) ? 'textfield' : 'select',
'#title' => $title,
'#title_display' => 'invisible',
'#value' => $value,
'#attributes' => $element['#attributes'],
'#options' => $options,
'#required' => $element['#required'],
'#error_no_message' => FALSE,
'#empty_option' => $title,
];
}
if (!empty($element['#date_date_callbacks'])) {
foreach ($element['#date_date_callbacks'] as $callback) {
if (function_exists($callback)) {
$callback($element, $form_state, $date);
}
}
}
return $element;
}
}