Example #1
0
 /**
  * Возращает список разделов приведенный к стандартному виду (содержит URL и пр.)
  * @return array
  */
 public function get()
 {
     static $file_fields;
     // Не были указаны условия выборки (Прямой вызов $nav->get())
     if (!$this->result_mode) {
         $this->reset();
         return array();
     }
     // Получаем список полей типа "Файл"
     if ($file_fields === null) {
         $file_fields = array();
         // Список полей для таблицы Subdivision. (запрос к БД кэшируется внутри метода)
         $subdivision_fields = $this->nc_core->get_system_table_fields('Subdivision');
         foreach ($subdivision_fields as $field) {
             if ($field['type'] == NC_FIELDTYPE_FILE) {
                 $file_fields[$field['id']] = $field['name'];
             }
         }
     }
     if (!$this->result_data) {
         // Получаем список разделов
         $this->set_query_params();
         $data = $this->table->index_by_id()->get_result();
     } else {
         $data = $this->result_data;
     }
     $subdivision_ids = array_keys($data);
     $result = array();
     // idebug($this->table->get_last_query());
     // $nc_core->file_info->get_all_object_file_variables(3, 83);
     // Получаем список файлов пренадлежащих полученным разделам
     $files = array();
     if ($subdivision_ids && $file_fields) {
         /** @todo use nc_file_info class */
         $files_result = $this->file_table->where_in('Message_ID', $subdivision_ids)->get_result();
         foreach ($files_result as $row) {
             $files[$row['Message_ID']][$row['Field_ID']] = $row;
         }
     }
     $sub_folder = $this->nc_core->SUB_FOLDER;
     $file_base_url = $sub_folder . $this->nc_core->HTTP_FILES_PATH;
     // Постобработка данных
     foreach ($data as $sub_id => $row) {
         // Обработка файловых полей
         foreach ($file_fields as $field_id => $field_name) {
             if (!empty($row[$field_name])) {
                 $f = explode(':', $row[$field_name]);
                 $row[$field_name . '_name'] = $filename = $f[0];
                 $row[$field_name . '_size'] = $f[1];
                 $row[$field_name . '_type'] = $f[2];
                 // Proteced FileSystem
                 if ($file_data = $files[$sub_id][$field_id]) {
                     $url = $file_base_url . ltrim($file_data['File_Path'], '/');
                     $row[$field_name] = $url . 'h_' . $file_data['Virt_Name'];
                     $row[$field_name . '_url'] = $url . $file_data['Virt_Name'];
                     // Original FileSystem
                 } elseif (!empty($f[3])) {
                     $row[$field_name] = $row[$field_name . '_url'] = $file_base_url . $file_data[3];
                     // Simple FileSysytem
                 } else {
                     $ext = substr($filename, strrpos($filename, '.'));
                     $row[$field_name] = $row[$field_name . '_url'] = $file_base_url . $field_id . '_' . $sub_id . $ext;
                 }
             }
         }
         // Определяем активный ли элемент
         $external_url = $row['ExternalURL'];
         $hidden_url = $sub_folder . $row['Hidden_URL'];
         $is_active = false;
         foreach ($this->sub_parents as $parent) {
             if ($parent['Subdivision_ID'] == $row['Subdivision_ID']) {
                 $is_active = true;
                 break;
             }
         }
         if (!$is_active) {
             $is_active = in_array($this->current_page_url, array($hidden_url, $external_url)) || $this->current_sub_url == $external_url;
         }
         $row['active'] = (bool) $is_active;
         $row['current'] = $row['Subdivision_ID'] == $this->subdivision_id;
         $row['url'] = $this->make_subdivision_url($row);
         foreach ($this->field_aliases as $alias => $origin) {
             $row[$alias] = $row[$origin];
         }
         $row['id'] += 0;
         // to int for json
         if ($this->result_type == 'object') {
             $row = (object) $row;
         }
         $result[] = $row;
     }
     $this->reset();
     return $result;
 }