181 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * @package     Joomla.Site
 | |
|  * @subpackage  Layout
 | |
|  *
 | |
|  * @copyright   (C) 2016 Open Source Matters, Inc. <https://www.joomla.org>
 | |
|  * @license     GNU General Public License version 2 or later; see LICENSE.txt
 | |
|  */
 | |
| 
 | |
| defined('_JEXEC') or die;
 | |
| 
 | |
| use Joomla\CMS\Factory;
 | |
| use Joomla\CMS\Language\Text;
 | |
| use Joomla\Utilities\ArrayHelper;
 | |
| 
 | |
| extract($displayData);
 | |
| 
 | |
| // Get some system objects.
 | |
| $document = Factory::getApplication()->getDocument();
 | |
| $lang     = Factory::getApplication()->getLanguage();
 | |
| 
 | |
| /**
 | |
|  * Layout variables
 | |
|  * -----------------
 | |
|  * @var   string   $autocomplete    Autocomplete attribute for the field.
 | |
|  * @var   boolean  $autofocus       Is autofocus enabled?
 | |
|  * @var   string   $class           Classes for the input.
 | |
|  * @var   string   $description     Description of the field.
 | |
|  * @var   boolean  $disabled        Is this field disabled?
 | |
|  * @var   string   $group           Group the field belongs to. <fields> section in form XML.
 | |
|  * @var   boolean  $hidden          Is this field hidden in the form?
 | |
|  * @var   string   $hint            Placeholder for the field.
 | |
|  * @var   string   $id              DOM id of the field.
 | |
|  * @var   string   $label           Label of the field.
 | |
|  * @var   string   $labelclass      Classes to apply to the label.
 | |
|  * @var   boolean  $multiple        Does this field support multiple values?
 | |
|  * @var   string   $name            Name of the input field.
 | |
|  * @var   string   $onchange        Onchange attribute for the field.
 | |
|  * @var   string   $onclick         Onclick attribute for the field.
 | |
|  * @var   string   $pattern         Pattern (Reg Ex) of value of the form field.
 | |
|  * @var   boolean  $readonly        Is this field read only?
 | |
|  * @var   boolean  $repeat          Allows extensions to duplicate elements.
 | |
|  * @var   boolean  $required        Is this field required?
 | |
|  * @var   integer  $size            Size attribute of the input.
 | |
|  * @var   boolean  $spellcheck      Spellcheck state for the form field.
 | |
|  * @var   string   $validate        Validation rules to apply.
 | |
|  * @var   string   $value           Value attribute of the field.
 | |
|  * @var   array    $checkedOptions  Options that will be set as checked.
 | |
|  * @var   boolean  $hasValue        Has this field a value assigned?
 | |
|  * @var   array    $options         Options available for this field.
 | |
|  * @var   string   $dataAttribute   Miscellaneous data attributes preprocessed for HTML output
 | |
|  * @var   array    $dataAttributes  Miscellaneous data attributes for eg, data-*.
 | |
|  *
 | |
|  * Calendar Specific
 | |
|  * @var   string   $helperPath      The relative path for the helper file
 | |
|  * @var   string   $minYear         The minimum year, that will be subtracted/added to current year
 | |
|  * @var   string   $maxYear         The maximum year, that will be subtracted/added to current year
 | |
|  * @var   integer  $todaybutton     The today button
 | |
|  * @var   integer  $weeknumbers     The week numbers display
 | |
|  * @var   integer  $showtime        The time selector display
 | |
|  * @var   integer  $filltable       The previous/next month filling
 | |
|  * @var   integer  $timeformat      The time format
 | |
|  * @var   integer  $singleheader    Display different header row for month/year
 | |
|  * @var   string   $direction       The document direction
 | |
|  * @var   string   $calendar        The calendar type
 | |
|  * @var   array    $weekend         The weekends days
 | |
|  * @var   integer  $firstday        The first day of the week
 | |
|  * @var   string   $format          The format of date and time
 | |
|  */
 | |
| 
 | |
| $inputvalue = '';
 | |
| 
 | |
| // Build the attributes array.
 | |
| $attributes = [];
 | |
| 
 | |
| empty($size)      ? null : $attributes['size'] = $size;
 | |
| empty($maxlength) ? null : $attributes['maxlength'] = $maxLength;
 | |
| empty($class)     ? $attributes['class'] = 'form-control' : $attributes['class'] = 'form-control ' . $class;
 | |
| !$readonly        ? null : $attributes['readonly'] = 'readonly';
 | |
| !$disabled        ? null : $attributes['disabled'] = 'disabled';
 | |
| empty($onchange)  ? null : $attributes['onchange'] = $onchange;
 | |
| 
 | |
| if ($required) {
 | |
|     $attributes['required'] = '';
 | |
| }
 | |
| 
 | |
| // Handle the special case for "now".
 | |
| if (strtoupper($value) === 'NOW') {
 | |
|     $value = Factory::getDate()->format('Y-m-d H:i:s');
 | |
| }
 | |
| 
 | |
| $readonly = isset($attributes['readonly']) && $attributes['readonly'] === 'readonly';
 | |
| $disabled = isset($attributes['disabled']) && $attributes['disabled'] === 'disabled';
 | |
| 
 | |
| if (is_array($attributes)) {
 | |
|     $attributes = ArrayHelper::toString($attributes);
 | |
| }
 | |
| 
 | |
| $calendarAttrs = [
 | |
|     'data-inputfield'      => $id,
 | |
|     'data-button'          => $id . '_btn',
 | |
|     'data-date-format'     => $format,
 | |
|     'data-firstday'        => empty($firstday) ? '' : $firstday,
 | |
|     'data-weekend'         => empty($weekend) ? '' : implode(',', $weekend),
 | |
|     'data-today-btn'       => $todaybutton,
 | |
|     'data-week-numbers'    => $weeknumbers,
 | |
|     'data-show-time'       => $showtime,
 | |
|     'data-show-others'     => $filltable,
 | |
|     'data-time24'          => $timeformat,
 | |
|     'data-only-months-nav' => $singleheader,
 | |
|     'data-min-year'        => $minYear,
 | |
|     'data-max-year'        => $maxYear,
 | |
|     'data-date-type'       => strtolower($calendar),
 | |
| ];
 | |
| 
 | |
| $calendarAttrsStr = ArrayHelper::toString($calendarAttrs);
 | |
| 
 | |
| // Add language strings
 | |
| $strings = [
 | |
|     // Days
 | |
|     'SUNDAY', 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY',
 | |
|     // Short days
 | |
|     'SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT',
 | |
|     // Months
 | |
|     'JANUARY', 'FEBRUARY', 'MARCH', 'APRIL', 'MAY', 'JUNE', 'JULY', 'AUGUST', 'SEPTEMBER', 'OCTOBER', 'NOVEMBER', 'DECEMBER',
 | |
|     // Short months
 | |
|     'JANUARY_SHORT', 'FEBRUARY_SHORT', 'MARCH_SHORT', 'APRIL_SHORT', 'MAY_SHORT', 'JUNE_SHORT',
 | |
|     'JULY_SHORT', 'AUGUST_SHORT', 'SEPTEMBER_SHORT', 'OCTOBER_SHORT', 'NOVEMBER_SHORT', 'DECEMBER_SHORT',
 | |
|     // Buttons
 | |
|     'JCLOSE', 'JCLEAR', 'JLIB_HTML_BEHAVIOR_TODAY',
 | |
|     // Miscellaneous
 | |
|     'JLIB_HTML_BEHAVIOR_WK',
 | |
| ];
 | |
| 
 | |
| foreach ($strings as $c) {
 | |
|     Text::script($c);
 | |
| }
 | |
| 
 | |
| // These are new strings. Make sure they exist. Can be generalised at later time: eg in 4.1 version.
 | |
| if ($lang->hasKey('JLIB_HTML_BEHAVIOR_AM')) {
 | |
|     Text::script('JLIB_HTML_BEHAVIOR_AM');
 | |
| }
 | |
| 
 | |
| if ($lang->hasKey('JLIB_HTML_BEHAVIOR_PM')) {
 | |
|     Text::script('JLIB_HTML_BEHAVIOR_PM');
 | |
| }
 | |
| 
 | |
| // Redefine locale/helper assets to use correct path, and load calendar assets
 | |
| $document->getWebAssetManager()
 | |
|     ->registerAndUseScript('field.calendar.helper', $helperPath, [], ['defer' => true])
 | |
|     ->useStyle('field.calendar' . ($direction === 'rtl' ? '-rtl' : ''))
 | |
|     ->useScript('field.calendar');
 | |
| 
 | |
| ?>
 | |
| <div class="field-calendar">
 | |
|     <?php if (!$readonly && !$disabled) : ?>
 | |
|     <div class="input-group">
 | |
|     <?php endif; ?>
 | |
|         <input
 | |
|             type="text"
 | |
|             id="<?php echo $id; ?>"
 | |
|             name="<?php echo $name; ?>"
 | |
|             value="<?php echo htmlspecialchars(($value !== '0000-00-00 00:00:00') ? $value : '', ENT_COMPAT, 'UTF-8'); ?>"
 | |
|             <?php echo !empty($description) ? ' aria-describedby="' . ($id ?: $name) . '-desc"' : ''; ?>
 | |
|             <?php echo $attributes; ?>
 | |
|             <?php echo $dataAttribute ?? ''; ?>
 | |
|             <?php echo !empty($hint) ? 'placeholder="' . htmlspecialchars($hint, ENT_COMPAT, 'UTF-8') . '"' : ''; ?>
 | |
|             data-alt-value="<?php echo htmlspecialchars($value, ENT_COMPAT, 'UTF-8'); ?>" autocomplete="off">
 | |
|         <button type="button" class="<?php echo ($readonly || $disabled) ? 'hidden ' : ''; ?>btn btn-primary"
 | |
|             id="<?php echo $id; ?>_btn"
 | |
|             title="<?php echo Text::_('JLIB_HTML_BEHAVIOR_OPEN_CALENDAR'); ?>"
 | |
|             <?php echo $calendarAttrsStr; ?>
 | |
|         ><span class="icon-calendar" aria-hidden="true"></span>
 | |
|         <span class="visually-hidden"><?php echo Text::_('JLIB_HTML_BEHAVIOR_OPEN_CALENDAR'); ?></span>
 | |
|         </button>
 | |
|         <?php if (!$readonly && !$disabled) : ?>
 | |
|     </div>
 | |
|         <?php endif; ?>
 | |
| </div>
 |