Библиотека для cis, online, cms1

This commit is contained in:
Фёдор Подлеснов 2016-06-29 18:51:32 +03:00
commit 3c2e614d87
269 changed files with 39854 additions and 0 deletions

View file

@ -0,0 +1,118 @@
<?php
/**
* Ïðîâåðêà êîëëåêöèè
*/
class Validator
{
protected $chain = array(); // Ìàññèâ ïðàâèë
protected $errorMsg = array(); // Ìàññèâ îøèáîê
/**
* Äîáàâëåíèå ñïèñêà ïðàâèë â ñïåöèàëüíîì ôîðìàòå
* array(array('name' => fieldname, 'validate' => ruletext), ...)
* fieldname - Èìÿ ïåðåìåíîé äëÿ ïðîâåðêè
* ruletext - Îïèñàíèå ïðàâèëà ñì. ôîðìàò ïðàâèëà íèæå
*/
public function addRuleList(array $input)
{
require_once "core/validator/rule/all.php";
$type = array(
'date' => 'Rule_Date',
'email' => 'Rule_Email',
'emaillist'=> 'Rule_EmailList',
'match' => 'Rule_Match',
'time' => 'Rule_Time',
'alpha' => 'Rule_Alpha',
'require' => 'Rule_Notnull',
'numeric' => 'Rule_Numeric',
'unique' => 'Rule_Unique',
'count' => 'Rule_Count',
'code' => 'Rule_Code'
);
// Ðàçáîð ïðàâèëà ïðîâåðêè
// Ôîðìàò ïðàâèëà 'rule1|rule2,param1=value1|rule3,param1=value1,param2=value2'
foreach ($input as $value) {
// Ñïèñîê ïðàâèë
if (! isset($value['validate'])) continue;
$rules = explode("|", $value['validate']);
foreach ($rules as $rule) {
// Ñïèñîê ïàðàìåòðîâ ïðàâèëà
$rule_param = explode(",", $rule);
$name = array_shift($rule_param);
if (isset($type[$name])) {
$constructor = $type[$name]; // "Rule_" . ucfirst($name)
$rule = new $constructor($value['name'], false); // Íóæíû øàáëîííûå ñîîáùåíèÿ äëÿ ïðàâèë
if (isset($value['context'])) {
$rule->setContext($value['context']);
}
foreach ($rule_param as $param) {
// Èìÿ è çíà÷åíèå ïàðàìåòðà
list($name, $value) = explode("=", $param);
$rule->$name = $value;
}
$this->addRule($rule);
}
}
}
}
public function addRule(&$rule)
{
if (is_array($rule)) {
$this->chain = array_merge($this->chain, $rule);
} else {
$this->chain[] = $rule;
}
}
public function Skip($rule, $container) // -> Rule_Abstract
{
if ($rule instanceof Rule_Notnull) {
return false;
} else {
$data = $container->get($rule->field);
if (!is_array($data)) {
$value = trim($data);
return $value == '';
}
}
}
public function validate(Collection $container, $rule = null, $status = null)
{
if ($rule) {
$this->chain = $rule;
}
$this->errorMsg = array();
foreach ($this->chain as $key => $rule) {
if (!$this->Skip($rule, $container) && !$rule->isValid($container, $status)) {
$name = $rule->field;
$this->errorMsg[$name] = $rule->getErrorMsg();
}
}
return $this->isValid();
}
public function addError($name, $message)
{
$this->errorMsg[$name] = $message;
}
public function isError()
{
return !empty($this->errorMsg);
}
public function isValid()
{
return empty($this->errorMsg);
}
public function getErrorMsg()
{
return $this->errorMsg;
}
}