1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-06-16 23:00:51 +03:00

Автоматическое создание дополнительных полей, например, при активации плагина

This commit is contained in:
Mzhelskiy Maxim 2014-01-24 13:41:48 +07:00
parent e8b8d2ad5f
commit 3c892471fe
2 changed files with 57 additions and 10 deletions

View file

@ -669,7 +669,6 @@ class ModuleProperty extends ModuleORM {
$oTarget->Save();
}
}
/**
* Возвращает набор полей/свойств для показа их на форме редактирования
*
@ -692,4 +691,42 @@ class ModuleProperty extends ModuleORM {
$this->Property_AttachValueForProperties($aProperties,$sTargetType,$iTargetId);
return $aProperties;
}
/**
* Автоматическое создание дополнительного поля
* TODO: учитывать $aAdditional для создание вариантов в типе select
*
* @param string $sTargetType Тип объекта дял которого добавляем поле
* @param array $aData Данные поля: array('type'=>'int','title'=>'Название','code'=>'newfield','description'=>'Описание поля','sort'=>100);
* @param bool $bSkipErrorUniqueCode Пропускать ошибку при дублировании кода поля (такое поле уже существует)
* @param array $aValidateRules Данные валидатора поля, зависят от конкретного типа поля: array('allowEmpty'=>true,'max'=>1000)
* @param array $aParams Дополнительные параметры поля, зависят от типа поля
* @param array $aAdditional Дополнительные данные, которые нужно учитывать при создании поля, зависят от типа поля
*
* @return bool|ModuleProperty_EntityProperty
*/
public function CreateTargetProperty($sTargetType,$aData,$bSkipErrorUniqueCode=true,$aValidateRules=array(),$aParams=array(),$aAdditional=array()) {
/**
* Если необходимо и поле уже существует, то пропускаем создание
*/
if ($bSkipErrorUniqueCode and isset($aData['code']) and $this->GetPropertyByTargetTypeAndCode($sTargetType,$aData['code'])) {
return true;
}
$oProperty=Engine::GetEntity('ModuleProperty_EntityProperty');
$oProperty->_setValidateScenario('auto');
$oProperty->_setDataSafe($aData);
$oProperty->setValidateRulesRaw($aValidateRules);
$oProperty->setParamsRaw($aParams);
$oProperty->setTargetType($sTargetType);
if ($oProperty->_Validate()) {
if ($oProperty->Add()) {
return $oProperty;
} else {
return 'Возникла ошибка при добавлении поля';
}
} else {
return $oProperty->_getValidateError();
}
return false;
}
}

View file

@ -22,15 +22,16 @@
class ModuleProperty_EntityProperty extends EntityORM {
protected $aValidateRules=array(
array('type','check_type','on'=>array('create')),
array('code','regexp','allowEmpty'=>false,'pattern'=>'#^[a-z0-9\_]+$#i','on'=>array('create','update')),
array('title','string','allowEmpty'=>false,'min'=>1,'max'=>250,'on'=>array('create','update')),
array('description','string','allowEmpty'=>true,'max'=>500,'on'=>array('update')),
array('sort','number','allowEmpty'=>false,'integerOnly'=>true,'min'=>0,'on'=>array('update')),
array('validate_rules_raw','check_validate_rules_raw','on'=>array('create','update')),
array('params_raw','check_params_raw','on'=>array('update')),
array('title','check_title','on'=>array('create','update')),
array('description','check_description','on'=>array('update')),
array('type','check_type','on'=>array('create','auto')),
array('code','regexp','allowEmpty'=>false,'pattern'=>'#^[a-z0-9\_]+$#i','on'=>array('create','update','auto')),
array('title','string','allowEmpty'=>false,'min'=>1,'max'=>250,'on'=>array('create','update','auto')),
array('description','string','allowEmpty'=>true,'max'=>500,'on'=>array('update','auto')),
array('sort','number','allowEmpty'=>false,'integerOnly'=>true,'min'=>0,'on'=>array('auto')),
array('validate_rules_raw','check_validate_rules_raw','on'=>array('create','update','auto')),
array('params_raw','check_params_raw','on'=>array('update','auto')),
array('code','check_code','on'=>array('create','update','auto')),
array('title','check_title','on'=>array('create','update','auto')),
array('description','check_description','on'=>array('update','auto')),
);
protected $aRelations=array(
@ -44,6 +45,15 @@ class ModuleProperty_EntityProperty extends EntityORM {
return 'Неверный тип поля';
}
public function ValidateCheckCode() {
if ($oProperty=$this->Property_GetPropertyByTargetTypeAndCode($this->getTargetType(),$this->getCode())) {
if ($this->getId()!=$oProperty->getId()) {
return 'Код поля должен быть уникальным';
}
}
return true;
}
public function ValidateCheckTitle() {
$this->setTitle(htmlspecialchars($this->getTitle()));
return true;