icingaweb2/library/Icinga/Web/Form/Element/DateTimePicker.php

149 lines
3.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Web\Form\Element;
use DateTime;
use Zend_Form_Element;
use Icinga\Web\Form\Validator\DateTimeValidator;
/**
* A date-and-time input control
*
* @method DateTime getValue()
*/
class DateTimePicker extends Zend_Form_Element
{
/**
* Disable default decorators
*
* \Icinga\Web\Form sets default decorators for elements.
*
* @var bool
*
* @see \Icinga\Web\Form::__construct() For default element decorators.
*/
protected $_disableLoadDefaultDecorators = true;
/**
* Form view helper to use for rendering
*
* @var string
*/
public $helper = 'formDateTime';
/**
* @var bool
*/
protected $local = true;
/**
* The expected lower bound for the elements value
*
* @var DateTime|null
*/
protected $min;
/**
* The expected upper bound for the elements
*
* @var DateTime|null
*/
protected $max;
/**
* (non-PHPDoc)
* @see \Zend_Form_Element::init() For the method documentation.
*/
public function init()
{
$this->addValidator(
new DateTimeValidator($this->local), true // true for breaking the validator chain on failure
);
if ($this->min !== null) {
$this->addValidator('GreaterThan', true, array('min' => $this->min));
}
if ($this->max !== null) {
$this->addValidator('LessThan', true, array('max' => $this->max));
}
}
public function setLocal($local)
{
$this->local = (bool) $local;
return $this;
}
public function getLocal()
{
return $this->local;
}
/**
* Set the expected lower bound for the elements value
*
* @param DateTime $min
*
* @return $this
*/
public function setMin(DateTime $min)
{
$this->min = $min;
return $this;
}
/**
* Get the expected lower bound for the elements value
*
* @return DateTime|null
*/
public function getMin()
{
return $this->min;
}
/**
* Set the expected upper bound for the elements value
*
* @param DateTime $max
*
* @return $this
*/
public function setMax(DateTime $max)
{
$this->max = $max;
return $this;
}
/**
* Get the expected upper bound for the elements value
*
* @return DateTime|null
*/
public function getMax()
{
return $this->max;
}
/**
* Is the date and time valid?
*
* @param string|DateTime $value
* @param mixed $context
*
* @return bool
*/
public function isValid($value, $context = null)
{
if (! parent::isValid($value, $context)) {
return false;
}
if (! $value instanceof DateTime) {
$format = $this->local === true ? 'Y-m-d\TH:i:s' : DateTime::RFC3339;
$this->setValue(DateTime::createFromFormat($format, $value));
}
return true;
}
}