Пример #1
0
 /**
  * (POST only)
  */
 protected function action_save()
 {
     foreach ($this->input->fetch_post('settings') as $k => $v) {
         nc_routing::set_setting($k, $v, $this->site_id);
     }
     $this->redirect_to_index_action();
 }
Пример #2
0
 /**
  * Инициализация модуля:
  * — Инициализация автоматической загрузки классов модуля
  * — Если модуль не разу не запускался, будут созданы стандартные
  *   маршруты для всех сайтов
  * — Привязка слушателей создания и удаления сайтов
  */
 public static function init()
 {
     nc_core()->register_class_autoload_path('nc_routing_', dirname(__FILE__) . "/classes");
     if (!nc_routing::get_setting('IsInstalled', 0)) {
         nc_routing_route_defaults::create_for_all_sites();
         self::set_setting('IsInstalled', 1, 0);
     }
     nc_routing_listener::init();
     self::$SUB_FOLDER = nc_core::get_object()->SUB_FOLDER;
 }
Пример #3
0
 /**
  *
  */
 protected function action_index()
 {
     $this->ui_config->locationHash .= ".list({$this->site_id})";
     $this->ui_config->add_create_button("route.add({$this->site_id})");
     $routes = nc_routing::get_routes($this->site_id, true);
     if (!count($routes)) {
         nc_routing_route_defaults::create($this->site_id);
         $routes = nc_routing::get_routes($this->site_id, true, true);
     }
     $view = $this->view('route_list')->with('routes', $routes);
     return $view;
 }
Пример #4
0
 /**
  *
  */
 protected function get_path_string()
 {
     if (!$this->resource_parameters) {
         $resource_parameters = $this->prepare_resource_parameters();
         if ($resource_parameters === false) {
             return '';
         } else {
             $this->resource_parameters = $resource_parameters;
         }
     }
     $routes = nc_routing::get_routes_by_resource_type($this->resource_parameters['site_id'], $this->resource_type);
     /** @var nc_routing_route $route */
     foreach ($routes as $route) {
         $path_string = $route->get_path_string_for($this);
         if ($path_string !== false) {
             return $path_string;
         }
     }
     return false;
 }
Пример #5
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];
 }
Пример #6
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();
     }
 }
Пример #7
0
function nc_browse_messages($cc_env, $range, $user_template = false)
{
    if ($user_template) {
        $browse_msg = $user_template;
    } else {
        global $browse_msg;
    }
    global $classPreview, $admin_mode, $inside_admin;
    $nc_core = nc_Core::get_object();
    if (isset($classPreview)) {
        $classPreview += 0;
    }
    if ($cc_env['cur_cc'] == $nc_core->input->fetch_get("cur_cc")) {
        $curPos = $cc_env['curPos'] + 0;
    } else {
        $curPos = 0;
    }
    $maxRows = $cc_env['maxRows'];
    $totRows = $cc_env['totRows'];
    if (!$maxRows || !$totRows) {
        return '';
    }
    if ($cc_env['cur_cc']) {
        $cur_cc = $cc_env['cur_cc'];
    }
    $page_count = ceil($totRows / $maxRows);
    $half_range = ceil($range / 2);
    $cur_page = ceil($curPos / $maxRows) + 1;
    if ($page_count < 2) {
        return '';
    }
    $maybe_from = $cur_page - $half_range;
    $maybe_to = $cur_page + $half_range - (is_even($range) ? 0 : 1);
    if ($maybe_from < 0) {
        $maybe_to = $maybe_to - $maybe_from;
        $maybe_from = 0;
        if ($maybe_to > $page_count) {
            $maybe_to = $page_count;
        }
    }
    if ($maybe_to > $page_count) {
        $maybe_from = $page_count - $range;
        $maybe_to = $page_count;
        if ($maybe_from < 0) {
            $maybe_from = 0;
        }
    }
    // формируем ссылку
    // const_url не меняется для каждой страницы
    $const_url = $cc_env['LocalQuery'];
    if ($const_url == '?') {
        $const_url = '';
    }
    //$const_url = rawurlencode ($const_url);
    // добавим get-парметры
    $_get_arr = $nc_core->input->fetch_get();
    $get_params = array();
    // добавим в ссылку cur_cc
    if (isset($cur_cc)) {
        $get_params['cur_cc'] = $cur_cc;
    }
    if (!empty($_get_arr)) {
        $ignore_arr = array('sid', 'ced', 'inside_admin', 'catalogue', 'sub', 'cc', 'curPos', 'cur_cc', 'REQUEST_URI', 'srchPat');
        if ($inside_admin || $admin_mode) {
            $ignore_arr[] = 'isNaked';
        }
        foreach ($_get_arr as $k => $v) {
            if (!in_array($k, $ignore_arr)) {
                $get_params[$k] = $nc_core->input->recursive_striptags_escape($v);
            }
        }
    }
    $const_url .= count($get_params) ? (strstr($const_url, "?") ? "&" : "?") . $nc_core->url->build_url($get_params) : "";
    if (!$admin_mode && nc_module_check_by_keyword('routing')) {
        $use_routing_module = true;
        $routing_parameters = nc_resolve_url($nc_core->url);
        $routing_parameters['variables'] = array_merge(nc_array_value($routing_parameters, 'variables', array()), $get_params, array('curPos' => null, 'nc_page' => null));
        $routing_parameters['page'] = null;
        $routing_resource_type = $routing_parameters['resource_type'];
        if ($routing_resource_type == 'folder' && $routing_parameters['infoblock_id']) {
            $routing_resource_type = 'infoblock';
        }
    } else {
        $use_routing_module = $routing_parameters = $routing_resource_type = false;
    }
    $array_result = array();
    for ($i = $maybe_from; $i < $maybe_to; $i++) {
        $page_number = $i + 1;
        $page_from = $i * $maxRows;
        $page_to = $page_from + $maxRows;
        if ($use_routing_module) {
            $routing_parameters['variables']['curPos'] = $page_from ? $page_from : null;
            $routing_parameters['page'] = $page_number > 1 ? $page_number : null;
            $url = nc_routing::get_resource_path($routing_resource_type, $routing_parameters);
        } elseif ($page_from && !$admin_mode) {
            // ссылка не на первую страницу
            $url = $nc_core->url->get_parsed_url('path') . $const_url . (strpos($const_url, "?") !== false ? "&" : "?") . "curPos=" . $page_from;
            $url = $nc_core->SUB_FOLDER . $url;
        } elseif ($page_from && $admin_mode) {
            $url = $const_url . (strpos($const_url, "?") !== false ? "&" : "?") . "curPos=" . $page_from;
        } else {
            // ссылка на первую страницу, curPos не нужен
            $url = $const_url ? $const_url : $nc_core->url->get_parsed_url('path');
        }
        // replace existing &amp; with & then replace all & to &amp;
        $url = nc_preg_replace(array("/&amp;/", "/&/"), array("&", "&amp;"), $url);
        if ($curPos == $page_from) {
            $array_result[$i] = $browse_msg['active'];
        } else {
            $array_result[$i] = $browse_msg['unactive'];
        }
        $array_result[$i] = str_replace("%URL", $url, $array_result[$i]);
        $array_result[$i] = str_replace("%PAGE", $page_number, $array_result[$i]);
        $array_result[$i] = str_replace("%FROM", $page_from + 1, $array_result[$i]);
        $array_result[$i] = str_replace("%TO", $page_to, $array_result[$i]);
    }
    $result = $browse_msg['prefix'];
    $result .= join($browse_msg['divider'], $array_result);
    $result .= $browse_msg['suffix'];
    return $result;
}
Пример #8
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'] ? "&amp;sub=" . $current_sub['Subdivision_ID'] : "") . ($current_cc['Sub_Class_ID'] ? "&amp;cc=" . $current_cc['Sub_Class_ID'] : "") . ($message ? "&amp;message=" . $message : "");
    } else {
        $edit_link = $SUB_FOLDER . $HTTP_ROOT_PATH . "?catalogue=" . $current_catalogue['Catalogue_ID'] . ($current_sub['Subdivision_ID'] ? "&amp;sub=" . $current_sub['Subdivision_ID'] : "") . ($current_cc['Sub_Class_ID'] ? "&amp;cc=" . $current_cc['Sub_Class_ID'] : "") . ($message ? "&amp;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;
}
Пример #9
0
/**
 * Возвращает путь к объекту.
 *
 * @param int $component_id
 * @param int $object_id
 * @param string $action full|edit|delete|drop|checked|subscribe
 * @param string $format html|rss|xml
 * @param bool $add_date Если true и у компонента есть поле формата event, добавляет дату к пути
 * @param array $variables
 * @param bool $add_domain (недокументировано, существует для оптимизации — используйте nc_object_url())
 *                          Если TRUE, возвращает URL с именем домена
 * @return string|nc_routing_path|false
 */
function nc_object_path($component_id, $object_id, $action = 'full', $format = 'html', $add_date = false, array $variables = null, $add_domain = false)
{
    if (!$action) {
        $action = 'full';
    }
    if (nc_module_check_by_keyword('routing')) {
        return nc_routing::get_object_path($component_id, $object_id, $action, $format, $add_date, $variables, $add_domain);
    } else {
        $object_id = (int) $object_id;
        $component_id = (int) $component_id;
        if (!$object_id || !$component_id) {
            return false;
        }
        $db = nc_db();
        $nc_core = nc_core::get_object();
        $date_field = false;
        if ($add_date) {
            $date_field = $nc_core->get_component($component_id)->get_date_field();
        }
        // основной запрос для построения пути
        list($site_id, $object_path) = $db->get_row("SELECT sub.`Catalogue_ID`,\n                    CONCAT(\n                        sub.`Hidden_URL`, " . ($add_date && $date_field ? "DATE_FORMAT(`" . $db->escape($date_field) . "`, '%Y/%m/%d/'), " : "") . ($action && $action != 'full' ? "'" . $db->escape($action) . "_', " : "") . "\n                        IF(m.`Keyword` <> '', m.`Keyword`, CONCAT(cc.`EnglishName`, '_', m.`Message_ID`)),\n                        '." . $db->escape($format) . "'\n                    )\n               FROM `Message{$component_id}` AS m\n                    LEFT JOIN `Subdivision` AS sub\n                           ON m.`Subdivision_ID` = sub.`Subdivision_ID`\n                    LEFT JOIN `Sub_Class` AS cc\n                           ON m.`Sub_Class_ID` = cc.`Sub_Class_ID`\n              WHERE m.`Message_ID` = {$object_id}", ARRAY_N);
        if (!$object_path) {
            return false;
        }
        $object_path = $nc_core->SUB_FOLDER . $object_path . nc_array_to_url_query($variables);
        if ($add_domain) {
            $object_path = "//" . $nc_core->catalogue->get_by_id($site_id, 'Domain') . $object_path;
        }
        return $object_path;
    }
}
Пример #10
0
 public function delete_site($site_id)
 {
     nc_routing::get_routes($site_id, true)->each('delete');
 }
Пример #11
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;
}
Пример #12
0
<?php

require_once dirname(__FILE__) . "/nc_routing.class.php";
nc_routing::init();
Пример #13
0
         if ($routing_canonical_request['resource_type'] == 'object') {
             // Для объектов в качестве основного пути могут использоваться пути без даты
             $routing_canonical_request['date_is_optional'] = true;
             // Для объектов проверить наличие и значение поля типа event/event_date
             if (!$routing_canonical_request['date']) {
                 try {
                     $routing_object_component_id = (int) $nc_core->sub_class->get_by_id($routing_canonical_request['infoblock_id'], 'Class_ID');
                     $routing_object_date_field = $nc_core->get_component($routing_object_component_id)->get_date_field();
                     if ($routing_object_date_field) {
                         $routing_canonical_request['date'] = $db->get_var("SELECT DATE_FORMAT(`{$routing_object_date_field}`, '%Y-%m-%d')\n                                   FROM `Message{$routing_object_component_id}`\n                                  WHERE `Message_ID` = " . (int) $routing_canonical_request['object_id']);
                     }
                 } catch (Exception $e) {
                 }
             }
         }
         $routing_canonical_path = (string) nc_routing::get_resource_path($routing_canonical_request['resource_type'], $routing_canonical_request);
         if (parse_url($routing_canonical_path, PHP_URL_PATH) != $nc_core->SUB_FOLDER . $nc_core->url->get_parsed_url('path')) {
             // найден альтернативный путь
             if ($_SERVER['REQUEST_METHOD'] == 'GET' && $routing_duplicate_route_action == nc_routing::DUPLICATE_ROUTE_REDIRECT) {
                 $routing_result['redirect_to_url'] = $routing_canonical_path;
             } else {
                 $nc_core->page->set_canonical_link($routing_canonical_path);
             }
         }
         unset($routing_canonical_path, $routing_canonical_request, $routing_duplicate_route_action, $routing_object_component_id, $routing_object_date_field);
     }
 }
 if ($routing_result === false) {
     // Страница не найдена
     $page_not_found = true;
 } else {
Пример #14
0
function nc_browse_cc($browse_template)
{
    global $db;
    global $admin_mode, $admin_url_prefix;
    global $current_cc, $current_sub;
    global $cc_in_sub, $cc_array, $cc_keyword, $use_multi_sub_class;
    global $REQUEST_URI, $SUB_FOLDER;
    // this happens when non-existent sub requested in admin mode
    if (!$current_sub["Subdivision_ID"]) {
        return "";
    }
    // cache section
    if (nc_module_check_by_keyword("cache") && $current_cc['Cache_Access_ID'] == 1 && $browse_template['nocache'] != true) {
        $nc_cache_browse = nc_cache_browse::getObject();
        try {
            // check cached data
            $cached_data = $nc_cache_browse->read($current_cc, $browse_template, $REQUEST_URI, $current_cc['Cache_Lifetime']);
            if ($cached_data != -1) {
                // debug info
                $cache_debug_info = "Read, catalogue[" . $current_cc['Catalogue_ID'] . "], sub[" . $current_cc['Subdivision_ID'] . "], cc[" . $current_cc['Sub_Class_ID'] . "], Access_ID[" . $current_cc['Cache_Access_ID'] . "], Lifetime[" . $current_cc['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);
        }
    }
    $sort_by = $browse_template['sortby'] ? $browse_template['sortby'] : "`Priority`";
    if (!$admin_mode) {
        $check_cond = " AND `Checked` = 1";
    } else {
        $check_cond = "";
    }
    // cc_in_sub has all templates in sub
    $data = array();
    if ($sort_by == 'Priority' && $GLOBALS['sub'] == $current_sub["Subdivision_ID"]) {
        foreach ((array) $cc_in_sub as $row) {
            if ($admin_mode || $row["Checked"] == 1) {
                $data[] = $row;
            }
        }
    }
    if (empty($data)) {
        $data = $db->get_results("SELECT `Sub_Class_ID`, `Sub_Class_Name`, `EnglishName`\n               FROM `Sub_Class`\n              WHERE `Subdivision_ID` = '" . $current_sub["Subdivision_ID"] . "'" . $check_cond . " ORDER BY " . $sort_by, ARRAY_A);
    }
    $data_count = sizeof($data);
    if (!$data_count || $data_count < 2) {
        return null;
    }
    $result = $browse_template['prefix'];
    $array_result = array();
    $routing_module_enabled = nc_module_check_by_keyword('routing');
    $current_page_url = urldecode(strtok($REQUEST_URI, '?'));
    for ($i = 0; $i < $data_count; $i++) {
        $nav_name = $data[$i]["Sub_Class_Name"];
        if ($admin_mode) {
            $nav_url = $admin_url_prefix . "?catalogue=" . $current_sub["Catalogue_ID"] . "&amp;sub=" . $current_sub["Subdivision_ID"] . "&amp;cc=" . $data[$i]["Sub_Class_ID"];
        } else {
            if ($routing_module_enabled) {
                $nav_url = nc_routing::get_infoblock_path($data[$i]["Sub_Class_ID"]);
            } else {
                $nav_url = $SUB_FOLDER . $current_sub["Hidden_URL"] . $data[$i]["EnglishName"] . ".html";
            }
        }
        if ($data[$i]["Sub_Class_ID"] == $current_cc["Sub_Class_ID"] && ($cc_keyword || !$use_multi_sub_class)) {
            if ($browse_template['active_link'] && ($nav_url == $REQUEST_URI || $nav_url == $current_page_url || $SUB_FOLDER . $current_sub['Hidden_URL'] . $current_cc['EnglishName'] . ".html" == $current_page_url)) {
                $current_template = $browse_template['active_link'];
            } else {
                $current_template = $browse_template['active'];
            }
            $array_result[$i] = $current_template;
        } else {
            $array_result[$i] = $browse_template['unactive'];
        }
        $array_result[$i] = str_replace("%NAME", $nav_name, $array_result[$i]);
        $array_result[$i] = str_replace("%URL", $nav_url, $array_result[$i]);
    }
    $result .= join($browse_template['divider'], $array_result);
    $result .= $browse_template['suffix'];
    // cache section
    if (nc_module_check_by_keyword("cache") && $current_cc['Cache_Access_ID'] == 1 && is_object($nc_cache_browse) && $browse_template['nocache'] != true) {
        try {
            $bytes = $nc_cache_browse->add($current_cc, $browse_template, $REQUEST_URI, $result);
            // debug info
            if ($bytes) {
                $cache_debug_info = "Written, catalogue[" . $current_cc['Catalogue_ID'] . "], sub[" . $current_cc['Subdivision_ID'] . "], cc[" . $current_cc['Sub_Class_ID'] . "], Access_ID[" . $current_cc['Cache_Access_ID'] . "], Lifetime[" . $current_cc['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;
}
Пример #15
0
/**
 * @param nc_url|string $url Объект nc_url или строка
 * @param string $method GET|POST
 * @param int|null $site_id    Если null — текущий сайт
 * @return array|false   Массив с информацией об объекте, на который ссылается путь,
 *    или FALSE.
 *    array(
 *         resource_type => folder|infoblock|object|script
 *         site_id => идентификатор сайта
 *         folder_id => идентификатор раздела
 *         infoblock_id => [идентификатор инфоблока]
 *         object_id => идентификатор объекта в инфоблоке
 *         action => действие над инфоблоком или объектом
 *         format => html|rss|xml
 *         variables => массив с дополнительными переменными (только для модуля маршрутизации)
 *         date => дата в пути
 *         script_path => путь к скрипту от папки DOCUMENT_ROOT/SUB_FOLDER (только для модуля маршрутизации для resource_type=script)
 *         redirect_to_url => при запросе всегда будет выполняться переадресация
 *    )
 */
function nc_resolve_url($url, $method = null, $site_id = null)
{
    $nc_core = nc_core::get_object();
    $routing_module_enabled = nc_module_check_by_keyword('routing');
    // --- Приведение параметра $url к nc_url ---
    if (!$url instanceof nc_url) {
        $url = new nc_url($url);
    } else {
        if (!$routing_module_enabled) {
            // Создадим клон $url, так как в процессе работы будут изменяться свойства этого объекта
            $url = clone $url;
        }
    }
    // --- Определение сайта ---
    if (!$site_id) {
        $site_settings = $nc_core->catalogue->get_by_host_name($url->get_parsed_url('host'));
        if (isset($site_settings['Catalogue_ID'])) {
            $site_id = $site_settings['Catalogue_ID'];
        } else {
            $site_id = $nc_core->catalogue->id();
        }
    }
    if (!$site_id) {
        return false;
    }
    // --- Использование модуля маршрутизации ---
    if ($routing_module_enabled) {
        $result = nc_routing::resolve(new nc_routing_request($site_id, $method, $url->get_parsed_url()));
        if ($result) {
            $result = $result->to_array();
            $result['site_id'] = $site_id;
            return $result;
        } else {
            return false;
        }
    }
    // --- «Классическая» маршрутизация ---
    $result = array('resource_type' => 'folder', 'site_id' => $site_id, 'folder_id' => null, 'infoblock_id' => null, 'object_id' => null, 'action' => null, 'format' => 'html', 'variables' => array(), 'date' => null, 'redirect_to_url' => null);
    // Инициализация переменных
    $component_id = 0;
    $default_action = null;
    $page_not_found = false;
    // Имя «файла»
    $req_file = strrchr($url->get_parsed_url('path'), '/');
    // Определяем раздел по пути
    $result['folder_id'] = $nc_core->subdivision->get_by_uri($url->get_parsed_url('path'), $site_id, 'Subdivision_ID', true, true);
    // Если раздел не найден, дальнейшая обработка адреса не имеет смысла,
    // так как мы в любом случае должны вернуть FALSE
    if (!$result['folder_id']) {
        return false;
    }
    $file_name = '';
    $file_extension = '';
    $uri_date = $url->get_uri_date();
    if ($req_file != '/') {
        $req_file = substr($req_file, 1);
        if (strpos($req_file, '.')) {
            $req_file_parts = explode(".", $req_file);
            $file_name = $req_file_parts[0];
            $file_extension = strtolower($req_file_parts[count($req_file_parts) - 1]);
        }
        if (in_array($file_extension, array('html', 'rss', 'xml'))) {
            // name without extension
            $url->set_parsed_url_item('path', substr($url->get_parsed_url('path'), 0, strlen($url->get_parsed_url('path')) - strlen($req_file)));
        } else {
            // append trailing slash
            $url->set_parsed_url_item('path', rtrim($url->get_parsed_url('path'), "/") . "/");
        }
        // Адрес имеет расширение (.html, .rss, .xml) — это адрес объекта или инфоблока
        if (in_array($file_extension, array('html', 'rss', 'xml'))) {
            $result['format'] = $file_extension;
            $infoblocks_in_folder = $nc_core->sub_class->get_by_subdivision_id($result['folder_id']);
            // keyword.html — совпадение по ключевому слову объекта
            if (nc_preg_match("/^([_a-zа-я0-9-]+)\$/i", $file_name, $regs)) {
                if (!empty($infoblocks_in_folder)) {
                    foreach ($infoblocks_in_folder as $infoblock_settings) {
                        if ($file_extension == 'rss' && !$infoblock_settings['AllowRSS']) {
                            continue;
                        }
                        if ($file_extension == 'xml' && !$infoblock_settings['AllowXML']) {
                            continue;
                        }
                        // Находим объект, подходящий под имеющиеся параметры
                        if ($object_id = ObjectExists($infoblock_settings['Class_ID'], $infoblock_settings['sysTbl'], $infoblock_settings['Sub_Class_ID'], $file_name, $uri_date)) {
                            $component_id = $infoblock_settings['Class_ID'];
                            $result['resource_type'] = 'object';
                            $result['infoblock_id'] = $_db_cc = $infoblock_settings['Sub_Class_ID'];
                            $result['object_id'] = $object_id;
                            $result['action'] = 'full';
                            break;
                        }
                    }
                }
            }
            // news.html — ключевое слово компонента, при условии, что нет такого объекта
            if (!$result['object_id'] && nc_preg_match("/^([a-zа-я0-9-]+)\$/i", $file_name, $regs)) {
                if (!empty($infoblocks_in_folder)) {
                    foreach ($infoblocks_in_folder as $infoblock_settings) {
                        if ($infoblock_settings['EnglishName'] == $regs[1]) {
                            if ($file_extension == 'rss' && !$infoblock_settings['AllowRSS']) {
                                continue;
                            }
                            if ($file_extension == 'xml' && !$infoblock_settings['AllowXML']) {
                                continue;
                            }
                            $result['resource_type'] = 'infoblock';
                            $result['infoblock_id'] = $_db_cc = $infoblock_settings['Sub_Class_ID'];
                            // action может быть задан в get'e или post'e
                            if (!$result['action']) {
                                $result['action'] = $infoblock_settings['DefaultAction'];
                            }
                            break;
                        }
                    }
                }
            }
            // add_news.html, search_news.html, subscribe_news.html — добавление, поиск, подписка в компоненте
            if (nc_preg_match("/^(add|search|subscribe)_((?i:[a-zа-я0-9-]+))\$/", $file_name, $regs)) {
                if (!empty($infoblocks_in_folder)) {
                    foreach ($infoblocks_in_folder as $infoblock_settings) {
                        if ($infoblock_settings['EnglishName'] != $regs[2]) {
                            continue;
                        }
                        $result['resource_type'] = 'infoblock';
                        $result['infoblock_id'] = $_db_cc = $infoblock_settings['Sub_Class_ID'];
                        $result['action'] = $regs[1];
                        break;
                    }
                }
            }
            // news_5.html — отображение объекта по компоненту и идентификатору
            if (nc_preg_match("/^([a-zа-я0-9-]+)_([0-9]+)\$/i", $file_name, $regs) && $file_name == $regs[1] . "_" . $regs[2]) {
                if (!empty($infoblocks_in_folder)) {
                    foreach ($infoblocks_in_folder as $infoblock_settings) {
                        // check component in sub keyword
                        if ($infoblock_settings['EnglishName'] != $regs[1]) {
                            continue;
                        }
                        if ($file_extension == 'rss' && !$infoblock_settings['AllowRSS']) {
                            continue;
                        }
                        if ($file_extension == 'xml' && !$infoblock_settings['AllowXML']) {
                            continue;
                        }
                        // find message with requested params
                        if ($object_id = ObjectExistsByID($infoblock_settings['Class_ID'], $infoblock_settings['sysTbl'], $regs[2], $uri_date)) {
                            $component_id = $infoblock_settings['Class_ID'];
                            $result['resource_type'] = 'object';
                            $result['infoblock_id'] = $_db_cc = $infoblock_settings['Sub_Class_ID'];
                            $result['object_id'] = $object_id;
                            $result['action'] = 'full';
                            break;
                        }
                    }
                }
            }
            // edit_object.html — изменение объекта по ДЕЙСТВИЮ и КЛЮЧЕВОМУ СЛОВУ, при условии, что нет объекта по компоненту и идентификатору
            if (!$result['object_id'] && nc_preg_match("/^(edit|delete|drop|checked|subscribe)_((?i:[_a-zа-я0-9-]+))\$/", $file_name, $regs)) {
                if (!empty($infoblocks_in_folder)) {
                    foreach ($infoblocks_in_folder as $infoblock_settings) {
                        // find message with need params
                        if ($object_id = ObjectExists($infoblock_settings['Class_ID'], $infoblock_settings['sysTbl'], $infoblock_settings['Sub_Class_ID'], $regs[2])) {
                            $component_id = $infoblock_settings['Class_ID'];
                            $result['resource_type'] = 'object';
                            $result['infoblock_id'] = $_db_cc = $infoblock_settings['Sub_Class_ID'];
                            $result['object_id'] = $object_id;
                            $result['action'] = $regs[1];
                            break;
                        }
                    }
                }
            }
            // edit_news_5.html — изменение объекта по действию, компоненту и идентификатору объекта
            if (nc_preg_match("/^(edit|delete|drop|checked|subscribe)_((?i:[_a-zа-я0-9-]+))_([0-9]+)\$/", $file_name, $regs)) {
                if (!empty($infoblocks_in_folder)) {
                    foreach ($infoblocks_in_folder as $infoblock_settings) {
                        // check component in sub keyword
                        if ($infoblock_settings['EnglishName'] != $regs[2]) {
                            continue;
                        }
                        // find message with need params
                        if ($object_id = ObjectExistsByID($infoblock_settings['Class_ID'], $infoblock_settings['sysTbl'], $regs[3])) {
                            $component_id = $infoblock_settings['Class_ID'];
                            $result['resource_type'] = 'object';
                            $result['infoblock_id'] = $_db_cc = $infoblock_settings['Sub_Class_ID'];
                            $result['object_id'] = $object_id;
                            $result['action'] = $regs[1];
                            break;
                        }
                    }
                }
            }
        } else {
            // У «файла» нет расширения, либо нестандартное расширение
            // Добавить "/" и сделать переадресацию
            $result['redirect_to_url'] = $url->source_url() . ($url->get_parsed_url('query') ? "?" . $url->get_parsed_url('query') : "") . ($url->get_parsed_url('fragment') ? "#" . $url->get_parsed_url('fragment') : "");
        }
    }
    // Для разделов установить ID первого инфоблока
    if ($result['resource_type'] == 'folder' && !$file_name && $result['folder_id']) {
        if (empty($infoblocks_in_folder)) {
            $infoblocks_in_folder = $nc_core->sub_class->get_by_subdivision_id($result['folder_id']);
        }
        foreach ((array) $infoblocks_in_folder as $infoblock_settings) {
            if ($infoblock_settings['Checked'] || $infoblock_settings['sysTbl'] == 3) {
                $component_id = $infoblock_settings['Class_ID'];
                if ($uri_date && !$nc_core->get_component($component_id)->get_date_field()) {
                    continue;
                }
                $result['infoblock_id'] = $infoblock_settings['Sub_Class_ID'];
                if (!$result['action']) {
                    $result['action'] = $infoblock_settings['DefaultAction'];
                }
                break;
            }
        }
    }
    // Если есть «имя файла», но не определён по крайней мере ID инфоблока, то это неправильный путь
    if ($file_name && !$result['infoblock_id']) {
        $page_not_found = true;
    }
    // Дата в пути
    if (!$page_not_found && $uri_date) {
        if (!$result['infoblock_id'] || $result['infoblock_id'] && !$nc_core->get_component($component_id)->get_date_field()) {
            // if there is a date in URI segments and no "event" field in the corresponding component, it is an incorrect path
            $page_not_found = true;
        } else {
            $result['date'] = $uri_date;
        }
    }
    return $page_not_found ? false : $result;
}
Пример #16
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;
 }
Пример #17
0
                     $nc_prev_object = $admin_url_prefix . "full.php?catalogue=" . $catalogue . "&amp;sub=" . $sub . "&amp;cc=" . $cc . "&amp;message=" . $nc_res[$i - 1]['Message_ID'];
                 } else {
                     if ($routing_module_enabled) {
                         $nc_prev_object = nc_routing::get_object_path($classID, array('site_id' => $catalogue, 'folder' => $cc_env['Hidden_URL'], 'folder_id' => $sub, 'infoblock_id' => $nc_res[$i - 1]['Sub_Class_ID'], 'object_id' => $nc_res[$i - 1]['Message_ID'], 'object_keyword' => $nc_res[$i - 1]['Keyword']));
                     } else {
                         $nc_prev_object = $cc_env['Hidden_URL'] . ($nc_res[$i - 1]['Keyword'] ? $nc_res[$i - 1]['Keyword'] : $cc_env['EnglishName'] . "_" . $nc_res[$i - 1]['Message_ID']) . ".html";
                     }
                 }
             }
             // следующий объект
             if ($i < $db->num_rows - 1) {
                 if ($admin_mode) {
                     $nc_next_object = $admin_url_prefix . "full.php?catalogue=" . $catalogue . "&amp;sub=" . $sub . "&amp;cc=" . $cc . "&amp;message=" . $nc_res[$i + 1]['Message_ID'];
                 } else {
                     if ($routing_module_enabled) {
                         $nc_next_object = nc_routing::get_object_path($classID, array('site_id' => $catalogue, 'folder' => $cc_env['Hidden_URL'], 'folder_id' => $sub, 'infoblock_id' => $nc_res[$i + 1]['Sub_Class_ID'], 'object_id' => $nc_res[$i + 1]['Message_ID'], 'object_keyword' => $nc_res[$i + 1]['Keyword']));
                     } else {
                         $nc_next_object = $cc_env['Hidden_URL'] . ($nc_res[$i + 1]['Keyword'] ? $nc_res[$i + 1]['Keyword'] : $cc_env['EnglishName'] . "_" . $nc_res[$i + 1]['Message_ID']) . ".html";
                     }
                 }
             }
             break;
         }
     }
     unset($nc_res);
 }
 // add form from the AddTemplate
 if (nc_strpos($component_body, '$addForm') !== false) {
     if ($cc_env['File_Mode']) {
         $nc_parent_field_path = $file_class->get_parent_fiend_path('AddTemplate');
         $nc_field_path = $file_class->get_field_path('AddTemplate');
Пример #18
0
function nc_subclass_show_export($type, $sub_id, $cc_id, $show_name = 0, $from_sub = 0)
{
    $nc_core = nc_Core::get_object();
    $db = $nc_core->db;
    $sub_id = +$sub_id;
    $cc_id = +$cc_id;
    if (!in_array($type, array('rss', 'xml'))) {
        return;
    }
    $Array = $db->get_row("SELECT `Allow" . strtoupper($type) . "`, `Sub_Class_Name`,`Class_ID`, `EnglishName` FROM `Sub_Class` WHERE `Sub_Class_ID` = '" . $cc_id . "' ", ARRAY_A);
    $class_id = $Array['Class_ID'];
    $name = $show_name ? "<b>" . $Array['Sub_Class_Name'] . "</b> " : "";
    $export_class_id = $db->get_var("SELECT `Class_ID` FROM `Class` WHERE `Type` = '" . $type . "' AND `ClassTemplate` = '" . $class_id . "' ");
    $File_Mode = nc_get_file_mode('Class', $class_id);
    $html = "<div>";
    if (!$export_class_id) {
        $html .= "<font>" . sprintf(constant("CONTROL_CLASS_COMPONENT_TEMPLATE_FOR_" . strtoupper($type) . "_DOESNT_EXIST"), $name) . "</font>";
        $html .= "<br/>";
        $html .= "<a  onClick='parent.nc_form(this.href); location.reload(); return false;' href='" . $nc_core->ADMIN_PATH . "class/index.php?fs={$File_Mode}&" . $nc_core->token->get_url() . "&amp;from_sub=" . $sub_id . ($from_sub ? "" : "&amp;from_cc=" . $cc_id) . "&amp;Type=" . $type . "&amp;base=auto&amp;phase=1411&amp;ClassID=" . $class_id . "'>" . constant("CONTROL_CLASS_COMPONENT_TEMPLATE_CREATE_FOR_" . strtoupper($type)) . "</a>";
    } else {
        $host = $nc_core->catalogue->get_by_id($nc_core->sub_class->get_by_id($cc_id, 'Catalogue_ID'), 'Domain');
        if (nc_module_check_by_keyword('routing')) {
            $link = "http://{$host}" . nc_routing::get_infoblock_path($cc_id, 'index', $type);
        } else {
            $link = $nc_core->SUB_FOLDER . $db->get_var("SELECT `Hidden_URL` FROM `Subdivision` WHERE `Subdivision_ID` = '" . $sub_id . "' ");
            $link = 'http://' . $host . $link . $Array['EnglishName'] . "." . $type;
        }
        $html .= "<input type='checkbox' id='Allow" . strtoupper($type) . "" . $cc_id . "' name='Allow" . strtoupper($type) . "" . $cc_id . "' value='1' " . ($Array["Allow" . strtoupper($type) . ""] ? " checked" : "") . " /><label for='Allow" . strtoupper($type) . "" . $cc_id . "'>" . constant("CONTROL_CLASS_COMPONENT_TEMPLATE_TURN_ON_" . strtoupper($type)) . " " . $name . "</label>";
        $html .= "  ( ";
        if ($Array["Allow" . strtoupper($type) . ""]) {
            $html .= "<a target='_blank' href='" . $link . "'>" . CONTROL_CLASS_COMPONENT_TEMPLATE_VIEW . "</a>, ";
        }
        $html .= " <a  onClick='parent.nc_form(this.href); return false; ' href='" . $nc_core->ADMIN_PATH . "class/index.php?fs=" . $File_Mode . "&phase=4&amp;ClassID=" . $export_class_id . "'>" . CONTROL_CLASS_COMPONENT_TEMPLATE_EDIT . "</a> )";
    }
    $html .= "</div>";
    return $html;
}