/** * Возращает список разделов приведенный к стандартному виду (содержит 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; }