/** * Извлечение данных переданных для обработки связанными моделями * @param Entity\Event $event * @return Entity\EventResult */ protected static function ejectReferencesData(Entity\Event $event) { $result = new Entity\EventResult(); $entityData = $event->getParameter('fields'); // Извлечение связей для которых переданы данные для последующей обработки static::$referencesToSave = []; foreach (static::getMap() as $fieldName => $fieldData) { if (is_array($fieldData) && isset($fieldData['reference'])) { // Если для связи переданы данные, извлекаем их и удаляем из сущности, так как битриксу они не нужны // Массив переданный связи должен содержать массивы с данными для обработки // Обрабатываются только связи для которых переданы данные (пустой массив тоже считается) if (isset($entityData[$fieldName])) { if (!is_array(reset($entityData[$fieldName]))) { $entityData[$fieldName] = [$entityData[$fieldName]]; } $result->unsetField($fieldName); static::$referencesToSave[$fieldName] = ['data' => $entityData[$fieldName], 'reference' => $fieldData]; } } } return $result; }
/** * Default onBeforeUpdate handler. Absolutely necessary. * * @param Main\Entity\Event $event Event object. * @return Main\Entity\EventResult */ public static function onBeforeUpdate(Main\Entity\Event $event) { $result = new Main\Entity\EventResult(); $data = $event->getParameter('fields'); $modifyFieldList = array(); self::setUserID($modifyFieldList, $data, array('MODIFIED_BY')); self::setTimestamp($modifyFieldList, $data, array('TIMESTAMP_X')); self::copyOldFields($modifyFieldList, $data); $result->unsetField('CONDITIONS'); $result->unsetField('ACTIONS'); if (!empty($modifyFieldList)) { $result->modifyFields($modifyFieldList); } unset($modifyFieldList); return $result; }