<?php
|
/*
|
Copyright (c) 2009, Scott Barr <gsbarr@gmail.com>
|
All rights reserved.
|
|
Redistribution and use in source and binary forms, with or without modification,
|
are permitted provided that the following conditions are met:
|
|
* Redistributions of source code must retain the above copyright notice,
|
this list of conditions and the following disclaimer.
|
* Redistributions in binary form must reproduce the above copyright notice,
|
this list of conditions and the following disclaimer in the documentation
|
and/or other materials provided with the distribution.
|
* Neither the name of ISPConfig nor the names of its contributors
|
may be used to endorse or promote products derived from this software without
|
specific prior written permission.
|
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
*/
|
|
class validate_datetime
|
{
|
/**
|
* Check if the parsed datetime selectors are not set
|
* to it's default value (zero).
|
*
|
* @param array $field_value
|
* @return bool
|
*/
|
function _datetime_selected($field_value)
|
{
|
if (is_array($field_value) && count($field_value) >= 5)
|
{
|
$result = array_filter($field_value, create_function('$dt_unit', 'return ($dt_unit > 0);'));
|
return (count($result) !== 0);
|
}
|
|
return false;
|
}
|
|
/**
|
* Check wordbook for the existence of an
|
* error message. If not found will return
|
* the parsed error message with line break.
|
*
|
* @param $errmsg
|
* @return string
|
*/
|
function _get_error($errmsg)
|
{
|
global $app;
|
|
$errmsg = (isset($app->tform->wordbook[$errmsg])) ? $app->tform->wordbook[$errmsg] : $errmsg;
|
$errmsg .= '<br />' . PHP_EOL;
|
|
return $errmsg;
|
}
|
|
/**
|
* Helper function - filter the contents of the
|
* selectors and return the resulting unix timestamp.
|
*
|
* @param $field_value
|
* @return int Unix timestamp
|
*/
|
function _get_timestamp_value($field_value)
|
{
|
$second = 0;
|
$filtered_values = array_map(create_function('$item','return (int)$item;'), $field_value);
|
extract($filtered_values, EXTR_OVERWRITE);
|
|
return mktime($hour, $minute, $second, $month, $day, $year);
|
}
|
|
/**
|
* The minimum requirement to submit a datetime field
|
* is to set the day, month and year values. Check that
|
* these values are not zero (default).
|
*
|
* @param string $field_name
|
* @param array $field_value
|
* @param array $validator
|
* @return string|void Error message if found
|
*/
|
function not_empty($field_name, $field_value, $validator)
|
{
|
extract($field_value);
|
if ( !($day > 0 && $month > 0 && $year > 0) ) {
|
return $this->_get_error($validator['errmsg']);
|
}
|
}
|
|
/**
|
* Check that the selected datetime is in the future.
|
*
|
* @param string $field_name
|
* @param array $field_value
|
* @param array $validator
|
* @return string|void Error message if found
|
*/
|
function is_future($field_name, $field_value, $validator)
|
{
|
$validator['compare'] = mktime(date('H'), (date('i')-30), 0, date('m'), date('d'), date('Y')); // Turn back the clock 30 minutes for slow posters.
|
return $this->is_greater($field_name, $field_value, $validator);
|
}
|
|
/**
|
* Compare the selected datetime to a timestamp
|
* parsed via the validator array (key: compare).
|
*
|
* @param string $field_name
|
* @param array $field_value
|
* @param array $validator
|
* @return string|void Error message if found
|
*/
|
function is_greater($field_name, $field_value, $validator)
|
{
|
if ( !isset($validator['compare']) || !is_numeric($validator['compare']) || (date('d/m/Y', $validator['compare']) == '01/01/1970') ) {
|
return $this->_get_error('Could not find a unix timestamp to compare datetime with.');
|
}
|
|
$dt_stamp = $this->_get_timestamp_value($field_value);
|
if ($dt_stamp < $validator['compare']) {
|
return $this->_get_error($validator['errmsg']);
|
}
|
}
|
|
|
}
|