sugoi internally added
This commit is contained in:
@@ -0,0 +1,162 @@
|
||||
/*
|
||||
* Copyright (c) 2008, TouchMyPixel & contributors
|
||||
* Original author : Tony Polinelli <tonyp@touchmypixel.com>
|
||||
* Contributers: Tarwin Stroh-Spijer
|
||||
* 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.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE TOUCH MY PIXEL & CONTRIBUTERS "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 TOUCH MY PIXEL & 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.
|
||||
*/
|
||||
|
||||
package sugoi.form.validators;
|
||||
//import sugoi.form.Validator;
|
||||
//import poko.utils.StringTools2;
|
||||
//import site.cms.common.DateTimeMode;
|
||||
|
||||
class DateTimeValidator extends Validator
|
||||
{
|
||||
//public static var EMAIL_REGEX : EReg = "([0-9]{4})[-\.[:space:]]([0-9]{2})[-\.[:space:]]([0-9]{2})";
|
||||
public var format:EReg;
|
||||
|
||||
public var minDate:Date;
|
||||
public var maxDate:Date;
|
||||
|
||||
public var errorDateOutOfRange:String;
|
||||
public var errorDateNotValid:String;
|
||||
public var errorDateNotExist:String;
|
||||
|
||||
public function new( ?mode : DateTimeMode = null, ?minDate:Date, ?maxDate:Date )
|
||||
{
|
||||
super();
|
||||
|
||||
if ( mode == DateTimeMode.date )
|
||||
{
|
||||
format = new EReg("[0-9]{4}-[0-9]{2}-[0-9]{2}", null);
|
||||
errorDateNotValid = "Is not in the correct format. YYYY-MM-DD is required.";
|
||||
}
|
||||
else if ( mode == DateTimeMode.time )
|
||||
{
|
||||
format = new EReg("[0-9]{2}:[0-9]{2}:[0-9]{2}", null);
|
||||
errorDateNotValid = "Is not in the correct format. HH:MM:SS is required.";
|
||||
}
|
||||
else
|
||||
{
|
||||
format = new EReg("[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}", null);
|
||||
errorDateNotValid = "Is not in the correct format. YYYY-MM-DD HH:MM:SS is required.";
|
||||
}
|
||||
|
||||
errorDateOutOfRange = "Must be between %s and %s";
|
||||
|
||||
|
||||
if (minDate != null) this.minDate = minDate;
|
||||
if (maxDate != null) this.maxDate = maxDate;
|
||||
}
|
||||
|
||||
override public function isValid(value:Dynamic):Bool
|
||||
{
|
||||
var valid = true;
|
||||
var d:Date;
|
||||
|
||||
// value is date
|
||||
if (Type.getClass(value) == Date){
|
||||
d = value;
|
||||
// value conforms to format, convert to date
|
||||
}else if (Type.getClass(value) == String && format.match(value)) {
|
||||
d = Date.fromString(value);
|
||||
}else {
|
||||
errors.add(errorDateNotValid);
|
||||
return false;
|
||||
}
|
||||
|
||||
// check date range
|
||||
if (minDate != null){
|
||||
if (d.getTime() < minDate.getTime())
|
||||
valid = false;
|
||||
}
|
||||
|
||||
if (maxDate != null){
|
||||
if (d.getTime() > maxDate.getTime())
|
||||
valid = false;
|
||||
}
|
||||
|
||||
// date must be out of range if invalid at this point
|
||||
if (!valid)
|
||||
errors.add(StringTools2.printf(errorDateOutOfRange, [dateOnly(minDate), dateOnly(maxDate)]));
|
||||
|
||||
return valid;
|
||||
}
|
||||
|
||||
private function dateOnly(d:Date):String
|
||||
{
|
||||
return StringTools.lpad(Std.string(d.getFullYear()), "0", 4) + "-" + StringTools.lpad(Std.string(d.getMonth()), "0", 2) + "-" + StringTools.lpad(Std.string(d.getDate()), "0", 2);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
var v:DateValidator = new DateValidator(Date.fromString("1981-12-09"), Date.fromString("2030-11-11"));
|
||||
|
||||
// -------------------------------------------------
|
||||
// check input
|
||||
trace("<br /><br />INPUT<br />");
|
||||
|
||||
v.reset();
|
||||
trace(true);
|
||||
trace(v.isValid("1981-12-09"));
|
||||
trace(v.errors);
|
||||
|
||||
v.reset();
|
||||
trace(false);
|
||||
trace(v.isValid("x981-12-09"));
|
||||
trace(v.errors);
|
||||
|
||||
v.reset();
|
||||
trace(false);
|
||||
trace(v.isValid("1985-90-90"));
|
||||
trace(v.errors);
|
||||
|
||||
// -------------------------------------------------
|
||||
// check ranges
|
||||
trace("<br /><br />RANGES<br />");
|
||||
|
||||
v.reset();
|
||||
trace(true);
|
||||
trace(v.isValid(Date.fromString("1981-12-09")));
|
||||
trace(v.errors);
|
||||
|
||||
v.reset();
|
||||
trace(false);
|
||||
trace(v.isValid(Date.fromString("1981-12-08")));
|
||||
trace(v.errors);
|
||||
|
||||
v.reset();
|
||||
trace(true);
|
||||
trace(v.isValid(Date.now()));
|
||||
trace(v.errors);
|
||||
|
||||
v.reset();
|
||||
trace(true);
|
||||
trace(v.isValid(Date.fromString("2030-11-11")));
|
||||
trace(v.errors);
|
||||
|
||||
v.reset();
|
||||
trace(false);
|
||||
trace(v.isValid(Date.fromString("2030-11-12")));
|
||||
trace(v.errors);
|
||||
*/
|
||||
Reference in New Issue
Block a user