You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

208 lines
4.6 KiB

<?php
/*
** Zabbix
** Copyright (C) 2001-2023 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**/
/**
* Class to create a date textbox and calendar button.
*/
class CDateSelector extends CTag {
/**
* Default CSS class name for HTML root element.
*/
const ZBX_STYLE_CLASS = 'calendar-control';
/**
* Input name.
*
* @var string
*/
private $name = '';
/**
* Default date format.
*
* @var string
*/
private $date_format = ZBX_FULL_DATE_TIME;
/**
* Set aria-required to textbox.
*
* @var bool
*/
private $is_required = false;
/**
* Placeholder for date textbox field.
*
* @var string
*/
private $placeholder = null;
/**
* Date and time set from view. Absolute (Y-m-d H:i:s) or relative time (now+1d, now/M ...).
*
* @var string
*/
private $value = null;
/**
* Readonly state of HTML element.
*
* @var bool
*/
private $readonly = false;
/**
* Enabled or disabled state of HTML element.
*
* @var bool
*/
private $enabled = true;
/**
* Maxlength attribute of the input field. Aligned with the date format by default.
*
* @var int
*/
private $maxlength;
/**
* Create array with all inputs required for date selection and calendar.
*
* @param string $name Textbox field name and calendar name prefix.
* @param string $value Date and time set from view. Absolute (Y-m-d H:i:s) or relative time (now+1d, now/M ...).
*
* @return CDateSelector
*/
public function __construct(string $name = 'calendar', $value = null) {
parent::__construct('div', true);
$this->name = $name;
$this->value = $value;
$this->addClass(static::ZBX_STYLE_CLASS);
}
/**
* Set or reset element 'aria-required' attribute to textbox (not the container).
*
* @param bool $is_required True to set field as required or false if field is not required.
*
* @return CDateSelector
*/
public function setAriaRequired($is_required = false) {
$this->is_required = $is_required;
return $this;
}
/**
* Set date format which calendar will return upon selection.
*
* @param string $format Date and time format. Usually Y-m-d H:i:s or Y-m-d H:i
*
* @return CDateSelector
*/
public function setDateFormat($format) {
$this->date_format = $format;
return $this;
}
/**
* Add placeholder to date textbox field.
*
* @param string $text Placeholder text for date textbox field.
*
* @return CDateSelector
*/
public function setPlaceholder($text) {
$this->placeholder = $text;
return $this;
}
/**
* Enable or disable readonly mode for the element.
*
* @param bool $value
*
* @return CDateSelector
*/
public function setReadonly(bool $value): self {
$this->readonly = $value;
return $this;
}
/**
* Set enabled or disabled state to field.
*
* @param bool $enabled Field state.
*
* @return CDateSelector
*/
public function setEnabled($enabled) {
$this->enabled = $enabled;
return $this;
}
/**
* Set non-default maxlength attribute to the input field.
*
* @param int $maxlength
*
* @return CDateSelector
*/
public function setMaxLength(int $maxlength) {
$this->maxlength = $maxlength;
return $this;
}
/**
* Gets string representation of date textbox and calendar button.
*
* @param bool $destroy
*
* @return string
*/
public function toString($destroy = true) {
$this
->addItem(
(new CTextBox($this->name, $this->value))
->setId($this->name)
->setAttribute('placeholder', $this->placeholder)
->setAttribute('maxlength', $this->maxlength ?? strlen(date($this->date_format)))
->setAriaRequired($this->is_required)
->setEnabled($this->enabled)
->setReadonly($this->readonly)
)
->addItem((new CButton($this->name.'_calendar'))
->addClass(ZBX_STYLE_BTN_ICON)
->addClass(ZBX_ICON_CALENDAR)
->setEnabled($this->enabled && !$this->readonly)
->onClick('toggleCalendar(this, "'.$this->name.'", "'.$this->date_format.'");'));
return parent::toString($destroy);
}
}