Untitled
unknown
plain_text
a year ago
4.8 kB
13
Indexable
<?php
namespace Drupal\tigo\Element;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element;
use Drupal\td_atomic_design\Element\TextfieldAtomic;
/**
* Provides a one-line text field form element.
*
* Properties:
* - #value [optional]: An text to show by default'.
* - #help_text: An text to show under the input.
* - #status [optional]: A status to show in input (Available: activo, disabled
* or error).
*
* @code
* $form['expiration'] = array(
* '#type' => 'date_tigo',
* '#title' => $this->t('Atómico'),
* '#value' => 'Valor',
* '#maxlength' => 200,
* '#help_text' => $this->t('Texto de ayuda.'),
* '#status' => 'activo',
* );
* @endcode
*
* @FormElement("date_tigo")
*/
class DateTigo extends TextfieldAtomic {
/**
* {@inheritdoc}
*/
public function getInfo() {
$class = static::class;
return [
'#input' => TRUE,
'#autocomplete_route_name' => FALSE,
'#process' => [
[$class, 'processAutocomplete'],
[$class, 'processAjaxForm'],
[$class, 'processPattern'],
[$class, 'processGroup'],
[$class, 'processDateTigo'],
],
'#pre_render' => [
[$class, 'preRenderTextfield'],
[$class, 'preRenderGroup'],
],
'#theme' => 'textfield_atomic',
'#theme_wrappers' => ['form_element_atomic'],
'#attributes' => [
'class' => [
'at-input-textfield',
'js-date',
'tigo-date',
],
],
];
}
/**
* {@inheritdoc}
*/
public static function preRenderTextfield($element) {
$element['#attributes']['type'] = 'text';
Element::setAttributes($element, ['id', 'name', 'value', 'size',
'maxlength', 'placeholder',
]);
static::setAttributes($element, [
'at-input-textfield',
'js-date',
'tigo-date',
]);
$element['#attached']['library'] = ['td_atomic_design/textfield'];
return $element;
}
/**
* Redenrizado para la selfie.
*/
public static function processDateTigo(&$element, FormStateInterface $form_state, &$form) {
if (!empty($element['#default_value'])) {
$element['#value'] = self::defaultValue($element['#default_value']);
}
// Agregar una validación personalizada para la fecha.
$element['#element_validate'][] = [static::class, 'validateDateTigo'];
return $element;
}
/**
* Valida la fecha ingresada en el campo.
*/
public static function validateDateTigo($element, FormStateInterface $form_state, $form) {
// Obtener el valor enviado desde el estado del formulario.
$value = $form_state->getValue($element['#name']);
// Definir el patrón para una fecha válida en el formato "dd-mmm-yyyy".
$pattern = '/^\d{2}-[A-Za-z]{3}-\d{4}$/';
// Verificar si el valor enviado coincide con el patrón.
if (!preg_match($pattern, $value)) {
$form_state->setError($element, t('Por favor, ingrese una fecha válida en el formato "dd-mm-yyyy".'));
return;
}
// Extraer día, mes y año del valor enviado.
[$day, $month, $year] = explode('-', $value);
$monthsMapping = [
'Ene' => '01',
'Feb' => '02',
'Mar' => '03',
'Abr' => '04',
'May' => '05',
'Jun' => '06',
'Jul' => '07',
'Ago' => '08',
'Sep' => '09',
'Oct' => '10',
'Nov' => '11',
'Dic' => '12',
];
$month = $monthsMapping[$month];
// Actualizar el valor del campo con el nuevo formato.
$form_state->setValue($element['#name'], strtotime("{$day}-{$month}-{$year}"));
// Obtener el año actual.
$current_year = date('Y');
// Verificar si el año es mayor que el año actual y mostrar un mensaje de error si es así.
if ((int) $year > $current_year) {
$form_state->setError($element, t('El año no puede ser mayor que el año actual.'));
return;
}
// Verificar si el año es menor a 100 años en el pasado y mostrar un mensaje de error si es así.
$min_year = $current_year - 100;
if ((int) $year < $min_year) {
$form_state->setError($element, t('El año no puede ser hace más de 100 años.'));
}
}
/**
*
*/
public static function defaultValue($date) {
$output = NULL;
if ($date) {
$monthsMapping = [
'01' => 'Ene',
'02' => 'Feb',
'03' => 'Mar',
'04' => 'Abr',
'05' => 'May',
'06' => 'Jun',
'07' => 'Jul',
'08' => 'Ago',
'09' => 'Sep',
'10' => 'Oct',
'11' => 'Nov',
'12' => 'Dic',
];
$date = date('d-m-Y', $date);
[$day, $monthAbbrev, $year] = explode('-', $date);
$monthNumeric = $monthsMapping[$monthAbbrev];
$output = "$day-$monthNumeric-$year";
}
return $output;
}
}
Editor is loading...
Leave a Comment