mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-07-03 06:55:03 +03:00
Модуль валидации данных + поддержка валидации в сущностях
This commit is contained in:
parent
bfe4c1707e
commit
42dce73baa
|
@ -19,9 +19,13 @@
|
||||||
* Абстрактный класс сущности
|
* Абстрактный класс сущности
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
abstract class Entity extends Object {
|
abstract class Entity extends Object {
|
||||||
protected $_aData=array();
|
protected $_aData=array();
|
||||||
protected $sPrimaryKey = null;
|
protected $sPrimaryKey = null;
|
||||||
|
protected $aValidateRules=array();
|
||||||
|
protected $aValidateErrors=array();
|
||||||
|
protected $sValidateScenario='';
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Если передать в конструктор ассоциативный массив свойств и их значений, то они автоматом загрузятся в сущность
|
* Если передать в конструктор ассоциативный массив свойств и их значений, то они автоматом загрузятся в сущность
|
||||||
|
@ -42,7 +46,7 @@ abstract class Entity extends Object {
|
||||||
|
|
||||||
public function _getData($aKeys=array()) {
|
public function _getData($aKeys=array()) {
|
||||||
if(!is_array($aKeys) or !count($aKeys)) return $this->_aData;
|
if(!is_array($aKeys) or !count($aKeys)) return $this->_aData;
|
||||||
|
|
||||||
$aReturn=array();
|
$aReturn=array();
|
||||||
foreach ($aKeys as $key) {
|
foreach ($aKeys as $key) {
|
||||||
if(array_key_exists($key,$this->_aData)) {
|
if(array_key_exists($key,$this->_aData)) {
|
||||||
|
@ -58,7 +62,7 @@ abstract class Entity extends Object {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Рекурсивное преобразование объекта и вложенных объектов в массив
|
* Рекурсивное преобразование объекта и вложенных объектов в массив
|
||||||
*/
|
*/
|
||||||
|
@ -74,7 +78,7 @@ abstract class Entity extends Object {
|
||||||
}
|
}
|
||||||
return $aResult;
|
return $aResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
|
* Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля
|
||||||
*
|
*
|
||||||
|
@ -106,25 +110,171 @@ abstract class Entity extends Object {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Получение первичного ключа сущности (ключ, а не значение!)
|
* Получение первичного ключа сущности (ключ, а не значение!)
|
||||||
*/
|
*/
|
||||||
public function _getPrimaryKey()
|
public function _getPrimaryKey()
|
||||||
{
|
{
|
||||||
if (!$this->sPrimaryKey) {
|
if (!$this->sPrimaryKey) {
|
||||||
if (isset($this->_aData['id'])) {
|
if (isset($this->_aData['id'])) {
|
||||||
$this->sPrimaryKey = 'id';
|
$this->sPrimaryKey = 'id';
|
||||||
} else {
|
} else {
|
||||||
// Получение primary_key из схемы бд (пока отсутствует)
|
// Получение primary_key из схемы бд (пока отсутствует)
|
||||||
$this->sPrimaryKey = 'id';
|
$this->sPrimaryKey = 'id';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->sPrimaryKey;
|
return $this->sPrimaryKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function _getPrimaryKeyValue() {
|
public function _getPrimaryKeyValue() {
|
||||||
return $this->_getDataOne($this->_getPrimaryKey());
|
return $this->_getDataOne($this->_getPrimaryKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Выполняет валидацию данных сущности
|
||||||
|
* Если $aFields=null, то выполняется валидация по всем полям из $this->aValidateRules, иначе по пересечению
|
||||||
|
*
|
||||||
|
* @param null $attributes
|
||||||
|
* @param bool $clearErrors
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function _Validate($aFields=null, $clearErrors=true) {
|
||||||
|
if($clearErrors) {
|
||||||
|
$this->_clearValidateErrors();
|
||||||
|
}
|
||||||
|
foreach($this->_getValidators() as $validator) {
|
||||||
|
$validator->validateEntity($this,$aFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
return !$this->_hasValidateErrors();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает список валидаторов с учетом текущего сценария
|
||||||
|
*
|
||||||
|
* @param null|string $sField Поле сущности для которого необходимо вернуть валидаторы, если нет, то возвращается для всех полей
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function _getValidators($sField=null) {
|
||||||
|
$aValidators=$this->createValidators();
|
||||||
|
|
||||||
|
$aValidatorsReturn=array();
|
||||||
|
$sScenario=$this->_getValidateScenario();
|
||||||
|
foreach($aValidators as $oValidator) {
|
||||||
|
/**
|
||||||
|
* Проверка на текущий сценарий
|
||||||
|
*/
|
||||||
|
if($oValidator->applyTo($sScenario)) {
|
||||||
|
if($sField===null || in_array($sField,$oValidator->fields,true)) {
|
||||||
|
$aValidatorsReturn[]=$oValidator;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $aValidatorsReturn;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Создает и возвращает список валидаторов для сущности
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public function createValidators() {
|
||||||
|
$aValidators=array();
|
||||||
|
foreach($this->aValidateRules as $aRule) {
|
||||||
|
if(isset($aRule[0],$aRule[1])) {
|
||||||
|
$aValidators[]=$this->Validate_CreateValidator($aRule[1],$this,$aRule[0],array_slice($aRule,2));
|
||||||
|
} else {
|
||||||
|
throw new Exception(get_class($this).' has an invalid validation rule');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $aValidators;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверяет есть ли ошибки валидации
|
||||||
|
*
|
||||||
|
* @param null|string $sField Поле сущности, если нет, то проверяется для всех полей
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function _hasValidateErrors($sField=null) {
|
||||||
|
if($sField===null) {
|
||||||
|
return $this->aValidateErrors!==array();
|
||||||
|
} else {
|
||||||
|
return isset($this->aValidateErrors[$sField]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает список ошибок для всех полей или одного поля
|
||||||
|
*
|
||||||
|
* @param null|string $sField Поле сущности, если нет, то возвращается для всех полей
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function _getValidateErrors($sField=null) {
|
||||||
|
if($sField===null) {
|
||||||
|
return $this->aValidateErrors;
|
||||||
|
} else {
|
||||||
|
return isset($this->aValidateErrors[$sField]) ? $this->aValidateErrors[$sField] : array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает первую ошибку для поля
|
||||||
|
*
|
||||||
|
* @param string $sField Поле сущности
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function _getValidateError($sField) {
|
||||||
|
return isset($this->aValidateErrors[$sField]) ? reset($this->aValidateErrors[$sField]) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Добавляет для поля ошибку в список ошибок
|
||||||
|
*
|
||||||
|
* @param string $sField Поле сущности
|
||||||
|
* @param string $error Сообщение об ошибке
|
||||||
|
*/
|
||||||
|
public function _addValidateError($sField,$error) {
|
||||||
|
$this->aValidateErrors[$sField][]=$error;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Очищает список всех ошибок или для конкретного поля
|
||||||
|
*
|
||||||
|
* @param null|string $sField Поле сущности
|
||||||
|
*/
|
||||||
|
public function _clearValidateErrors($sField=null) {
|
||||||
|
if($sField===null) {
|
||||||
|
$this->aValidateErrors=array();
|
||||||
|
} else {
|
||||||
|
unset($this->aValidateErrors[$sField]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает текущий сценарий валидации
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function _getValidateScenario() {
|
||||||
|
return $this->sValidateScenario;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Устанавливает сценарий валидации
|
||||||
|
*
|
||||||
|
* @param string $sValue
|
||||||
|
*/
|
||||||
|
public function _setValidateScenario($sValue) {
|
||||||
|
$this->sValidateScenario=$sValue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
177
engine/modules/validate/Validate.class.php
Normal file
177
engine/modules/validate/Validate.class.php
Normal file
|
@ -0,0 +1,177 @@
|
||||||
|
<?php
|
||||||
|
/*-------------------------------------------------------
|
||||||
|
*
|
||||||
|
* LiveStreet Engine Social Networking
|
||||||
|
* Copyright © 2008 Mzhelskiy Maxim
|
||||||
|
*
|
||||||
|
*--------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Official site: www.livestreet.ru
|
||||||
|
* Contact e-mail: rus.engine@gmail.com
|
||||||
|
*
|
||||||
|
* GNU General Public License, version 2:
|
||||||
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
*
|
||||||
|
---------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Модуль Validate
|
||||||
|
* Выполняет валидацию данных по определенным правилам
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class ModuleValidate extends Module {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Список ошибок при валидации, заполняется только если использовать валидацию напрямую без сущности
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $aErrors=array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Инициализируем модуль
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function Init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Запускает валидацию данных
|
||||||
|
*
|
||||||
|
* @param $sNameValidator Имя валидатора или метода при использовании параметра $oObject
|
||||||
|
* @param $mValue Валидируемое значение
|
||||||
|
* @param array $aParams Параметры валидации
|
||||||
|
* @param null $oObject Объект в котором необходимо вызвать метод валидации
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function Validate($sNameValidator,$mValue,$aParams=array(),$oObject=null) {
|
||||||
|
if (is_null($oObject)) {
|
||||||
|
$oObject=$this;
|
||||||
|
}
|
||||||
|
$oValidator=$this->CreateValidator($sNameValidator,$oObject,null,$aParams);
|
||||||
|
|
||||||
|
if (($sMsg=$oValidator->validate($mValue))!==true) {
|
||||||
|
$sMsg=str_replace('%%field%%',is_null($oValidator->label) ? '' : $oValidator->label,$sMsg);
|
||||||
|
$this->AddError($sMsg);
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Создает и возвращает объект валидатора
|
||||||
|
*
|
||||||
|
* @param $sName Имя валидатора или метода при использовании параметра $oObject
|
||||||
|
* @param $oObject Объект в котором необходимо вызвать метод валидации
|
||||||
|
* @param null $aFields Список полей сущности для которых необходимо провести валидацию
|
||||||
|
* @param array $aParams
|
||||||
|
*
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
public function CreateValidator($sName,$oObject,$aFields=null,$aParams=array()) {
|
||||||
|
if(is_string($aFields)) {
|
||||||
|
$aFields=preg_split('/[\s,]+/',$aFields,-1,PREG_SPLIT_NO_EMPTY);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Определяем список сценариев валидации
|
||||||
|
*/
|
||||||
|
if(isset($aParams['on'])) {
|
||||||
|
if(is_array($aParams['on'])) {
|
||||||
|
$aOn=$aParams['on'];
|
||||||
|
} else {
|
||||||
|
$aOn=preg_split('/[\s,]+/',$aParams['on'],-1,PREG_SPLIT_NO_EMPTY);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$aOn=array();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Если в качестве имени валидатора указан метод объекта, то создаем специальный валидатор
|
||||||
|
*/
|
||||||
|
if(method_exists($oObject,$sName)) {
|
||||||
|
$oValidator=Engine::GetEntity('ModuleValidate_EntityValidatorInline');
|
||||||
|
if (!is_null($aFields)) {
|
||||||
|
$oValidator->fields=$aFields;
|
||||||
|
}
|
||||||
|
$oValidator->object=$oObject;
|
||||||
|
$oValidator->method=$sName;
|
||||||
|
$oValidator->params=$aParams;
|
||||||
|
if(isset($aParams['skipOnError'])) {
|
||||||
|
$oValidator->skipOnError=$aParams['skipOnError'];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/**
|
||||||
|
* Иначе создаем валидатор по имени
|
||||||
|
*/
|
||||||
|
if (!is_null($aFields)) {
|
||||||
|
$aParams['fields']=$aFields;
|
||||||
|
}
|
||||||
|
$sValidateName='Validator'.func_camelize($sName);
|
||||||
|
$oValidator=Engine::GetEntity('ModuleValidate_Entity'.$sValidateName);
|
||||||
|
foreach($aParams as $sNameParam=>$sValue) {
|
||||||
|
$oValidator->$sNameParam=$sValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$oValidator->on=empty($aOn) ? array() : array_combine($aOn,$aOn);
|
||||||
|
return $oValidator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает факт наличия ошибки после валидации
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function HasErrors() {
|
||||||
|
return count($this->aErrors) ? true : false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает список ошибок после валидации
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function GetErrors() {
|
||||||
|
return $this->aErrors;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает последнюю ошибку после валидации
|
||||||
|
*
|
||||||
|
* @param bool $bRemove Удалять или нет ошибку из списка ошибок
|
||||||
|
* @return bool|string
|
||||||
|
*/
|
||||||
|
public function GetErrorLast($bRemove=false) {
|
||||||
|
if (!$this->HasErrors()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ($bRemove) {
|
||||||
|
return array_pop($this->aErrors);
|
||||||
|
} else {
|
||||||
|
return $this->aErrors[count($this->aErrors)-1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Содовляет ошибку в список
|
||||||
|
*
|
||||||
|
* @param $sError
|
||||||
|
*/
|
||||||
|
public function AddError($sError) {
|
||||||
|
$this->aErrors[]=$sError;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Очищает список ошибок
|
||||||
|
*/
|
||||||
|
public function ClearErrors() {
|
||||||
|
$this->aErrors=array();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
156
engine/modules/validate/entity/Validator.entity.class.php
Normal file
156
engine/modules/validate/entity/Validator.entity.class.php
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
<?php
|
||||||
|
/*-------------------------------------------------------
|
||||||
|
*
|
||||||
|
* LiveStreet Engine Social Networking
|
||||||
|
* Copyright © 2008 Mzhelskiy Maxim
|
||||||
|
*
|
||||||
|
*--------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Official site: www.livestreet.ru
|
||||||
|
* Contact e-mail: rus.engine@gmail.com
|
||||||
|
*
|
||||||
|
* GNU General Public License, version 2:
|
||||||
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
*
|
||||||
|
---------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
abstract class ModuleValidate_EntityValidator extends Entity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Пропускать или нет ошибку
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
public $bSkipOnError=false;
|
||||||
|
/**
|
||||||
|
* Список полей сущности для валидации
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $fields=array();
|
||||||
|
/**
|
||||||
|
* Название поля сущности для отображения в тексте ошибки
|
||||||
|
*
|
||||||
|
* @var null|string
|
||||||
|
*/
|
||||||
|
public $label=null;
|
||||||
|
/**
|
||||||
|
* Текст ошибки валидации, переопределяет текст валидатора
|
||||||
|
*
|
||||||
|
* @var null|string
|
||||||
|
*/
|
||||||
|
public $msg=null;
|
||||||
|
/**
|
||||||
|
* Список сценариев в которых участвует валидатор
|
||||||
|
*
|
||||||
|
* @var null|array
|
||||||
|
*/
|
||||||
|
public $on=null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Основной метод валидации
|
||||||
|
*
|
||||||
|
* @abstract
|
||||||
|
* @param $sValue
|
||||||
|
*/
|
||||||
|
abstract public function validate($sValue);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Проверяет данные на пустое значение
|
||||||
|
*
|
||||||
|
* @param $mValue Данные
|
||||||
|
* @param bool $bTrim Не учитывать пробелы
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
protected function isEmpty($mValue,$bTrim=false) {
|
||||||
|
return $mValue===null || $mValue===array() || $mValue==='' || $bTrim && is_scalar($mValue) && trim($mValue)==='';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Применять или нет сценарий к текущему валидатору
|
||||||
|
* Для сценария учитываются только те правила, где явно прописан необходимый сценарий
|
||||||
|
*
|
||||||
|
* @param $sScenario
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function applyTo($sScenario) {
|
||||||
|
return (empty($this->on) && !$sScenario) || isset($this->on[$sScenario]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Возвращает сообщение, используется для получения сообщения об ошибке валидатора
|
||||||
|
*
|
||||||
|
* @param $sMsgDefault Дефолтное сообщение
|
||||||
|
* @param null $sMsgFieldCustom Поле/параметр в котором может храниться кастомное сообщение. В поле $sMsgFieldCustom."Id" можно хранить ключ текстовки из языкового файла
|
||||||
|
* @param array $aReplace Список параметров для замены в сообщении (плейсхолдеры)
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
protected function getMessage($sMsgDefault,$sMsgFieldCustom=null,$aReplace=array()) {
|
||||||
|
if (!is_null($sMsgFieldCustom)) {
|
||||||
|
if (!is_null($this->$sMsgFieldCustom)) {
|
||||||
|
$sMsgDefault=$this->$sMsgFieldCustom;
|
||||||
|
} else {
|
||||||
|
$sMsgFieldCustomId=$sMsgFieldCustom.'Id';
|
||||||
|
if (property_exists($this,$sMsgFieldCustomId) and !is_null($this->$sMsgFieldCustomId)) {
|
||||||
|
$sMsgDefault=$this->Lang_Get($this->$sMsgFieldCustomId,array(),false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($aReplace as $sFrom => $sTo) {
|
||||||
|
$aReplacePairs["%%{$sFrom}%%"]=$sTo;
|
||||||
|
}
|
||||||
|
return strtr($sMsgDefault,$aReplacePairs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Запускает валидацию полей сущности
|
||||||
|
*
|
||||||
|
* @param $oEntity Объект сущности
|
||||||
|
* @param null $aFields Список полей для валидации, если пуст то валидируются все поля указанные в правиле
|
||||||
|
*/
|
||||||
|
public function validateEntity($oEntity,$aFields=null) {
|
||||||
|
if(is_array($aFields)) {
|
||||||
|
$aFields=array_intersect($this->fields,$aFields);
|
||||||
|
} else {
|
||||||
|
$aFields=$this->fields;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Запускаем валидацию для каждого поля
|
||||||
|
*/
|
||||||
|
foreach($aFields as $sField) {
|
||||||
|
if(!$this->bSkipOnError || !$oEntity->_hasValidateErrors($sField)) {
|
||||||
|
$this->validateEntityField($oEntity,$sField);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Запускает валидацию конкретного поля сущности
|
||||||
|
*
|
||||||
|
* @param $oEntity Объект сущности
|
||||||
|
* @param $sField Поле сущности
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function validateEntityField($oEntity,$sField) {
|
||||||
|
/**
|
||||||
|
* Получаем значение поля у сущности через геттер
|
||||||
|
*/
|
||||||
|
$sValue=call_user_func_array(array($oEntity,'get'.func_camelize($sField)),array());
|
||||||
|
|
||||||
|
if (($sMsg=$this->validate($sValue))!==true) {
|
||||||
|
/**
|
||||||
|
* Подставляем имя поля в сообщение об ошибке валидации
|
||||||
|
*/
|
||||||
|
$sMsg=str_replace('%%field%%',is_null($this->label) ? $sField : $this->label,$sMsg);
|
||||||
|
$oEntity->_addValidateError($sField,$sMsg);
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,53 @@
|
||||||
|
<?php
|
||||||
|
/*-------------------------------------------------------
|
||||||
|
*
|
||||||
|
* LiveStreet Engine Social Networking
|
||||||
|
* Copyright © 2008 Mzhelskiy Maxim
|
||||||
|
*
|
||||||
|
*--------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Official site: www.livestreet.ru
|
||||||
|
* Contact e-mail: rus.engine@gmail.com
|
||||||
|
*
|
||||||
|
* GNU General Public License, version 2:
|
||||||
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
*
|
||||||
|
---------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Валидатор для кастомных методов объектов
|
||||||
|
*/
|
||||||
|
class ModuleValidate_EntityValidatorInline extends ModuleValidate_EntityValidator {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Метод объекта для валидации, в него передаются параметры: $sValue и $aParam
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $method;
|
||||||
|
/**
|
||||||
|
* Объект у которого будет вызван метод валидации, дляя сущности - это сам объект сущности
|
||||||
|
*
|
||||||
|
* @var object
|
||||||
|
*/
|
||||||
|
public $object;
|
||||||
|
/**
|
||||||
|
* Список параметров для передачи в метод валидации
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $params;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Запуск валидации
|
||||||
|
*
|
||||||
|
* @param $sValue Данные для валидации
|
||||||
|
* @return bool|string
|
||||||
|
*/
|
||||||
|
public function validate($sValue) {
|
||||||
|
$sMethod=$this->method;
|
||||||
|
return $this->object->$sMethod($sValue,$this->params);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,88 @@
|
||||||
|
<?php
|
||||||
|
/*-------------------------------------------------------
|
||||||
|
*
|
||||||
|
* LiveStreet Engine Social Networking
|
||||||
|
* Copyright © 2008 Mzhelskiy Maxim
|
||||||
|
*
|
||||||
|
*--------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Official site: www.livestreet.ru
|
||||||
|
* Contact e-mail: rus.engine@gmail.com
|
||||||
|
*
|
||||||
|
* GNU General Public License, version 2:
|
||||||
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
*
|
||||||
|
---------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Валидатор текстовых данных на длину
|
||||||
|
*/
|
||||||
|
class ModuleValidate_EntityValidatorString extends ModuleValidate_EntityValidator {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Максимальня длина строки
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $max;
|
||||||
|
/**
|
||||||
|
* Минимальная длина строки
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $min;
|
||||||
|
/**
|
||||||
|
* Конкретное значение длины строки
|
||||||
|
*
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
public $is;
|
||||||
|
/**
|
||||||
|
* Кастомное сообщение об ошибке при короткой строке
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $msgTooShort;
|
||||||
|
/**
|
||||||
|
* Кастомное сообщение об ошибке при слишком длинной строке
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $msgTooLong;
|
||||||
|
/**
|
||||||
|
* Допускать или нет пустое значение
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
public $allowEmpty=true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Запуск валидации
|
||||||
|
*
|
||||||
|
* @param $sValue Данные для валидации
|
||||||
|
*
|
||||||
|
* @return bool|string
|
||||||
|
*/
|
||||||
|
public function validate($sValue) {
|
||||||
|
if($this->allowEmpty && $this->isEmpty($sValue)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$iLength=mb_strlen($sValue, 'UTF-8');
|
||||||
|
|
||||||
|
if($this->min!==null && $iLength<$this->min) {
|
||||||
|
return $this->getMessage($this->Lang_Get('validate_string_too_short',null,false),'msgTooShort',array('min'=>$this->min));
|
||||||
|
}
|
||||||
|
if($this->max!==null && $iLength>$this->max) {
|
||||||
|
return $this->getMessage($this->Lang_Get('validate_string_too_long',null,false),'msgTooLong',array('max'=>$this->max));
|
||||||
|
}
|
||||||
|
if($this->is!==null && $iLength!==$this->is) {
|
||||||
|
return $this->getMessage($this->Lang_Get('validate_string_no_lenght',null,false),'msg',array('length'=>$this->is));
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -869,6 +869,15 @@ return array(
|
||||||
'plugins_activation_requires_error' => 'Plugin requires activated <b>%%plugin%%</b> plugin',
|
'plugins_activation_requires_error' => 'Plugin requires activated <b>%%plugin%%</b> plugin',
|
||||||
'plugins_submit_delete' => 'Delete plugins',
|
'plugins_submit_delete' => 'Delete plugins',
|
||||||
'plugins_delete_confirm' => 'Do you really want to delete those plugins?',
|
'plugins_delete_confirm' => 'Do you really want to delete those plugins?',
|
||||||
|
/**
|
||||||
|
* Validation
|
||||||
|
*/
|
||||||
|
'validate_string_too_long' => 'Field %%field%% is too long (maximum is %%max%% characters).',
|
||||||
|
'validate_string_too_short' => 'Field %%field%% is too short (minimum is %%min%% characters)',
|
||||||
|
'validate_string_no_lenght' => 'Field %%field%% is of the wrong length (should be %%length%% characters)',
|
||||||
|
/**
|
||||||
|
* System
|
||||||
|
*/
|
||||||
'system_error_event_args' => 'Wrong number of arguments during event addition',
|
'system_error_event_args' => 'Wrong number of arguments during event addition',
|
||||||
'system_error_event_method' => 'Added event method not found',
|
'system_error_event_method' => 'Added event method not found',
|
||||||
'system_error_404' => 'Unfortunately there is no such page. Probably deleted or wasn\'t there in the first place.',
|
'system_error_404' => 'Unfortunately there is no such page. Probably deleted or wasn\'t there in the first place.',
|
||||||
|
|
|
@ -869,6 +869,15 @@ return array(
|
||||||
'plugins_activation_requires_error' => 'Для работы плагина необходим активированный плагин <b>%%plugin%%</b>',
|
'plugins_activation_requires_error' => 'Для работы плагина необходим активированный плагин <b>%%plugin%%</b>',
|
||||||
'plugins_submit_delete' => 'Удалить плагины',
|
'plugins_submit_delete' => 'Удалить плагины',
|
||||||
'plugins_delete_confirm' => 'Вы уверены, что желаете удалить указанные плагины?',
|
'plugins_delete_confirm' => 'Вы уверены, что желаете удалить указанные плагины?',
|
||||||
|
/**
|
||||||
|
* Валидация данных
|
||||||
|
*/
|
||||||
|
'validate_string_too_long' => 'Поле %%field%% слишком длинное (максимально допустимо %%max%% символов)',
|
||||||
|
'validate_string_too_short' => 'Поле %%field%% слишком короткое (минимально допустимо %%min%% символов)',
|
||||||
|
'validate_string_no_lenght' => 'Поле %%field%% неверной длины (необходимо %%length%% символов)',
|
||||||
|
/**
|
||||||
|
* Системные сообщения
|
||||||
|
*/
|
||||||
'system_error_event_args' => 'Некорректное число аргументов при добавлении евента',
|
'system_error_event_args' => 'Некорректное число аргументов при добавлении евента',
|
||||||
'system_error_event_method' => 'Добавляемый метод евента не найден',
|
'system_error_event_method' => 'Добавляемый метод евента не найден',
|
||||||
'system_error_404' => 'К сожалению, такой страницы не существует. Вероятно, она была удалена с сервера, либо ее здесь никогда не было.',
|
'system_error_404' => 'К сожалению, такой страницы не существует. Вероятно, она была удалена с сервера, либо ее здесь никогда не было.',
|
||||||
|
|
Loading…
Reference in a new issue