mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-16 23:00:51 +03:00
Автоматическое создание дополнительных полей, например, при активации плагина
This commit is contained in:
parent
e8b8d2ad5f
commit
3c892471fe
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue