/** * 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; }
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(); }
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 & with & then replace all & to & $url = nc_preg_replace(array("/&/", "/&/"), array("&", "&"), $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; }
function nc_quickbar_in_template_header($buffer, $File_Mode = false, $return_shortpage_update_array = false) { global $MODULE_VARS, $AUTH_USER_ID, $ADMIN_TEMPLATE, $HTTP_ROOT_PATH, $ADMIN_PATH, $perm; global $SUB_FOLDER, $REQUEST_URI, $REQUEST_METHOD, $ADMIN_AUTHTIME; global $current_catalogue, $current_sub, $current_cc, $current_user, $AUTHORIZE_BY; global $inside_admin, $admin_mode, $user_table_mode, $action, $message, $classID; /** @var int $message */ $nc_core = nc_Core::get_object(); if ($inside_admin || !nc_quickbar_permission()) { return $return_shortpage_update_array ? null : $buffer; } if (!$return_shortpage_update_array) { // reversive direction! $buffer = nc_insert_in_head($buffer, nc_js(), $nc_core->get_variable("admin_mode")); } if ($nc_core->modules->get_by_keyword('auth')) { $profile_url = nc_auth_profile_url($AUTH_USER_ID); } if (nc_module_check_by_keyword('routing')) { if ($message) { $view_link = nc_routing::get_object_path($classID, $message, 'full'); } else { $view_link = (string) nc_routing::get_folder_path($current_sub['Subdivision_ID']); if (!$view_link) { if ($current_cc) { $view_link = nc_routing::get_infoblock_path($current_cc['Sub_Class_ID'], $current_cc['DefaultAction']); } else { $view_link = '#'; } } } } else { $view_link = $SUB_FOLDER . ($current_sub['Hidden_URL'] != "/index/" ? $current_sub['Hidden_URL'] : "/") . ($message && $current_cc['EnglishName'] ? $current_cc['EnglishName'] . "_" . $message . ".html" : ""); } if (!$user_table_mode) { $edit_link = $SUB_FOLDER . $HTTP_ROOT_PATH . ($action == "change" ? "message" : $action) . ".php?catalogue=" . $current_catalogue['Catalogue_ID'] . ($current_sub['Subdivision_ID'] ? "&sub=" . $current_sub['Subdivision_ID'] : "") . ($current_cc['Sub_Class_ID'] ? "&cc=" . $current_cc['Sub_Class_ID'] : "") . ($message ? "&message=" . $message : ""); } else { $edit_link = $SUB_FOLDER . $HTTP_ROOT_PATH . "?catalogue=" . $current_catalogue['Catalogue_ID'] . ($current_sub['Subdivision_ID'] ? "&sub=" . $current_sub['Subdivision_ID'] : "") . ($current_cc['Sub_Class_ID'] ? "&cc=" . $current_cc['Sub_Class_ID'] : "") . ($message ? "&message=" . $message : ""); } $admin_link = ""; switch (true) { case $current_cc['System_Table_ID'] == 3 && $message: $admin_link = "#user.edit(" . $message . ")"; break; case $current_cc['Sub_Class_ID'] && $message: $admin_link = "#object.view(" . $current_cc['Sub_Class_ID'] . "," . $message . ")"; break; case $current_cc['Sub_Class_ID']: $admin_link = "#object.list(" . $current_cc['Sub_Class_ID'] . ")"; break; case $current_sub['Subdivision_ID']: $admin_link = "#subclass.list(" . $current_sub['Subdivision_ID'] . ")"; break; case $current_catalogue['Catalogue_ID']: $admin_link = "#site.map(" . $current_catalogue['Catalogue_ID'] . ")"; } $admin_link = $ADMIN_PATH . $admin_link; $sub_admin_limk = $ADMIN_PATH . "subdivision/index.php?phase=5&SubdivisionID={$current_sub['Subdivision_ID']}&view=all"; $template_admin_limk = $ADMIN_PATH . 'template/index.php?phase=4&TemplateID=' . $nc_core->template->get_current('Template_ID'); $sub_class_admin_link = $ADMIN_PATH . "subdivision/SubClass.php?SubdivisionID=" . $current_sub['Subdivision_ID']; $msg_img = $ADMIN_PATH . 'skins/default/img/msg.png'; $pass_admin_link = $ADMIN_PATH . 'user/index.php'; $lock_img = $ADMIN_PATH . 'skins/default/img/lock.png'; $right_img = $ADMIN_PATH . 'skins/default/img/right.png'; if ($return_shortpage_update_array) { return array('view_link' => $view_link, 'edit_link' => $edit_link, 'sub_admin_link' => $sub_admin_limk, 'template_admin_link' => $template_admin_limk, 'admin_link' => $admin_link); } $ANY_SYSTEM_MESSAGE = $nc_core->db->get_var("SELECT COUNT(*) FROM `SystemMessage` WHERE `Checked` = 0"); $lang = $nc_core->lang->detect_lang(1); if ($lang == 'ru') { $lang = $nc_core->NC_UNICODE ? "ru_utf8" : "ru_cp1251"; } if ($nc_core->modules->get_by_keyword('cache')) { $cache_link = $ADMIN_PATH . "#module.cache"; } $PermissionGroup_Name = $nc_core->db->get_col("SELECT PermissionGroup_Name FROM PermissionGroup WHERE PermissionGroup_ID IN (" . join(', ', (array) $current_user['Permission_Group']) . ")"); /*<script type='text/javascript' src='" . $SUB_FOLDER . $ADMIN_PATH . "js/sitemap.js'></script> <script type='text/javascript' src='" . $SUB_FOLDER . $ADMIN_PATH . "js/remind_save.js'></script>*/ //-------------------------------------------------------------------------- // Генерация панели инструментов (navbar) для front-end //-------------------------------------------------------------------------- $navbar = $nc_core->ui->navbar(); $lsDisplayType = $nc_core->get_display_type(); //-------------------------------------------------------------------------- // Просмотр $navbar->quickmenu->add_btn($SUB_FOLDER . $view_link, NETCAT_QUICKBAR_BUTTON_VIEWMODE)->active(!$admin_mode); if ($lsDisplayType != 'longpage_vertical') { // Редактирование $navbar->quickmenu->add_btn($edit_link, NETCAT_QUICKBAR_BUTTON_EDITMODE)->active($admin_mode); //-------------------------------------------------------------------------- // Пункт меню "Ещё" $navbar->more = $navbar->menu->add_btn('#', NETCAT_QUICKBAR_BUTTON_MORE)->submenu(); // echo $SubdivisionID;exit; if (!empty($current_sub['Subdivision_ID']) && $perm->isAccess(NC_PERM_ITEM_SUB, NC_PERM_ACTION_EDIT, $current_sub['Subdivision_ID'], 0)) { $navbar->more->add_btn($sub_admin_limk, NETCAT_QUICKBAR_BUTTON_SUBDIVISION_SETTINGS)->icon('settings')->click('nc_form(this.href); return false'); } if ($perm->isAccess(NC_PERM_TEMPLATE, 0, 0, 0)) { $navbar->more->add_btn($template_admin_limk, NETCAT_QUICKBAR_BUTTON_TEMPLATE_SETTINGS)->icon('dev-templates')->click('nc_form(this.href); return false'); } $navbar->more->add_btn($admin_link, NETCAT_QUICKBAR_BUTTON_ADMIN)->icon('mod-default'); //-------------------------------------------------------------------------- } else { $navbar->quickmenu->add_btn('#', NETCAT_QUICKBAR_BUTTON_EDITMODE)->disabled()->title(NETCAT_QUICKBAR_BUTTON_EDITMODE_UNAVAILABLE_FOR_LONGPAGE)->click('return false')->modificator('default-cursor'); } // AJAX Loader $navbar->tray->add_btn('#')->compact()->icon_large('navbar-loader')->id('nc-navbar-loader')->style('display:none'); // Иконка с сообщениями if ($perm->isAccess(NC_PERM_REPORT)) { $navbar->tray->add_btn($ADMIN_PATH . '#tools.systemmessages')->compact()->title($ANY_SYSTEM_MESSAGE ? BEGINHTML_ALARMON : BEGINHTML_ALARMOFF, true)->icon_large('system-message')->id('trayMessagesIcon')->disabled(!$ANY_SYSTEM_MESSAGE); } // Меню пользователя $logout_link = $MODULE_VARS['auth'] ? $SUB_FOLDER . $HTTP_ROOT_PATH . "modules/auth/?logoff=1&REQUESTED_FROM=" . $REQUEST_URI . "&REQUESTED_BY=" . $REQUEST_METHOD : $ADMIN_PATH . "unauth.php"; $navbar->tray->add_btn('#', $perm->getLogin())->click('return false')->title(BEGINHTML_USER . ': ' . $perm->getLogin())->htext(BEGINHTML_USER)->dropdown()->div(NETCAT_ADMIN_AUTH_PERM . " <span class='nc-text-grey'>" . str_replace('"', '\\"', join(', ', Permission::get_all_permission_names_by_id($AUTH_USER_ID))) . "</span><hr class='nc-hr'>" . $nc_core->ui->btn('#', NETCAT_ADMIN_AUTH_CHANGE_PASS)->click('nc_password_change(); return false')->light()->text_darken()->left() . $nc_core->ui->btn($logout_link, NETCAT_ADMIN_AUTH_LOGOUT)->red()->right())->class_name('nc-padding-10'); //-------------------------------------------------------------------------- // $navbar $navbar_html = (string) $navbar->fixed(); $navbar_html .= "\n<script type='text/javascript'>\n\nvar padding = Math.round(parseInt(jQuery('body').css('padding-top')) + parseInt(jQuery('body').css('margin-top')) + jQuery('div.nc-navbar').height());\njQuery('body').css({marginTop:padding+'px', position:'relative'});\n\njQuery('div.nc-navbar li.nc--dropdown > a').click(function(){\n jQuery(this.parentNode).addClass('nc--clicked');\n return false;\n}).parent().mouseleave(function(){\n var ob = this\n jQuery._navbar_menu_timeout = setTimeout(function(){\n jQuery(ob).removeClass('nc--clicked');\n }, 500);\n}).mouseover(function(){\n if (jQuery(this).hasClass('nc--clicked')) {\n try {clearTimeout(jQuery._navbar_menu_timeout)} catch(e) {};\n }\n}).find('li a').click(function(){\n jQuery('div.nc-navbar li.nc--dropdown').removeClass('nc--clicked');\n jQuery('div.nc-navbar li.nc--clicked').removeClass('nc--clicked');\n});\njQuery('body').click(function(){\n jQuery('div.nc-navbar>ul>li.nc--clicked').removeClass('nc--clicked')\n})\n</script>"; // Содержание модального окна быстрого изменения пароля //TODO: Сделать загрузку содержимого окна через ajax $navbar_html .= "\n<div id='nc_password_change' class='nc-shadow-large nc--hide nc-admin'>\n <form style='width:350px; line-height:20px' class='nc-form' method='post' action='" . $ADMIN_PATH . "user/index.php'>\n <div class='nc-padding-15'>\n <h2 class='nc-h2'>" . NETCAT_ADMIN_AUTH_CHANGE_PASS . "</h2>\n <hr class='nc-hr' style='margin:5px -15px 15px'>\n <div>\n <label>" . CONTROL_USER_NEWPASSWORD . "</label><br>\n <input class='nc--wide' type='password' name='Password1' maxlength='32' placeholder='" . CONTROL_USER_NEWPASSWORD . "' />\n </div>\n <div>\n <label>" . CONTROL_USER_NEWPASSWORDAGAIN . "</label><br>\n <input class='nc--wide' type='password' name='Password2' maxlength='32' placeholder='" . CONTROL_USER_NEWPASSWORDAGAIN . "' />\n </div>\n <input type='hidden' name='UserID' value='" . $AUTH_USER_ID . "' />\n <input type='hidden' name='phase' value='7' />\n " . $nc_core->token->get_input() . "\n </div>\n </form>\n <div class='nc-form-actions'>\n <script type='text/javascript'>function nc_password_change_submit(){jQuery('#nc_password_change form').submit();}</script>\n <button class='nc-btn nc--bordered nc--red nc--right' onclick='jQuery.modal.close()' type='button'>" . CONTROL_BUTTON_CANCEL . "</button>\n <button class='nc_admin_metro_button nc-btn nc--blue nc--right' onclick='nc_password_change_submit()'>" . NETCAT_REMIND_SAVE_SAVE . "</button>\n </div>\n</div>\n<!-- /#nc_password_change -->"; $addon = "<!-- Netcat QuickBar -->\n" . "<script type='text/javascript' src='" . $ADMIN_PATH . "js/classes/nc_cookies.class.js'></script>\n" . "<script type='text/javascript' src='" . $ADMIN_PATH . "js/classes/nc_drag.class.js'></script>\n" . "<script type='text/javascript' src='" . $ADMIN_PATH . "js/lang/" . $lang . ".js?" . $LAST_LOCAL_PATCH . "' charset='" . $nc_core->NC_CHARSET . "'></script>\n <link rel='stylesheet' href='" . $ADMIN_PATH . "/js/codemirror/lib/codemirror.css'>\n <script src='" . $ADMIN_PATH . "js/codemirror/lib/codemirror.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/xml.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/mysql.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/javascript.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/css.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/clike.js'></script>\n <script src='" . $ADMIN_PATH . "js/codemirror/mode/php.js'></script>\n <script type='text/javascript'>\n var nc_token = '" . $nc_core->token->get(+$AUTH_USER_ID) . "';\n </script>\n <script type='text/javascript'>\n jQuery(function () {\n\n function getEditorTypeById(id) {\n if(id == 'Query') {\n return 'text/x-mysql';\n }\n return 'text/x-php';\n }\n\n if(true){\n\n window.CMEditors = [];\n\n function createCMEditor(ind, el) {\n var init = true;\n return function () {\n if(init) {\n var h = jQuery(el).height();\n window.CMEditors[ind] = CodeMirror.fromTextArea(el,{\n lineNumbers: true,\n mode: getEditorTypeById(jQuery(el).attr('id')),\n indentUnit: 4\n });\n window.CMEditors[ind].id = jQuery(el).attr('id');\n var scrollEl = jQuery(window.CMEditors[ind].getScrollerElement());\n scrollEl.height(h);\n }\n else {\n var h = jQuery(window.CMEditors[ind].getScrollerElement()).height();\n window.CMEditors[ind].toTextArea();\n jQuery(el).height(h);\n }\n init = !init;\n }\n }\n\n jQuery('textarea').each(function (ind, el) {\n return null;\n var prev0 = jQuery(el).prev(), prev = prev0.prev(), prevPrev = prev.prev(),\n prev0F = prev0.filter('div.resize_block').children(), prevF = prev.filter('div.resize_block').children(), prevPrevF = prevPrev.filter('div.resize_block').children();\n prevF.add(prev0F).add(prevPrevF).each(function (i, e) {\n jQuery(e).bind('click', function () {\n var idd = jQuery(this).attr('href').substr(1);\n for(var k in window.CMEditors) {\n if(window.CMEditors[k].id == idd) {\n var scrollEl = jQuery(window.CMEditors[k].getScrollerElement());\n if(jQuery(this).hasClass('textarea_shrink')) {\n scrollEl.height(scrollEl.height() + 20);\n }\n else if(scrollEl.height() > 120) {\n scrollEl.height(scrollEl.height() - 20);\n }\n break;\n }\n }\n });\n });\n jQuery(el).after(jQuery('<input>').attr({type: 'checkbox', id: 'cmtext'+ind})\n .click(createCMEditor(ind, el))\n .after(jQuery('<label>').attr('for', 'cmtext'+ind).html(' " . NETCAT_SETTINGS_CODEMIRROR_SWITCH . "')));\n });\n }\n });\n jQuery('body').attr('style', 'overflow-y: auto;');\n </script>\n <!-- для диалога генерации альтернативных форм -->\n <script type='text/javascript'>\n var SUB_FOLDER = '" . $SUB_FOLDER . "';\n var NETCAT_PATH = '" . $SUB_FOLDER . $HTTP_ROOT_PATH . "';\n var ADMIN_PATH = '" . $ADMIN_PATH . "';\n var ADMIN_LANG = '" . MAIN_LANG . "';\n var NC_CHARSET = '" . $nc_core->NC_CHARSET . "';\n var ICON_PATH = '" . $ADMIN_TEMPLATE . " + img/';\n var NETCAT_REMIND_SAVE_TEXT = '" . NETCAT_REMIND_SAVE_TEXT . "';\n </script>" . "<script>\n function showhide(val, val2) {\n var obj=document.getElementById(val)\n var obj2=document.getElementById(val2)\n obj.className=(obj.className=='show_add')? 'hide_add': 'show_add'\n obj2.className=(obj2.className=='blue')? 'white': 'blue'\n }\n </script>"; $addon .= $navbar_html; if ($File_Mode) { $addon = str_replace("\\\"", "\"", $addon); } switch (true) { case nc_preg_match("/\\<\\s*?frameset.*?\\>/im", $buffer): break; case nc_preg_match("/\\<\\s*?body.*?\\>/im", $buffer): $preg_pattern = "/(\\<\\s*?body.*?\\>){1}/im"; $preg_replacement = "\$1\n" . $addon; break; case nc_preg_match("/\\<\\s*?html\\s*?\\>/im", $buffer): $preg_pattern = "/(\\<\\s*?html\\s*?\\>){1}/im"; $preg_replacement = "\$1\n<body>" . $addon . "</body>"; break; } if ($preg_pattern && $preg_replacement) { $buffer = nc_preg_replace($preg_pattern, $preg_replacement, $buffer); } return $buffer; }
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:
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; }
/** * Получить путь до раздела поиска на сайте с указанным идентификатором. * @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]; }
/** * 'собственно функция для получения нужной информации' * @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(); } }
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; }
/** * Формирование ссылки "просмотр раздела" внутри админки с учётом 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; }
/** * страница изменения данных пользователя * (вкладки: пользователь; права) * @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})"; }
$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') {
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"] . "&sub=" . $current_sub["Subdivision_ID"] . "&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; }
<?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(); }
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; }
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; } }
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; }
/** * Функция для удаления объектов компонентов * @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; }
/** * * @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'] . '&sub=' . $mirror_env['Subdivision_ID'] : '?catalogue=' . $catalogue . '&sub=' . $sub); $cc_keyword = null; $ccLink = $subLink . ($is_mirror ? '&cc=' . $mirror_env['Sub_Class_ID'] : '&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 == '?' ? '' : '&') . $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 ? "&" : "") . "curPos=" . ($curPos - $maxRows) . (isset($cc_env['cur_cc']) && $cc_env['cur_cc'] ? "&cur_cc=" . $cc_env['cur_cc'] : "") . ($classPreview == $cc_env["Class_ID"] ? "&classPreview=" . $classPreview : "") . ($get_param_str ? "&" . $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 ? "&" : "") . ($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 ? "&" : "") . "curPos=" . $endRow . (isset($cc_env['cur_cc']) && $cc_env['cur_cc'] ? "&cur_cc=" . $cc_env['cur_cc'] : "") . ($classPreview == $cc_env["Class_ID"] ? "&classPreview=" . $classPreview : "") . ($get_param_str ? "&" . $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 . "&sub=" . $sub . "&cc=" . $cc; $f_AdminCommon_delete_all = $admin_url_prefix . "message.php?catalogue=" . $catalogue . "&sub=" . $sub . "&cc=" . $cc . "&classID=" . $classID . "&delete=1"; $f_AdminCommon_export_csv = $admin_url_prefix . "message.php?catalogue=" . $catalogue . "&sub=" . $sub . "&cc=" . $cc . "&classID=" . $classID . "&export=1"; $f_AdminCommon_import_csv = $admin_url_prefix . "message.php?catalogue=" . $catalogue . "&sub=" . $sub . "&cc=" . $cc . "&classID=" . $classID . "&import=1"; $f_AdminCommon_export_xml = $admin_url_prefix . "message.php?catalogue=" . $catalogue . "&sub=" . $sub . "&cc=" . $cc . "&classID=" . $classID . "&export=2"; $f_AdminCommon_import_xml = $admin_url_prefix . "message.php?catalogue=" . $catalogue . "&sub=" . $sub . "&cc=" . $cc . "&classID=" . $classID . "&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 . '&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; }
/** * @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; }
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>" : ""); }
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; }
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() . "&from_sub=" . $sub_id . ($from_sub ? "" : "&from_cc=" . $cc_id) . "&Type=" . $type . "&base=auto&phase=1411&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&ClassID=" . $export_class_id . "'>" . CONTROL_CLASS_COMPONENT_TEMPLATE_EDIT . "</a> )"; } $html .= "</div>"; return $html; }