Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bareos/bareos-webui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/zendframework/zend-validator/src/DateStep.php')
-rw-r--r--vendor/zendframework/zend-validator/src/DateStep.php479
1 files changed, 0 insertions, 479 deletions
diff --git a/vendor/zendframework/zend-validator/src/DateStep.php b/vendor/zendframework/zend-validator/src/DateStep.php
deleted file mode 100644
index 67465d3..0000000
--- a/vendor/zendframework/zend-validator/src/DateStep.php
+++ /dev/null
@@ -1,479 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use DateInterval;
-use DateTime;
-use DateTimeZone;
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-class DateStep extends Date
-{
- const NOT_STEP = 'dateStepNotStep';
-
- const FORMAT_DEFAULT = DateTime::ISO8601;
-
- /**
- * @var array
- */
- protected $messageTemplates = array(
- self::INVALID => "Invalid type given. String, integer, array or DateTime expected",
- self::INVALID_DATE => "The input does not appear to be a valid date",
- self::FALSEFORMAT => "The input does not fit the date format '%format%'",
- self::NOT_STEP => "The input is not a valid step",
- );
-
- /**
- * Optional base date value
- *
- * @var string|int|\DateTime
- */
- protected $baseValue = '1970-01-01T00:00:00Z';
-
- /**
- * Date step interval (defaults to 1 day).
- * Uses the DateInterval specification.
- *
- * @var DateInterval
- */
- protected $step;
-
- /**
- * Optional timezone to be used when the baseValue
- * and validation values do not contain timezone info
- *
- * @var DateTimeZone
- */
- protected $timezone;
-
- /**
- * Set default options for this instance
- *
- * @param array $options
- */
- public function __construct($options = array())
- {
- if ($options instanceof Traversable) {
- $options = ArrayUtils::iteratorToArray($options);
- } elseif (!is_array($options)) {
- $options = func_get_args();
- $temp['baseValue'] = array_shift($options);
- if (!empty($options)) {
- $temp['step'] = array_shift($options);
- }
- if (!empty($options)) {
- $temp['format'] = array_shift($options);
- }
- if (!empty($options)) {
- $temp['timezone'] = array_shift($options);
- }
-
- $options = $temp;
- }
-
- if (!isset($options['step'])) {
- $options['step'] = new DateInterval('P1D');
- }
- if (!isset($options['timezone'])) {
- $options['timezone'] = new DateTimeZone(date_default_timezone_get());
- }
-
- parent::__construct($options);
- }
-
- /**
- * Sets the base value from which the step should be computed
- *
- * @param string|int|\DateTime $baseValue
- * @return DateStep
- */
- public function setBaseValue($baseValue)
- {
- $this->baseValue = $baseValue;
- return $this;
- }
-
- /**
- * Returns the base value from which the step should be computed
- *
- * @return string|int|\DateTime
- */
- public function getBaseValue()
- {
- return $this->baseValue;
- }
-
- /**
- * Sets the step date interval
- *
- * @param DateInterval $step
- * @return DateStep
- */
- public function setStep(DateInterval $step)
- {
- $this->step = $step;
- return $this;
- }
-
- /**
- * Returns the step date interval
- *
- * @return DateInterval
- */
- public function getStep()
- {
- return $this->step;
- }
-
- /**
- * Returns the timezone option
- *
- * @return DateTimeZone
- */
- public function getTimezone()
- {
- return $this->timezone;
- }
-
- /**
- * Sets the timezone option
- *
- * @param DateTimeZone $timezone
- * @return DateStep
- */
- public function setTimezone(DateTimeZone $timezone)
- {
- $this->timezone = $timezone;
- return $this;
- }
-
- /**
- * Supports formats with ISO week (W) definitions
- *
- * @see Date::convertString()
- */
- protected function convertString($value, $addErrors = true)
- {
- // Custom week format support
- if (strpos($this->format, 'Y-\WW') === 0
- && preg_match('/^([0-9]{4})\-W([0-9]{2})/', $value, $matches)
- ) {
- $date = new DateTime;
- $date->setISODate($matches[1], $matches[2]);
- } else {
- $date = DateTime::createFromFormat($this->format, $value, $this->timezone);
- }
-
- // Invalid dates can show up as warnings (ie. "2007-02-99")
- // and still return a DateTime object.
- $errors = DateTime::getLastErrors();
- if ($errors['warning_count'] > 0) {
- if ($addErrors) {
- $this->error(self::FALSEFORMAT);
- }
- return false;
- }
-
- return $date;
- }
-
- /**
- * Returns true if a date is within a valid step
- *
- * @param string|int|\DateTime $value
- * @return bool
- * @throws Exception\InvalidArgumentException
- */
- public function isValid($value)
- {
- if (!parent::isValid($value)) {
- return false;
- }
-
- $valueDate = $this->convertToDateTime($value, false); // avoid duplicate errors
- $baseDate = $this->convertToDateTime($this->baseValue, false);
- $step = $this->getStep();
-
- // Same date?
- if ($valueDate == $baseDate) {
- return true;
- }
-
- // Optimization for simple intervals.
- // Handle intervals of just one date or time unit.
- $intervalParts = explode('|', $step->format('%y|%m|%d|%h|%i|%s'));
- $partCounts = array_count_values($intervalParts);
-
- $unitKeys = array('years', 'months', 'days', 'hours', 'minutes', 'seconds');
- $intervalParts = array_combine($unitKeys, $intervalParts);
-
- // Get absolute time difference to avoid special cases of missing/added time
- $absoluteValueDate = new DateTime($valueDate->format('Y-m-d H:i:s'), new DateTimeZone('UTC'));
- $absoluteBaseDate = new DateTime($baseDate->format('Y-m-d H:i:s'), new DateTimeZone('UTC'));
-
- $timeDiff = $absoluteValueDate->diff($absoluteBaseDate, 1);
- $diffParts = array_combine($unitKeys, explode('|', $timeDiff->format('%y|%m|%d|%h|%i|%s')));
-
- if (5 === $partCounts["0"]) {
- // Find the unit with the non-zero interval
- $intervalUnit = null;
- $stepValue = null;
- foreach ($intervalParts as $key => $value) {
- if (0 != $value) {
- $intervalUnit = $key;
- $stepValue = (int) $value;
- break;
- }
- }
-
- // Check date units
- if (in_array($intervalUnit, array('years', 'months', 'days'))) {
- switch ($intervalUnit) {
- case 'years':
- if (0 == $diffParts['months'] && 0 == $diffParts['days']
- && 0 == $diffParts['hours'] && 0 == $diffParts['minutes']
- && 0 == $diffParts['seconds']
- ) {
- if (($diffParts['years'] % $stepValue) === 0) {
- return true;
- }
- }
- break;
- case 'months':
- if (0 == $diffParts['days'] && 0 == $diffParts['hours']
- && 0 == $diffParts['minutes'] && 0 == $diffParts['seconds']
- ) {
- $months = ($diffParts['years'] * 12) + $diffParts['months'];
- if (($months % $stepValue) === 0) {
- return true;
- }
- }
- break;
- case 'days':
- if (0 == $diffParts['hours'] && 0 == $diffParts['minutes']
- && 0 == $diffParts['seconds']
- ) {
- $days = $timeDiff->format('%a'); // Total days
- if (($days % $stepValue) === 0) {
- return true;
- }
- }
- break;
- }
- $this->error(self::NOT_STEP);
- return false;
- }
-
- // Check time units
- if (in_array($intervalUnit, array('hours', 'minutes', 'seconds'))) {
- // Simple test if $stepValue is 1.
- if (1 == $stepValue) {
- if ('hours' === $intervalUnit
- && 0 == $diffParts['minutes'] && 0 == $diffParts['seconds']
- ) {
- return true;
- } elseif ('minutes' === $intervalUnit && 0 == $diffParts['seconds']) {
- return true;
- } elseif ('seconds' === $intervalUnit) {
- return true;
- }
-
- $this->error(self::NOT_STEP);
-
- return false;
- }
-
- // Simple test for same day, when using default baseDate
- if ($baseDate->format('Y-m-d') == $valueDate->format('Y-m-d')
- && $baseDate->format('Y-m-d') == '1970-01-01'
- ) {
- switch ($intervalUnit) {
- case 'hours':
- if (0 == $diffParts['minutes'] && 0 == $diffParts['seconds']) {
- if (($diffParts['hours'] % $stepValue) === 0) {
- return true;
- }
- }
- break;
- case 'minutes':
- if (0 == $diffParts['seconds']) {
- $minutes = ($diffParts['hours'] * 60) + $diffParts['minutes'];
- if (($minutes % $stepValue) === 0) {
- return true;
- }
- }
- break;
- case 'seconds':
- $seconds = ($diffParts['hours'] * 60 * 60)
- + ($diffParts['minutes'] * 60)
- + $diffParts['seconds'];
- if (($seconds % $stepValue) === 0) {
- return true;
- }
- break;
- }
- $this->error(self::NOT_STEP);
- return false;
- }
- }
- }
-
- return $this->fallbackIncrementalIterationLogic($baseDate, $valueDate, $intervalParts, $diffParts, $step);
- }
-
- /**
- * Fall back to slower (but accurate) method for complex intervals.
- * Keep adding steps to the base date until a match is found
- * or until the value is exceeded.
- *
- * This is really slow if the interval is small, especially if the
- * default base date of 1/1/1970 is used. We can skip a chunk of
- * iterations by starting at the lower bound of steps needed to reach
- * the target
- *
- * @param DateTime $baseDate
- * @param DateTime $valueDate
- * @param int[] $intervalParts
- * @param int[] $diffParts
- * @param DateInterval $step
- *
- * @return bool
- */
- private function fallbackIncrementalIterationLogic(
- DateTime $baseDate,
- DateTime $valueDate,
- array $intervalParts,
- array $diffParts,
- DateInterval $step
- ) {
- list($minSteps, $requiredIterations) = $this->computeMinStepAndRequiredIterations($intervalParts, $diffParts);
- $minimumInterval = $this->computeMinimumInterval($intervalParts, $minSteps);
- $isIncrementalStepping = $baseDate < $valueDate;
- $dateModificationOperation = $isIncrementalStepping ? 'add' : 'sub';
-
- for ($offsetIterations = 0; $offsetIterations < $requiredIterations; $offsetIterations += 1) {
- $baseDate->{$dateModificationOperation}($minimumInterval);
- }
-
- while (($isIncrementalStepping && $baseDate < $valueDate)
- || (! $isIncrementalStepping && $baseDate > $valueDate)
- ) {
- $baseDate->{$dateModificationOperation}($step);
-
- if ($baseDate == $valueDate) {
- return true;
- }
- }
-
- $this->error(self::NOT_STEP);
-
- return false;
- }
-
- /**
- * Computes minimum interval to use for iterations while checking steps
- *
- * @param int[] $intervalParts
- * @param int $minSteps
- *
- * @return DateInterval
- */
- private function computeMinimumInterval(array $intervalParts, $minSteps)
- {
- return new DateInterval(sprintf(
- 'P%dY%dM%dDT%dH%dM%dS',
- $intervalParts['years'] * $minSteps,
- $intervalParts['months'] * $minSteps,
- $intervalParts['days'] * $minSteps,
- $intervalParts['hours'] * $minSteps,
- $intervalParts['minutes'] * $minSteps,
- $intervalParts['seconds'] * $minSteps
- ));
- }
-
- /**
- * @param int[] $intervalParts
- * @param int[] $diffParts
- *
- * @return int[] (ordered tuple containing minimum steps and required step iterations
- */
- private function computeMinStepAndRequiredIterations(array $intervalParts, array $diffParts)
- {
- $minSteps = $this->computeMinSteps($intervalParts, $diffParts);
-
- // If we use PHP_INT_MAX DateInterval::__construct falls over with a bad format error
- // before we reach the max on 64 bit machines
- $maxInteger = min(pow(2, 31), PHP_INT_MAX);
- // check for integer overflow and split $minimum interval if needed
- $maximumInterval = max($intervalParts);
- $requiredStepIterations = 1;
-
- if (($minSteps * $maximumInterval) > $maxInteger) {
- $requiredStepIterations = ceil(($minSteps * $maximumInterval) / $maxInteger);
- $minSteps = floor($minSteps / $requiredStepIterations);
- }
-
- return array($minSteps, $minSteps ? $requiredStepIterations : 0);
- }
-
- /**
- * Multiply the step interval by the lower bound of steps to reach the target
- *
- * @param int[] $intervalParts
- * @param int[] $diffParts
- *
- * @return int
- */
- private function computeMinSteps(array $intervalParts, array $diffParts)
- {
- $intervalMaxSeconds = $this->computeIntervalMaxSeconds($intervalParts);
-
- return (0 == $intervalMaxSeconds)
- ? 0
- : max(floor($this->computeDiffMinSeconds($diffParts) / $intervalMaxSeconds) - 1, 0);
- }
-
- /**
- * Get upper bound of the given interval in seconds
- * Converts a given `$intervalParts` array into seconds
- *
- * @param int[] $intervalParts
- *
- * @return int
- */
- private function computeIntervalMaxSeconds(array $intervalParts)
- {
- return ($intervalParts['years'] * 60 * 60 * 24 * 366)
- + ($intervalParts['months'] * 60 * 60 * 24 * 31)
- + ($intervalParts['days'] * 60 * 60 * 24)
- + ($intervalParts['hours'] * 60 * 60)
- + ($intervalParts['minutes'] * 60)
- + $intervalParts['seconds'];
- }
-
- /**
- * Get lower bound of difference in secondss
- * Converts a given `$diffParts` array into seconds
- *
- * @param int[] $diffParts
- *
- * @return int
- */
- private function computeDiffMinSeconds(array $diffParts)
- {
- return ($diffParts['years'] * 60 * 60 * 24 * 365)
- + ($diffParts['months'] * 60 * 60 * 24 * 28)
- + ($diffParts['days'] * 60 * 60 * 24)
- + ($diffParts['hours'] * 60 * 60)
- + ($diffParts['minutes'] * 60)
- + $diffParts['seconds'];
- }
-}