Example #1
0
/**
 * Delete all objects from SubClass
 *
 * @param int SubClassID
 */
function SubClassClear($SubClassID)
{
    global $nc_core, $db, $MODULE_FOLDER;
    // full info about this subclass
    $SubClassID = intval($SubClassID);
    $res = $db->get_row("SELECT `Catalogue_ID`, `Subdivision_ID`, `Class_ID` FROM `Sub_Class` WHERE `Sub_Class_ID` = '" . $SubClassID . "'", ARRAY_A);
    if (nc_module_check_by_keyword("comments")) {
        include_once $MODULE_FOLDER . "comments/function.inc.php";
        // delete comment rules
        nc_comments::dropRuleSubClass($db, $SubClassID);
        // delete comments
        nc_comments::dropComments($db, $SubClassID, "Sub_Class");
    }
    DeleteSubClassFiles($SubClassID, $res['Class_ID']);
    // delete from message
    $messages_id = $db->get_col("SELECT `Message_ID` FROM `Message" . $res['Class_ID'] . "` WHERE `Subdivision_ID` = '" . $res['Subdivision_ID'] . "' AND `Sub_Class_ID` = '" . $SubClassID . "'");
    if (!empty($messages_id)) {
        if ($db->query("SELECT * FROM `Message" . $res['Class_ID'] . "` WHERE `Message_ID` IN (" . join(", ", $messages_id) . ")")) {
            $messages_data = array_combine($db->get_col(NULL, 0), $db->get_results(NULL));
        }
        // execute core action
        $nc_core->event->execute("dropMessagePrep", $res['Catalogue_ID'], $res['Subdivision_ID'], $SubClassID, $res['Class_ID'], $messages_id, $messages_data);
        $db->query("DELETE FROM `Message" . $res['Class_ID'] . "` WHERE `Message_ID` IN (" . join(", ", $messages_id) . ")");
        // execute core action
        $nc_core->event->execute("dropMessage", $res['Catalogue_ID'], $res['Subdivision_ID'], $SubClassID, $res['Class_ID'], $messages_id, $messages_data);
    }
    return;
}
Example #2
0
 protected function __construct()
 {
     $this->nc_core = nc_core();
     $this->table = nc_db_table::make('Subdivision');
     $this->file_table = nc_db_table::make('Filetable', 'ID');
     $this->routing_module_enabled = nc_module_check_by_keyword('routing');
     $this->current_page_url = urldecode(strtok($_SERVER['REQUEST_URI'], '?'));
     $this->current_sub_url = substr($this->current_page_url, 0, strrpos($this->current_page_url, "/") + 1);
     if (!empty($GLOBALS['current_sub'])) {
         $this->set_current_sub($GLOBALS['current_sub']);
     }
     $this->reset();
 }
Example #3
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;
}
Example #4
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;
}
Example #5
0
File: add.php Project: Blu2z/implsk
 for ($i = 0; $i < count($tmpFile); $i++) {
     # array $File_Path is defined in message_put.php
     # !!possibly we've moved file there already!!
     eval("\$tmpNewFile[\$i] = \"" . $tmpNewFile[$i] . "\";");
     @rename($FILES_FOLDER . $tmpFile[$i], $FILES_FOLDER . $File_Path[$i] . $tmpNewFile[$i]);
     @chmod($FILES_FOLDER . $File_Path[$i] . $tmpNewFile[$i], $FILECHMOD);
 }
 if (!empty($fldFS)) {
     foreach ($fldFS as $id => $type) {
         if (NC_FS_SIMPLE == $type) {
             $field_url = ${"f_" . $fldName[$id] . "_url"};
             ${"f_" . $fldName[$id] . "_url"} = str_replace('$message', $message, $field_url);
         }
     }
 }
 if (nc_module_check_by_keyword("comments")) {
     // get rule id
     $CommentData = nc_comments::getRuleData($db, array($catalogue, $sub, $cc, $message));
     $CommentRelationID = $CommentData['ID'];
     $comm_env = array($catalogue, $sub, $cc, $message);
     // do something
     switch (true) {
         case $CommentAccessID > 0 && $CommentRelationID:
             // update comment rules
             nc_comments::updateRule($db, $comm_env, $CommentAccessID, $CommentsEditRules, $CommentsDeleteRules);
             break;
         case $CommentAccessID > 0 && !$CommentRelationID:
             // add comment relation
             $CommentRelationID = nc_comments::addRule($db, $comm_env, $CommentAccessID, $CommentsEditRules, $CommentsDeleteRules);
             break;
         case $CommentAccessID <= 0 && $CommentRelationID:
Example #6
0
function CascadeDeleteCatalogue($catalogueId)
{
    global $nc_core, $db, $MODULE_FOLDER;
    $catalogueId = (int) $catalogueId;
    $subClasses = (array) $db->get_results("SELECT `Subdivision_ID`, `Sub_Class_ID`, `Class_ID` FROM `Sub_Class` WHERE `Catalogue_ID` = {$catalogueId}", ARRAY_A);
    // execute core action
    $nc_core->event->execute("dropCataloguePrep", $catalogueId);
    $subdivisionsToDelete = array();
    //delete messages
    foreach ($subClasses as $subClass) {
        $subdivisionId = (int) $subClass['Subdivision_ID'];
        $subClassId = (int) $subClass['Sub_Class_ID'];
        $classId = (int) $subClass['Class_ID'];
        $subdivisionsToDelete[] = $subdivisionId;
        $subClassesToDelete[] = $subClassId;
        $messages = (array) $db->get_results("SELECT `Message_ID` FROM `Message{$classId}` WHERE `Sub_Class_ID` = {$subClassId}", ARRAY_A);
        $messagesToDelete = array();
        foreach ($messages as $message) {
            $messagesToDelete[] = (int) $message['Message_ID'];
        }
        if (count($messagesToDelete) > 0) {
            // execute core action
            $nc_core->event->execute("dropMessagePrep", $catalogueId, $subdivisionId, $subClassId, $classId, $messagesToDelete);
            // delete messages
            foreach ($messagesToDelete as $messageId) {
                DeleteMessageFiles($classId, $messageId);
                $db->query("DELETE FROM `Message{$classId}` WHERE `Message_ID` = {$messageId}");
            }
            // execute core action
            $nc_core->event->execute("dropMessage", $catalogueId, $subdivisionId, $subClassId, $classId, $messagesToDelete);
        }
        //delete subclass
        // execute core action
        $nc_core->event->execute("dropSubClassPrep", $catalogueId, $subdivisionId, $subClassId);
        $db->query("DELETE FROM `Sub_Class` WHERE `Sub_Class_ID` = {$subClassId}");
        DeleteSubClassDirAlways($subdivisionId, $subClassId);
        // execute core action
        $nc_core->event->execute("dropSubClass", $catalogueId, $subdivisionId, $subClassId);
    }
    if (count($subdivisionsToDelete) > 0) {
        // execute core action
        $nc_core->event->execute("dropSubdivisionPrep", $catalogueId, $subdivisionsToDelete);
        foreach ($subdivisionsToDelete as $subdivisionId) {
            $db->query("DELETE FROM `Subdivision` WHERE `Subdivision_ID` = {$subdivisionId}");
            DeleteSubdivisionDir($subdivisionId);
        }
        // execute core action
        $nc_core->event->execute("dropSubdivision", $catalogueId, $subdivisionsToDelete);
    }
    if (nc_module_check_by_keyword("comments")) {
        include_once $MODULE_FOLDER . "comments/function.inc.php";
        // delete comment rules
        nc_comments::dropRule($db, array($catalogueId));
        // delete comments
        nc_comments::dropComments($db, $catalogueId, "Catalogue");
    }
    // delete catalogue
    $db->query("DELETE FROM `Catalogue` WHERE `Catalogue_ID` = {$catalogueId}");
    // execute core action
    $nc_core->event->execute("dropCatalogue", $catalogueId);
    return;
}
Example #7
0
File: ui.php Project: Blu2z/implsk
 /**
  * Получить путь до раздела поиска на сайте с указанным идентификатором.
  * @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];
 }
Example #8
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();
     }
 }
Example #9
0
function nc_calendar_cache()
{
    global $MODULE_FOLDER;
    if (nc_module_check_by_keyword("cache")) {
        // include need classes
        include_once $MODULE_FOLDER . "cache/function.inc.php";
    }
    return;
}
Example #10
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;
}
Example #11
0
 /**
  * страница изменения данных пользователя
  * (вкладки: пользователь; права)
  * @param integer user id
  * @param string login
  * @param string active tab ('user'; 'rights')
  * @param string optinal - адрес страницы (если пустой - сформировать)
  */
 function user_page($user_id, $user_login, $active_tab, $hash = "")
 {
     global $perm, $nc_core;
     $db = $nc_core->db;
     $MODULE_VARS = $nc_core->modules->get_module_vars();
     $this->headerText = CONTROL_USER . ' ' . addslashes($user_login);
     $this->headerImage = "i_user_big.gif";
     // пользователь, права
     $this->tabs[0] = array('id' => 'edit', 'caption' => CONTROL_USER, 'location' => "user.edit({$user_id})");
     if ($perm->isAccess(NC_PERM_ITEM_USER, NC_PERM_ACTION_RIGHT, $user_id)) {
         $this->tabs[1] = array('id' => 'rights', 'caption' => SECTION_INDEX_USER_RIGHTS_RIGHTS, 'location' => "user.rights({$user_id})");
         if (nc_module_check_by_keyword('subscriber', 0)) {
             $this->tabs[2] = array('id' => 'subscribers', 'caption' => SECTION_INDEX_USER_SUBSCRIBERS, 'location' => "user.subscribers({$user_id})");
         }
     }
     $this->activeTab = $active_tab;
     if (!$perm->isAccess(NC_PERM_ITEM_USER, NC_PERM_ACTION_RIGHT, $user_id)) {
         $this->activeTab = 'user';
     }
     $this->locationHash = $hash ? $hash : "user.{$active_tab}({$user_id})";
 }
Example #12
0
    $sub = $title_sub;
    $nc_core->subdivision->set_current_by_id($sub);
    $cc_in_sub = $nc_core->sub_class->get_by_subdivision_id($sub);
    foreach ((array) $cc_in_sub as $row) {
        if ($row['Checked'] || $row['sysTbl'] == 3) {
            $cc_array[] = $row['Sub_Class_ID'];
        }
    }
    if (count($cc_array)) {
        $cc = $_db_cc = $cc_array[0];
    }
} else {
    $routing_result = nc_resolve_url($nc_core->url, $_SERVER['REQUEST_METHOD']);
    // принятие решения о необходимости переадресации или добавления канонического адреса
    // (только при включённом модуле маршрутизации)
    if (is_array($routing_result) && nc_module_check_by_keyword('routing')) {
        $routing_duplicate_route_action = nc_routing::get_setting('DuplicateRouteAction', $catalogue);
        if ($routing_duplicate_route_action != nc_routing::DUPLICATE_ROUTE_NO_ACTION) {
            // попробуем получить путь, соответствующий полученным параметрам
            $routing_canonical_request = $routing_result;
            $routing_result_variables = nc_array_value($routing_result, 'variables', array());
            if ($routing_result_variables) {
                // подходящий маршрут должен содержать эти переменные в «дополнительных переменных» (query_variables)
                $routing_canonical_request['route_variables'] = $routing_result_variables;
            }
            // добавим GET-переменные, если они есть
            if ($nc_core->input->fetch_get()) {
                $routing_canonical_request['variables'] = array_merge((array) $nc_core->input->fetch_get(), $routing_result_variables);
            }
            unset($routing_canonical_request['variables']['REQUEST_URI']);
            if ($routing_canonical_request['resource_type'] == 'object') {
Example #13
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;
}
Example #14
0
<?php

/* $Id: function.inc.php 6206 2012-02-10 10:12:34Z denis $ */
$NETCAT_FOLDER = join(strstr(__FILE__, "/") ? "/" : "\\", array_slice(preg_split("/[\\/\\\\]+/", __FILE__), 0, -4)) . (strstr(__FILE__, "/") ? "/" : "\\");
include_once $NETCAT_FOLDER . "vars.inc.php";
global $MODULE_FOLDER;
// include need classes
include_once $MODULE_FOLDER . "cache/nc_cache.class.php";
include_once $MODULE_FOLDER . "cache/nc_cache_list.class.php";
include_once $MODULE_FOLDER . "cache/nc_cache_full.class.php";
include_once $MODULE_FOLDER . "cache/nc_cache_browse.class.php";
include_once $MODULE_FOLDER . "cache/nc_cache_function.class.php";
include_once $MODULE_FOLDER . "cache/nc_cache_io.class.php";
// modules classes
if (nc_module_check_by_keyword("calendar", 0)) {
    include_once $MODULE_FOLDER . "cache/modules/nc_cache_calendar.class.php";
}
// load objects for inside_admin events
nc_cache_browse::getObject();
nc_cache_full::getObject();
nc_cache_list::getObject();
nc_cache_function::getObject();
if (nc_module_check_by_keyword("calendar", 0)) {
    nc_cache_calendar::getObject();
}
Example #15
0
function CascadeDeleteSubdivision($SubdivisionID)
{
    global $nc_core, $db, $MODULE_FOLDER;
    $CatalogueID = $db->get_var("SELECT `Catalogue_ID` FROM `Subdivision` WHERE `Subdivision_ID` = '" . (int) $SubdivisionID . "'");
    // execute core action
    $nc_core->event->execute("dropSubdivisionPrep", $CatalogueID, $SubdivisionID);
    if (0 && nc_module_check_by_keyword("comments")) {
        include_once $MODULE_FOLDER . "comments/function.inc.php";
        // delete comment rules
        nc_comments::dropRule($db, array($CatalogueID, $SubdivisionID));
        // delete comments
        nc_comments::dropComments($db, $SubdivisionID, "Subdivision");
    }
    DeleteMessages($SubdivisionID);
    DeleteFromSubClass($SubdivisionID);
    DeleteSubdivisionDir($SubdivisionID);
    $db->query("DELETE FROM `Subdivision` WHERE `Subdivision_ID` = '" . (int) $SubdivisionID . "'");
    // execute core action
    $nc_core->event->execute("dropSubdivision", $CatalogueID, $SubdivisionID);
    return;
}
Example #16
0
function ActionSubClassCompleted($type)
{
    global $nc_core, $db, $ClassID;
    global $loc, $ADMIN_FOLDER, $MODULE_FOLDER, $CustomSettings;
    $params = array('Priority', 'Checked', 'SubClassName', 'EnglishName', 'Class_Template_ID', 'DefaultAction', 'isNakedCC', 'AllowTags', 'NL2BR', 'UseCaptcha', 'RecordsPerPage', 'SortBy', 'Read_Access_ID', 'Write_Access_ID', 'Cache_Lifetime', 'Edit_Access_ID', 'Checked_Access_ID', 'Delete_Access_ID', 'Moderation_ID', 'CacheAccessID', 'CacheLifetime', 'CacheForUser', 'CommentAccessID', 'Edit_Class_Template', 'CommentsEditRules', 'CommentsDeleteRules', 'SubClassID', 'SubdivisionID', 'CatalogueID', 'SrcMirror', 'Cache_Access_ID');
    foreach ($params as $v) {
        ${$v} = $nc_core->input->fetch_get_post($v);
    }
    //транслитерация, если пустой EnglishName
    if (empty($EnglishName)) {
        $EnglishName = nc_transliterate($SubClassName, true);
    }
    // проверка на валидность
    $EnglishName = nc_check_english_name((int) $SubClassID, $EnglishName, 2);
    if (nc_module_check_by_keyword("comments")) {
        include_once $MODULE_FOLDER . "comments/function.inc.php";
    }
    if (+$_POST['is_mirror']) {
        $ClassID = $nc_core->sub_class->get_by_id(+$SrcMirror, 'Class_ID');
    }
    if ($Class_Template_ID == $ClassID) {
        $Class_Template_ID = 0;
    }
    if ($Priority === '') {
        $Priority = $db->get_var("SELECT (`Priority` + 1) FROM `Sub_Class` WHERE `Subdivision_ID` = '" . $loc->SubdivisionID . "' ORDER BY `Priority` DESC LIMIT 1");
    }
    if ($type == 1) {
        if (nc_module_check_by_keyword("cache")) {
            $cache_insert_fields = "`Cache_Access_ID`, `Cache_Lifetime`, `CacheForUser`,";
            $cache_insert_values = "'" . $Cache_Access_ID . "', '" . $Cache_Lifetime . "', '" . $CacheForUser . "',";
        } else {
            $cache_insert_fields = "";
            $cache_insert_values = "";
        }
        $insert = "INSERT INTO `Sub_Class` (" . $cache_insert_fields . "`Subdivision_ID`, `Catalogue_ID`, `Class_ID`, `Sub_Class_Name`, `Read_Access_ID`, `Write_Access_ID`, `Edit_Access_ID`, `Checked_Access_ID`, `Delete_Access_ID`, `Subscribe_Access_ID`, `Moderation_ID`, `Checked`, `Priority`, `EnglishName`, `DaysToHold`, `AllowTags`, `NL2BR`, `RecordsPerPage`, `SortBy`, `Created`, `DefaultAction`, `UseCaptcha`, `CustomSettings`, `Class_Template_ID`, `isNaked`, `SrcMirror`)";
        $insert .= " VALUES (" . $cache_insert_values . "'" . $loc->SubdivisionID . "', '" . $loc->CatalogueID . "', '" . $ClassID . "', '" . $db->escape($SubClassName) . "', '" . $Read_Access_ID . "', '" . $Write_Access_ID . "', '" . $Edit_Access_ID . "', '" . $Checked_Access_ID . "','" . $Delete_Access_ID . "','" . $SubscribeAccessID . "', '" . $Moderation_ID . "', '" . $Checked . "', '" . $Priority . "', '" . $EnglishName . "', ";
        $insert .= $DaysToHold == "" ? "NULL, " : "'" . $DaysToHold . "', ";
        $insert .= "'" . $AllowTags . "', ";
        $insert .= "'" . $NL2BR . "', ";
        $insert .= $RecordsPerPage == "" ? "NULL" : "'" . $RecordsPerPage . "'";
        $insert .= ",'{$SortBy}','" . date("Y-m-d H:i:s") . "','" . $DefaultAction . "', '" . $UseCaptcha . "', '" . addcslashes($CustomSettings, "'") . "', '" . $Class_Template_ID . "', '" . $isNakedCC . "', '" . $SrcMirror . "')";
        // execute core action
        $nc_core->event->execute("addSubClassPrep", $loc->CatalogueID, $loc->SubdivisionID, 0);
        $db->query($insert);
        // inserted ID
        $insertedSubClassID = $db->insert_id;
        // execute core action
        $nc_core->event->execute("addSubClass", $loc->CatalogueID, $loc->SubdivisionID, $insertedSubClassID);
        if (nc_module_check_by_keyword("comments")) {
            if ($CommentAccessID > 0) {
                // add comment relation
                $CommentRelationID = nc_comments::addRule($db, array($loc->CatalogueID, $loc->SubdivisionID, $insertedSubClassID), $CommentAccessID, $CommentsEditRules, $CommentsDeleteRules);
                // update inserted data
                $db->query("UPDATE `Sub_Class` SET `Comment_Rule_ID` = '" . (int) $CommentRelationID . "' WHERE `Sub_Class_ID` = '" . (int) $insertedSubClassID . "'");
            }
        }
        return $insertedSubClassID;
    }
    if ($type == 2) {
        $cur_checked = $db->get_var("SELECT `Checked` FROM `Sub_Class` WHERE `Sub_Class_ID` = '" . $SubClassID . "'");
        if (nc_module_check_by_keyword("comments")) {
            $CommentData = nc_comments::getRuleData($db, array($loc->CatalogueID, $loc->SubdivisionID, $SubClassID));
            $CommentRelationID = $CommentData['ID'];
            switch (true) {
                case $CommentAccessID > 0 && $CommentRelationID:
                    // update comment rules
                    nc_comments::updateRule($db, array($loc->CatalogueID, $loc->SubdivisionID, $SubClassID), $CommentAccessID, $CommentsEditRules, $CommentsDeleteRules);
                    break;
                case $CommentAccessID > 0 && !$CommentRelationID:
                    // add comment relation
                    $CommentRelationID = nc_comments::addRule($db, array($loc->CatalogueID, $loc->SubdivisionID, $SubClassID), $CommentAccessID, $CommentsEditRules, $CommentsDeleteRules);
                    break;
                case $CommentAccessID <= 0 && $CommentRelationID:
                    // delete comment rules
                    nc_comments::dropRuleSubClass($db, $SubClassID);
                    $CommentRelationID = 0;
                    break;
            }
        }
        $update = "UPDATE `Sub_Class` SET ";
        $update .= "`Sub_Class_Name` = '" . $db->escape($SubClassName) . "',";
        $update .= "`Read_Access_ID` = '" . $Read_Access_ID . "',";
        $update .= "`Write_Access_ID` = '" . $Write_Access_ID . "',";
        $update .= "`Edit_Access_ID` = '" . $Edit_Access_ID . "',";
        $update .= "`Checked_Access_ID` = '" . $Checked_Access_ID . "',";
        $update .= "`Delete_Access_ID` = '" . $Delete_Access_ID . "',";
        $update .= "`Subscribe_Access_ID` = '" . $SubscribeAccessID . "',";
        if (nc_module_check_by_keyword("cache")) {
            $update .= "`Cache_Access_ID` = '" . $Cache_Access_ID . "',";
            $update .= "`Cache_Lifetime` = '" . $Cache_Lifetime . "',";
            $update .= "`CacheForUser` = '" . $CacheForUser . "',";
        }
        if (nc_module_check_by_keyword("comments")) {
            $update .= "`Comment_Rule_ID` = '" . $CommentRelationID . "',";
        }
        $update .= "`Moderation_ID` = '" . $Moderation_ID . "',";
        $update .= "`Checked` = '" . $Checked . "',";
        //$update.= "`Priority` = '" . $Priority . "',";
        $update .= "`EnglishName` = '" . $EnglishName . "',";
        $update .= "`DefaultAction` = '" . $DefaultAction . "',";
        $update .= $DaysToHold == "" ? "`DaysToHold` = NULL," : "`DaysToHold` = '" . $DaysToHold . "',";
        $update .= "`AllowTags` = '" . $AllowTags . "',";
        $update .= "`NL2BR` = '" . $NL2BR . "',";
        $update .= $RecordsPerPage == "" ? "`RecordsPerPage` = NULL," : "`RecordsPerPage` = '" . $RecordsPerPage . "',";
        $update .= "`SortBy` = '" . $SortBy . "',";
        $update .= "`UseCaptcha` = '" . $UseCaptcha . "', ";
        $update .= "`CustomSettings` = '" . $db->escape(addcslashes($CustomSettings, "'")) . "', ";
        $update .= "`Class_Template_ID` = '" . $Class_Template_ID . "', ";
        $update .= "`Edit_Class_Template` = '" . $Edit_Class_Template . "', ";
        $update .= "`isNaked` = '" . $isNakedCC . "', ";
        $update .= "`SrcMirror` = '" . $SrcMirror . "', ";
        $update .= "`AllowRSS` = '" . intval($nc_core->input->fetch_get_post('AllowRSS' . $SubClassID)) . "',";
        $update .= "`AllowXML` = '" . intval($nc_core->input->fetch_get_post('AllowXML' . $SubClassID)) . "'";
        $update .= " WHERE `Sub_Class_ID` = '" . $SubClassID . "'";
        $subclass_data = $nc_core->sub_class->get_by_id($SubClassID);
        $nc_core->event->execute("updateSubClassPrep", $subclass_data['Catalogue_ID'], $subclass_data['Subdivision_ID'], $SubClassID);
        if ($cur_checked != $Checked) {
            $nc_core->event->execute($Checked ? "checkSubClassPrep" : "uncheckSubClassPrep", $subclass_data['Catalogue_ID'], $subclass_data['Subdivision_ID'], $SubClassID);
        }
        $db->query($update);
        if ($db->is_error) {
            throw new nc_Exception_DB_Error($db->last_query, $db->last_error);
        }
        // execute core action
        $nc_core->event->execute("updateSubClass", $subclass_data['Catalogue_ID'], $subclass_data['Subdivision_ID'], $SubClassID);
        // произошло включение / выключение
        if ($cur_checked != $Checked) {
            $nc_core->event->execute($Checked ? "checkSubClass" : "uncheckSubClass", $subclass_data['Catalogue_ID'], $subclass_data['Subdivision_ID'], $SubClassID);
        }
        return $db->rows_affected;
    }
}
Example #17
0
function ActionCatalogueCompleted($CatalogueID, $type)
{
    global $nc_core, $db, $ROOT_FOLDER, $admin_mode;
    global $systemTableID, $systemTableName;
    global $FILES_FOLDER, $INCLUDE_FOLDER;
    global $FILECHMOD, $DIRCHMOD, $ADMIN_FOLDER, $MODULE_FOLDER;
    global $CatalogueID;
    if (isset($_POST['nc_shop_mode_' . $CatalogueID]) && +$_POST['nc_shop_mode_' . $CatalogueID] != $nc_core->get_settings('nc_shop_mode_' . $CatalogueID)) {
        $nc_core->set_settings('nc_shop_mode_' . $CatalogueID, +$_POST['nc_shop_mode_' . $CatalogueID]);
    }
    require_once $INCLUDE_FOLDER . "s_files.inc.php";
    $is_there_any_files = getFileCount(0, $systemTableID);
    $lm_type = $nc_core->page->get_field_name('last_modified_type');
    if ($type == 1) {
        $action = "add";
    }
    if ($type == 2) {
        $CatalogueID = intval($CatalogueID);
        $action = "change";
        $message = $CatalogueID;
    }
    $sm_field = $nc_core->page->get_field_name('sitemap_include');
    $sm_change_field = $nc_core->page->get_field_name('sitemap_changefreq');
    $sm_priority_field = $nc_core->page->get_field_name('sitemap_priority');
    $params = array('Catalogue_Name', 'Domain', 'Template_ID', 'Read_Access_ID', 'Write_Access_ID', 'Edit_Access_ID', 'Subscribe_Access_ID', 'Checked_Access_ID', 'Delete_Access_ID', 'Moderation_ID', 'Checked', 'Priority', 'Mirrors', 'Robots', 'Cache_Access_ID', 'Cache_Lifetime', 'TitleSubIDName', 'DisplayType', 'TitleSubIDKeyword', 'TitleTemplateID', 'E404SubIDName', 'E404SubIDKeyword', 'TitleSubID', 'E404SubID', 'E404TemplateID', 'CommentsEditRules', 'CommentAccessID', 'CommentsDeleteRules', 'posting', 'last_modified_type', 'DisallowIndexing', 'ncOfflineText', 'ncMobile', 'ncMobileSrc', 'ncMobileRedirect', 'ncMobileIdentity');
    if ($nc_core->modules->get_by_keyword('search')) {
        $params = array_merge($params, array($sm_field, $sm_change_field, $sm_priority_field));
    }
    foreach ($params as $v) {
        global ${$v};
    }
    $st = new nc_Component(0, 1);
    foreach ($st->get_fields() as $v) {
        $name = 'f_' . $v['name'];
        global ${$name};
        if ($v['type'] == 6) {
            global ${$name . "_old"};
            global ${"f_KILL" . $v['id']};
        }
        if ($v['type'] == 8) {
            global ${$name . "_day"};
            global ${$name . "_month"};
            global ${$name . "_year"};
            global ${$name . "_hours"};
            global ${$name . "_minutes"};
            global ${$name . "_seconds"};
        }
    }
    $Checked = intval($Checked);
    $Mirrors = str_replace(array("http://", "https://", "/"), "", $Mirrors);
    $Priority += 0;
    $Template_ID = intval($Template_ID);
    $posting = 1;
    // prepare template custom settings
    $settings = $db->get_var("SELECT CustomSettings FROM Template WHERE Template_ID = '" . $Template_ID . "'");
    if ($settings) {
        require_once $ADMIN_FOLDER . "array_to_form.inc.php";
        $a2f = new nc_a2f($settings, 'TemplateSettings');
        if ($a2f->has_errors()) {
            $warnText = $a2f->get_validation_errors();
            $posting = 0;
        }
        $a2f->save($_POST['TemplateSettings']);
        $TemplateSettings = $a2f->get_values_as_string();
        $TemplateSettings = addcslashes($TemplateSettings, "'");
    } else {
        $TemplateSettings = "";
    }
    require $ROOT_FOLDER . "message_fields.php";
    if ($posting == 0) {
        nc_print_status($warnText, 'error');
        CatalogueForm($CatalogueID, 3, "index.php", $type, $action);
        return false;
    }
    require $ROOT_FOLDER . "message_put.php";
    if (nc_module_check_by_keyword("comments")) {
        include_once $MODULE_FOLDER . "comments/function.inc.php";
    }
    switch ($ncMobile) {
        case 2:
            $ncMobile = 0;
            $ncResponsive = 1;
            break;
        case 1:
            $ncMobile = 1;
            $ncResponsive = 0;
            break;
        default:
            $ncMobile = 0;
            $ncResponsive = 0;
            break;
    }
    if ($type == 1) {
        $insert = "INSERT INTO `Catalogue` (";
        for ($i = 0; $i < $fldCount; $i++) {
            if ($fldTypeOfEdit[$i] == 3) {
                continue;
            }
            $insert .= $fld[$i] . ",";
        }
        if (nc_module_check_by_keyword("cache")) {
            $insert .= "`Cache_Access_ID`, `Cache_Lifetime`,";
        }
        $insert .= "`Catalogue_Name`, `Domain`, `" . $nc_core->page->get_field_name('language') . "`, `Template_ID`,  `Read_Access_ID`, `Write_Access_ID`, `Edit_Access_ID`, `Checked_Access_ID`, `Delete_Access_ID`, `Subscribe_Access_ID`, `Moderation_ID`, `Checked`, `Priority`, `Created`, `Mirrors`, `Robots`, `" . $lm_type . "`, `TemplateSettings` , `ncOfflineText`, `ncMobile`, `ncMobileSrc`, `ncMobileRedirect`, `ncMobileIdentity`, `ncResponsive`) ";
        $insert .= "VALUES (";
        for ($i = 0; $i < $fldCount; $i++) {
            if ($fldTypeOfEdit[$i] == 3 || $fldTypeOfEdit[$i] == 2 && !nc_field_check_admin_perm()) {
                continue;
            }
            // поле недоступно никому или доступно администратору но нет прав администратора
            if (isset(${$fld[$i] . 'Defined'}) && ${$fld[$i] . 'Defined'} == true) {
                $insert .= ${$fld[$i] . 'NewValue'} . ",";
            } else {
                $insert .= $fldValue[$i] . ",";
            }
        }
        if (nc_module_check_by_keyword("cache")) {
            $insert .= "'" . intval($Cache_Access_ID) . "',";
            $insert .= "'" . intval($Cache_Lifetime) . "',";
        }
        $insert .= "'" . $db->escape($Catalogue_Name) . "',";
        $insert .= "'" . $db->escape($Domain) . "',";
        $insert .= "'" . $db->escape($nc_core->input->fetch_get_post('language') != '' ? $nc_core->input->fetch_get_post('language') : MAIN_LANG) . "',";
        $insert .= "'" . $db->escape($Template_ID) . "',";
        $insert .= "'" . intval($Read_Access_ID) . "',";
        $insert .= "'" . intval($Write_Access_ID) . "',";
        $insert .= "'" . intval($Edit_Access_ID) . "',";
        $insert .= "'" . intval($Checked_Access_ID) . "',";
        $insert .= "'" . intval($Delete_Access_ID) . "',";
        $insert .= "'" . intval($Subscribe_Access_ID) . "',";
        $insert .= "'" . intval($Moderation_ID) . "',";
        $insert .= "'" . intval($Checked) . "',";
        $insert .= "'" . intval($Priority) . "',";
        $insert .= "'" . date("Y-m-d H:i:s") . "',";
        $insert .= "'" . $db->escape($Mirrors) . "',";
        $insert .= "'" . $db->escape($Robots) . "',";
        $insert .= "'" . intval($last_modified_type) . "',";
        $insert .= "'" . $db->escape($TemplateSettings) . "',";
        $insert .= "'" . $db->escape($ncOfflineText) . "',";
        $insert .= "'" . intval($ncMobile) . "',";
        $insert .= "'" . intval($ncMobileSrc) . "',";
        $insert .= "'" . intval($ncMobileRedirect) . "',";
        $insert .= "'" . intval($ncMobileIdentity) . "',";
        $insert .= "'" . intval($ncResponsive) . "'";
        $insert .= ")";
        // execute core action
        $nc_core->event->execute("addCataloguePrep", 0);
        $db->query($insert);
        if ($db->is_error) {
            throw new nc_Exception_DB_Error($db->last_query, $db->last_error);
        }
        $CatalogueID = $db->insert_id;
        // execute core action
        $nc_core->event->execute("addCatalogue", $CatalogueID);
        $message = $CatalogueID;
        if (nc_module_check_by_keyword("comments")) {
            if ($CommentAccessID > 0) {
                // add comment relation
                $CommentRelationID = nc_comments::addRule($db, array($message), $CommentAccessID, $CommentsEditRules, $CommentsDeleteRules);
                // update inserted data
                $db->query("UPDATE `Catalogue` SET `Comment_Rule_ID` = '" . (int) $CommentRelationID . "' WHERE `Catalogue_ID` = '" . (int) $message . "'");
            }
        }
        // проверка названия раздела
        if (!$TitleSubIDName || !$E404SubIDName) {
            nc_print_status(CONTROL_CONTENT_SUBDIVISION_INDEX_ERROR_THREE_NAME, 'error');
            return false;
        }
        // проверка символов для ключевого слова
        if (!$nc_core->subdivision->validate_hidden_url($TitleSubIDKeyword) || !$nc_core->subdivision->validate_hidden_url($E404SubIDKeyword)) {
            nc_print_status(CONTROL_CONTENT_SUBDIVISION_SUBCLASS_ERROR_KEYWORD_INVALID, 'error');
            return false;
        }
        // execute core action
        $nc_core->event->execute("addSubdivisionPrep", $CatalogueID, 0);
        // Добавление раздела для титульной страницы
        $db->query("INSERT INTO `Subdivision`\n      SET `Catalogue_ID` = '" . intval($CatalogueID) . "',\n      `Parent_Sub_ID` = 0,\n      `Subdivision_Name` = '" . $db->escape($TitleSubIDName) . "',\n      `Template_ID` = '" . intval($TitleTemplateID) . "',\n      `Checked` = 0,\n      `EnglishName` = '" . $db->escape($TitleSubIDKeyword) . "',\n      `Hidden_URL` = '/" . $db->escape($TitleSubIDKeyword) . "/',\n      `Priority` = 0");
        $title_sub_id = $db->insert_id;
        // execute core action
        $nc_core->event->execute("addSubdivision", $CatalogueID, $title_sub_id);
        // execute core action
        $nc_core->event->execute("addSubdivisionPrep", $CatalogueID, 0);
        // Добавление раздела для титульной страницы
        $db->query("INSERT INTO `Subdivision`\n      SET `Catalogue_ID` = '" . $CatalogueID . "',\n      `Parent_Sub_ID` = 0,\n      `Subdivision_Name` = '" . $db->escape($E404SubIDName) . "',\n      `Template_ID` = '" . intval($E404TemplateID) . "',\n      `Checked` = 0,\n      `EnglishName` = '" . $db->escape($E404SubIDKeyword) . "',\n      `Hidden_URL` = '/" . $db->escape($E404SubIDKeyword) . "/',\n      `Priority` = 1");
        $e404_sub_id = $db->insert_id;
        // execute core action
        $nc_core->event->execute("addSubdivision", $CatalogueID, $e404_sub_id);
        // для этого апдейта не нужно вызывать трансляцию события
        $db->query("UPDATE `Catalogue` SET `Title_Sub_ID` = '" . $title_sub_id . "', `E404_Sub_ID` = '" . $e404_sub_id . "' WHERE `Catalogue_ID` = '" . $CatalogueID . "'");
        //добавление системной настройки режима работы магазина.
        if (nc_module_check_by_keyword("netshop")) {
            $db->query("INSERT INTO `Settings` (`Key`, `Value`, `Module`, `Catalogue_ID`) VALUES ('nc_shop_mode_" . $CatalogueID . "', '2', 'system', '0')");
        }
    }
    if ($type == 2) {
        $cur_checked = $db->get_var("SELECT `Checked` FROM `Catalogue` WHERE `Catalogue_ID` = '" . $CatalogueID . "'");
        if (nc_module_check_by_keyword("comments")) {
            // get rule id
            $CommentData = nc_comments::getRuleData($db, array($CatalogueID));
            $CommentRelationID = $CommentData['ID'];
            // do something
            switch (true) {
                case $CommentAccessID > 0 && $CommentRelationID:
                    // update comment rules
                    nc_comments::updateRule($db, array($CatalogueID), $CommentAccessID, $CommentsEditRules, $CommentsDeleteRules);
                    break;
                case $CommentAccessID > 0 && !$CommentRelationID:
                    // add comment relation
                    $CommentRelationID = nc_comments::addRule($db, array($CatalogueID), $CommentAccessID, $CommentsEditRules, $CommentsDeleteRules);
                    break;
                case $CommentAccessID <= 0 && $CommentRelationID:
                    // delete comment rules
                    nc_comments::dropRuleCatalogue($db, $CatalogueID);
                    $CommentRelationID = 0;
                    break;
            }
        }
        $update = " UPDATE `Catalogue` SET ";
        for ($i = 0; $i < $fldCount; $i++) {
            if ($fldTypeOfEdit[$i] == 3) {
                continue;
            }
            // поле недоступно никому
            if (isset(${$fld[$i] . 'Defined'}) && ${$fld[$i] . 'Defined'} == true) {
                $update .= $fld[$i] . "=" . ${$fld[$i] . 'NewValue'} . ",";
            } else {
                $update .= $fld[$i] . "=" . $fldValue[$i] . ",";
            }
        }
        $update .= "`Catalogue_Name` = '" . $db->escape($Catalogue_Name) . "',";
        $update .= "`Domain` = '" . $db->escape($Domain) . "',";
        $update .= "`Template_ID` = " . intval($Template_ID) . ",";
        $update .= "`Read_Access_ID` = '" . intval($Read_Access_ID) . "',";
        $update .= "`Write_Access_ID` = '" . intval($Write_Access_ID) . "',";
        $update .= "`Edit_Access_ID` = '" . intval($Edit_Access_ID) . "',";
        $update .= "`Checked_Access_ID` = '" . intval($Checked_Access_ID) . "',";
        $update .= "`Delete_Access_ID` = '" . intval($Delete_Access_ID) . "',";
        $update .= "`Subscribe_Access_ID` = '" . intval($Subscribe_Access_ID) . "',";
        if (nc_module_check_by_keyword("cache")) {
            $update .= "`Cache_Access_ID` = '" . intval($Cache_Access_ID) . "',";
            $update .= "`Cache_Lifetime` = '" . intval($Cache_Lifetime) . "',";
        }
        if (nc_module_check_by_keyword("comments")) {
            $update .= "`Comment_Rule_ID` = '" . intval($CommentRelationID) . "',";
        }
        $update .= "`Moderation_ID` = '" . intval($Moderation_ID) . "',";
        $update .= "`Checked` = '" . intval($Checked) . "',";
        $update .= "`Priority` = '" . intval($Priority) . "',";
        $update .= "`Mirrors` = '" . $db->escape($Mirrors) . "',";
        $update .= "`Robots` = '" . $db->escape($Robots) . "',";
        $update .= "`Title_Sub_ID` = '" . intval($TitleSubID) . "',";
        $update .= "`E404_Sub_ID` = '" . intval($E404SubID) . "',";
        $update .= "`" . $lm_type . "` = '" . intval($last_modified_type) . "',";
        $update .= "`DisallowIndexing`= '" . intval($DisallowIndexing) . "',";
        $update .= "`" . $nc_core->page->get_field_name('language') . "` = '" . $nc_core->input->fetch_get_post('language') . "',";
        if ($nc_core->modules->get_by_keyword('search')) {
            $update .= "`" . $sm_field . "` = '" . $nc_core->input->fetch_get_post('sitemap_include') . "',";
            $update .= "`" . $sm_change_field . "` = '" . $nc_core->input->fetch_get_post('sitemap_changefreq') . "',";
            $update .= "`" . $sm_priority_field . "` = '" . str_replace(',', '.', sprintf("%.1f", doubleval($nc_core->input->fetch_get_post('sitemap_priority')))) . "',";
        }
        $update .= "`TemplateSettings` = '" . $db->escape($TemplateSettings) . "',";
        $update .= "`ncOfflineText` = '" . $db->escape($ncOfflineText) . "',";
        $update .= "`ncMobile` = '" . intval($ncMobile) . "',";
        $update .= "`ncMobileSrc` = '" . intval($ncMobileSrc) . "',";
        $update .= "`ncMobileRedirect` = '" . intval($ncMobileRedirect) . "',";
        $update .= "`ncMobileIdentity` = '" . intval($ncMobileIdentity) . "',";
        $update .= "`ncResponsive` = '" . intval($ncResponsive) . "',";
        $update .= "`DisplayType` = '" . $db->escape($DisplayType) . "'";
        $update .= " WHERE `Catalogue_ID` = " . $CatalogueID;
        // execute core action
        $nc_core->event->execute("updateCataloguePrep", $CatalogueID);
        if ($cur_checked != $Checked) {
            $nc_core->event->execute($Checked ? "checkCataloguePrep" : "uncheckCataloguePrep", $CatalogueID);
        }
        $db->query($update);
        if ($db->is_error) {
            throw new nc_Exception_DB_Error($db->last_query, $db->last_error);
        }
        // execute core action
        $nc_core->event->execute("updateCatalogue", $CatalogueID);
        // произошло включение / выключение
        if ($cur_checked != $Checked) {
            $nc_core->event->execute($Checked ? "checkCatalogue" : "uncheckCatalogue", $CatalogueID);
        }
    }
    /*     * */
    if (is_array($filetable_lastid) && !empty($filetable_lastid)) {
        foreach ($filetable_lastid as $id) {
            $db->query("UPDATE `Filetable` SET `Message_ID` = '" . $message . "' WHERE `ID` = '" . intval($id) . "'");
        }
    }
    /*     * */
    if ($tmpFile) {
        @mkdir($FILES_FOLDER . "c/", $DIRCHMOD);
    }
    for ($i = 0; $i < count($tmpFile); $i++) {
        eval("\$tmpNewFile[\$i] = \"" . $tmpNewFile[$i] . "\";");
        if ($FileFS[$i] == NC_FS_PROTECTED || $FileFS[$i] == NC_FS_ORIGINAL) {
            @rename($nc_core->FILES_FOLDER . $tmpNewFile[$i], $nc_core->FILES_FOLDER . $File_PathNew[$i] . $tmpNewFile[$i]);
        } else {
            @rename($nc_core->FILES_FOLDER . $tmpFile[$i], $nc_core->FILES_FOLDER . $File_Path[$i] . $tmpNewFile[$i]);
        }
        @chmod($FILES_FOLDER . "c/" . $tmpNewFile[$i], $FILECHMOD);
    }
    // сброс
    $nc_core->catalogue->load_all();
    return true;
}
Example #18
0
 /**
  * Функция для удаления объектов компонентов
  * @param mixed `identificators` - идентификаторы объектов подлежащих удалению в виде массива, или цифры
  * @param int `class_id` номер компонента, в котором производится удаление
  * @param bool `trash` параметр, определяющий, перед будет ли объект помещен в корзину перед удалением. 1 - объект будет помещен в корзину, затем удален, 0 - объект будет удален.
  * @return int `affected` - затронутые объекты or false
  */
 public function delete_by_id($identificators, $class_id, $trash = false)
 {
     $nc_core = nc_Core::get_object();
     $MODULE_FOLDER = $nc_core->MODULE_FOLDER;
     // validate parameters
     $affected = 0;
     $classID = intval($class_id);
     // Приводим первый параметр к массиву
     if (!is_array($identificators)) {
         $messages_to_delete = array(intval($identificators));
     } else {
         $messages_to_delete = array_map("intval", $identificators);
     }
     if (empty($messages_to_delete)) {
         return 0;
     }
     // Выясняем данные по всем объектам для удаления - номера разделов,
     // компонентов в разделе и номера сайтов, а тажке формируем массив номеров удаляемых объектов
     $temp_array = $this->db->get_results("SELECT m.* , m.`Message_ID` AS `m_id`, m.`Subdivision_ID` as `sub_id`, m.`Sub_Class_ID` as `cc_id`, s.`Catalogue_ID` as `cat_id`\n    FROM `Message" . $classID . "` as m, `Subdivision` as s\n    WHERE m.`Subdivision_ID` = s.`Subdivision_ID` AND  m.`Message_ID` IN (" . join(',', $messages_to_delete) . ")", ARRAY_A);
     $message_to_delete = array();
     $message_to_delete_ids = array();
     $message_to_delete_data = array();
     if (!empty($temp_array)) {
         foreach ($temp_array as $v) {
             // группируем объекты по сайты/разделу/сс
             $message_to_delete[$v['cat_id']][$v['sub_id']][$v['cc_id']][] = intval($v['m_id']);
             $message_to_delete_data[$v['cat_id']][$v['sub_id']][$v['cc_id']][intval($v['m_id'])] = $v;
             $message_to_delete_ids[] = $v['m_id'];
         }
     } else {
         return 0;
     }
     $nc_core->event->execute("dropMessagePrep", $messages_to_delete);
     try {
         if ($trash) {
             $trashing_result_arr = $nc_core->trash->add($messages_to_delete, $classID);
         }
     } catch (nc_Exception_Trash_Full $e) {
         $trash = 0;
     } catch (nc_Exception_Trash_Folder_Fail $e) {
         $trash = 0;
     }
     // Удаляем комментарии
     if (nc_module_check_by_keyword("comments")) {
         include_once $MODULE_FOLDER . "comments/function.inc.php";
         // get need ids
         $comments_temp = $this->db->get_results("SELECT `Message_ID`, `Sub_Class_ID` FROM `Message" . $classID . "`\n      WHERE `Message_ID` IN (" . join(',', $message_to_delete_ids) . ") OR `Parent_Message_ID` IN (" . join(',', $message_to_delete_ids) . ")", ARRAY_A);
         // compile arrays
         $temp_messages = array();
         $temp_ccs = array();
         foreach ((array) $comments_temp as $comments_temp_value) {
             if (!in_array($comments_temp_value['Message_ID'], $temp_messages)) {
                 $temp_messages[] = $comments_temp_value['Message_ID'];
             }
             if (!in_array($comments_temp_value['Sub_Class_ID'], $temp_ccs)) {
                 $temp_ccs[] = $comments_temp_value['Sub_Class_ID'];
             }
         }
         // delete comments
         nc_comments::dropComments($this->db, $temp_ccs, "Sub_Class", $temp_messages);
         // delete comment rules
         nc_comments::dropRuleMessage($this->db, $temp_messages, $temp_ccs);
         // clear
         unset($comments_temp, $temp_ccs, $temp_messages);
     }
     // delete related files
     // поочередно удаляем файлы у всех перечисленных к удалению объектов
     // если они не отправляются в корзину, иначе файлам ставим метку deleted
     if (!$trash) {
         require_once $this->core->INCLUDE_FOLDER . "s_files.inc.php";
         foreach ($message_to_delete_ids as $id) {
             DeleteMessageFiles($classID, $id);
         }
     } else {
         $nc_core->trash->TrashMessageFiles($classID, $message_to_delete_ids);
     }
     // Удаляем сами объекты
     $this->db->query("DELETE FROM `Message" . $classID . "` WHERE `Message_ID` IN (" . join(',', $message_to_delete_ids) . ")");
     if ($this->db->is_error) {
         throw new nc_Exception_DB_Error($this->db->last_query, $this->db->last_error);
     } else {
         $affected = $this->db->rows_affected;
     }
     // execute core action
     if ($message_to_delete) {
         foreach ($message_to_delete as $site_id => $site) {
             foreach ($site as $sub_id => $sub) {
                 foreach ($sub as $cc_id => $messages_in_cc) {
                     $nc_core->event->execute("dropMessage", $site_id, $sub_id, $cc_id, $classID, $messages_in_cc, $message_to_delete_data[$site_id][$sub_id][$cc_id]);
                 }
             }
         }
     }
     $children_ids = $this->db->get_col("SELECT `Message_ID` FROM `Message" . $classID . "` WHERE `Parent_Message_ID` IN  (" . join(',', $message_to_delete_ids) . ")");
     if (!empty($children_ids)) {
         // delete related files
         if ($this->db->is_error) {
             throw new nc_Exception_DB_Error($this->db->last_query, $this->db->last_error);
         }
         $affected += $this->db->rows_affected;
         // execute core action
         $affected += $this->delete_by_id($children_ids, $classID, $trash);
     }
     return $affected;
 }
Example #19
0
/**
 *
 * @param int $sub
 * @param int $cc
 * @param string $query_string
 * @param bool $show_in_admin_mode
 * @param bool $get_current_cc
 * @return bool|string
 */
function nc_objects_list($sub, $cc, $query_string = "", $show_in_admin_mode = false, $get_current_cc = true)
{
    // *** Обработка параметров: $query_string ***
    $LIST_VARS = array();
    parse_str($query_string, $LIST_VARS);
    // переменные, которые не будут импортированы из $query_string:
    unset($LIST_VARS['sub'], $LIST_VARS['cc'], $LIST_VARS['show_in_admin_mode'], $LIST_VARS['get_current_cc'], $LIST_VARS['GLOBALS'], $LIST_VARS['_SERVER'], $LIST_VARS['_GET'], $LIST_VARS['_POST'], $LIST_VARS['_FILES'], $LIST_VARS['_COOKIE'], $LIST_VARS['_SESSION'], $LIST_VARS['_REQUEST'], $LIST_VARS['_ENV']);
    extract($LIST_VARS);
    // *** Глобальные переменные ***
    /** @var Permission $perm */
    global $UI_CONFIG, $perm, $_cache, $admin_url_prefix, $classPreview;
    global $AUTH_USER_ID, $AUTH_USER_GROUP, $current_user;
    global $sub_level_count, $parent_sub_tree;
    global $cc_array;
    // for old modules (forum)
    global $current_catalogue, $current_sub, $current_cc;
    global $nc_parent_template_folder_path;
    global $nc_minishop;
    // *** Необходимые локальные переменные ***
    $nc_core = nc_Core::get_object();
    $db = $nc_core->db;
    // modules variables
    $MODULE_VARS = $nc_core->modules->get_module_vars();
    // system variables
    $FILES_FOLDER = $nc_core->get_variable("FILES_FOLDER");
    $HTTP_ROOT_PATH = $nc_core->get_variable("HTTP_ROOT_PATH");
    $ADMIN_PATH = $nc_core->get_variable("ADMIN_PATH");
    $ADMIN_TEMPLATE = $nc_core->get_variable("ADMIN_TEMPLATE");
    $DOMAIN_NAME = $nc_core->get_variable("DOMAIN_NAME");
    $SHOW_MYSQL_ERRORS = $nc_core->get_variable("SHOW_MYSQL_ERRORS");
    $AUTHORIZE_BY = $nc_core->get_variable("AUTHORIZE_BY");
    $HTTP_FILES_PATH = $nc_core->get_variable("HTTP_FILES_PATH");
    $DOCUMENT_ROOT = $nc_core->get_variable("DOCUMENT_ROOT");
    $SUB_FOLDER = $nc_core->get_variable("SUB_FOLDER");
    $inside_admin = $nc_core->inside_admin;
    $admin_mode = $nc_core->admin_mode;
    $system_env = $nc_core->get_settings();
    $current_catalogue = $nc_core->catalogue->get_current();
    if ($get_current_cc) {
        $current_sub = $nc_core->subdivision->get_current();
        $current_cc = $nc_core->sub_class->get_current();
    }
    // [MERGE] $ignore_eval is always an empty array ?????????
    $ignore_eval = array();
    //$srchPat дважды urldecodeд и "+" теряется, берем значения из $_REQUEST которые уже один раз urldecodeд
    //если $_REQUEST['srchPat'] пустой, то srchPat передался через s_list_class, сохраняем его
    $srchPat = isset($srchPat) ? $nc_core->input->fetch_get_post('srchPat') ? $nc_core->input->fetch_get_post('srchPat') : $srchPat : null;
    // *** Санация переменных ***
    // [MERGE] not used, not in API
    //    $template = +$template;
    // [MERGE] assigned below
    //    $catalogue = +$catalogue;
    $sub = (int) $sub;
    $cc = (int) $cc;
    $parent_message = isset($parent_message) ? (int) $parent_message : 0;
    if (!$cc) {
        return false;
    }
    // *** Переменные, которые могут устанавливаться только в системных настройках ***
    $ignore_all = false;
    $ignore_catalogue = false;
    $ignore_sub = false;
    $ignore_cc = false;
    $ignore_check = false;
    $ignore_parent = false;
    $ignore_user = true;
    $ignore_calc = false;
    $ignore_link = false;
    $ignore_prefix = false;
    $ignore_suffix = false;
    $distinct = false;
    $distinctrow = false;
    $message_select = null;
    $query_from = null;
    $query_group = null;
    $query_join = null;
    $query_order = null;
    $query_select = null;
    $query_where = null;
    $query_having = null;
    $query_limit = null;
    $nc_data = null;
    $result_vars = '';
    // *** Значения по умолчанию / инициализация переменных ***
    if (!isset($nc_title)) {
        $nc_title = false;
    }
    if (!isset($isMainContent)) {
        $isMainContent = false;
    }
    if (!isset($isSubClassArray)) {
        $isSubClassArray = false;
    }
    if (!isset($cur_cc)) {
        $cur_cc = false;
    }
    if (!isset($curPos)) {
        $curPos = 0;
    }
    if (!isset($recNum)) {
        $recNum = 0;
    }
    if (!isset($list_mode)) {
        $list_mode = null;
    }
    if (!isset($nc_ctpl)) {
        $nc_ctpl = 0;
    }
    if (!$nc_ctpl && $nc_title) {
        $nc_ctpl = 'title';
    }
    $nc_ctpl = $nc_ctpl === 'title' ? $nc_ctpl : +$nc_ctpl;
    // [MERGE] was in _db version only
    //    if (+$_REQUEST['isModal']) {
    //        $inside_admin = false;
    //        $admin_mode = false;
    //    }
    // *** Информация о редактировании инфоблока из другого раздела ***
    if (($cc != $current_cc['Sub_Class_ID'] || !$isMainContent) && $admin_mode && !$show_in_admin_mode) {
        $Subdivision_ID = $nc_core->sub_class->get_by_id($cc, 'Subdivision_ID');
        $Subdivision_Name = $nc_core->subdivision->get_by_id($Subdivision_ID, 'Subdivision_Name');
        return nc_print_status(sprintf(CONTROL_CONTENT_SUBCLASS_EDIT_IN_PLACE, $SUB_FOLDER . $HTTP_ROOT_PATH . "index.php?sub=" . $Subdivision_ID . "&cc=" . $cc, $Subdivision_Name), 'info', null, true);
    }
    // *** Получение параметров инфоблока ***
    try {
        $cc_env = $nc_core->sub_class->get_by_id($cc, null, $nc_ctpl);
    } catch (Exception $e) {
        return $e->getMessage();
    }
    if ($admin_mode && $cc_env['Edit_Class_Template']) {
        try {
            $cc_env = $nc_core->sub_class->get_by_id($cc, null, $cc_env['Edit_Class_Template']);
        } catch (Exception $e) {
            return $e->getMessage();
        }
    }
    if ($admin_mode && $cc_env['Admin_Class_Template']) {
        $cc_env = $nc_core->sub_class->get_by_id($cc, null, $cc_env['Admin_Class_Template']);
    }
    // set user table mode
    $user_table_mode = (bool) $cc_env['System_Table_ID'];
    // Просмотр в виде таблицы
    $table_view_mode = (bool) $cc_env['TableViewMode'];
    // *** Зеркальные инфоблоки ***
    $_db_cc = $cc;
    $_db_sub = $sub;
    $_db_Class_ID = $cc_env['Real_Class_ID'];
    $_db_File_Path = $cc_env['File_Path'];
    $_db_File_Hash = $cc_env['File_Hash'];
    // Для зеркальных инфоблоков:
    //  — $cc_env — настройки основного (отражаемого) инфоблока
    //  — $mirror_env — настройки инфоблока-зеркала
    if ($cc_env['SrcMirror']) {
        $mirror_env = $cc_env;
        $cc_env = $nc_core->sub_class->get_by_id($cc_env['SrcMirror']);
        $cc = $cc_env['Sub_Class_ID'];
        $sub = $cc_env['Subdivision_ID'];
        $is_mirror = true;
    } else {
        $mirror_env = null;
        $is_mirror = false;
    }
    // записываем реальный номер шаблона компонента
    if ($nc_ctpl === 'title') {
        $nc_ctpl = $cc_env['Real_Class_ID'];
    }
    if (!$sub) {
        $sub = $cc_env['Subdivision_ID'];
    }
    if ($cc_env['Type'] == 'rss' || $cc_env['Type'] == 'xml') {
        $cc_env['Cache_Access_ID'] = 2;
    }
    // *** Режим работы: шаблоны в файлах или в базе? ***
    $component_file_mode = (bool) $cc_env['File_Mode'];
    if ($table_view_mode && $inside_admin) {
        $component_file_mode = true;
    }
    // *** Подготовка переменных для предварительного просмотра ***
    // если preview для нашего класса, то подменим cc_env из $_SESSION
    if ($classPreview == ($cc_env["Class_Template_ID"] ? $cc_env["Class_Template_ID"] : $cc_env["Class_ID"])) {
        $magic_gpc = get_magic_quotes_gpc();
        if (!empty($_SESSION["PreviewClass"][$classPreview])) {
            foreach ($_SESSION["PreviewClass"][$classPreview] as $tkey => $tvalue) {
                $cc_env[$tkey] = $magic_gpc ? stripslashes($tvalue) : $tvalue;
            }
        }
        // Запретим кеширование в режиме предпросмотра.
        $cc_env['Cache_Access_ID'] = 2;
    }
    // *** Проверка прав доступа ***
    if ($cc_env['Read_Access_ID'] > 1 && !$AUTH_USER_ID) {
        return false;
    }
    if ($AUTH_USER_ID && $cc_env['Read_Access_ID'] > 2) {
        if (!CheckUserRights($cc, 'read', 1)) {
            return false;
        }
    }
    // *** Состояние модулей, влияющих на работу данной функции ***
    $routing_module_enabled = nc_module_check_by_keyword('routing');
    $cache_module_enabled = nc_module_check_by_keyword('cache');
    // *** Проверка наличия результата в кэше ***
    $nc_cache_list = null;
    $cached_result = -1;
    $cached_data = "";
    $cached_eval = false;
    $cache_key = null;
    if ($cache_module_enabled && $cc_env['Cache_Access_ID'] == 1 && !$user_table_mode) {
        // startup values
        $nc_cache_list = nc_cache_list::getObject();
        try {
            // cache auth add-on string
            $cache_for_user = $nc_cache_list->authAddonString($cc_env['CacheForUser'], $current_user);
            $cache_key = $query_string . $cache_for_user . "type=" . $cc_env['Type'] . "classtemplate=" . $cc_env['ClassTemplate'];
            // check cached data
            $cached_result = $nc_cache_list->read($sub, $cc, $cache_key, $cc_env['Cache_Lifetime']);
            if ($cached_result != -1) {
                // get cached parameters
                list($cached_data, $cached_eval, $cache_vars) = $cached_result;
                // debug info
                $cache_debug_info = "Read, sub[" . $sub . "], cc[" . $cc . "], Access_ID[" . $cc_env['Cache_Access_ID'] . "], Lifetime[" . $cc_env['Cache_Lifetime'] . "], bytes[" . strlen($cached_data) . "], eval[" . (int) $cached_eval . "]";
                $nc_cache_list->debugMessage($cache_debug_info, __FILE__, __LINE__);
                // return cache if eval flag is not set
                if (!$cached_eval) {
                    return $cached_data;
                }
            }
            // [MERGE] overwritten unconditionally below!
            // set marks into the fields
            //            $no_cache_marks = $nc_cache_list->nocacheStore($cc_env);
        } catch (Exception $e) {
            $nc_cache_list->errorMessage($e);
        }
    }
    // *** Подготовка прочих переменных; подготовка к вычислению «системных настроек» ***
    // Если присутствует параметр isSubClassArray в вызове функции nc_objects_list(), то добавляем
    // в массив $cc_env элемент cur_cc, который будет участвовать в формировании навигации по страницам
    // при отображении нескольких шаблонов на странице
    if (isset($isSubClassArray) && $isSubClassArray) {
        $cc_env['cur_cc'] = $cc;
    }
    // [MERGE] not used, not in API
    //    $allowTags = $cc_env['AllowTags'];
    //    $NL2BR = $cc_env['NL2BR'];
    $catalogue = $cc_env['Catalogue_ID'];
    $intQueryStr = '?';
    // $cc_settings — пользовательские настройки инфоблока
    if ($is_mirror) {
        $cc_settings =& $mirror_env["Sub_Class_Settings"];
    } else {
        $cc_settings =& $cc_env["Sub_Class_Settings"];
    }
    // current host
    $subHost = "http://" . ($cc_env['Hidden_Host'] ? strchr($cc_env['Hidden_Host'], ".") ? $cc_env['Hidden_Host'] : $cc_env['Hidden_Host'] . "." . $DOMAIN_NAME : $DOMAIN_NAME);
    // $subLink, $ccLink, $cc_keyword
    if ($admin_mode) {
        $subLink = $admin_url_prefix . ($is_mirror ? '?catalogue=' . $mirror_env['Catalogue_ID'] . '&amp;sub=' . $mirror_env['Subdivision_ID'] : '?catalogue=' . $catalogue . '&amp;sub=' . $sub);
        $cc_keyword = null;
        $ccLink = $subLink . ($is_mirror ? '&amp;cc=' . $mirror_env['Sub_Class_ID'] : '&amp;cc=' . $cc);
        $intQueryStr = $ccLink;
    } else {
        if ($routing_module_enabled) {
            if ($is_mirror) {
                $subLink = new nc_routing_path_folder($mirror_env['Subdivision_ID']);
                $cc_keyword = $mirror_env['EnglishName'];
                $ccLink = new nc_routing_path_infoblock($mirror_env['Sub_Class_ID']);
            } else {
                $subLink = new nc_routing_path_folder($sub);
                $cc_keyword = $cc_env['EnglishName'];
                $ccLink = new nc_routing_path_infoblock($cc);
            }
        } else {
            $subLink = $SUB_FOLDER . ($is_mirror ? $mirror_env['Hidden_URL'] : $cc_env['Hidden_URL']);
            $cc_keyword = $is_mirror ? $mirror_env['EnglishName'] : $cc_env['EnglishName'];
            $ccLink = $subLink . $cc_keyword . '.html';
        }
    }
    // переменные curPos, recNum нужно привести к "правильному" виду
    // до И после выполнения системных настроек компонента
    $curPos = +$curPos;
    if ($curPos < 0) {
        $curPos = 0;
    }
    $recNum = +$recNum;
    if ($recNum < 0) {
        $recNum = 0;
    }
    // if RecordsPerPage is not set in component - set ignore_limit
    $maxRows = $is_mirror ? $mirror_env['RecordsPerPage'] : $cc_env['RecordsPerPage'];
    $ignore_limit = !$maxRows && !$recNum;
    $SortBy = $cc_env['SortBy'];
    $classID = $cc_env['Class_ID'];
    $userTableID = $cc_env['System_Table_ID'];
    $no_cache_marks = 0;
    if (isset($MODULE_VARS['searchold']['INDEX_TABLE']) && $MODULE_VARS['searchold']['INDEX_TABLE'] == $classID) {
        $ignore_eval['sort_by'] = true;
    }
    $file_class = null;
    // *** Вычисление «системных настроек» шаблона ***
    if ($component_file_mode) {
        $file_class = new nc_class_view($nc_core->CLASS_TEMPLATE_FOLDER, $nc_core->db);
        if ($table_view_mode && $inside_admin) {
            $file_class->load('table', '/table/', $_db_File_Hash);
        } else {
            $file_class->load($_db_Class_ID, $_db_File_Path, $_db_File_Hash);
        }
        // Переменные, доступные в шаблоне
        $nc_parent_class_folder_path = nc_get_path_to_main_parent_folder($cc_env['File_Path']);
        // два названия: одно без ошибок, другое указано в документации [5.4]
        $nc_class_aggregator_path = $nc_class_agregator_path = $nc_core->INCLUDE_FOLDER . 'classes/nc_class_aggregator_setting.class.php';
        $nc_parent_field_path = $file_class->get_parent_fiend_path('Settings');
        $nc_field_path = $file_class->get_field_path('Settings');
        // clear this variable after system settings eval!
        $result = "";
        // check and include component part
        try {
            if (nc_check_php_file($nc_field_path)) {
                include $nc_field_path;
            }
        } catch (Exception $e) {
            if (is_object($perm) && $perm->isSubClassAdmin($cc)) {
                // error message
                $result .= sprintf(CONTROL_CLASS_CLASSFORM_CHECK_ERROR, CONTROL_CLASS_CLASS_OBJECTSLIST_SHOWOBJ_SYSTEM);
            }
        }
        $nc_parent_field_path = null;
        $nc_field_path = null;
    } else {
        // «компоненты v4»
        if ($cc_env['Settings']) {
            eval($cc_env['Settings']);
        }
    }
    // *** Сброс переменных после вычисления «системных настроек» ***
    $curPos = +$curPos;
    if ($curPos < 0) {
        $curPos = 0;
    }
    $recNum = +$recNum;
    if ($recNum < 0) {
        $recNum = 0;
    }
    $result = "";
    // *** Данные не из запроса, а подготовленные в системных настройках — $nc_data ***
    $nc_prepared_data = 0;
    if (isset($nc_data) && (is_array($nc_data) || $nc_data instanceof ArrayAccess)) {
        $nc_prepared_data = 1;
    }
    // *** Подготовка переменных для построения запроса к БД ***
    // выйдем, если нет идентификатора шаблона, поскольку дальше работа функции бессмысленна
    if (!$classID) {
        return false;
    }
    $component = $nc_core->get_component($cc_env['System_Table_ID'] ? 'User' : $classID);
    $field_vars = null;
    $date_field = null;
    if (!$nc_prepared_data) {
        // данные будут получены из запроса к БД
        if (!$SortBy) {
            $sort_by = "a." . ($user_table_mode ? "`" . $AUTHORIZE_BY . "`" : "`Priority` DESC") . ", a.`LastUpdated` DESC";
        } else {
            $sort_by = $SortBy;
        }
        $field_names = $component->get_fields_query();
        $field_vars = $component_file_mode ? null : $component->get_fields_vars();
        $multilist_fields = $component->get_fields(NC_FIELDTYPE_MULTISELECT);
        $date_field = $component->get_date_field();
        // разрешить html-теги и перенос строки
        $cc_env['convert2txt'] = "";
        $text_fields = $component->get_fields(NC_FIELDTYPE_TEXT);
        foreach ($text_fields as $field) {
            $format = nc_field_parse_format($field['format'], NC_FIELDTYPE_TEXT);
            // разрешить html
            if (!$cc_env['AllowTags'] && !$format['html'] || $format['html'] == 2) {
                $cc_env['convert2txt'] .= "\$f_" . $field['name'] . " = htmlspecialchars(\$f_" . $field['name'] . ");";
            }
            // перенос строки
            if ($cc_env['NL2BR'] && !$format['br'] || $format['br'] == 1) {
                $cc_env['convert2txt'] .= "\$f_" . $field['name'] . " = nl2br(\$f_" . $field['name'] . ");";
            }
            if ($format['bbcode']) {
                $cc_env['convert2txt'] .= "\$f_" . $field['name'] . " = nc_bbcode(\$f_" . $field['name'] . ",  (\$fullDateLink ? \$fullDateLink : \$fullLink) );";
            }
        }
        $text_fields = $component->get_fields(NC_FIELDTYPE_STRING);
        foreach ($text_fields as $field) {
            if (!$cc_env['AllowTags']) {
                $cc_env['convert2txt'] .= "\$f_" . $field['name'] . " = htmlspecialchars(\$f_" . $field['name'] . ");";
            }
            if ($cc_env['NL2BR']) {
                $cc_env['convert2txt'] .= "\$f_" . $field['name'] . " = nl2br(\$f_" . $field['name'] . ");";
            }
        }
        unset($format);
        unset($text_fields);
        // *** «Поиск» по компоненту ***
        $full_search_params = $component->get_search_query($srchPat);
        $full_search_query = $full_search_url = '';
        if (!empty($full_search_params['query'])) {
            $full_search_query = $full_search_params['query'];
            $full_search_url = $full_search_params['link'];
        }
        // *** Подготовка запроса к БД ***
        $cond_catalogue = !$ignore_catalogue ? $cond_catalogue = " AND sub.`Catalogue_ID` = '" . $catalogue . "' " : "";
        // [MERGE] not used, not in API
        // $cond_catalogue_add = " AND a.`Subdivision_ID` = sub.`Subdivision_ID` ";
        // $cond_catalogue_addtable = ", `Subdivision` AS sub ";
        $cond_sub = !$ignore_sub ? " AND a.`Subdivision_ID` = '" . $sub . "' " : "";
        $cond_cc = !$ignore_cc ? " AND a.`Sub_Class_ID` = '" . $cc . "' " : "";
        $cond_user = !$ignore_user ? " AND a.`User_ID` = '" . $AUTH_USER_ID . "' " : "";
        $cond_parent = !$ignore_parent ? " AND a.`Parent_Message_ID` = '" . $parent_message . "' " : "";
        $cond_search = $full_search_query;
        $cond_mod = !$admin_mode && !$ignore_check ? $cond_mod = " AND a.`Checked` = 1 " : "";
        $cond_date = isset($date) && $date && $date_field && strtotime($date) > 0 ? $cond_date = " AND a.`" . $date_field . "` LIKE '" . $db->escape($date) . "%' " : "";
        $cond_distinct = isset($distinct) && $distinct ? "DISTINCT" : "";
        if (!$cond_distinct) {
            $cond_distinct = isset($distinctrow) && $distinctrow ? "DISTINCTROW" : "";
        }
        if (isset($query_select) && $query_select) {
            $cond_select = $component_file_mode ? ", " . $query_select : ", " . nc_add_column_aliases($query_select);
        } else {
            $cond_select = "";
        }
        $cond_where = $query_where ? " AND " . $query_where : "";
        $cond_group = $query_group ? " GROUP BY " . $query_group : "";
        $cond_having = $query_having ? " HAVING " . $query_having : "";
        if (isset($query_order) && $query_order) {
            $sort_by = $query_order;
        }
        if ($user_table_mode) {
            $cond_sub = "";
            $cond_cc = "";
            // [MERGE] not used        $cond_catalogue_add = "";
            $cond_catalogue = "";
            // [MERGE] not used        $cond_catalogue_addtable = "";
            $cond_parent = "";
        }
        if ($full_search_url) {
            $intQueryStr .= ($intQueryStr == '?' ? '' : '&amp;') . $full_search_url;
        }
        if (!$recNum) {
            $recNum = $maxRows;
        } else {
            $maxRows = $recNum;
            // для совместимости со старыми версиями до 2.4.5 и 3.0.0
            // [MERGE] не удалось выяснить, что это было и насколько распространено;
            // условие всегда выполняется, так как $ignore_array — пустой массив:
            if (!$component_file_mode && !isset($ignore_eval['maxRows']) || !$ignore_eval['maxRows']) {
                eval("\$maxRows = \"" . $maxRows . "\";");
            }
        }
        $maxRows = (int) $maxRows;
        // Если установлено значение переменной $nc_page, то вычисляем $curPos:
        if (isset($nc_page)) {
            $nc_page = (int) $nc_page;
            if ($nc_page < 1) {
                $nc_page = 1;
            }
            $curPos = ($nc_page - 1) * $maxRows;
        }
        // для совместимости со старыми версиями до 2.4.5 и 3.0.0
        // [MERGE] не удалось выяснить, что это было; условие всегда выполняется
        // (кроме компонента старого модуля поиска), так как $ignore_array — пустой массив:
        if (!$component_file_mode && !isset($ignore_eval['sort_by']) || !$ignore_eval['sort_by']) {
            eval("\$sort_by = \"" . $sort_by . "\";");
        }
        if (!$ignore_all) {
            $message_select = "SELECT" . (!$ignore_calc ? " SQL_CALC_FOUND_ROWS" : "") . " " . $cond_distinct . " " . $field_names . $cond_select . "\n                   FROM (" . ($user_table_mode ? "`User`" : "`Message" . $classID . "`") . " AS a " . ($query_from ? ", " . $query_from : "") . ") " . $component->get_joins() . " " . $query_join . "\n                  WHERE 1 " . $cond_parent . $cond_where . $cond_catalogue . $cond_sub . $cond_cc . $cond_user . $cond_mod . $cond_search . $cond_date . $cond_group . $cond_having . ($sort_by ? " ORDER BY " . $sort_by : "") . (!$ignore_limit ? " LIMIT " . (!isset($cc_env['cur_cc']) || $cur_cc === false || $cc_env['cur_cc'] == $cur_cc ? $curPos : "0") . "," . $maxRows : (isset($query_limit) && $query_limit ? " LIMIT " . $query_limit : ""));
        } elseif ($query_select && $query_from) {
            $message_select = "SELECT" . (!$ignore_calc ? " SQL_CALC_FOUND_ROWS" : "") . " " . $query_select . " FROM " . $query_from . ($query_join ? " " . $query_join : "") . ($query_where ? " WHERE " . $query_where : "") . ($query_group ? " GROUP BY " . $query_group : "") . ($query_having ? " HAVING  " . $query_having : "") . ($query_order ? " ORDER BY " . $query_order : "") . ($query_limit ? " LIMIT " . $query_limit : "");
        }
        $cc_env['LocalQuery'] = $intQueryStr;
        $cc_env['dateField'] = $date_field;
        $cc_env['fieldCount'] = count($component->get_fields());
    }
    $cc_env['curPos'] = $curPos;
    $cc_env['recNum'] = $recNum;
    $cc_env['maxRows'] = $maxRows;
    // *** Ссылки для действий с инфоблоком ***
    if ($routing_module_enabled) {
        $addLink = new nc_routing_path_infoblock($cc, 'add');
        $rssLink = $cc_env['AllowRSS'] ? new nc_routing_path_infoblock($cc, 'index', 'rss') : '';
        $xmlLink = $cc_env['AllowXML'] ? new nc_routing_path_infoblock($cc, 'index', 'xml') : '';
        $xmlFullLink = '';
        $subscribeLink = new nc_routing_path_infoblock($cc, 'subscribe');
        $searchLink = new nc_routing_path_infoblock($cc, 'search');
    } else {
        $addLink = $SUB_FOLDER . $cc_env['Hidden_URL'] . 'add_' . $cc_env['EnglishName'] . '.html';
        $rssLink = $cc_env['AllowRSS'] ? $SUB_FOLDER . $cc_env['Hidden_URL'] . $cc_env['EnglishName'] . '.rss' : '';
        $xmlLink = $cc_env['AllowXML'] ? $SUB_FOLDER . $cc_env['Hidden_URL'] . $cc_env['EnglishName'] . '.xml' : '';
        $xmlFullLink = "";
        $subscribeLink = $SUB_FOLDER . $cc_env['Hidden_URL'] . 'subscribe_' . $cc_env['EnglishName'] . '.html';
        $searchLink = $SUB_FOLDER . $cc_env['Hidden_URL'] . 'search_' . $cc_env['EnglishName'] . '.html';
    }
    $cc_env['addLink'] = $addLink;
    $cc_env['subscribeLink'] = $subscribeLink;
    $cc_env['searchLink'] = $searchLink;
    // *** Проверка наличия результата в кэше ***
    // cache eval section
    if ($cache_module_enabled && $cc_env['Cache_Access_ID'] == 1 && is_object($nc_cache_list) && $cached_eval && $cached_result != -1) {
        // get cached objects blocks
        $component_cache_blocks = $nc_cache_list->getCachedBlocks($cached_data);
        // cached prefix
        eval("\$result = \"" . $component_cache_blocks['prefix'] . "\";");
        if (is_array($component_cache_blocks) && !empty($component_cache_blocks)) {
            // concat cached objects
            foreach ($component_cache_blocks['objects'] as $k => $v) {
                // extract cached object variables
                if (!empty($cache_vars) && is_array($cache_vars[$k])) {
                    extract($cache_vars[$k]);
                }
                // append object data
                eval("\$result .= \"" . $v . "\";");
            }
        }
        // cached suffix
        eval("\$result .= \"" . $component_cache_blocks['suffix'] . "\";");
        return $result;
    }
    // *** Проверка наличия формы добавления и формы поиска в коде компонента ***
    if ($component_file_mode) {
        $component_body = nc_check_file($file_class->get_field_path('Class')) ? nc_get_file($file_class->get_field_path('Class')) : null;
        // @todo ↑↑↑ refactor: don’t load template files (use lazy variables instead?)
        if (($cc_env['Class_Template_ID'] || $is_mirror && $mirror_env['Class_Template_ID']) && strpos($component_body, '$nc_parent_field_path') !== false) {
            $component_body .= nc_check_file($file_class->get_parent_fiend_path('Class')) ? nc_get_file($file_class->get_parent_fiend_path('Class')) : null;
        }
    } else {
        // «компоненты v4»
        $cc_env['AddTemplate'] = $cc_env['AddTemplate'] ? $cc_env['AddTemplate'] : $component->add_form($catalogue, $sub, $cc);
        $cc_env['FullSearchTemplate'] = $cc_env['FullSearchTemplate'] ? $cc_env['FullSearchTemplate'] : $component->search_form(1);
        $component_body = ($ignore_prefix ? '' : $cc_env['FormPrefix']) . ($ignore_suffix ? '' : $cc_env['FormSuffix']) . $cc_env['RecordTemplate'] . $cc_env['RecordTemplateFull'] . $cc_env['Settings'];
    }
    // *** Форма добавления — $addForm ***
    if (strpos($component_body, '$addForm') !== false) {
        $multifield = (array) $component->get_fields(NC_FIELDTYPE_MULTIFILE);
        $multifield_names = array();
        foreach ($multifield as $multifield_row) {
            ${'f_' . $multifield_row['name']} = new nc_multifield($multifield_row['name'], $multifield_row['description']);
            $multifield_names[] = 'f_' . $multifield_row['name'];
        }
        $addForm = '';
        if ($component_file_mode) {
            $nc_parent_field_path = $file_class->get_parent_fiend_path('AddTemplate');
            $nc_field_path = $file_class->get_field_path('AddTemplate');
            // check and include component part
            try {
                if (nc_check_php_file($nc_field_path)) {
                    ob_start();
                    include $nc_field_path;
                    $addForm = ob_get_clean();
                }
            } catch (Exception $e) {
                if (is_object($perm) && $perm->isSubClassAdmin($cc)) {
                    // error message
                    $addForm = sprintf(CONTROL_CLASS_CLASSFORM_CHECK_ERROR, CONTROL_CLASS_CLASS_FORMS_ADDFORM);
                }
            }
            if (!$addForm) {
                $addTemplate = $component->add_form($catalogue, $sub, $cc);
                eval("\$addForm = \"" . $addTemplate . "\";");
            }
            $nc_parent_field_path = null;
            $nc_field_path = null;
        } else {
            // «компоненты v4»
            eval("\$addForm = \"" . $cc_env["AddTemplate"] . "\";");
        }
        foreach ($multifield_names as $multifield_name) {
            unset(${$multifield_name});
        }
        unset($multifield_names);
    }
    // Фильтр объектов в режиме администратора
    $filter_form_html = '';
    // *** Форма поиска (выборки) — $searchForm ***
    if (strpos($component_body, '$searchForm') !== false) {
        if ($component_file_mode) {
            $nc_parent_field_path = $file_class->get_parent_fiend_path('FullSearchTemplate');
            $nc_field_path = $file_class->get_field_path('FullSearchTemplate');
            $searchForm = '';
            // check and include component part
            if (filesize($nc_field_path)) {
                try {
                    if (nc_check_php_file($nc_field_path)) {
                        ob_start();
                        include $nc_field_path;
                        $searchForm = ob_get_clean();
                    }
                } catch (Exception $e) {
                    if (is_object($perm) && $perm->isSubClassAdmin($cc)) {
                        // error message
                        $searchForm = sprintf(CONTROL_CLASS_CLASSFORM_CHECK_ERROR, CONTROL_CLASS_CLASS_FORMS_QSEARCH);
                    }
                }
            } else {
                eval("\$searchForm.= \"" . $component->search_form(1) . "\";");
            }
            $nc_parent_field_path = null;
            $nc_field_path = null;
        } else {
            // «компоненты v4»
            eval("\$searchForm = \"" . $cc_env["FullSearchTemplate"] . "\";");
        }
        // Системная форма поиска (фильтр)
    } elseif ($inside_admin) {
        $filter_view_data = array('cc' => $cc, 'form' => eval('return "' . $component->search_form(0) . '";'), 'fields' => $component->get_fields(), 'is_open' => (bool) $nc_core->input->fetch_get('srchPat'));
        $filter_view = $nc_core->ADMIN_FOLDER . 'views/component/objects_filter_form.view.php';
        $filter_form_html = $nc_core->ui->view($filter_view, $filter_view_data);
    }
    unset($component_body);
    // *** Выполнение запроса к БД ***
    $db->last_error = "";
    if ($message_select) {
        $res = $db->get_results($message_select, ARRAY_A);
    } else {
        $res = false;
    }
    // *** Обработка ошибок, возникших при выполнении запроса ***
    if ($db->last_error) {
        // determine error cause
        switch (true) {
            case preg_match("/Table '\\w+\\.Classificator_(\\w+)' doesn't exist/i", $db->last_error, $regs):
                $err = sprintf(NETCAT_FUNCTION_OBJECTS_LIST_CLASSIFICATOR_ERROR, $regs[1]);
                break;
            case preg_match("/Unknown column '(.+?)' in 'field list'/i", $db->last_error, $regs):
                $err = sprintf(NETCAT_FUNCTION_OBJECTS_LIST_SQL_COLUMN_ERROR_UNKNOWN, $regs[1]);
                break;
            case preg_match("/Unknown column '(.+?)' in 'order clause'/i", $db->last_error, $regs):
                $err = sprintf(NETCAT_FUNCTION_OBJECTS_LIST_SQL_COLUMN_ERROR_CLAUSE, $regs[1]);
                break;
            case $SHOW_MYSQL_ERRORS == "on":
                $err = $db->last_error;
                break;
            default:
                $err = "";
        }
        // error message
        if (is_object($perm) && $perm->isSupervisor()) {
            // error info for the supervisor
            nc_print_status($db->last_error, 'error');
            trigger_error(sprintf(NETCAT_FUNCTION_OBJECTS_LIST_SQL_ERROR_SUPERVISOR, $sub, $cc, $query_string, $err ? $err . ", " : ""), E_USER_WARNING);
        } else {
            // error info for the simple users
            echo NETCAT_FUNCTION_OBJECTS_LIST_SQL_ERROR_USER;
        }
        return false;
    }
    // *** Подготовка к работе с компонентом-агрегатором ***
    $nc_class_aggregator = null;
    $nc_class_aggregator_data = null;
    if (class_exists('nc_class_aggregator_setting', false)) {
        $nc_class_aggregator_settings = nc_class_aggregator_setting::get_instanse();
        if ($nc_class_aggregator_settings && $res) {
            require_once $nc_core->INCLUDE_FOLDER . "classes/nc_class_aggregator.class.php";
            $class_data = array();
            foreach ($res as $row) {
                $class_data[] = array('db_Class_ID' => $row['db_Class_ID'], 'db_Message_ID' => $row['db_Message_ID']);
            }
            $nc_class_aggregator = new nc_class_aggregator($nc_class_aggregator_settings, $class_data);
            $nc_class_aggregator_data = $nc_class_aggregator->get_full_data();
        }
    }
    // *** Подсчёт количества объектов в результатах ($rowCount) и общего ($totRows) ***
    $totRows = 0;
    if ($message_select) {
        // object in this page
        $rowCount = $db->num_rows;
        // total objects
        $totRows = !$ignore_calc ? $db->get_var("SELECT FOUND_ROWS()") : $rowCount;
        $totRows += 0;
    } else {
        if ($nc_prepared_data) {
            $rowCount = sizeof($nc_data);
            $totRows += 0;
            if (!$totRows) {
                $totRows = $nc_data instanceof nc_record_collection ? $nc_data->get_total_count() : $rowCount;
            }
        } else {
            $rowCount = 0;
            $totRows = 0;
        }
    }
    // *** Перенос GET-переменных в пути $nextLink, $prevLink ***
    $_get_arr = $nc_core->input->fetch_get();
    $get_param_str = '';
    // в nextLink и prevLink нужно сохранить get-параметры
    if (!empty($_get_arr)) {
        $ignore_arr = array('sid', 'ced', 'inside_admin', 'catalogue', 'sub', 'cc', 'curPos', 'cur_cc', 'REQUEST_URI');
        if ($inside_admin || $admin_mode) {
            $ignore_arr[] = 'isNaked';
        }
        foreach ($_get_arr as $k => $v) {
            if (!in_array($k, $ignore_arr)) {
                $get_param[$k] = $v;
            }
        }
        if (!empty($get_param)) {
            $get_param_str = $nc_core->url->build_url($get_param);
        }
    }
    unset($_get_arr);
    // *** Переменные для вывода листалки страниц ***
    $begRow = $curPos + 1;
    $prevLink = $nextLink = '';
    if ($curPos > $maxRows) {
        $prevLink = ($admin_mode ? "" : $nc_core->url->get_parsed_url('path')) . $cc_env['LocalQuery'] . (strlen($cc_env['LocalQuery']) > 1 ? "&amp;" : "") . "curPos=" . ($curPos - $maxRows) . (isset($cc_env['cur_cc']) && $cc_env['cur_cc'] ? "&amp;cur_cc=" . $cc_env['cur_cc'] : "") . ($classPreview == $cc_env["Class_ID"] ? "&amp;classPreview=" . $classPreview : "") . ($get_param_str ? "&amp;" . $get_param_str : "");
    } elseif ($maxRows && $curPos == $maxRows) {
        $prevLink = ($admin_mode ? "" : $nc_core->url->get_parsed_url('path')) . $cc_env['LocalQuery'] . (strlen($cc_env['LocalQuery']) > 1 ? "&amp;" : "") . ($get_param_str ? $get_param_str : "");
    }
    $endRow = $curPos + $maxRows;
    if ($maxRows && $endRow < $totRows) {
        $nextLink = ($admin_mode ? "" : $nc_core->url->get_parsed_url('path')) . $cc_env['LocalQuery'] . (strlen($cc_env['LocalQuery']) > 1 ? "&amp;" : "") . "curPos=" . $endRow . (isset($cc_env['cur_cc']) && $cc_env['cur_cc'] ? "&amp;cur_cc=" . $cc_env['cur_cc'] : "") . ($classPreview == $cc_env["Class_ID"] ? "&amp;classPreview=" . $classPreview : "") . ($get_param_str ? "&amp;" . $get_param_str : "");
    } else {
        $endRow = $totRows;
    }
    $cc_env['begRow'] = $begRow;
    $cc_env['endRow'] = $endRow;
    $cc_env['totRows'] = $totRows;
    $cc_env['prevLink'] = $prevLink;
    $cc_env['nextLink'] = $nextLink;
    // *** Подготовка к извлечению полученных данных ***
    if ($component_file_mode) {
        if ($nc_prepared_data && isset($nc_data[0])) {
            $f_Checked = 1;
            $fetch_row = $nc_data;
        } else {
            $fetch_row = $res;
        }
    } else {
        // «компоненты v4»
        if ($nc_prepared_data && isset($nc_data[0])) {
            $fetch_row = '$f_Checked = 1; ';
            // нужно подготовить $fetch_row вида:
            // $f_a = $nc_data[$f_RowNum]['a']; $f_b = $nc_data[$f_RowNum]['b']; ...
            // элементы $nc_data могут быть как массивом, так и объектом, реализующим Iterator, поэтому array_keys не подходит
            foreach ($nc_data[0] as $key => $value) {
                $fetch_row .= '$f_' . $key . ' = $nc_data[$f_RowNum]["' . $key . '"]; ';
            }
        } else {
            if (!$ignore_all) {
                $fetch_row = "list(" . $field_vars . ($result_vars ? ", " . $result_vars : "") . ") = array_values(\$res[\$f_RowNum]);";
            } else {
                $fetch_row = $result_vars ? "list(" . $result_vars . ") = array_values(\$res[\$f_RowNum]);" : "";
            }
        }
    }
    // *** Подготовка элементов интерфейса для режима администрирования ***
    $f_AdminCommon = "";
    $f_AdminCommon_cc = "";
    $f_AdminCommon_cc_name = "";
    $f_AdminCommon_add = "";
    $f_AdminCommon_delete_all = "";
    $f_AdminButtons = "";
    // Право на модерирование и изменение объектов.
    $modPerm = false;
    $changePerm = false;
    if ($admin_mode) {
        $modPerm = CheckUserRights($cc, 'moderate', 1);
        // право модератора
        $changePerm = s_auth($cc_env, 'change', 1);
        //               или просто на изменение объектов
        if (is_object($perm) && $perm->isBanned($cc_env, 'change')) {
            // пользователю запретили изменение объектов
            $modPerm = $changePerm = false;
        }
        $f_AdminCommon_add = $admin_url_prefix . "add.php?catalogue=" . $catalogue . "&amp;sub=" . $sub . "&amp;cc=" . $cc;
        $f_AdminCommon_delete_all = $admin_url_prefix . "message.php?catalogue=" . $catalogue . "&amp;sub=" . $sub . "&amp;cc=" . $cc . "&amp;classID=" . $classID . "&amp;delete=1";
        $f_AdminCommon_export_csv = $admin_url_prefix . "message.php?catalogue=" . $catalogue . "&amp;sub=" . $sub . "&amp;cc=" . $cc . "&amp;classID=" . $classID . "&amp;export=1";
        $f_AdminCommon_import_csv = $admin_url_prefix . "message.php?catalogue=" . $catalogue . "&amp;sub=" . $sub . "&amp;cc=" . $cc . "&amp;classID=" . $classID . "&amp;import=1";
        $f_AdminCommon_export_xml = $admin_url_prefix . "message.php?catalogue=" . $catalogue . "&amp;sub=" . $sub . "&amp;cc=" . $cc . "&amp;classID=" . $classID . "&amp;export=2";
        $f_AdminCommon_import_xml = $admin_url_prefix . "message.php?catalogue=" . $catalogue . "&amp;sub=" . $sub . "&amp;cc=" . $cc . "&amp;classID=" . $classID . "&amp;import=2";
        $addLink = $f_AdminCommon_add;
        // Js и форма для пакетной обработки объектов
        $f_AdminCommon_package = "<script type='text/javascript' language='javascript'>\n";
        $f_AdminCommon_package .= "\tif (typeof(nc_package_obj) != 'undefined') {nc_package_obj.new_cc(" . $cc . ", '" . NETCAT_MODERATION_NOTSELECTEDOBJ . "'); }\n";
        $f_AdminCommon_package .= "</script>\n";
        $f_AdminCommon_package .= "<form id='nc_form_selected_" . $cc . "' action='" . $SUB_FOLDER . $HTTP_ROOT_PATH . "message.php' method='post'>\n";
        $f_AdminCommon_package .= "\t<input type='hidden' name='catalogue' value='" . $catalogue . "'>\n";
        $f_AdminCommon_package .= "\t<input type='hidden' name='sub' value='" . $sub . "'>\n";
        $f_AdminCommon_package .= "\t<input type='hidden' name='cc' value='" . $cc . "'>\n";
        $f_AdminCommon_package .= "\t<input type='hidden' name='curPos' value='" . $curPos . "'>\n";
        $f_AdminCommon_package .= "\t<input type='hidden' name='admin_mode' value='" . $admin_mode . "'>\n";
        $f_AdminCommon_package .= "</form>\n";
        if ($list_mode != "select") {
            if ($inside_admin && $isMainContent && $UI_CONFIG) {
                // в админке нет AdminCommon, но нужна часть для пакетной обработки
                if ($totRows != 0) {
                    $result .= $f_AdminCommon_package;
                }
                // add button
                $UI_CONFIG->actionButtons = array();
                $UI_CONFIG->actionButtons[] = array("id" => "addObject", "align" => "left", "caption" => NETCAT_MODERATION_BUTTON_ADD, "action" => "parent.nc_form('{$SUB_FOLDER}{$nc_core->HTTP_ROOT_PATH}add.php?inside_admin=1&cc={$cc}')");
                // кнопки пакетной обработки нужны только если есть объекты
                if ($totRows != 0) {
                    //  button "delete all"
                    $UI_CONFIG->actionButtons[] = array("id" => "deleteAll", "caption" => NETCAT_MODERATION_REMALL, "align" => "right", "action" => "urlDispatcher.load('subclass.purge(" . $cc . ")')", "red_border" => true);
                    if ($nc_core->get_settings('PacketOperations')) {
                        // button "Удалить выбранные"
                        $UI_CONFIG->actionButtons[] = array("id" => "deleteChecked", "caption" => NETCAT_MODERATION_DELETESELECTED, "align" => "right", "action" => "document.getElementById('mainViewIframe').contentWindow.nc_package_obj.process('delete', " . $cc . ")", "red_border" => true);
                        // button "Выключить выбранные"
                        $UI_CONFIG->actionButtons[] = array("id" => "checkOff", "caption" => NETCAT_MODERATION_SELECTEDOFF, "align" => "left", "action" => "document.getElementById('mainViewIframe').contentWindow.nc_package_obj.process('checkOff', " . $cc . ")");
                        // button "Включить выбранные"
                        $UI_CONFIG->actionButtons[] = array("id" => "checkOn", "caption" => NETCAT_MODERATION_SELECTEDON, "align" => "left", "action" => "document.getElementById('mainViewIframe').contentWindow.nc_package_obj.process('checkOn', " . $cc . ")");
                    }
                }
            }
            if (!$inside_admin) {
                $f_AdminCommon = nc_AdminCommon($sub, $cc, $cc_env, $f_AdminCommon_package, $f_AdminCommon_add, $f_AdminCommon_delete_all);
            }
        }
    }
    // *** Массив $row_ids: ID всех объектов в полученной выборке ***
    $row_ids = array();
    if (!$nc_prepared_data && !$ignore_all) {
        $res_key = $user_table_mode ? 'User_ID' : 'Message_ID';
        for ($f_RowNum = 0; $f_RowNum < $rowCount; $f_RowNum++) {
            $row_ids[] = $res[$f_RowNum][$res_key];
        }
        unset($res_key, $f_RowNum);
    }
    // Фильтр объектов в режиме администратора
    if ($filter_form_html) {
        $result .= $filter_form_html;
    }
    // *** Префикс списка объектов ***
    if (!$ignore_prefix) {
        if ($component_file_mode) {
            $nc_parent_field_path = $file_class->get_parent_fiend_path('FormPrefix');
            $nc_field_path = $file_class->get_field_path('FormPrefix');
            // check and include component part
            try {
                if (nc_check_php_file($nc_field_path)) {
                    ob_start();
                    include $nc_field_path;
                    $result .= ob_get_clean();
                }
            } catch (Exception $e) {
                if (is_object($perm) && $perm->isSubClassAdmin($cc)) {
                    // show moderation bar
                    $result .= $f_AdminCommon;
                    // error message
                    $result .= sprintf(CONTROL_CLASS_CLASSFORM_CHECK_ERROR, CONTROL_CLASS_CLASS_OBJECTSLIST_PREFIX);
                }
            }
            $nc_parent_field_path = null;
            $nc_field_path = null;
        } else {
            // «компоненты v4»
            if ($cc_env['FormPrefix']) {
                eval("\$result.= \"" . $cc_env["FormPrefix"] . "\";");
            }
        }
    } else {
        $result .= $f_AdminCommon;
    }
    // если список пуст, внутри админки нужно показать сообщение "нет объектов"
    if ($inside_admin && $totRows == 0 && !strlen(trim($result))) {
        $result .= nc_print_status(NETCAT_MODERATION_NO_OBJECTS_IN_SUBCLASS, 'info', null, 1);
    }
    // ID (символьный для таблицы пользователей, числовой для прочих компонентов) для nc_file_info
    $hybrid_component_id = $user_table_mode ? 'User' : $classID;
    $multifile_field_values = array();
    if (!empty($row_ids)) {
        // Загрузить все значения полей типа NC_FIELD_MULTIFILE
        $multifile_field_values = nc_get_multifile_field_values($hybrid_component_id, $row_ids);
        // Передать в file_info значения полей типа файл для дальнейшего использования:
        $nc_core->file_info->cache_object_list_data($hybrid_component_id, $res);
        // Загрузить данные о файлах объектов в списке из Filetable:
        $nc_core->file_info->preload_filetable_values($hybrid_component_id, $row_ids);
    }
    // требуется получить все группы пользователей
    if ($user_table_mode && !empty($row_ids)) {
        $nc_user_group = $db->get_results("SELECT ug.`User_ID`, ug.`PermissionGroup_ID`, g.`PermissionGroup_Name`\n                                       FROM `User_Group` AS ug,`PermissionGroup` AS g\n                                       WHERE User_ID IN (" . join(', ', $row_ids) . ")\n                                       AND g.`PermissionGroup_ID` = ug.`PermissionGroup_ID` ", ARRAY_A);
        if (!empty($nc_user_group)) {
            foreach ($nc_user_group as $v) {
                $nc_user_group_sort[$v['User_ID']][$v['PermissionGroup_ID']] = $v['PermissionGroup_Name'];
            }
        }
        unset($nc_user_group);
    }
    // *************************** Листинг объектов ****************************
    $cache_vars = array();
    $iteration_RecordTemplate = array();
    // переменные, которые будут созданы при extract’е:
    $f_RowID = $f_User_ID = $f_UserID = $f_LastUserID = $f_LastUser_ID = 0;
    $f_Subdivision_ID = $f_Sub_Class_ID = $f_Message_ID = 0;
    $f_Hidden_URL = $f_Keyword = $f_EnglishName = '';
    $f_Created = $f_LastUpdated = null;
    $f_Priority = $f_Checked = $f_PermissionGroup_ID = 0;
    // переменные, значение которых будет присвоено в случае компонента-агрегатора
    $f_db_Subdivision_ID = $f_db_Class_ID = $f_db_Sub_Class_ID = $f_db_Message_ID = 0;
    $f_db_Keyword = '';
    // переменные, значение которых будет присвоено в цикле
    $f_Created_year = $f_Created_month = $f_Created_day = $f_Created_hours = $f_Created_minutes = $f_Created_seconds = $f_Created_date = $f_Created_time = null;
    $f_LastUpdated_year = $f_LastUpdated_month = $f_LastUpdated_day = $f_LastUpdated_hours = $f_LastUpdated_minutes = $f_LastUpdated_seconds = $f_LastUpdated_date = $f_LastUpdated_time = null;
    $f_AdminInterface_user_add = $f_AdminInterface_user_change = '';
    $fullRSSLink = $fullXMLLink = $subscribeMessageLink = $msgLink = '';
    $nc_token_for_drop = $routing_module_enabled && $nc_core->token->is_use('drop') ? array('nc_token' => $nc_core->token->get()) : null;
    $nc_sub_folder_length = $routing_module_enabled ? strlen($SUB_FOLDER) : null;
    // Список названий переменных для частичного кэширования
    $cache_vars_name = null;
    if ($rowCount && $cache_module_enabled && $no_cache_marks) {
        if ($component_file_mode) {
            $cache_vars_name = array_keys($fetch_row[0]);
            foreach ($cache_vars_name as &$_variable_name) {
                $_variable_name = "f_{$_variable_name}";
            }
        } else {
            if (preg_match('/^list\\((.*?)\\)/', $fetch_row, $matches)) {
                $cache_vars_name_string = preg_replace('/[$\\s]+/', '', $matches[1]);
                $cache_vars_name = explode(",", $cache_vars_name_string);
            }
        }
        unset($_variable_name);
    }
    // Прежние названия переменных в fetch_row (v4): f_UserID, f_LastUserID, f_UserGroup, Hidden_URL
    $nc_compatibility_variable_map = array('f_User_ID' => 'f_UserID', 'f_LastUser_ID' => 'f_LastUserID', 'f_PermissionGroup_ID' => 'f_UserGroup', 'f_Hidden_URL' => 'Hidden_URL');
    if (!$component_file_mode && $result_vars) {
        // Не затирать значения переменных, которые указаны в $result_vars:
        foreach ($nc_compatibility_variable_map as $nc_v5_variable_name => $nc_v4_variable_name) {
            if (preg_match('/\\$' . $nc_v4_variable_name . '\\b/', $result_vars)) {
                unset($nc_compatibility_variable_map[$nc_v5_variable_name]);
            }
        }
        // Проверить, есть ли $f_RowID в $result_vars:
        $nc_result_vars_has_row_id = (bool) preg_match('/\\$f_RowID\\b/', $result_vars);
    } else {
        $nc_result_vars_has_row_id = false;
    }
    // *** Перебор всех полученных записей ***
    for ($f_RowNum = 0; $f_RowNum < $rowCount; $f_RowNum++) {
        // *** Извлечение данных из $res или $nc_data ***
        if ($component_file_mode) {
            if (is_object($fetch_row[$f_RowNum]) && method_exists($fetch_row[$f_RowNum], 'to_array')) {
                // duck typing, прежде всего это nc_record
                extract($fetch_row[$f_RowNum]->to_array(), EXTR_PREFIX_ALL, 'f');
            } else {
                extract($fetch_row[$f_RowNum], EXTR_PREFIX_ALL, 'f');
                // добываем старые переменные
                extract($component->get_old_vars($fetch_row[$f_RowNum]), EXTR_PREFIX_ALL, 'f');
            }
            if ($nc_class_aggregator instanceof nc_class_aggregator) {
                $fetch_row[$f_RowNum] = array_merge($fetch_row[$f_RowNum], $nc_class_aggregator_data[$f_RowNum]);
                extract($nc_class_aggregator_data[$f_RowNum], EXTR_PREFIX_ALL, 'f');
            }
        } else {
            // «компоненты v4»
            eval($fetch_row);
        }
        // *** Дополнительные переменные, доступные в шаблонах (обратная совместимость) ***
        // Прежние названия переменных в fetch_row (v4): f_RowID, f_UserID, f_LastUserID, f_UserGroup, Hidden_URL
        foreach ($nc_compatibility_variable_map as $nc_v5_variable_name => $nc_v4_variable_name) {
            ${$nc_v4_variable_name} = ${$nc_v5_variable_name};
            if ($component_file_mode && is_array($fetch_row)) {
                $fetch_row[$f_RowNum][$nc_v4_variable_name] = ${$nc_v5_variable_name};
            }
        }
        if (!$nc_result_vars_has_row_id) {
            $f_RowID = $user_table_mode ? $f_User_ID : $f_Message_ID;
        }
        // fix fullLink для системных таблиц, у которых в old_vars не попадает EnglishName
        if ($user_table_mode) {
            $f_EnglishName = $cc_env['EnglishName'];
            $f_Hidden_URL = $cc_env['Hidden_URL'];
        }
        // *** Кэширование ***
        if ($cache_module_enabled && $no_cache_marks && $cache_vars_name) {
            // caching variables array
            $cache_vars[$f_RowNum] = array();
            foreach ($cache_vars_name as $_variable_name) {
                $cache_vars[$f_RowNum][$_variable_name] = ${$_variable_name};
            }
            unset($_variable_name);
        }
        // *** Ссылки ***
        // переопределение $subLink и $cc_keyword, чтобы ссылки $fullLink вел в инфоблок,
        // в котором был добавлен объект (иначе будет вести в инфоблок, в котором объект выводится)
        $use_row_path = !$ignore_link && !$is_mirror;
        if ($use_row_path) {
            if ($routing_module_enabled) {
                if (!$subLink || !$subLink instanceof nc_routing_path_folder || $subLink->get_folder_id() != $f_Subdivision_ID) {
                    $subLink = new nc_routing_path_folder($f_Subdivision_ID);
                }
            } else {
                // $f_Hidden_URL уже содержит SUB_FOLDER
                $subLink = $f_Hidden_URL;
            }
            $cc_keyword = $f_EnglishName;
        }
        $routing_object_parameters = !$routing_module_enabled ? null : array('site_id' => $catalogue, 'folder' => $use_row_path ? substr($f_Hidden_URL, $nc_sub_folder_length) : (isset($mirror_env['Hidden_URL']) ? $mirror_env['Hidden_URL'] : $cc_env['Hidden_URL']), 'folder_id' => $use_row_path ? $f_Subdivision_ID : (isset($mirror_env['Subdivision_ID']) ? $mirror_env['Subdivision_ID'] : $sub), 'infoblock_id' => $use_row_path ? $f_Sub_Class_ID : $mirror_env['Sub_Class_ID'], 'infoblock_keyword' => $cc_keyword, 'object_id' => $f_RowID, 'object_keyword' => $f_Keyword, 'action' => 'full', 'format' => 'html', 'date' => $date_field && ${"f_{$date_field}"} ? ${"f_{$date_field}_year"} . "-" . ${"f_{$date_field}_month"} . "-" . ${"f_{$date_field}_day"} : null);
        if (!$user_table_mode && $admin_mode && $AUTHORIZE_BY === 'User_ID') {
            $f_AdminInterface_user_add = $f_UserID;
            $f_AdminInterface_user_change = $f_LastUserID;
        }
        // *** Особые типы полей ***
        // Multiselect
        $iteration_multilist_fields = array();
        if (!empty($multilist_fields)) {
            // просмотр каждого поля типа multiselect
            foreach ($multilist_fields as $multilist_field) {
                // таблицу с элементами можно взять из кэша, если ее там нет — то добавить
                if (!$_cache['classificator'][$multilist_field['table']]) {
                    $db_res = $db->get_results("SELECT `" . $multilist_field['table'] . "_ID` AS ID, `" . $multilist_field['table'] . "_Name` AS Name, `Value`\n                           FROM `Classificator_" . $multilist_field['table'] . "`", ARRAY_A);
                    if (!empty($db_res)) {
                        foreach ($db_res as $v) {
                            // запись в кэш
                            $_cache['classificator'][$multilist_field['table']][$v['ID']] = array($v['Name'], $v['Value']);
                        }
                    }
                    unset($db_res);
                }
                ${"f_" . $multilist_field['name'] . "_id"} = array();
                ${"f_" . $multilist_field['name'] . "_value"} = array();
                if ($value = ${"f_" . $multilist_field['name']}) {
                    // значение из базы
                    ${"f_" . $multilist_field['name']} = array();
                    ${"f_" . $multilist_field['name'] . "_id"} = array();
                    $ids = explode(',', $value);
                    if (!empty($ids)) {
                        foreach ($ids as $id) {
                            // для каждого элемента по id определяем имя и значение
                            if ($id) {
                                array_push(${"f_" . $multilist_field['name']}, $_cache['classificator'][$multilist_field['table']][$id][0]);
                                array_push(${"f_" . $multilist_field['name'] . "_value"}, $_cache['classificator'][$multilist_field['table']][$id][1]);
                                array_push(${"f_" . $multilist_field['name'] . "_id"}, $id);
                            }
                        }
                    }
                }
                // default values
                if (!is_array(${"f_" . $multilist_field['name']})) {
                    ${"f_" . $multilist_field['name']} = array();
                }
                if ($component_file_mode) {
                    $iteration_multilist_fields['f_' . $multilist_field['name']] = ${"f_" . $multilist_field['name']};
                    $iteration_multilist_fields['f_' . $multilist_field['name'] . '_value'] = ${"f_" . $multilist_field['name'] . "_value"};
                    $iteration_multilist_fields['f_' . $multilist_field['name'] . '_id'] = ${"f_" . $multilist_field['name'] . "_id"};
                }
            }
            if ($component_file_mode) {
                $iteration_RecordTemplate[$f_RowNum]['multilist_fields'] = $iteration_multilist_fields;
            }
            unset($ids, $id, $value, $multilist_field, $iteration_multilist_fields);
        }
        // get file fields variables
        if ($component_file_mode) {
            $iteration_RecordTemplate[$f_RowNum]['fields_files'] = $nc_core->file_info->get_all_object_file_variables($hybrid_component_id, $f_RowID);
            // get multifile fields variables
            if (sizeof($multifile_field_values)) {
                foreach ($multifile_field_values[$f_RowID] as $field_name => $field_value) {
                    /** @var nc_multifield $field_value */
                    $iteration_RecordTemplate[$f_RowNum]['multifile_fields']['f_' . $field_name] = $field_value->set_template(${'f_' . $field_name . '_tpl'});
                }
            }
        } else {
            // «компоненты v4»
            extract($nc_core->file_info->get_all_object_file_variables($hybrid_component_id, $f_RowID));
            // get multifile fields variables
            if (sizeof($multifile_field_values)) {
                foreach ($multifile_field_values[$f_RowID] as $field_name => $field_value) {
                    /** @var nc_multifield $field_value */
                    ${'f_' . $field_name} = $field_value->set_template(${'f_' . $field_name . '_tpl'});
                }
            }
        }
        if ($user_table_mode) {
            $f_PermissionGroup =& $nc_user_group_sort[$f_RowID];
        } else {
            $f_PermissionGroup = null;
        }
        // *** Части даты ***
        if (isset($f_Created)) {
            list($nc_tmp_date, $nc_tmp_time) = explode(" ", $f_Created, 2);
            list($f_Created_year, $f_Created_month, $f_Created_day) = explode("-", $nc_tmp_date);
            list($f_Created_hours, $f_Created_minutes, $f_Created_seconds) = explode(":", $nc_tmp_time);
            $f_Created_date = $f_Created_day . "." . $f_Created_month . "." . $f_Created_year;
            $f_Created_time = $f_Created_hours . ":" . $f_Created_minutes . ":" . $f_Created_seconds;
        }
        if (isset($f_LastUpdated) && $f_LastUpdated) {
            $f_LastUpdated_year = substr($f_LastUpdated, 0, 4);
            $f_LastUpdated_month = substr($f_LastUpdated, 4, 2);
            $f_LastUpdated_day = substr($f_LastUpdated, 6, 2);
            $f_LastUpdated_hours = substr($f_LastUpdated, 8, 2);
            $f_LastUpdated_minutes = substr($f_LastUpdated, 10, 2);
            $f_LastUpdated_seconds = substr($f_LastUpdated, 12, 2);
            $f_LastUpdated_date = $f_LastUpdated_day . "." . $f_LastUpdated_month . "." . $f_LastUpdated_year;
            $f_LastUpdated_time = $f_LastUpdated_hours . ":" . $f_LastUpdated_minutes . ":" . $f_LastUpdated_seconds;
        }
        if ($admin_mode && !$nc_prepared_data) {
            // *** Режим редактирования: элементы и ссылки для управления объектом в админке ***
            $dateLink = '';
            if ($date_field && ${"f_{$date_field}"}) {
                $dateLink = "&date=" . ${"f_{$date_field}_year"} . "-" . ${"f_{$date_field}_month"} . "-" . ${"f_{$date_field}_day"};
            }
            // full link for object
            $fullLink = nc_get_fullLink($admin_url_prefix, $catalogue, $_db_sub, $_db_cc, $f_RowID);
            $fullDateLink = nc_get_fullDateLink($fullLink, $dateLink);
            $subLink = $admin_url_prefix . '?catalogue=' . $catalogue . '&amp;sub=' . $_db_sub;
            // ID объекта в шаблоне
            $f_AdminButtons_id = $f_RowID;
            // Приоритет объекта
            $f_AdminButtons_priority = $f_Priority;
            // ID добавившего пользователя
            $f_AdminButtons_user_add = $f_UserID;
            // ID изменившего пользователя
            $f_AdminButtons_user_change = nc_get_AdminButtons_user_change($f_LastUserID);
            // копировать объект
            $f_AdminButtons_copy = nc_get_AdminButtons_copy($ADMIN_PATH, $catalogue, $sub, $cc, $classID, $f_RowID);
            // изменить
            $f_AdminButtons_change = nc_get_AdminButtons_change($SUB_FOLDER, $HTTP_ROOT_PATH, $catalogue, $sub, $cc, $f_RowID, $curPos);
            $editLink = $f_AdminButtons_change;
            // удалить
            $f_AdminButtons_delete = nc_get_AdminButtons_delete($SUB_FOLDER, $HTTP_ROOT_PATH, $catalogue, $sub, $cc, $f_RowID, $curPos);
            $deleteLink = $f_AdminButtons_delete;
            $dropLink = nc_get_dropLink($deleteLink, $nc_core);
            // включить-выключить
            $f_AdminButtons_check = nc_get_AdminButtons_check($f_Checked, $SUB_FOLDER, $HTTP_ROOT_PATH, $catalogue, $sub, $cc, $classID, $f_RowID, $curPos, $admin_mode, $admin_url_prefix, $nc_core);
            $checkedLink = $f_AdminButtons_check;
            // выбрать связанный (JS код!!!) -- когда список вызван в popup для выбора связанного объекта
            $f_AdminButtons_select = nc_get_AdminButtons_select($f_AdminButtons_id);
            if ($list_mode == 'select') {
                $f_AdminButtons_buttons = nc_get_list_mode_select_AdminButtons_buttons($f_AdminButtons_select, $ADMIN_TEMPLATE);
                $f_AdminButtons = nc_get_list_mode_select($f_Checked, $classID, $f_RowID, $f_AdminButtons_id, $f_AdminButtons_buttons);
            } else {
                if ($system_env['AdminButtonsType']) {
                    eval("\$f_AdminButtons = \"" . $system_env['AdminButtons'] . "\";");
                } else {
                    $f_AdminButtons_buttons = nc_get_AdminButtons_buttons($f_RowID, $f_Checked, $f_AdminButtons_check, $f_AdminButtons_copy, $f_AdminButtons_change, $f_AdminButtons_delete, $cc);
                    $f_AdminButtons = nc_get_AdminButtons_prefix($f_Checked, $cc);
                    // проверка прав
                    if ($modPerm || $changePerm && $f_AdminButtons_user_add == $AUTH_USER_ID) {
                        $f_AdminButtons .= nc_get_AdminButtons_modPerm($classID, $f_RowID, $f_AdminButtons_id, $f_AdminButtons_priority, $f_AdminInterface_user_add, $f_AdminButtons_user_add, $f_AdminInterface_user_change, $f_AdminButtons_user_change, $f_AdminButtons_buttons, $cc, $query_order);
                    } else {
                        $f_AdminButtons .= nc_get_AdminButtons_modPerm_else($classID, $f_RowID);
                    }
                    $f_AdminButtons .= nc_get_AdminButtons_suffix();
                }
            }
            if ($user_table_mode) {
                $f_AdminButtons = "";
            }
        } else {
            // *** Режим просмотра: ссылки на действия с объектом ***
            $f_AdminButtons_id = "";
            $f_AdminButtons_priority = "";
            $f_AdminButtons_user_add = "";
            $f_AdminButtons_user_change = "";
            $f_AdminButtons_copy = "";
            $f_AdminButtons_change = "";
            $f_AdminButtons_delete = "";
            $f_AdminButtons_check = "";
            $f_AdminButtons_select = "";
            $f_AdminButtons = "";
            if (!isset($f_Keyword)) {
                $f_Keyword = '';
            }
            // модуль маршрутизации: нет аналога для $msgLink
            $msgLink = $f_Keyword != '' ? $f_Keyword : $cc_keyword . "_" . $f_RowID;
            $dateLink = '';
            if ($date_field && ${"f_{$date_field}"}) {
                $dateLink = ${"f_{$date_field}_year"} . "/" . ${"f_{$date_field}_month"} . "/" . ${"f_{$date_field}_day"} . "/";
            }
            if ($routing_module_enabled) {
                $_add_domain = $catalogue != $current_catalogue['Catalogue_ID'];
                $fullLink = new nc_routing_path_object($classID, $routing_object_parameters, 'full', 'html', false, null, $_add_domain);
                $fullRSSLink = $cc_env['AllowRSS'] ? new nc_routing_path_object($classID, $routing_object_parameters, 'full', 'rss', false, null, $_add_domain) : "";
                $fullXMLLink = $cc_env['AllowXML'] ? new nc_routing_path_object($classID, $routing_object_parameters, 'full', 'xml', false, null, $_add_domain) : "";
                $fullDateLink = $dateLink ? new nc_routing_path_object($classID, $routing_object_parameters, 'full', 'html', true, null, $_add_domain) : $fullLink;
                $editLink = new nc_routing_path_object($classID, $routing_object_parameters, 'edit', 'html', false, null, $_add_domain);
                $deleteLink = new nc_routing_path_object($classID, $routing_object_parameters, 'delete', 'html', false, null, $_add_domain);
                $dropLink = new nc_routing_path_object($classID, $routing_object_parameters, 'drop', 'html', false, $nc_token_for_drop, $_add_domain);
                $checkedLink = new nc_routing_path_object($classID, $routing_object_parameters, 'checked', 'html', false, null, $_add_domain);
                $subscribeMessageLink = new nc_routing_path_object($classID, $routing_object_parameters, 'subscribe', 'html', false, null, $_add_domain);
            } else {
                $_host = $catalogue == $current_catalogue['Catalogue_ID'] ? '' : $subHost;
                $fullLink = $_host . $subLink . $msgLink . ".html";
                // полный вывод
                $fullRSSLink = $cc_env['AllowRSS'] ? $_host . $subLink . $msgLink . ".rss" : "";
                // rss
                $fullXMLLink = $cc_env['AllowXML'] ? $_host . $subLink . $msgLink . ".xml" : "";
                $fullDateLink = $_host . $subLink . $dateLink . $msgLink . ".html";
                // полный вывод с датой
                $editLink = $_host . $subLink . "edit_" . $msgLink . ".html";
                // ссылка для редактирования
                $deleteLink = $_host . $subLink . "delete_" . $msgLink . ".html";
                // удаления
                $dropLink = $_host . $subLink . "drop_" . $msgLink . ".html" . ($nc_core->token->is_use('drop') ? "?" . $nc_core->token->get_url() : "");
                // удаления без подтверждения
                $checkedLink = $_host . $subLink . "checked_" . $msgLink . ".html";
                // включения\выключения
                $subscribeMessageLink = $_host . $subLink . "subscribe_" . $msgLink . ".html";
                // подписка на объект
            }
            // Если это превью данного компонента то, мы добавляем переменную к ссылкам на полный просмотр объекта
            if ($classPreview == $cc_env["Class_ID"]) {
                $fullLink .= "?classPreview=" . $classPreview;
                $fullDateLink .= "?classPreview=" . $classPreview;
            }
        }
        // *** Ссылки для агрегированных объектов ***
        if (is_object($nc_class_aggregator) && $f_db_Subdivision_ID) {
            if ($routing_module_enabled) {
                $fullLink = new nc_routing_path_object($f_db_Class_ID, array_merge($routing_object_parameters, array('folder' => $nc_core->subdivision->get_by_id($f_db_Subdivision_ID, 'Hidden_URL'), 'folder_id' => $f_db_Subdivision_ID, 'infoblock_id' => $f_db_Sub_Class_ID, 'object_id' => $f_db_Message_ID, 'object_keyword' => $f_db_Keyword)));
            } else {
                $fullLink = $nc_core->subdivision->get_by_id($f_db_Subdivision_ID, 'Hidden_URL') . ($f_db_Keyword ? $f_db_Keyword . '.html' : $nc_core->sub_class->get_by_id($f_db_Sub_Class_ID, 'EnglishName') . '_' . $f_db_Message_ID . '.html');
            }
        }
        if ($component_file_mode) {
            $vars = array();
            $vars['f_RowID'] = $f_RowID;
            $vars['f_UserID'] = $f_UserID;
            $vars['f_LastUserID'] = $f_LastUserID;
            $vars['f_AdminInterface_user_add'] = $f_AdminInterface_user_add;
            $vars['f_AdminInterface_user_change'] = $f_AdminInterface_user_change;
            $vars['subLink'] = $subLink;
            $vars['cc_keyword'] = $cc_keyword;
            $vars['fullLink'] = $fullLink;
            $vars['fullDateLink'] = $fullDateLink;
            $vars['fullRSSLink'] = $fullRSSLink;
            $vars['fullXMLLink'] = $fullXMLLink;
            $vars['editLink'] = $editLink;
            $vars['deleteLink'] = $deleteLink;
            $vars['dropLink'] = $dropLink;
            $vars['checkedLink'] = $checkedLink;
            $vars['subscribeMessageLink'] = $subscribeMessageLink;
            $vars['f_Keyword'] = $f_Keyword;
            $vars['msgLink'] = $msgLink;
            $vars['dateLink'] = $dateLink;
            $vars['date_field'] = $date_field;
            $vars['f_AdminButtons_id'] = $f_AdminButtons_id;
            $vars['f_AdminButtons_priority'] = $f_AdminButtons_priority;
            $vars['f_AdminButtons_user_add'] = $f_AdminButtons_user_add;
            $vars['f_AdminButtons_user_change'] = $f_AdminButtons_user_change;
            $vars['f_AdminButtons_copy'] = $f_AdminButtons_copy;
            $vars['f_AdminButtons_change'] = $f_AdminButtons_change;
            $vars['f_AdminButtons_delete'] = $f_AdminButtons_delete;
            $vars['f_AdminButtons_check'] = $f_AdminButtons_check;
            $vars['f_AdminButtons_select'] = $f_AdminButtons_select;
            $vars['f_AdminButtons'] = $f_AdminButtons;
            $vars['f_PermissionGroup'] = $f_PermissionGroup;
            $vars['f_Created_year'] = $f_Created_year;
            $vars['f_Created_month'] = $f_Created_month;
            $vars['f_Created_day'] = $f_Created_day;
            $vars['f_Created_hours'] = $f_Created_hours;
            $vars['f_Created_minutes'] = $f_Created_minutes;
            $vars['f_Created_seconds'] = $f_Created_seconds;
            $vars['f_Created_date'] = $f_Created_date;
            $vars['f_Created_time'] = $f_Created_time;
            if (isset($f_LastUpdated) && $f_LastUpdated) {
                $vars['f_LastUpdated'] = $f_LastUpdated;
                $vars['f_LastUpdated_year'] = $f_LastUpdated_year;
                $vars['f_LastUpdated_month'] = $f_LastUpdated_month;
                $vars['f_LastUpdated_day'] = $f_LastUpdated_day;
                $vars['f_LastUpdated_hours'] = $f_LastUpdated_hours;
                $vars['f_LastUpdated_minutes'] = $f_LastUpdated_minutes;
                $vars['f_LastUpdated_seconds'] = $f_LastUpdated_seconds;
                $vars['f_LastUpdated_date'] = $f_LastUpdated_date;
                $vars['f_LastUpdated_time'] = $f_LastUpdated_time;
            }
            $iteration_RecordTemplate[$f_RowNum]['vars'] = $vars;
            unset($vars);
        } else {
            // «компоненты v4»
            $row = "";
            eval($cc_env['convert2txt']);
            eval("\$row = \"" . nc_preg_replace('/\\$result\\b/', '$row', $cc_env["RecordTemplate"]) . "\";");
            // внутри админки: для того, чтобы объекты можно было перетаскивать...
            // ... сделаем "обертку" с ID, номером класса и ID родителя:
            if ($inside_admin) {
                $row_id_string = "id='message" . $classID . "-" . $f_RowID . "' messageParent='" . $parent_message . "' messageClass='" . $classID . "' messageSubclass='" . $cc . "' dragLabel='" . htmlspecialchars($cc_env['Class_Name'] . " #" . $f_RowID, ENT_QUOTES) . "'";
                // попытаемся найти тэг, в который вложена строка...
                if (nc_preg_match("@^\\s*<(\\w+).+</\\1>\\s*\$@s", $row, $regs)) {
                    $row = nc_preg_replace("@^(\\s*<" . $regs[1] . ")@s", "\$1 " . $row_id_string, $row);
                } else {
                    $row = "<div " . $row_id_string . ">" . $row . "</div>";
                }
            }
            $result .= ($no_cache_marks ? "<!-- nocache_object_" . $f_RowNum . " -->" : "") . $row . ($no_cache_marks ? "<!-- /nocache_object_" . $f_RowNum . " -->" : "");
        }
    }
    // "foreach row"
    if ($component_file_mode) {
        $nc_parent_field_path = $file_class->get_parent_fiend_path('RecordTemplate');
        $nc_field_path = $file_class->get_field_path('RecordTemplate');
        // check and include component part
        try {
            if (nc_check_php_file($nc_field_path)) {
                ob_start();
                include $nc_field_path;
                $result .= ob_get_clean();
            }
        } catch (Exception $e) {
            if (is_object($perm) && $perm->isSubClassAdmin($cc)) {
                // error message
                $result .= sprintf(CONTROL_CLASS_CLASSFORM_CHECK_ERROR, CONTROL_CLASS_CLASS_OBJECTSLIST_BODY);
            }
        }
        $nc_parent_field_path = null;
        $nc_field_path = null;
        unset($iteration_RecordTemplate);
    }
    // (Конец блока «листинг объектов»)
    // *** Суффикс списка объектов ***
    if (!$ignore_suffix) {
        if ($component_file_mode) {
            $nc_parent_field_path = $file_class->get_parent_fiend_path('FormSuffix');
            $nc_field_path = $file_class->get_field_path('FormSuffix');
            // check and include component part
            try {
                if (nc_check_php_file($nc_field_path)) {
                    ob_start();
                    include $nc_field_path;
                    $result .= ob_get_clean();
                }
            } catch (Exception $e) {
                if (is_object($perm) && $perm->isSubClassAdmin($cc)) {
                    // error message
                    $result .= sprintf(CONTROL_CLASS_CLASSFORM_CHECK_ERROR, CONTROL_CLASS_CLASS_OBJECTSLIST_SUFFIX);
                }
            }
            $nc_parent_field_path = null;
            $nc_field_path = null;
        } else {
            // «компоненты v4»
            if ($cc_env['FormSuffix']) {
                eval("\$result .= \"" . $cc_env["FormSuffix"] . "\";");
            }
        }
    }
    // добавить скрипт для D&D
    if ($inside_admin && !$user_table_mode && $perm->isSubClassAdmin($cc)) {
        // приоритет позволять менять только если отсортировано по умолчанию (Priority DESC)
        $change_priority = nc_show_drag_handler($cc, $query_order) ? 'true' : 'false';
        $result .= "<script type='text/javascript' language='Javascript'>";
        $result .= "if (typeof formAsyncSaveEnabled!='undefined') messageInitDrag(" . nc_array_json(array($classID => $row_ids)) . ", " . $change_priority . ");";
        $result .= "</script>";
    }
    // title
    if ($isMainContent && (!$isSubClassArray || $cc_array[0] == $cc)) {
        $title = '';
        //если для раздела не задан Title, то используется Title от компонента
        if (!$current_sub['Title'] && $cc_env['TitleList']) {
            eval("\$title = \"" . $cc_env['TitleList'] . "\";");
        }
        if ($title) {
            $nc_core->page->set_metatags('title', $title);
            $cc_env['Cache_Access_ID'] = 2;
        }
    }
    // cache section
    if (nc_module_check_by_keyword("cache") && $cc_env['Cache_Access_ID'] == 1 && is_object($nc_cache_list) && !$user_table_mode && !$nc_prepared_data) {
        try {
            $bytes = $nc_cache_list->add($sub, $cc, $cache_key, $result, $cache_vars);
            if ($no_cache_marks) {
                $result = $nc_cache_list->nocacheClear($result);
            }
            // debug info
            if ($bytes) {
                $cache_debug_info = "Written, sub[" . $sub . "], cc[" . $cc . "], Access_ID[" . $cc_env['Cache_Access_ID'] . "], Lifetime[" . $cc_env['Cache_Lifetime'] . "], bytes[" . $bytes . "]";
                $nc_cache_list->debugMessage($cache_debug_info, __FILE__, __LINE__, "ok");
            }
        } catch (Exception $e) {
            $nc_cache_list->errorMessage($e);
        }
    }
    if ($admin_mode && !$GLOBALS['isNaked'] && $cc == $current_cc['Sub_Class_ID']) {
        $result = "<div id='nc_admin_mode_content{$cc}' " . ($inside_admin ? "class='nc_admin_mode_content'" : "class='nc_admin_mode_content nc-admin-mode-content-box'") . ">{$result}</div>";
    }
    return $result;
}
Example #20
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;
}
Example #21
0
function nc_prepare_message_form($form, $action, $admin_mode, $user_table_mode, $sys_table_id, $current_cc, $f_Checked = null, $f_Priority = '', $f_Keyword = '', $f_ncTitle = '', $f_ncKeywords = '', $f_ncDescription = '', $have_seo = true, $eval_ready = false)
{
    global $isNaked, $inside_admin;
    $nc_core = nc_Core::get_object();
    if (!CheckUserRights($current_cc['Sub_Class_ID'], "moderate", 0) || !$admin_mode || !$inside_admin && !$isNaked) {
        return $form;
    }
    if (null === $f_Checked && 1 == $current_cc['Moderation_ID']) {
        $f_Checked = 1;
    }
    $seo = "<div class='nc_seo_fields'>";
    if ('change' == $action && !$user_table_mode) {
        global $message;
        $SQL = "SELECT `uAdd`.`{$nc_core->AUTHORIZE_BY}` as `user_add`,\n                        `uEdit`.`{$nc_core->AUTHORIZE_BY}` as `user_edit`,\n                        a.`IP`,\n                        a.`LastIP`,\n                        UNIX_TIMESTAMP(a.`Created`) as `Created`,\n                        UNIX_TIMESTAMP(a.`LastUpdated`) as `LastUpdated`\n                    FROM `Message{$current_cc['Class_ID']}` AS `a`\n                      LEFT JOIN `User` as `uAdd` ON `uAdd`.`User_ID` = `a`.`User_ID`\n                      LEFT JOIN `User` as `uEdit` ON `uEdit`.`User_ID` = `a`.`LastUser_ID`\n                        WHERE `Message_ID` = " . +$message;
        $info = $nc_core->db->get_row($SQL, ARRAY_A);
        $seo .= "<div class='nc_admin_settings_info nc_seo_edit_info'>\n                    <div class='nc_admin_settings_info_actions'>\n                        <div>\n                            <span>" . CLASS_TAB_CUSTOM_ADD . ":</span> " . date("d.m.Y H:i:s", $info['Created']) . " {$info['user_add']} ({$info['IP']})\n                        </div>";
        if ($info['user_edit']) {
            $seo .= "   <div>\n                            <span>" . CLASS_TAB_CUSTOM_EDIT . ":</span> " . date('d.m.Y H:i:s', $info['LastUpdated']) . " {$info['user_edit']} ({$info['LastIP']})\n                        </div>";
        }
        $seo .= '   </div>';
        $seo .= '</div>';
    }
    $seo .= "<div class='nc_admin_settings_info_checked'>\n                <input id='chk' name='f_Checked' type='checkbox' value='1' " . ($f_Checked ? "checked='checked'" : "") . " />\n                <label for='chk'>" . NETCAT_MODERATION_TURNON . "</label>\n            </div>\n            <div class='nc_admin_settings_info_priority'>\n                <div>" . CONTROL_CONTENT_CATALOUGE_FUNCS_CATALOGUEFORM_PRIORITY . ":</div>\n                <div><input name='f_Priority' type='text' size='3' maxlength='10' value='" . ($f_Priority ? +$f_Priority : '') . "' /></div>\n            </div>";
    if ($current_cc['File_Mode'] && is_object($class_view = nc_class_view::get_instanse()) || !$current_cc['File_Mode']) {
        $seo .= "\n            <div>\n                <div>" . CONTROL_CONTENT_SUBDIVISION_FUNCS_MAINDATA_KEYWORD . ":</div>\n                <div><input name='f_Keyword' type='text' size='20' maxlength='255' value='" . htmlspecialchars($f_Keyword, ENT_QUOTES) . "'></div>\n            </div>\n            <div>\n                <div>" . NETCAT_MODERATION_SEO_TITLE . ":</div>\n                <div><input type='text' name='f_ncTitle' value='" . htmlspecialchars($f_ncTitle, ENT_QUOTES) . "' /></div>\n            </div>\n            <div>\n                <div>" . NETCAT_MODERATION_SEO_KEYWORDS . ":</div>\n                <div><textarea name='f_ncKeywords'>" . htmlspecialchars($f_ncKeywords, ENT_QUOTES) . "</textarea></div>\n            </div>\n            <div>\n                <div>" . NETCAT_MODERATION_SEO_DESCRIPTION . ":</div>\n                <div><textarea name='f_ncDescription'>" . htmlspecialchars($f_ncDescription, ENT_QUOTES) . "</textarea></div>\n            </div>";
    }
    $seo .= "</div><!--.nc_seo_fields-->";
    if (nc_module_check_by_keyword('comments')) {
        require_once $nc_core->ADMIN_FOLDER . "subdivision/function.inc.php";
        $current_cc['Message_ID'] = $message ? $message : -1;
        $comments = nc_subdivision_show_comments($current_cc);
        if ($eval_ready) {
            $comments = str_replace('$nc', '\\$nc', $comments);
        }
    }
    return "<div class='nc_admin_form_menu' style='padding-top: 20px;'>\n                <h2>" . htmlspecialchars($current_cc['Sub_Class_Name']) . "</h2>\n\n                <div id='nc_object_slider_menu' class='slider_block_2' style='padding-top: 0px; padding-bottom: 15px;'>\n                    <ul>\n                        " . ($have_seo ? "\n                        <li class='button_on' id='nc_show_main' onClick='return false;'>" . NETCAT_MESSAGE_FORM_MAIN . "</li>\n                        <li id='nc_show_seo' onClick='return false;'>" . NETCAT_MESSAGE_FORM_ADDITIONAL . "</li>\n                        " : "<li />") . "\n                    </ul>\n                </div>\n\n                <div class='nc_admin_form_menu_hr'></div>\n            </div>\n            <div id='nc_seo_append'><div class='nc_admin_form_seo' style='display: none;'>{$seo} {$comments}</div></div>\n            <div class='nc_admin_form_body nc-admin'>{$form}</div>" . (!$sys_table_id ? "\n            <div class='nc_admin_form_buttons'>\n                <button type='button' class='nc_admin_metro_button nc-btn nc--blue' disable>" . NETCAT_REMIND_SAVE_SAVE . "</button>\n                <button type='button' class='nc_admin_metro_button_cancel nc-btn nc--red nc--bordered nc--right'>" . CONTROL_BUTTON_CANCEL . "</button>\n            </div>\n\n            <style>\n                a {color:#1a87c2;}\n                a:hover {text-decoration:none;}\n                a img {border:none;}\n                p {margin:0px; padding:0px 0px 18px 0px;}\n                h2 {font-size:20px; font-family:'Segoe UI', SegoeWP, Arial; color:#333333; font-weight:normal; margin:0px; padding:20px 0px 10px 0px; line-height:20px;}\n                form {margin:0px; padding:0px;}\n                input {outline:none;}\n                .clear {margin:0px; padding:0px; font-size:0px; line-height:0px; height:1px; clear:both; float:none;}\n                select, input, textarea {border:1px solid #dddddd;}\n                :focus {outline:none;}\n                .input {outline:none; border:1px solid #dddddd;}\n            </style>\n\n            <script type='text/javascript'>prepare_message_form();</script>" : "");
}
Example #22
0
function nc_full_message_parse_buffer($buffer)
{
    global $REQUEST_URI, $classID, $message, $cache_vars;
    global $MODULE_VARS, $nc_cache_full, $current_sub, $current_cc, $cache_for_user;
    // cache section
    if (nc_module_check_by_keyword("cache") && $current_cc['Cache_Access_ID'] == 1 && is_object($nc_cache_full)) {
        try {
            $bytes = $nc_cache_full->add($classID, $message, $REQUEST_URI . $cache_for_user, $buffer, $cache_vars);
            // debug info
            if ($bytes) {
                $cache_debug_info = "Written, sub[" . $current_sub['Subdivision_ID'] . "], cc[" . $current_cc['Sub_Class_ID'] . "], Access_ID[" . $current_cc['Cache_Access_ID'] . "], Lifetime[" . $current_cc['Cache_Lifetime'] . "], bytes[" . $bytes . "]";
                $nc_cache_full->debugMessage($cache_debug_info, __FILE__, __LINE__, "ok");
            }
        } catch (Exception $e) {
            // for debug
            $nc_cache_full->errorMessage($e);
        }
    }
    return $buffer;
}
Example #23
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;
}