/** * 'собственно функция для получения нужной информации' * @access private */ function fetch_by_query($qry) { global $db; $this->subclasses = $db->get_results($qry, ARRAY_A); if ($this->subclasses[0]) { $this->catalogue_id = $this->subclasses[0]['Catalogue_ID']; $this->subdivision_id = $this->subclasses[0]['Subdivision_ID']; $this->subdivision_name = $this->subclasses[0]['Subdivision_Name']; $this->subdivision_checked = $this->subclasses[0]['Checked']; $this->label_color = $this->subclasses[0]['LabelColor']; if (nc_module_check_by_keyword('routing')) { $this->subdivision_url = nc_routing::get_folder_path($this->subclasses[0]['Subdivision_ID']); } else { $this->subdivision_url = nc_core('SUB_FOLDER') . $this->subclasses[0]['Hidden_URL']; } $this->check_rights(); } }
/** * Получить путь до раздела поиска на сайте с указанным идентификатором. * @global nc_db $db * @throws Exception @see nc_catalogue::get_by_id() * @param integer $site_id * @param boolean $with_host * @return string */ public function get_search_url($site_id, $with_host = true) { if ($with_host && isset($this->paths[$site_id])) { return $this->paths[$site_id]; } global $db, $nc_core; $folder_data = $db->get_row("SELECT sub.`Hidden_URL` AS `path`, sub.`Subdivision_ID` AS `id`\n FROM `Subdivision` AS `sub`, `Sub_Class` AS `c`\n WHERE c.`Class_ID` = " . (int) nc_search::get_setting("ComponentID") . "\n AND c.`Subdivision_ID` = sub.`Subdivision_ID`\n AND sub.`Catalogue_ID` = " . (int) $site_id . "\n LIMIT 1", ARRAY_A); if ($folder_data) { if (nc_module_check_by_keyword('routing')) { $path = nc_routing::get_folder_path($folder_data['id']); } else { $path = $nc_core->SUB_FOLDER . $folder_data['path']; } if ($with_host) { $host = $nc_core->catalogue->get_by_id($site_id, 'Domain'); if ($host) { $path = "http://{$host}{$path}"; } } $this->paths[$site_id] = $path; } else { $this->paths[$site_id] = false; } return $this->paths[$site_id]; }
function nc_quickbar_in_template_header($buffer, $File_Mode = false, $return_shortpage_update_array = false) { global $MODULE_VARS, $AUTH_USER_ID, $ADMIN_TEMPLATE, $HTTP_ROOT_PATH, $ADMIN_PATH, $perm; global $SUB_FOLDER, $REQUEST_URI, $REQUEST_METHOD, $ADMIN_AUTHTIME; global $current_catalogue, $current_sub, $current_cc, $current_user, $AUTHORIZE_BY; global $inside_admin, $admin_mode, $user_table_mode, $action, $message, $classID; /** @var int $message */ $nc_core = nc_Core::get_object(); if ($inside_admin || !nc_quickbar_permission()) { return $return_shortpage_update_array ? null : $buffer; } if (!$return_shortpage_update_array) { // reversive direction! $buffer = nc_insert_in_head($buffer, nc_js(), $nc_core->get_variable("admin_mode")); } if ($nc_core->modules->get_by_keyword('auth')) { $profile_url = nc_auth_profile_url($AUTH_USER_ID); } if (nc_module_check_by_keyword('routing')) { if ($message) { $view_link = nc_routing::get_object_path($classID, $message, 'full'); } else { $view_link = (string) nc_routing::get_folder_path($current_sub['Subdivision_ID']); if (!$view_link) { if ($current_cc) { $view_link = nc_routing::get_infoblock_path($current_cc['Sub_Class_ID'], $current_cc['DefaultAction']); } else { $view_link = '#'; } } } } else { $view_link = $SUB_FOLDER . ($current_sub['Hidden_URL'] != "/index/" ? $current_sub['Hidden_URL'] : "/") . ($message && $current_cc['EnglishName'] ? $current_cc['EnglishName'] . "_" . $message . ".html" : ""); } if (!$user_table_mode) { $edit_link = $SUB_FOLDER . $HTTP_ROOT_PATH . ($action == "change" ? "message" : $action) . ".php?catalogue=" . $current_catalogue['Catalogue_ID'] . ($current_sub['Subdivision_ID'] ? "&sub=" . $current_sub['Subdivision_ID'] : "") . ($current_cc['Sub_Class_ID'] ? "&cc=" . $current_cc['Sub_Class_ID'] : "") . ($message ? "&message=" . $message : ""); } else { $edit_link = $SUB_FOLDER . $HTTP_ROOT_PATH . "?catalogue=" . $current_catalogue['Catalogue_ID'] . ($current_sub['Subdivision_ID'] ? "&sub=" . $current_sub['Subdivision_ID'] : "") . ($current_cc['Sub_Class_ID'] ? "&cc=" . $current_cc['Sub_Class_ID'] : "") . ($message ? "&message=" . $message : ""); } $admin_link = ""; switch (true) { case $current_cc['System_Table_ID'] == 3 && $message: $admin_link = "#user.edit(" . $message . ")"; break; case $current_cc['Sub_Class_ID'] && $message: $admin_link = "#object.view(" . $current_cc['Sub_Class_ID'] . "," . $message . ")"; break; case $current_cc['Sub_Class_ID']: $admin_link = "#object.list(" . $current_cc['Sub_Class_ID'] . ")"; break; case $current_sub['Subdivision_ID']: $admin_link = "#subclass.list(" . $current_sub['Subdivision_ID'] . ")"; break; case $current_catalogue['Catalogue_ID']: $admin_link = "#site.map(" . $current_catalogue['Catalogue_ID'] . ")"; } $admin_link = $ADMIN_PATH . $admin_link; $sub_admin_limk = $ADMIN_PATH . "subdivision/index.php?phase=5&SubdivisionID={$current_sub['Subdivision_ID']}&view=all"; $template_admin_limk = $ADMIN_PATH . 'template/index.php?phase=4&TemplateID=' . $nc_core->template->get_current('Template_ID'); $sub_class_admin_link = $ADMIN_PATH . "subdivision/SubClass.php?SubdivisionID=" . $current_sub['Subdivision_ID']; $msg_img = $ADMIN_PATH . 'skins/default/img/msg.png'; $pass_admin_link = $ADMIN_PATH . 'user/index.php'; $lock_img = $ADMIN_PATH . 'skins/default/img/lock.png'; $right_img = $ADMIN_PATH . 'skins/default/img/right.png'; if ($return_shortpage_update_array) { return array('view_link' => $view_link, 'edit_link' => $edit_link, 'sub_admin_link' => $sub_admin_limk, 'template_admin_link' => $template_admin_limk, 'admin_link' => $admin_link); } $ANY_SYSTEM_MESSAGE = $nc_core->db->get_var("SELECT COUNT(*) FROM `SystemMessage` WHERE `Checked` = 0"); $lang = $nc_core->lang->detect_lang(1); if ($lang == 'ru') { $lang = $nc_core->NC_UNICODE ? "ru_utf8" : "ru_cp1251"; } if ($nc_core->modules->get_by_keyword('cache')) { $cache_link = $ADMIN_PATH . "#module.cache"; } $PermissionGroup_Name = $nc_core->db->get_col("SELECT PermissionGroup_Name FROM PermissionGroup WHERE PermissionGroup_ID IN (" . join(', ', (array) $current_user['Permission_Group']) . ")"); /*<script type='text/javascript' src='" . $SUB_FOLDER . $ADMIN_PATH . "js/sitemap.js'></script> <script type='text/javascript' src='" . $SUB_FOLDER . $ADMIN_PATH . "js/remind_save.js'></script>*/ //-------------------------------------------------------------------------- // Генерация панели инструментов (navbar) для front-end //-------------------------------------------------------------------------- $navbar = $nc_core->ui->navbar(); $lsDisplayType = $nc_core->get_display_type(); //-------------------------------------------------------------------------- // Просмотр $navbar->quickmenu->add_btn($SUB_FOLDER . $view_link, NETCAT_QUICKBAR_BUTTON_VIEWMODE)->active(!$admin_mode); if ($lsDisplayType != 'longpage_vertical') { // Редактирование $navbar->quickmenu->add_btn($edit_link, NETCAT_QUICKBAR_BUTTON_EDITMODE)->active($admin_mode); //-------------------------------------------------------------------------- // Пункт меню "Ещё" $navbar->more = $navbar->menu->add_btn('#', NETCAT_QUICKBAR_BUTTON_MORE)->submenu(); // echo $SubdivisionID;exit; if (!empty($current_sub['Subdivision_ID']) && $perm->isAccess(NC_PERM_ITEM_SUB, NC_PERM_ACTION_EDIT, $current_sub['Subdivision_ID'], 0)) { $navbar->more->add_btn($sub_admin_limk, NETCAT_QUICKBAR_BUTTON_SUBDIVISION_SETTINGS)->icon('settings')->click('nc_form(this.href); return false'); } if ($perm->isAccess(NC_PERM_TEMPLATE, 0, 0, 0)) { $navbar->more->add_btn($template_admin_limk, NETCAT_QUICKBAR_BUTTON_TEMPLATE_SETTINGS)->icon('dev-templates')->click('nc_form(this.href); return false'); } $navbar->more->add_btn($admin_link, NETCAT_QUICKBAR_BUTTON_ADMIN)->icon('mod-default'); //-------------------------------------------------------------------------- } else { $navbar->quickmenu->add_btn('#', NETCAT_QUICKBAR_BUTTON_EDITMODE)->disabled()->title(NETCAT_QUICKBAR_BUTTON_EDITMODE_UNAVAILABLE_FOR_LONGPAGE)->click('return false')->modificator('default-cursor'); } // AJAX Loader $navbar->tray->add_btn('#')->compact()->icon_large('navbar-loader')->id('nc-navbar-loader')->style('display:none'); // Иконка с сообщениями if ($perm->isAccess(NC_PERM_REPORT)) { $navbar->tray->add_btn($ADMIN_PATH . '#tools.systemmessages')->compact()->title($ANY_SYSTEM_MESSAGE ? BEGINHTML_ALARMON : BEGINHTML_ALARMOFF, true)->icon_large('system-message')->id('trayMessagesIcon')->disabled(!$ANY_SYSTEM_MESSAGE); } // Меню пользователя $logout_link = $MODULE_VARS['auth'] ? $SUB_FOLDER . $HTTP_ROOT_PATH . "modules/auth/?logoff=1&REQUESTED_FROM=" . $REQUEST_URI . "&REQUESTED_BY=" . $REQUEST_METHOD : $ADMIN_PATH . "unauth.php"; $navbar->tray->add_btn('#', $perm->getLogin())->click('return false')->title(BEGINHTML_USER . ': ' . $perm->getLogin())->htext(BEGINHTML_USER)->dropdown()->div(NETCAT_ADMIN_AUTH_PERM . " <span class='nc-text-grey'>" . str_replace('"', '\\"', join(', ', Permission::get_all_permission_names_by_id($AUTH_USER_ID))) . "</span><hr class='nc-hr'>" . $nc_core->ui->btn('#', NETCAT_ADMIN_AUTH_CHANGE_PASS)->click('nc_password_change(); return false')->light()->text_darken()->left() . $nc_core->ui->btn($logout_link, NETCAT_ADMIN_AUTH_LOGOUT)->red()->right())->class_name('nc-padding-10'); //-------------------------------------------------------------------------- // $navbar $navbar_html = (string) $navbar->fixed(); $navbar_html .= "\n<script type='text/javascript'>\n\nvar padding = Math.round(parseInt(jQuery('body').css('padding-top')) + parseInt(jQuery('body').css('margin-top')) + jQuery('div.nc-navbar').height());\njQuery('body').css({marginTop:padding+'px', position:'relative'});\n\njQuery('div.nc-navbar li.nc--dropdown > a').click(function(){\n jQuery(this.parentNode).addClass('nc--clicked');\n return false;\n}).parent().mouseleave(function(){\n var ob = this\n jQuery._navbar_menu_timeout = setTimeout(function(){\n jQuery(ob).removeClass('nc--clicked');\n }, 500);\n}).mouseover(function(){\n if (jQuery(this).hasClass('nc--clicked')) {\n try {clearTimeout(jQuery._navbar_menu_timeout)} catch(e) {};\n }\n}).find('li a').click(function(){\n jQuery('div.nc-navbar li.nc--dropdown').removeClass('nc--clicked');\n jQuery('div.nc-navbar li.nc--clicked').removeClass('nc--clicked');\n});\njQuery('body').click(function(){\n jQuery('div.nc-navbar>ul>li.nc--clicked').removeClass('nc--clicked')\n})\n</script>"; // Содержание модального окна быстрого изменения пароля //TODO: Сделать загрузку содержимого окна через ajax $navbar_html .= "\n<div id='nc_password_change' class='nc-shadow-large nc--hide nc-admin'>\n <form style='width:350px; line-height:20px' class='nc-form' method='post' action='" . $ADMIN_PATH . "user/index.php'>\n <div class='nc-padding-15'>\n <h2 class='nc-h2'>" . NETCAT_ADMIN_AUTH_CHANGE_PASS . "</h2>\n <hr class='nc-hr' style='margin:5px -15px 15px'>\n <div>\n <label>" . CONTROL_USER_NEWPASSWORD . "</label><br>\n <input class='nc--wide' type='password' name='Password1' maxlength='32' placeholder='" . CONTROL_USER_NEWPASSWORD . "' />\n </div>\n <div>\n <label>" . CONTROL_USER_NEWPASSWORDAGAIN . "</label><br>\n <input class='nc--wide' type='password' name='Password2' maxlength='32' placeholder='" . CONTROL_USER_NEWPASSWORDAGAIN . "' />\n </div>\n <input type='hidden' name='UserID' value='" . $AUTH_USER_ID . "' />\n <input type='hidden' name='phase' value='7' />\n " . $nc_core->token->get_input() . "\n </div>\n </form>\n <div class='nc-form-actions'>\n <script type='text/javascript'>function nc_password_change_submit(){jQuery('#nc_password_change form').submit();}</script>\n <button class='nc-btn nc--bordered nc--red nc--right' onclick='jQuery.modal.close()' type='button'>" . CONTROL_BUTTON_CANCEL . "</button>\n <button class='nc_admin_metro_button nc-btn nc--blue nc--right' onclick='nc_password_change_submit()'>" . NETCAT_REMIND_SAVE_SAVE . "</button>\n </div>\n</div>\n<!-- /#nc_password_change -->"; $addon = "<!-- Netcat QuickBar -->\n" . "<script type='text/javascript' src='" . $ADMIN_PATH . "js/classes/nc_cookies.class.js'></script>\n" . "<script type='text/javascript' src='" . $ADMIN_PATH . "js/classes/nc_drag.class.js'></script>\n" . "<script type='text/javascript' src='" . $ADMIN_PATH . "js/lang/" . $lang . ".js?" . $LAST_LOCAL_PATCH . "' charset='" . $nc_core->NC_CHARSET . "'></script>\n <link rel='stylesheet' href='" . $ADMIN_PATH . "/js/codemirror/lib/codemirror.css'>\n <script src='" . $ADMIN_PATH . "js/codemirror/lib/codemirror.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/xml.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/mysql.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/javascript.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/css.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/clike.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/php.js'></script>\n <script type='text/javascript'>\n var nc_token = '" . $nc_core->token->get(+$AUTH_USER_ID) . "';\n </script>\n <script type='text/javascript'>\n jQuery(function () {\n\n function getEditorTypeById(id) {\n if(id == 'Query') {\n return 'text/x-mysql';\n }\n return 'text/x-php';\n }\n\n if(true){\n\n window.CMEditors = [];\n\n function createCMEditor(ind, el) {\n var init = true;\n return function () {\n if(init) {\n var h = jQuery(el).height();\n window.CMEditors[ind] = CodeMirror.fromTextArea(el,{\n lineNumbers: true,\n mode: getEditorTypeById(jQuery(el).attr('id')),\n indentUnit: 4\n });\n window.CMEditors[ind].id = jQuery(el).attr('id');\n var scrollEl = jQuery(window.CMEditors[ind].getScrollerElement());\n scrollEl.height(h);\n }\n else {\n var h = jQuery(window.CMEditors[ind].getScrollerElement()).height();\n window.CMEditors[ind].toTextArea();\n jQuery(el).height(h);\n }\n init = !init;\n }\n }\n\n jQuery('textarea').each(function (ind, el) {\n return null;\n var prev0 = jQuery(el).prev(), prev = prev0.prev(), prevPrev = prev.prev(),\n prev0F = prev0.filter('div.resize_block').children(), prevF = prev.filter('div.resize_block').children(), prevPrevF = prevPrev.filter('div.resize_block').children();\n prevF.add(prev0F).add(prevPrevF).each(function (i, e) {\n jQuery(e).bind('click', function () {\n var idd = jQuery(this).attr('href').substr(1);\n for(var k in window.CMEditors) {\n if(window.CMEditors[k].id == idd) {\n var scrollEl = jQuery(window.CMEditors[k].getScrollerElement());\n if(jQuery(this).hasClass('textarea_shrink')) {\n scrollEl.height(scrollEl.height() + 20);\n }\n else if(scrollEl.height() > 120) {\n scrollEl.height(scrollEl.height() - 20);\n }\n break;\n }\n }\n });\n });\n jQuery(el).after(jQuery('<input>').attr({type: 'checkbox', id: 'cmtext'+ind})\n .click(createCMEditor(ind, el))\n .after(jQuery('<label>').attr('for', 'cmtext'+ind).html(' " . NETCAT_SETTINGS_CODEMIRROR_SWITCH . "')));\n });\n }\n });\n jQuery('body').attr('style', 'overflow-y: auto;');\n </script>\n <!-- для диалога генерации альтернативных форм -->\n <script type='text/javascript'>\n var SUB_FOLDER = '" . $SUB_FOLDER . "';\n var NETCAT_PATH = '" . $SUB_FOLDER . $HTTP_ROOT_PATH . "';\n var ADMIN_PATH = '" . $ADMIN_PATH . "';\n var ADMIN_LANG = '" . MAIN_LANG . "';\n var NC_CHARSET = '" . $nc_core->NC_CHARSET . "';\n var ICON_PATH = '" . $ADMIN_TEMPLATE . " + img/';\n var NETCAT_REMIND_SAVE_TEXT = '" . NETCAT_REMIND_SAVE_TEXT . "';\n </script>" . "<script>\n function showhide(val, val2) {\n var obj=document.getElementById(val)\n var obj2=document.getElementById(val2)\n obj.className=(obj.className=='show_add')? 'hide_add': 'show_add'\n obj2.className=(obj2.className=='blue')? 'white': 'blue'\n }\n </script>"; $addon .= $navbar_html; if ($File_Mode) { $addon = str_replace("\\\"", "\"", $addon); } switch (true) { case nc_preg_match("/\\<\\s*?frameset.*?\\>/im", $buffer): break; case nc_preg_match("/\\<\\s*?body.*?\\>/im", $buffer): $preg_pattern = "/(\\<\\s*?body.*?\\>){1}/im"; $preg_replacement = "\$1\n" . $addon; break; case nc_preg_match("/\\<\\s*?html\\s*?\\>/im", $buffer): $preg_pattern = "/(\\<\\s*?html\\s*?\\>){1}/im"; $preg_replacement = "\$1\n<body>" . $addon . "</body>"; break; } if ($preg_pattern && $preg_replacement) { $buffer = nc_preg_replace($preg_pattern, $preg_replacement, $buffer); } return $buffer; }
/** * Возвращает путь к разделу с указанным идентификатором. * * @param int $folder_id * @param string|null $date Дата в формате YYYY-mm-dd, YYYY-mm, YYYY * @param array $variables * @return string|nc_routing_path|false */ function nc_folder_path($folder_id, $date = null, array $variables = null) { $nc_core = nc_core::get_object(); try { $external_url = $nc_core->subdivision->get_by_id($folder_id, 'ExternalURL'); if ($external_url) { if (strpos($external_url, "://") !== false || $external_url[0] == '/') { // абсолютная внешняя ссылка return $external_url; } else { // относительная внешняя ссылка return $nc_core->SUB_FOLDER . $nc_core->subdivision->get_by_id($folder_id, 'Hidden_URL') . $external_url; } } } catch (Exception $e) { return false; } if (nc_module_check_by_keyword('routing')) { return nc_routing::get_folder_path($folder_id, $date, $variables); } else { return $nc_core->SUB_FOLDER . $nc_core->subdivision->get_by_id($folder_id, 'Hidden_URL') . ($date ? str_replace('-', '/', $date) . '/' : '') . nc_array_to_url_query($variables); } }
protected function make_subdivision_url(array $row) { $url = ''; if ($this->nc_core->admin_mode) { $url = $this->nc_core->SUB_FOLDER . $this->nc_core->HTTP_ROOT_PATH . '?catalogue=' . $this->site_id . '&sub=' . $row['Subdivision_ID']; } else { if ($row['ExternalURL']) { // Абсолютный путь: http://… или /… if (preg_match('@^(\\w{2,}://|/)@u', $row['ExternalURL'])) { $url = $row['ExternalURL']; } else { $url = $this->nc_core->SUB_FOLDER . $row['Hidden_URL'] . $row['ExternalURL']; } } elseif ($this->routing_module_enabled) { $url = nc_routing::get_folder_path($row['Subdivision_ID']); } else { $url = $this->nc_core->SUB_FOLDER . $row['Hidden_URL']; } } return $url; }
/** * Формирование ссылки "просмотр раздела" внутри админки с учётом ExternalURL * (дерево слева, карта сайта, избранные разделы) * * @param array $data массив с данными по разделу из Subdivision * @param bool $sid_off принудительно выключить id сессии * @return string */ function nc_subdivision_preview_link($data, $sid_off = false) { global $DOMAIN_NAME, $SUB_FOLDER; if (!is_array($data)) { if (is_object($data)) { $data = (array) $data; } else { return false; } } if (!array_key_exists("Hidden_URL", $data)) { return false; } if ($data['ExternalURL']) { $result = strchr($data['ExternalURL'], ":") ? $data['ExternalURL'] : "http://" . ($data['Domain'] ? $data['Domain'] : $DOMAIN_NAME) . $SUB_FOLDER . (!preg_match("/^\\/.*\$/", $data['ExternalURL']) ? $data['Hidden_URL'] . $data['ExternalURL'] : $data['ExternalURL']); } else { if (nc_module_check_by_keyword('routing')) { $result = "http://" . ($data['Domain'] ? $data['Domain'] : $DOMAIN_NAME) . nc_routing::get_folder_path($data['Subdivision_ID']); } else { $result = "http://" . ($data['Domain'] ? $data['Domain'] : $DOMAIN_NAME) . $SUB_FOLDER . $data['Hidden_URL']; } } if (!$sid_off) { $sid_suffix = session_id() ? "?" . session_name() . "=" . session_id() : ""; if (isset($_GET[session_name()])) { $result .= $sid_suffix; } } return $result; }
function nc_browse_sub($browse_parent_sub, $browse_template, $ignore_check = 0, $where_cond = "", $level = 0) { global $REQUEST_URI; global $admin_mode, $admin_url_prefix; global $current_sub; global $parent_sub_tree, $sub_level_count, $system_table_fields; global $db, $nc_core, $HTTP_FILES_PATH, $SUB_FOLDER; $all_browse_template = $browse_template; $browse_template = $browse_template[$level]; if (!is_array($browse_template)) { $browse_template = $all_browse_template; } if (!is_array($browse_template)) { return ""; } if (!$current_sub["Subdivision_ID"]) { return ""; } $query_string = $REQUEST_URI . $ignore_check . $where_cond; if (nc_module_check_by_keyword("cache") && $current_sub['Cache_Access_ID'] == 1 && !isset($browse_template['nocache'])) { $nc_cache_browse = nc_cache_browse::getObject(); try { // check cached data $cached_data = $nc_cache_browse->read($current_sub, $browse_template, $query_string, $current_sub['Cache_Lifetime'], $browse_parent_sub); if ($cached_data != -1) { // debug info $cache_debug_info = "Read, catalogue[" . $current_sub['Catalogue_ID'] . "], sub[" . $current_sub['Subdivision_ID'] . "], Access_ID[" . $current_sub['Cache_Access_ID'] . "], Lifetime[" . $current_sub['Cache_Lifetime'] . "], bytes[" . strlen($cached_data) . "]"; $nc_cache_browse->debugMessage($cache_debug_info, __FILE__, __LINE__); // return cache return $cached_data; } } catch (Exception $e) { // for debug $nc_cache_browse->errorMessage($e); } } if (isset($browse_template['sortby']) && $browse_template['sortby']) { $sort_by = $browse_template['sortby']; } else { $sort_by = "`Priority`"; } // поля таблицы Subdivision $table_fields = $nc_core->get_system_table_fields('Subdivision'); $field_string = ''; $count_fields = count($table_fields); $file_fields = array(); for ($i = 0; $i < $count_fields; $i++) { if ($table_fields[$i]['type'] == NC_FIELDTYPE_FILE) { $file_fields[$table_fields[$i]['id']] = $table_fields[$i]['name']; } $field_string .= "`" . $table_fields[$i]['name'] . "`, "; } static $cache = array(); $query_string .= $sort_by; $query_string_hash = md5($query_string); if (!isset($cache[$query_string_hash])) { $cache[$query_string_hash] = array(); $lsDisplayType = $nc_core->get_display_type(); $SQL = "SELECT " . $field_string . "\n `Subdivision_ID`,\n `Subdivision_Name`,\n `ExternalURL`,\n `Hidden_URL`,\n `EnglishName`,\n `Catalogue_ID`,\n `Parent_Sub_ID`,\n `Template_ID`,\n `LastUpdated`,\n `Created`,\n `Read_Access_ID`,\n `Write_Access_ID`,\n `Edit_Access_ID`,\n `Subscribe_Access_ID`,\n `Moderation_ID`,\n `Priority`,\n `Checked`,\n `Favorite`,\n `Description`\n FROM `Subdivision`\n WHERE 1\n " . ($ignore_check ? "" : "AND `Checked` = 1") . "\n " . ($where_cond ? " AND " . $where_cond : "") . "\n " . ($lsDisplayType == 'longpage_vertical' ? " AND `DisplayType` IN ('inherit', 'longpage_vertical')" : "") . "\n " . ($lsDisplayType == 'shortpage' ? " AND `DisplayType` IN ('inherit', 'shortpage')" : "") . "\n AND `Catalogue_ID` = '" . (int) $current_sub["Catalogue_ID"] . "'\n ORDER BY " . $db->escape($sort_by); $data_res = (array) $db->get_results($SQL, ARRAY_A); foreach ($data_res as $row) { $cache[$query_string_hash][$row['Parent_Sub_ID']][] = $row; } } $data = $cache[$query_string_hash][+$browse_parent_sub]; $data_count = sizeof($data); if (!$data_count) { return null; } // id всех подразелов (для запроса к таблице с файлами) $child_subs_id = array(); for ($i = 0; $i < $data_count; $i++) { $child_subs_id[] = $data[$i]['Subdivision_ID']; } /** @todo use nc_file_info class */ $filetable = array(); if (!empty($child_subs_id) && !empty($file_fields)) { $file_in_table = $db->get_results("SELECT `Virt_Name`, `File_Path`, `Message_ID`, `Field_ID`\n FROM `Filetable`\n WHERE `Message_ID` IN (" . join(',', $child_subs_id) . ")", ARRAY_A); if (!empty($file_in_table)) { foreach ($file_in_table as $v) { $filetable[$v['Message_ID']][$v['Field_ID']] = array($v['Virt_Name'], $v['File_Path']); } } } $result = $browse_template['prefix']; $current_page_path = urldecode(strtok($REQUEST_URI, '?')); $current_sub_path = substr($current_page_path, 0, strrpos($current_page_path, "/") + 1); // Проход по всем подразделам $array_result = array(); for ($i = 0; $i < $data_count; $i++) { // поле тип файл обрабатывается отдельно if (!empty($file_fields)) { foreach ($file_fields as $field_id => $field_name) { if ($data[$i][$field_name]) { // если есть файл $file_data = explode(':', $data[$i][$field_name]); $data[$i][$field_name . "_name"] = $file_data[0]; // оригинальное имя $data[$i][$field_name . "_size"] = $file_data[1]; // размер $data[$i][$field_name . "_type"] = $file_data[2]; // тип $ext = substr($file_data[0], strrpos($file_data[0], ".")); // расширение // запись в таблице Filetable $row = $filetable[$data[$i]['Subdivision_ID']][$field_id]; if ($row) { // Proteced FileSystem $data[$i][$field_name] = $nc_core->SUB_FOLDER . $nc_core->HTTP_FILES_PATH . ltrim($row[1], '/') . "h_" . $row[0]; $data[$i][$field_name . "_url"] = $nc_core->SUB_FOLDER . $nc_core->HTTP_FILES_PATH . ltrim($row[1], '/') . $row[0]; } else { if ($file_data[3]) { // Original FileSystem $data[$i][$field_name] = $data[$i][$field_name . "_url"] = $nc_core->SUB_FOLDER . $nc_core->HTTP_FILES_PATH . $file_data[3]; } else { // Simple FileSysytem $data[$i][$field_name] = $data[$i][$field_name . "_url"] = $nc_core->SUB_FOLDER . $nc_core->HTTP_FILES_PATH . $field_id . "_" . $data[$i]["Subdivision_ID"] . $ext; } } } } } $routing_module_enabled = nc_module_check_by_keyword('routing'); $is_active_sub = 0; $nav_name = nc_quote_convert($data[$i]["Subdivision_Name"]); if ($admin_mode) { $nav_url = $admin_url_prefix . "?catalogue=" . $current_sub["Catalogue_ID"] . "&sub=" . $data[$i]["Subdivision_ID"]; } else { if ($ext_url = $data[$i]["ExternalURL"]) { $nav_url = strchr($ext_url, ":") || substr($ext_url, 0, 1) == "/" ? $ext_url : $SUB_FOLDER . $data[$i]["Hidden_URL"] . $ext_url; } else { if ($routing_module_enabled) { $nav_url = nc_routing::get_folder_path($data[$i]["Subdivision_ID"]); } else { $nav_url = $SUB_FOLDER . $data[$i]["Hidden_URL"]; } } } for ($j = 0; $j < $sub_level_count; $j++) { if ($parent_sub_tree[$j]["Subdivision_ID"] == $data[$i]["Subdivision_ID"]) { $is_active_sub = 1; break; } } if ($nav_url == $REQUEST_URI || $nav_url == $current_page_path || $SUB_FOLDER . $data[$i]['ExternalURL'] == $current_page_path) { $current_template = $browse_template['active_link'] ? $browse_template['active_link'] : $browse_template['active']; } elseif ($is_active_sub || $SUB_FOLDER . $data[$i]['ExternalURL'] == $current_sub_path) { $current_template = $browse_template['active']; } else { $current_template = $browse_template['unactive']; } $current_template = str_replace("%NAME", $nav_name, $current_template); $current_template = str_replace("%URL", $nav_url, $current_template); $current_template = str_replace("%PARENT_SUB", $browse_parent_sub, $current_template); $current_template = str_replace("%KEYWORD", $data[$i]['EnglishName'], $current_template); $current_template = str_replace("%SUB", $data[$i]["Subdivision_ID"], $current_template); $current_template = str_replace("%COUNTER", $i, $current_template); for ($j = 0; $j < count($system_table_fields['Subdivision']); $j++) { $current_template = str_replace("%" . $system_table_fields['Subdivision'][$j]['name'], nc_quote_convert($data[$i][$system_table_fields['Subdivision'][$j]['name']]), $current_template); } $current_template = str_replace("%NEXT_LEVEL", nc_browse_sub($data[$i]["Subdivision_ID"], $all_browse_template, $ignore_check, $where_cond, $level + 1), $current_template); $array_result[] = $current_template; } $result .= join($browse_template['divider'], $array_result); $result .= $browse_template['suffix']; // cache section if (nc_module_check_by_keyword("cache") && $current_sub['Cache_Access_ID'] == 1 && is_object($nc_cache_browse) && !isset($browse_template['nocache'])) { try { $bytes = $nc_cache_browse->add($current_sub, $browse_template, $query_string, $result, $browse_parent_sub); // debug info if ($bytes) { $cache_debug_info = "Written, catalogue[" . $current_sub['Catalogue_ID'] . "], sub[" . $current_sub['Subdivision_ID'] . "], Access_ID[" . $current_sub['Cache_Access_ID'] . "], Lifetime[" . $current_sub['Cache_Lifetime'] . "], bytes[" . $bytes . "]"; $nc_cache_browse->debugMessage($cache_debug_info, __FILE__, __LINE__, "ok"); } } catch (Exception $e) { // for debug $nc_cache_browse->errorMessage($e); } } return $result; }