/** * @param Entity $entity * @param array $properties * @param \Closure $file_save_callback Функция для обработки подключенных к объекту файлов * @return array */ protected function export($entity, $properties = [], $file_save_callback = null) { // Новые сведения об объекте $result = []; $result['proto'] = $entity->proto(); if ($entity->author()) { $result['author'] = $entity->author(); } if ($entity->order() < Entity::MAX_ORDER) { $result['order'] = $entity->order(); } if ($entity->created() > 0) { $result['created'] = $entity->created(); } if ($entity->updated() > 0) { $result['updated'] = $entity->updated(); } // value if (!$entity->is_default_value()) { $result['value'] = $entity->value(); } // file if (!$entity->is_default_file()) { if ($entity->is_file()) { $file_attache = $entity->file(); if (is_array($file_attache)) { // Загрузка файла if ($file_save_callback instanceof \Closure) { if (!($result['file'] = $file_save_callback($entity, $file_attache))) { unset($result['file']); } } } else { $result['file'] = basename($file_attache); } } else { // файла нет, но нужно отменить наследование файла $result['file'] = null; } } if (!$entity->is_default_logic()) { $result['logic'] = true; } if ($entity->is_draft()) { $result['is_draft'] = true; } if ($entity->is_hidden()) { $result['is_hidden'] = true; } if ($entity->is_mandatory()) { $result['is_mandatory'] = true; } // if ($entity->is_property()) $result['is_property'] = $entity->is_property(); if ($entity->is_relative()) { $result['is_relative'] = true; } if ($entity->is_link()) { $result['is_link'] = true; } if (is_array($properties)) { $result['properties'] = $properties; } /** @var Entity $child */ foreach ($entity->children() as $name => $child) { if ($child->is_property()) { $result['properties'][$name] = $this->export($child, isset($properties[$name]['properties']) ? $properties[$name]['properties'] : [], $file_save_callback); } } if (empty($result['properties'])) { unset($result['properties']); } return $result; }