Пример #1
0
 /**
  * 'собственно функция для получения нужной информации'
  * @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();
     }
 }
Пример #2
0
 /**
  * Получить путь до раздела поиска на сайте с указанным идентификатором.
  * @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];
 }
Пример #3
0
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&amp;REQUESTED_FROM=" . $REQUEST_URI . "&amp;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;
}
Пример #4
0
/**
 * Возвращает путь к разделу с указанным идентификатором.
 *
 * @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);
    }
}
Пример #5
0
 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 . '&amp;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;
 }
Пример #6
0
/**
 * Формирование ссылки "просмотр раздела" внутри админки с учётом 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;
}
Пример #7
0
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"] . "&amp;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;
}