* */ /** * Поведение для подключения функционала дополнительных полей к сущностям * * @package application.modules.property * @since 2.0 */ class ModuleProperty_BehaviorEntity extends Behavior { /** * Дефолтные параметры * * @var array */ protected $aParams = array( 'target_type' => '', ); /** * Список хуков * * @var array */ protected $aHooks = array( 'validate_after' => 'CallbackValidateAfter', 'after_save' => 'CallbackAfterSave', 'after_delete' => 'CallbackAfterDelete', ); /** * Коллбэк * Выполняется при инициализации сущности * * @param $aParams */ public function CallbackValidateAfter($aParams) { if ($aParams['bResult']) { $aFields = $aParams['aFields']; if (is_null($aFields) or in_array('properties', $aFields)) { $oValidator = $this->Validate_CreateValidator('properties_check', $this, 'properties'); $oValidator->validateEntity($this->oObject, $aFields); $aParams['bResult'] = !$this->oObject->_hasValidateErrors(); } } } /** * Коллбэк * Выполняется после сохранения сущности */ public function CallbackAfterSave() { $this->Property_UpdatePropertiesValue($this->oObject->getPropertiesObject(), $this->oObject); } /** * Коллбэк * Выполняется после удаления сущности */ public function CallbackAfterDelete() { $this->Property_RemovePropertiesValue($this->oObject); } /** * Дополнительный метод для сущности * Запускает валидацию дополнительных полей * * @return mixed */ public function ValidatePropertiesCheck() { return $this->Property_ValidateEntityPropertiesCheck($this->oObject); } /** * Возвращает полный список свойств сущности * * @return mixed */ public function getPropertyList() { return $this->Property_GetEntityPropertyList($this->oObject); } /** * Возвращает значение конкретного свойства * @see ModuleProperty_EntityValue::getValueForDisplay * * @param int|string $sPropertyId ID или код свойства * * @return mixed */ public function getPropertyValue($sPropertyId) { return $this->Property_GetEntityPropertyValue($this->oObject, $sPropertyId); } /** * Возвращает объект конкретного свойства сущности * * @param int|string $sPropertyId ID или код свойства * * @return ModuleProperty_EntityProperty|null */ public function getProperty($sPropertyId) { return $this->Property_GetEntityProperty($this->oObject, $sPropertyId); } /** * Возвращает тип объекта для дополнительных полей * * @return string */ public function getPropertyTargetType() { if ($sType = $this->getParam('target_type')) { return $sType; } /** * Иначе дополнительно смотрим на наличие данного метода у сущности * Это необходимо, если тип вычисляется динамически по какой-то своей логике */ if (func_method_exists($this->oObject, 'getPropertyTargetType', 'public')) { return call_user_func(array($this->oObject, 'getPropertyTargetType')); } } }