Example #1
0
 /**
  * @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;
 }