/** * на основе формата поля возвращает объект нужного класса * @static * @param string формат поля (из настроек поля) * @return object объект соответствующего класса для работы с данными о поле */ function get_instance($field_format) { // двойные/одинарные второго параметра в Format сейчас не обрабатываются; // они добавлены на случай добавления дополнительных параметров // поэтому можно переписать следующее регвыр как preg_split с ограничением // количества результатов preg_match("/^\n ([\\w_-]+) # relation class\n (?: # caption (optional)\n \\s* : \\s* # delimiter from relation class\n (['\"])? # opening quote (optional)\n (.*) # caption template for listquery\n )?\n \$/xi", $field_format, $regs); list(, $relation_class, $quote, $caption_template) = $regs; if (!$relation_class) { trigger_error("field_relation_factory::get_instance() - incorrect field format ("{$fldFmt[$field_index]}")", E_USER_ERROR); } // remove trailing quote if ($caption_template && $quote) { $caption_template = nc_preg_replace("/{$quote}\$/", "", $caption_template); } if (is_numeric($relation_class)) { // ШАБЛОН ДАННЫХ $relation_type = 'message'; } else { $relation_type = strtolower($relation_class); // achtung bitte: из relation_type убираются знаки "-" и "_"! $relation_type = str_replace(array("-", "_"), "", $relation_type); // sub[_-]class } $class_name = "field_relation_{$relation_type}"; if (class_exists($class_name)) { return new $class_name($caption_template, $relation_class); } else { trigger_error("field_relation_factory::get_instance() - wrong <i>relation_class</i> "{$relation_type}"", E_USER_ERROR); } }
public function parse_url() { if (is_array($this->parsed_url)) { return $this->parsed_url; } $nc_core = nc_core::get_object(); // parse entire url $parsed_url = @parse_url($this->url); $query_string = isset($parsed_url['query']) ? $parsed_url['query'] : null; // validate query parameter if ($query_string) { parse_str('&' . $query_string, $parsed_query_arr); // validate $parsed_query_arr = $nc_core->input->clear_system_vars($parsed_query_arr); // // in error_document $_GET is empty, so set them at this line // $_GET = $parsed_query_arr ? $parsed_query_arr : array(); // build new query $parsed_url['query'] = $this->build_url($parsed_query_arr); } if ($this->remove_sub_folder && isset($parsed_url['path'])) { $parsed_url['path'] = nc_preg_replace("#^(" . preg_quote($nc_core->SUB_FOLDER) . ")(.*?)\$#is", "\$2", $parsed_url['path']); } // for other methods $this->parsed_url = $parsed_url; // return array return $this->parsed_url; }
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; }
/** * Set nocache marks in component fields * * @param array component data * @param int counted nocache block */ public function nocacheStore(&$data) { // check parsed values with need sequence if (empty($this->nocacheStoreKeys)) { return false; } // walk while ($key = array_shift($this->nocacheStoreKeys)) { // need field $value =& $data[$key]; // regex value $regex = "|(<\\!-- nocache -->(.*?)<\\!-- /nocache -->)(.*)|is"; // walk while (preg_match($regex, $value, $matches)) { // fill array $this->cache_block[] = $matches[2]; $index = count($this->cache_block) - 1; // replace string $replace = "<!-- nocache_block_" . $index . " -->\$2<!-- /nocache_block_" . $index . " -->\$3"; $value = nc_preg_replace($regex, $replace, $value); } } return count($this->cache_block); }
/** * Вставка текста в head * @param string макет дизайна * @param string вставляемый текст * @return string результат */ function nc_insert_in_head($buffer, $text, $attach_below = false) { if (!$text) { return $buffer; } //если нужно вставить в конец тега if (true == $attach_below) { return str_replace('</head>', $text . '</head>', $buffer); } //простой случай if (strpos($buffer, '<head>') !== false) { return str_replace('<head>', '<head>' . $text, $buffer); } switch (true) { case nc_preg_match("/\\<\\s*?\\/head\\s*?\\>/im", $buffer): $preg_pattern = "/(\\<\\s*?\\/head\\s*?\\>){1}/im"; $preg_replacement = $text . "\n\$1"; break; case nc_preg_match("/\\<\\s*?html\\s*?\\>/im", $buffer): $preg_pattern = "/(\\<\\s*?html\\s*?\\>){1}/im"; $preg_replacement = "\$1\n<head>" . $text . "</head>"; break; default: $preg_pattern = "/(\\A)/im"; $preg_replacement = $text . "\n\$1"; } return nc_preg_replace($preg_pattern, $preg_replacement, $buffer); }
function InheritTemplateEnv($template) { global $nc_core, $db, $AUTH_USER_ID, $templatePreview; $template += 0; $table_name = 'Template'; ### essence $template_env = $db->get_row("SELECT * FROM `Template` WHERE `Template_ID` = '" . intval($template) . "'", ARRAY_A); $template_env = ConvertSystemVars($template_env, "Template"); // Блок для предпросмотра макетов дизайна $magic_gpc = get_magic_quotes_gpc(); if ($template_env["Template_ID"] == $templatePreview && !empty($_SESSION["PreviewTemplate"][$templatePreview])) { foreach ($_SESSION["PreviewTemplate"][$templatePreview] as $key => $value) { $template_env[$key] = $magic_gpc ? stripslashes($value) : $value; } } $parent_template = $template_env["Parent_Template_ID"]; while ($parent_template) { $parent_template_env = $db->get_row("SELECT * FROM `Template` WHERE `Template_ID` = '" . intval($parent_template) . "'", ARRAY_A); // Если мы вызываем предпросмотр для макета, а он используется в качестве родительского. if ($parent_template_env["Template_ID"] == $templatePreview && !empty($_SESSION["PreviewTemplate"][$templatePreview])) { foreach ($_SESSION["PreviewTemplate"][$templatePreview] as $key => $value) { $parent_template_env[$key] = $magic_gpc ? stripslashes($value) : $value; } } $parent_template = $template_env["Parent_Template_ID"]; if (!$template_env["Header"]) { $template_env["Header"] = $parent_template_env["Header"]; } else { if ($parent_template_env["Header"]) { $template_env["Header"] = str_replace("%Header", $parent_template_env["Header"], $template_env["Header"]); } } if (!$template_env["Footer"]) { $template_env["Footer"] = $parent_template_env["Footer"]; } else { if ($parent_template_env["Footer"]) { $template_env["Footer"] = str_replace("%Footer", $parent_template_env["Footer"], $template_env["Footer"]); } } $template_env["Settings"] = $parent_template_env["Settings"] . $template_env["Settings"]; $parent_template_env = ConvertSystemVars($parent_template_env, "Template"); $template_env = InheritSystemFields("Template", $parent_template_env, $template_env); $parent_template = $parent_template_env["Parent_Template_ID"]; } // load system table fields $table_fields = $nc_core->get_system_table_fields($table_name); // count $counted_fileds = count($table_fields); for ($i = 0; $i < $counted_fileds; $i++) { $template_env["Header"] = str_replace("%" . $table_fields[$i]['name'], $template_env[$table_fields[$i]['name']], $template_env["Header"]); $template_env["Footer"] = str_replace("%" . $table_fields[$i]['name'], $template_env[$table_fields[$i]['name']], $template_env["Footer"]); } // add system CSS styles in admin mode if ($nc_core->admin_mode && !$nc_core->inside_admin && $template_env["Header"]) { // addon css $template_admin_css = "<link type='text/css' rel='stylesheet' href='" . $nc_core->ADMIN_TEMPLATE . "css/admin_pages.css'/>"; // pattern and replacement for preg_replace() switch (true) { case nc_preg_match("/\\<\\s*?\\/head\\s*?\\>/im", $template_env["Header"]): $preg_pattern = "/(\\<\\s*?\\/head\\s*?\\>){1}/im"; $preg_replacement = $template_admin_css . "\n\$1"; break; case nc_preg_match("/\\<\\s*?html\\s*?\\>/im", $template_env["Header"]): $preg_pattern = "/(\\<\\s*?html\\s*?\\>){1}/im"; $preg_replacement = "\$1\n<head>" . $template_admin_css . "</head>"; break; default: $preg_pattern = "/(\\A)/im"; $preg_replacement = $template_admin_css . "\n\$1"; } $template_env["Header"] = nc_preg_replace($preg_pattern, $preg_replacement, $template_env["Header"]); } if ($AUTH_USER_ID && $nc_core->get_settings('QuickBar')) { $cookie_domain = $nc_core->modules->get_vars('auth', 'COOKIES_WITH_SUBDOMAIN') ? str_replace("www.", "", $nc_core->HTTP_HOST) : NULL; if ($nc_core->input->fetch_cookie('QUICK_BAR_CLOSED') == 0 || $nc_core->input->fetch_cookie('QUICK_BAR_CLOSED') == -1) { require_once $nc_core->INCLUDE_FOLDER . "quickbar.inc.php"; $template_env["Header"] = nc_quickbar_in_template_header($template_env["Header"]); setcookie("QUICK_BAR_CLOSED", -1, time() + $nc_core->ADMIN_AUTHTIME, "/", $cookie_domain); } else { // refresh cookie expiration setcookie("QUICK_BAR_CLOSED", 1, time() + $nc_core->ADMIN_AUTHTIME, "/", $cookie_domain); } } return $template_env; }
/** * Обрезает изображение * * @access public * @static * @param string $src_img Путь к исходному изображению * @param string $dest_img Путь к создаваемому изображению * @param int $х0 X0 * @param int $y0 Y0 * @param int $х1 X1 * @param int $y1 Y1 * @param string $format [optional] Формат создаваемого изображения (jpg, gif, png, bmp) * @param int $quality [optional] Качество сжатия изображения (0-100) при $format=='jpg' * @return mixed В случае ошибки возвратит false иначе возвратит путь к созданному файлу */ public static function imgCrop($src_img, $dest_img, $x0, $y0, $x1, $y1, $format = NULL, $quality = 90, $message_id = 0, $field = 0, $ignore_crop_width = 0, $ignore_crop_height = 0) { global $classID, $systemTableID; $nc_core = nc_Core::get_object(); if (!file_exists($src_img)) { return false; } $img_size = @getimagesize($src_img); if ($img_size === false) { return false; } if ($ignore_crop_width && $ignore_crop_height && $img_size[0] < $ignore_crop_width && $img_size[1] < $ignore_crop_height) { return false; } $x0 = (int) $x0; $x1 = (int) $x1; $y0 = (int) $y0; $y1 = (int) $y1; $img_format = strtolower(substr($img_size['mime'], strpos($img_size['mime'], '/') + 1)); if ($img_format == 'x-ms-bmp' || $img_format == 'bitmap') { $img_format = 'bmp'; } if (!function_exists($fn_imgcreatefrom = 'imagecreatefrom' . $img_format)) { return false; } if (!$format) { $format = $img_format; } $new_width = $x1 - $x0; $new_height = $y1 - $y0; $gd_dest_img = imagecreatetruecolor($new_width, $new_height); $gd_src_img = $fn_imgcreatefrom($src_img); if ($format == 'png' || $format == 'gif') { //self::setTransparency($gd_dest_img, $gd_src_img); /*PNG FIX 17.06.2012*/ imagealphablending($gd_dest_img, false); imagesavealpha($gd_dest_img, true); $transparent = imagecolorallocatealpha($gd_dest_img, 255, 255, 255, 127); imagefilledrectangle($gd_dest_img, 0, 0, $new_width, $new_height, $transparent); /*PNG FIX END*/ } imagecopyresampled($gd_dest_img, $gd_src_img, 0, 0, $x0, $y0, $new_width, $new_height, $new_width, $new_height); switch ($format) { case 'gif': imagegif($gd_dest_img, $dest_img); break; case 'png': imagepng($gd_dest_img, $dest_img); break; case 'bmp': imagebmp($gd_dest_img, $dest_img); break; default: imagejpeg($gd_dest_img, $dest_img, $quality); break; } imagedestroy($gd_dest_img); imagedestroy($gd_src_img); // нужно поменять размер в таблице Filetable $HTTP_FILES_PATH_PREG = str_replace("/", "\\/", $nc_core->HTTP_FILES_PATH); // есть файл в защищенной фс if (preg_match("/" . $HTTP_FILES_PATH_PREG . "([0-9uct]+)\\/([0-9]+\\/)?([0-9A-Z]{32})/i", $dest_img, $matches)) { $filename = $matches[3]; $size = filesize($dest_img); $nc_core->db->query("UPDATE `Filetable`\n SET `File_Size` = '" . intval($size) . "'\n WHERE `Virt_Name` = '" . $nc_core->db->escape($filename) . "' "); } // обновление таблицы MessageXX, User $message_id = intval($message_id); if ($message_id && $field) { // информация о поле $fld = $nc_core->db->get_row("\n \tSELECT `Class_ID`, `System_Table_ID`, `Field_Name`\n FROM `Field`\n WHERE `Field_ID` = '" . intval($field) . "'\n OR (`Field_Name` = '" . $nc_core->db->escape($field) . "' AND ( `Class_ID` = '" . intval($classID) . "' OR `System_Table_ID` = '" . intval($systemTableID) . "'))\n LIMIT 1", ARRAY_A); // определение имени таблицы if ($fld['Class_ID']) { $table = 'Message' . intval($fld['Class_ID']); $where = " `Message_ID` = '" . $message_id . "' "; } else { $table = $nc_core->db->get_var("SELECT `System_Table_Name` FROM `System_Table` WHERE `System_Table_ID` = '" . intval($fld['System_Table_ID']) . "' "); $where = " `" . $table . "_ID` = '" . $message_id . "' "; } if (!$table) { return false; } // текущее значение поля объекта $value = $nc_core->db->get_var("SELECT `" . $fld['Field_Name'] . "` FROM `" . $table . "` WHERE " . $where . " "); if (!$value) { return false; } // обновляем размер $size = filesize($dest_img); $value = nc_preg_replace("/:[0-9]+/", ":" . $size, preg_quote($value), 1); $nc_core->db->query("UPDATE `" . $table . "` SET `" . $fld['Field_Name'] . "` = '" . $nc_core->db->escape($value) . "' WHERE " . $where . " "); } return $dest_img; }
/** * Split of the cached data to the prefix, suffix and objects * * @param string cached data * * @return array ("prefix" => string, "objects" => array, "suffix" => string) */ public function getCachedBlocks($data) { // change descriptor $changed = false; $matches = array(); $result = array(); // prefix and suffix regex value $regex = "|^(.*?)<\\!-- nocache_object_\\d*? -->.*<\\!-- /nocache_object_\\d*? -->(.*?)\$|is"; // prefix and suffix if (nc_preg_match($regex, $data, $ps_matches)) { $result['prefix'] = $ps_matches[1]; $result['suffix'] = $ps_matches[2]; } // regex value $regex = "|(<\\!-- nocache_object_(\\d*?) -->(.*?)<\\!-- /nocache_object_(\\d*?) -->)(.*)|is"; // check nocache_object_XX existance nc_preg_match($regex, $data, $matches); // walk while (!empty($matches)) { // replace string $replace = $this->cache_block[$matches[2]] . "\$5"; $result['objects'][$matches[2]] = $matches[3]; $data = nc_preg_replace($regex, $replace, $data); $changed = true; // check other nocache existance nc_preg_match($regex, $data, $matches); } return $result; }
public function manager($dir = "") { if (strpos($dir, "..") !== false) { throw new Exception(sprintf(NETCAT_MODULE_FILEMANAGER_ADMIN_ERROR_PATH, htmlspecialchars($dir))); } $dir = trim($dir, "/"); if ($dir == ".") { $dir = ""; } if ($dir) { $dir .= "/"; } try { $files_array = $this->get_files($dir); } catch (Exception $e) { nc_print_status($e->getMessage(), "error"); return false; } // directory not root if ($dir) { array_unshift($files_array, array('name' => '..', 'path' => $this->base_folder . nc_preg_replace("/([^\\/]*?[\\/]?)\$/", "", $dir), 'dir' => true)); } $icons = array('nc--file-archive' => array('zip', 'rar', 'tar', 'gz', '7z'), 'nc--file-image' => array('jpg', 'jpeg', 'gif', 'png', 'bmp', 'tiff', 'ico'), 'nc--file-source' => array('html', 'php', 'css', 'js'), 'nc--file-text' => array('txt', 'rtf', 'doc', 'docx', 'odf')); $binary_ext = $icons['nc--file-archive'] + $icons['nc--file-image']; if (!empty($files_array)) { $parent_is_writable = is_writable($this->base_folder . $dir); $files = array(); $total_size = 0; $dir_count = 0; $file_count = 0; foreach ($files_array as $file) { $is_writable = is_writable($file['path']); $is_readable = is_readable($file['path']); $is_executable = is_executable($file['path']); $path = trim(str_replace($this->base_folder, "", $file['path']), "/"); $perm = $is_readable ? $this->format_file_permission($file['path']) : false; $is_dir = (bool) $file['dir']; $icon = ''; if (!empty($file['ext'])) { foreach ($icons as $ext_icon => $extensions) { if (in_array($file['ext'], $extensions)) { $icon = $ext_icon; break; } } } if (!$icon) { $icon = 'nc--' . ($is_dir ? "folder-dark" : "file"); } $icon .= !$is_readable ? ' nc--disabled' : ''; if (!$is_dir) { if ($is_readable) { $size = filesize($file['path']); $total_size += $size; } $file_count++; } else { if ($file['name'] != '..') { $dir_count++; } } // Actions $actions = array(); if ($file['name'] != '..') { // Edit if (!$file['dir'] && !in_array($file['ext'], $binary_ext)) { $actions['edit'] = array('icon' => 'nc--edit', 'title' => NETCAT_MODULE_FILEMANAGER_ADMIN_EDIT, 'link' => $this->url_prefix . "&phase=3&file=" . $path); } // Download if (!$file['dir']) { $actions['download'] = array('icon' => 'nc--download', 'title' => NETCAT_MODULE_FILEMANAGER_ADMIN_DOWNLOAD, 'link' => $this->url_prefix . "&phase=5&file=" . $path); } // Remove if ($parent_is_writable) { $actions['delete'] = array('icon' => 'nc--remove', 'title' => NETCAT_MODULE_FILEMANAGER_ADMIN_DELETE, 'link' => $this->url_prefix . "&phase=4&path=" . $path); } // Settings $actions['settings'] = array('icon' => 'nc--settings', 'title' => NETCAT_MODULE_FILEMANAGER_ADMIN_SETTINGS, 'click' => "nc_filemanagerObj.show_panel('{$path}'); return false"); // Copy link $actions['copy_link'] = array('icon' => 'nc--mod-linkmanager', 'title' => NETCAT_MODULE_FILEMANAGER_ADMIN_COPY_LINK_BUTTON, 'click' => "nc_filemanagerObj.show_link_panel('{$path}', " . intval($is_dir) . "); return false"); } $files[] = array('name' => $file['name'], 'icon' => $icon, 'path' => $path, 'link' => $is_readable ? $file['dir'] ? $this->url_prefix . "&dir=" . $path : $this->url_prefix . "&phase=2&file=" . $path : '', 'dir' => $file['dir'], 'perm' => $perm, 'size' => $size, 'is_dir' => (bool) $is_dir, 'is_readable' => (bool) $is_readable, 'is_writable' => (bool) $is_writable, 'is_executable' => (bool) $is_executable, 'actions' => $actions); } } $this->UI_CONFIG->actionButtons[] = array("id" => "refresh", "caption" => NETCAT_MODULE_FILEMANAGER_ADMIN_REFRESH_BUTTON, "align" => "left", "action" => "mainView.refreshIframe()"); $this->UI_CONFIG->actionButtons[] = array("id" => "submit", "caption" => NETCAT_MODULE_FILEMANAGER_ADMIN_SAVE_BUTTON, "action" => "mainView.submitIframeForm('FileManagerUpload')"); $nc_core = nc_Core::get_object(); $view = $nc_core->ui->view($this->self_path . 'views/filemanager'); $view->with('fm', $this); $view->with('nc_core', $nc_core); $view->with('dir', $dir); $view->with('self_folder', $this->self_folder); $view->with('total_size', $total_size); $view->with('dir_count', $dir_count); $view->with('file_count', $file_count); $view->with('parent_is_writable', $parent_is_writable); $view->with('breadcrumbs', $this->breadcrumbs($this->base_folder . $dir)); $view->with('files', $files); return $view->make(); }
/** * Сгенерировать имя файла для записи на диск * * @param str оригинальное имя файла * @param str путь к файлу * @param array массив строк с недопустимыми именами * @return str */ function nc_get_filename_for_original_fs($file_name, $path, $disallow = null) { global $nc_core; $use_index = false; // надо ли к файлу добавлять индекс if (!empty($disallow) && in_array($file_name, $disallow)) { $use_index = true; } $file_name = nc_transliterate($file_name); $file_name = nc_preg_replace("/[^a-z0-9.]/is", "_", $file_name); if (file_exists($path . $file_name)) { $use_index = true; } if (!$use_index) { return $file_name; } $k = 0; $ext = substr($file_name, strrpos($file_name, ".")); while (file_exists($path . ($temp = substr($file_name, 0, strrpos($file_name, ".")) . "_" . $k . $ext)) || in_array($temp, (array) $disallow)) { $k++; } $file_name = $temp; return $file_name; }
$subdivisions_arr = $db->get_col("SELECT `Subdivision_ID` FROM `Subdivision`\n WHERE `Parent_Sub_ID` = '" . $dragged['Parent_Sub_ID'] . "'\n AND `Priority` > '" . $dragged['Priority'] . "'\n AND `Subdivision_ID` != '" . $dragged['Subdivision_ID'] . "'"); // collapse gap at the old parent subdivision if (!empty($subdivisions_arr)) { // execute core action $nc_core->event->execute("updateSubdivisionPrep", $dragged['Catalogue_ID'], $subdivisions_arr); $db->query("UPDATE `Subdivision`\n SET `Priority` = `Priority` - 1\n WHERE `Subdivision_ID` IN (" . join(", ", $subdivisions_arr) . ")"); // execute core action $nc_core->event->execute("updateSubdivision", $dragged['Catalogue_ID'], $subdivisions_arr); } // update hidden url // REPLACE() was not used because there's no way to match from the first symbol $old_length = strlen(nc_preg_replace("#[^/]+/\$#", "", $dragged['Hidden_URL'])) + 1; $new_parent_url = $target["Hidden_URL"]; if ($position == 'below') { // target's parent $new_parent_url = nc_preg_replace("#[^/]+/\$#", "", $new_parent_url); } $subdivisions_arr = $db->get_col("SELECT `Subdivision_ID` FROM `Subdivision`\n WHERE `Hidden_URL` LIKE '" . $dragged['Hidden_URL'] . "%' AND `Catalogue_ID` = '" . $dragged['Catalogue_ID'] . "' "); $hidden_url_exist_arr = array_diff((array) $subdivisions_arr_parent, (array) $subdivisions_arr); if (count($hidden_url_exist_arr) != count($subdivisions_arr_parent)) { die("0 /* Hidden_URL of dragged sub is already among the subs of appointed sub */"); } $subdivision_arr_engname = $db->get_col("SELECT `Subdivision_ID` FROM `Subdivision`\n WHERE `EnglishName` = '" . $dragged['EnglishName'] . "' AND `Parent_Sub_ID` = '" . $parent_sub . "' AND `Catalogue_ID` = '" . $dragged['Catalogue_ID'] . "' "); if (!empty($subdivision_arr_engname)) { die("0 /* EnglishName of dragged sub (" . $dragged['EnglishName'] . ") is already among the subs of appointed sub (" . $target['Subdivision_ID'] . ") */"); } //die("0 /* EnglishName of dragged sub (".$dragged['EnglishName'].") is already among the subs of appointed sub (".$target['Subdivision_ID'].") */"); if (!empty($subdivisions_arr)) { // execute core action $nc_core->event->execute("updateSubdivisionPrep", $dragged['Catalogue_ID'], $subdivisions_arr); $db->query("UPDATE `Subdivision`\n SET `Hidden_URL` = CONCAT( '" . $new_parent_url . "', SUBSTRING(`Hidden_URL` FROM " . $old_length . ") )\n WHERE `Subdivision_ID` IN (" . join(", ", $subdivisions_arr) . ")");
function nc_cleaned_RecordTemplate_of_string_service($string) { return nc_preg_replace('#[\\n\\r ]*<\\?/\\* Служебная часть \\*/.*?/\\* Конец служебной части \\*/\\?>[\\n\\r ]*#m', '', $string); }
/** * Eval PHP-кода в значение */ public function eval_value($value_string) { if (!$value_string) { return $value_string; } $ret = ""; $value_string = nc_preg_replace("/;\\s*\$/", "", $value_string); @eval("\$ret = ({$value_string});"); if (strlen($value_string) > 1 && !is_array($ret)) { trigger_error("nc_a2f::eval_value - wrong parameter?<pre>" . htmlspecialchars($value_string) . "</pre>", E_USER_WARNING); } return $ret; }
<?php $url = nc_preg_replace("/^www\\./", '', $this->url); $source = array("name" => "HotLog (хиты/хосты)", "url" => "http://hotlog.ru/topsearch", "params" => array(cat_id => 1, search => 'www.' . $url), "method" => "get", "href" => "http://hotlog.ru/topsearch?page2=1&search=www." . $url, "pattern" => '/<td.*Количество посетителей.*>(\\d+)<\\/td>/iU', "reverse" => true, "negative" => 'нет данных');
/** * Show form to edit field or create new * * @param int Field id, 0 - if new * @param int ClassId or SystemTableId, if 0 - edit field * @param bool is field in system table * @param string action * @param string form name * @param string form id * @param string Advanced elements * @return bool true */ function FieldForm($FieldID, $Id, $isSys = 0, $action = "index.php", $FormName = '', $FormID = '', $Additional = '', $isWidget = 0) { global $db, $nc_core; global $UI_CONFIG; global $field_type_name, $type_of_edit_name; $FieldID = intval($FieldID); $Id = intval($Id); $no_multifile = false; if ($isSys) { if (!$Id && $FieldID) { $sql = "SELECT `System_Table_ID` FROM `Field` WHERE `Field_ID` = {$FieldID}"; $systemTableId = $db->get_var($sql); $no_multifile = $systemTableId != 3; } else { if ($Id != 3) { $no_multifile = true; } } } if ($FieldID) { $Array = $db->get_row("SELECT `Field_Name`, `Description`, `TypeOfData_ID`, `Format`, `Extension`, `NotNull`, `Priority`, `DoSearch`,\n `Inheritance`, `DefaultState`, `TypeOfEdit_ID`, `Widget_Class_ID`, `InTableView`\n FROM `Field`\n WHERE `Field_ID`='" . $FieldID . "' AND `Checked` = 1", ARRAY_A); if ($Array["Widget_Class_ID"]) { $isWidget = 1; } } else { $Array = $_POST; $where = $isSys ? "`System_Table_ID`" : ($isWidget ? "`Widget_Class_ID`" : "`Class_ID`"); $where .= "='" . $Id . "'"; if (!$Array["Priority"]) { $res = $db->get_var("SELECT (Priority+1) FROM `Field` WHERE " . $where . " ORDER BY `Priority` DESC LIMIT 1"); if (!is_null($res)) { $Array["Priority"] = $res; } } } // js для визульного заполнения "Формата" $js = "<script type='text/javascript' language='JavaScript'>\n " . ($Array["TypeOfData_ID"] || 1 ? "nc_field_additional_format(" . intval($Array["TypeOfData_ID"] ? $Array["TypeOfData_ID"] : 1) . ");" : "") . "\n\n function nc_field_additional_format(selected_field) {\n\n //settings for text\n document.getElementById('div_upload_limits').style.display = ((selected_field == 6 || selected_field == 11 ) ? 'block' : 'none');\n\n // select FS for file field\n document.getElementById('div_field_file').style.display = ((selected_field == 6) ? 'block' : 'none');\n\n //don't show Format field\n document.getElementById('div_format').style.display = ((selected_field == 3 || selected_field == 1) ? 'none' : 'block');\n\n //settings for text\n document.getElementById('div_field_text').style.display = ((selected_field == 3 ) ? 'block' : 'none');\n\n //settings for string\n document.getElementById('div_field_string').style.display = ((selected_field == 1 ) ? 'block' : 'none');\n\n //settings for date\n document.getElementById('div_field_date').style.display = ((selected_field == 8 ) ? 'block' : 'none');\n\n document.getElementById('div_file_resize').style.display = ((selected_field == 11 || selected_field == 6) ? 'block' : 'none');"; if (!$isSys) { $js .= "//settings for search\n\t\tdocument.getElementById('dosr').disabled = ((selected_field == 9 || selected_field == 11) ? true : false);\n\t\tdocument.getElementById('dosr').style.background = ( (selected_field == 9 || selected_field == 11) ? '#eee' : '' );"; } $js .= "// default value field\n var defaultField = document.getElementById('DefaultState');\n\n if (defaultField) {\n // default value field disabled\n defaultField.disabled = ( (selected_field == 11 || selected_field==3 || selected_field==6 || selected_field==8 || selected_field==10) ? true : false );\n defaultField.style.background = ( (selected_field == 11 || selected_field==3 || selected_field==6 || selected_field==8) ? '#eee' : '' );\n\n // default value field data\n defaultField.value = (selected_field==" . intval($Array["TypeOfData_ID"]) . " ? '" . $db->escape($Array["DefaultState"]) . "' : '');\n }\n return false;\n }\n\n function nc_select_field() {\n var selected_field = document.getElementById('TypeOfData_ID').selectedIndex + 1 ;\n nc_field_additional_format (selected_field);\n nc_field_select_fs();\n return false;\n }\n\n function nc_field_select_fs() {\n var selected_fs = document.getElementById('Format_FS').selectedIndex + 1;\n document.getElementById('attachment').disabled = ( selected_fs != 3 );\n document.getElementById('download').disabled = ( selected_fs != 3 );\n return false;\n }\n\n function nc_field_select_string_format() {\n document.getElementById('div_field_string_protect_email').style.display = document.getElementById('Format_String').value == 'email' ? 'block' : 'none';\n }\n\n function nc_field_select_fck(element) {\n var \$this = \$nc(element);\n var \$panel_block = \$nc('#format-panel-block');\n if (\$this.val() == 2) {\n \$panel_block.hide();\n } else {\n \$panel_block.show();\n }\n }\n function nc_field_select_transliteration(element) {\n \$nc('#transliteration_field').change(function() {\n if (\$nc('#transliteration_field').val() == 'Keyword') {\n \$nc('#use_url_rules').prop('checked', true);\n }\n });\n var \$this = \$nc(element);\n var \$panel_block = \$nc('#transliteration-fields-panel-block');\n if (\$this.is(':checked')) {\n \$panel_block.show();\n if (\$nc('#transliteration_field').val() == 'Keyword') {\n \$nc('#use_url_rules').prop('checked', true);\n }\n } else {\n \$panel_block.hide();\n }\n }\n nc_field_select_fs();\n nc_field_select_string_format();\n </script>\n"; print "<fieldset>"; if ($FieldID) { print "<legend>" . ($Array["Description"] ? $Array["Description"] : $Array["Field_Name"]) . "</legend>"; } print "<br/><form method='post' action='" . $action . "' name='" . $FormName . "' id='" . $FormID . "'>"; $Format_FS = NC_FS_PROTECTED; // тип по ФС по умолчанию $format_text = nc_field_parse_format("", NC_FIELDTYPE_TEXT); // для textarea значения по умолчанию if ($FieldID) { if (!$isWidget) { print CONTROL_FIELD_LIST_NAMELAT . ":<br>" . nc_admin_input_simple('FieldName', $Array["Field_Name"], 50, '', "maxlength='64'") . "<br><br>"; } else { print CONTROL_FIELD_LIST_NAME . ": " . $Array["Field_Name"] . "<br><br>"; } switch ($Array['TypeOfData_ID']) { case NC_FIELDTYPE_FILE: // определим тип ФС $format_file_resize = nc_field_parse_resize_options($Array['Format']); $Array['Format'] = array_shift(explode(';', $Array['Format'])); $format_file = nc_field_parse_format($Array['Format'], $Array['TypeOfData_ID']); $Format_FS = $format_file['fs']; $file_attach = $format_file['disposition']; // закачиваемый или нет? $file_download = $format_file['download']; $Array['Format'] = nc_preg_replace('/(:?)(fs)(\\d+)/', '', $Array['Format']); // уберем из Format тип ФС $Array['Format'] = nc_preg_replace('/(:?)(download)/', '', $Array['Format']); // уберем download $Array['Format'] = nc_preg_replace('/(:?)((attachment)|(inline))/', '', $Array['Format']); // уберем attachment break; case NC_FIELDTYPE_TEXT: $format_text = nc_field_parse_format($Array['Format'], $Array['TypeOfData_ID']); break; case NC_FIELDTYPE_DATETIME: $format_date = nc_field_parse_format($Array['Format'], $Array['TypeOfData_ID']); $Array['Format'] = $format_date['type']; break; case NC_FIELDTYPE_STRING: $format_string = nc_field_parse_format($Array['Format'], $Array['TypeOfData_ID']); $Array['Format'] = $format_string['format']; $Array['UseTransliteration'] = $format_string['use_transliteration']; $Array['TransliterationField'] = $format_string['transliteration_field']; $Array['UseUrlRules'] = $format_string['use_url_rules']; break; case NC_FIELDTYPE_MULTIFILE: $format_file_resize = nc_field_parse_resize_options($Array['Format']); $Array['Format'] = array_shift(explode(';', $Array['Format'])); break; } } else { print CONTROL_FIELD_LIST_NAMELAT . ":<br>" . nc_admin_input_simple('FieldName', $Array["Field_Name"], 50, '', "maxlength='64'") . "<br><br>"; } print CONTROL_FIELD_LIST_DESCRIPTION . ":<br>" . nc_admin_input_simple('Description', htmlspecialchars_decode($Array["Description"]), 50, '', "maxlength='64'") . "<br><br>"; $openid_possibility = $nc_core->modules->get_by_keyword('auth') && nc_auth_openid_possibility(); if ($FieldID && $Array['TypeOfData_ID'] == 11 && $openid_possibility) { print "<input name='TypeOfData_ID' value='11' type='hidden'>"; } print CONTROL_FIELD_ONE_FTYPE . ":<br><select name='TypeOfData_ID' id='TypeOfData_ID' onchange='nc_select_field(); return false;'" . ($FieldID && $Array['TypeOfData_ID'] == 11 && $openid_possibility ? " disabled='disabled'" : NULL) . ">"; //print CONTROL_FIELD_ONE_FTYPE.":<br><select name='TypeOfData_ID' id='TypeOfData_ID' onchange='nc_select_field(); return false;'>"; for ($i = 1; $i <= count($field_type_name); $i++) { // Полe тиа "Связь с другими.." для системных полей не нужно if (($isSys || $isWidget) && $i === 9) { continue; } if ($i == 11 && $no_multifile) { continue; } print "<option " . ($Array["TypeOfData_ID"] == $i ? "selected" : "") . " value='" . $i . "'>" . $i . ": " . $field_type_name[$i] . "</option>\n"; } print "</select><br><br>"; $html = "<div id='div_format'>" . CONTROL_FIELD_ONE_FORMAT . ":<br>" . nc_admin_input_simple('Format', $Array["TypeOfData_ID"] != 3 ? $Array["Format"] : "", 50, '', "maxlength='255'") . "<br><br></div>"; $html .= "<div id='div_field_string'>" . nc_admin_select_simple(CONTROL_FIELD_ONE_FORMAT . ":<br/>", 'Format_String', array('' => CONTROL_FIELD_ONE_FORMAT_NONE, 'email' => CONTROL_FIELD_ONE_FORMAT_EMAIL, 'url' => CONTROL_FIELD_ONE_FORMAT_URL, 'password' => CONTROL_FIELD_ONE_FORMAT_PASSWORD, 'phone' => CONTROL_FIELD_ONE_FORMAT_PHONE, 'tags' => CONTROL_FIELD_ONE_FORMAT_TAGS), $Array["Format"], "id='Format_String' onchange='nc_field_select_string_format();'") . "<br>"; $html .= "<div id='div_field_string_protect_email'>"; $html .= nc_admin_checkbox_simple('protect_email', '', CONTROL_FIELD_ONE_PROTECT_EMAIL, $format_string['protect_email']); $html .= "</div>"; $options = GetTransliterateOptions($isSys ? "system" : ($isWidget ? "widget" : "class"), $FieldID, $Id, $systemTableId); if (count($options) > 0) { $html .= "<div id='div_field_string_use_transliteration'>"; $html .= nc_admin_checkbox_simple('use_transliteration', '1', CONTROL_FIELD_USE_TRANSLITERATION, $Array['UseTransliteration'], '', "onchange='nc_field_select_transliteration(this); return true;'"); $html .= "</div>"; $html .= "<div id='transliteration-fields-panel-block' style='" . ($Array['UseTransliteration'] == 1 ? '' : 'display: none;') . "'>"; $html .= nc_admin_select_simple(CONTROL_FIELD_TRANSLITERATION_FIELD . ":<br/>", 'transliteration_field', $options, $Array["TransliterationField"], "id='transliteration_field'", "onchange='alert('here'); return true;'") . "<br>"; $html .= nc_admin_checkbox_simple('use_url_rules', '1', CONTROL_FIELD_USE_URL_RULES, $Array['UseUrlRules'], ''); $html .= "</div>"; } $html .= "</div>"; // Вывод ограничений на загрузку файлов для тип поля Файл и множественный выбор файлов $html .= "<div id='div_upload_limits' style='display: none;'>" . CONTROL_FIELD_FILE_UPLOADS_LIMITS . "<br />\n post_max_size (" . CONTROL_FIELD_FILE_POSTMAXSIZE . "): " . ini_get('post_max_size') . " <br />\n upload_max_filesize (" . CONTROL_FIELD_FILE_UPLOADMAXFILESIZE . "): " . ini_get('upload_max_filesize') . "<br />\n max_file_uploads (" . CONTROL_FIELD_FILE_MAXFILEUPLOADS . "): " . ini_get('max_file_uploads') . "<br />\n <br /></div>"; // расширение формата для Файлов $html .= "<div id='div_field_file' style='display: none;'>\r\n" . CLASSIFICATOR_TYPEOFFILESYSTEM . ":\n <select name='Format_FS' id='Format_FS' onchange='nc_field_select_fs(); return false;' >\r\n\n <option value='" . NC_FS_SIMPLE . "' " . (NC_FS_SIMPLE == $Format_FS ? 'selected' : '') . ">" . CONTROL_FS_NAME_SIMPLE . "</option>\r\n\n <option value='" . NC_FS_ORIGINAL . "' " . (NC_FS_ORIGINAL == $Format_FS ? 'selected' : '') . ">" . CONTROL_FS_NAME_ORIGINAL . "</option>\r\n\n <option value='" . NC_FS_PROTECTED . "' " . (NC_FS_PROTECTED == $Format_FS ? 'selected' : '') . ">" . CONTROL_FS_NAME_PROTECTED . "</option>\r\n\n </select>\n <br />" . nc_admin_checkbox_simple('attachment', '', CONTROL_FIELD_ATTACHMENT, $file_attach, '', "disabled") . "\n <br/>" . nc_admin_checkbox_simple('download', '', CONTROL_FIELD_DOWNLOAD_COUNT, $file_download, '', "disabled") . "\n </div>"; // расширение формата для текста $html .= "<div id='div_field_text' style='display: none;'>\n <table class='admin_table' width='40%' >\n <col width='25%'/><col width='25%'/><col width='25%'/><col width='25%'/>\n <tr align='center'>\n <th></th>\n <th>" . CONTROL_CONTENT_SUBDIVISION_FUNCS_ACCESS_INHERIT . "</th>\n <th>" . CONTROL_CONTENT_SUBDIVISION_FUNCS_OBJ_YES . "</th>\n <th>" . CONTROL_CONTENT_SUBDIVISION_FUNCS_OBJ_NO . "</th>\n </tr>\n <tr align='center'>\n <td>" . CONTROL_CLASS_CLASS_OBJECTSLIST_SHOWOBJ_HTML . "</td>"; // разрешать HTML-теги for ($i = 0; $i <= 2; $i++) { $html .= "<td bgcolor='" . ($format_text['html'] == $i ? "#E7E7E7" : "#FFFFFF") . "'>" . nc_admin_radio_simple('format_html', $i, '', isset($Array['format_html']) && $Array['format_html'] == $i || $format_text['html'] == $i, '', "class='w'") . "\n </td>"; } $html .= "</tr><tr align='center'>\n <td>" . CONTROL_CLASS_CLASS_OBJECTSLIST_SHOWOBJ_BR . "</td>"; // перенос строки for ($i = 0; $i <= 2; $i++) { $html .= "<td bgcolor='" . ($format_text['br'] == $i ? "#E7E7E7" : "#FFFFFF") . "'>" . nc_admin_radio_simple('format_br', $i, '', isset($Array['format_br']) && $Array['format_br'] == $i || $format_text['br'] == $i, '', "class='w'") . "\n </td>"; } $html .= "\n </tr><tr align='center'>\n <td>" . CONTROL_FIELD__EDITOR_EMBED_TO_FIELD . "</td>"; // встроить редактор for ($i = 0; $i <= 2; $i++) { $html .= "<td bgcolor='" . ($format_text['fck'] == $i ? "#E7E7E7" : "#FFFFFF") . "'>" . nc_admin_radio_simple('format_fck', $i, '', isset($Array['format_fck']) && $Array['format_fck'] == $i || $format_text['fck'] == $i, '', "class='w' onchange='nc_field_select_fck(this); return true;'") . "\n </td>"; } $html .= "</tr></table><br/>"; $html .= CONTROL_FIELD__TEXTAREA_SIZE . ":<br/>\n <table class='admin_table' width='40%' >\n <col width='50%'/><col width='50%'/>\n <tr align='center'>\n <td>" . CONTROL_FIELD_HEIGHT . "</td>\n <td>" . nc_admin_input_simple('format_height', isset($Array['format_height']) ? $Array['format_height'] : $format_text['rows'], 0, 'width:100%') . "</td></tr>\n <tr align='center'>\n <td>" . CONTROL_FIELD_WIDTH . "</td>\n <td>" . nc_admin_input_simple('format_width', isset($Array['format_height']) ? $Array['format_width'] : $format_text['cols'], 0, 'width:100%') . "</td>\n </tr>\n </table>\n <br />"; $panels = array(0 => CONTROL_FIELD_PANELS_DEFAULT); $sql = "SELECT `Wysiwyg_Panel_ID`, `Name` FROM `Wysiwyg_Panel` " . "WHERE `Editor` = 'ckeditor' " . "ORDER BY `Wysiwyg_Panel_ID` ASC"; foreach ((array) $db->get_results($sql, ARRAY_A) as $panel) { $panels[$panel['Wysiwyg_Panel_ID']] = $panel['Name']; } $html .= "<div id='format-panel-block' style='" . ($format_text['fck'] == 2 ? 'display: none;' : '') . "'>" . CONTROL_FIELD_PANELS . ":<br><div class='nc-select'>" . nc_admin_select_simple('', 'format_panel', $panels, isset($Array['format_panel']) ? $Array['format_panel'] : $format_text['panel']) . "<i class='nc-caret'></i></div><br><br /></div>"; $html .= nc_admin_checkbox_simple('format_typo', 1, CONTROL_FIELD_TYPO, isset($Array['format_typo']) ? $Array['format_typo'] : $format_text['typo']) . "\n <br />" . nc_admin_checkbox_simple('format_bbcode', 1, CONTROL_FIELD_BBCODE_ENABLED, isset($Array['format_bbcode']) ? $Array['format_bbcode'] : $format_text['bbcode']) . "\n <br/><br/>\n </div>"; $html .= "<div id='div_field_date' style='display: none'>" . nc_admin_checkbox_simple('use_calendar', 1, CONTROL_FIELD_USE_CALENDAR, false, 'format_use_calendar', $format_date['calendar'] ? "checked='checked'" : "") . "\n </div><br/>"; $html .= "<div id='div_file_resize' style='display: none'>"; $html .= nc_admin_checkbox_simple('format_use_resize', 1, CONTROL_FIELD_MULTIFIELD_USE_IMAGE_RESIZE, $format_file_resize['use_resize']); $html .= "<div>"; $html .= CONTROL_FIELD_MULTIFIELD_IMAGE_WIDTH . ": " . nc_admin_input_simple('format_resize_width', $format_file_resize['resize_width'], 10) . " "; $html .= CONTROL_FIELD_MULTIFIELD_IMAGE_HEIGHT . ": " . nc_admin_input_simple('format_resize_height', $format_file_resize['resize_height'], 10); $html .= "</div><br>"; $html .= nc_admin_checkbox_simple('format_use_crop', 1, CONTROL_FIELD_MULTIFIELD_USE_IMAGE_CROP, $format_file_resize['use_crop']); $html .= "<div>"; $html .= "X0: " . nc_admin_input_simple('format_crop_x0', $format_file_resize['crop_x0'], 10) . " "; $html .= "Y0: " . nc_admin_input_simple('format_crop_y0', $format_file_resize['crop_y0'], 10) . "<br>"; $html .= "X1: " . nc_admin_input_simple('format_crop_x1', $format_file_resize['crop_x1'], 10) . " "; $html .= "Y1: " . nc_admin_input_simple('format_crop_y1', $format_file_resize['crop_y1'], 10); $html .= "</div><br>"; $html .= nc_admin_checkbox_simple('format_crop_ignore', 1, CONTROL_FIELD_MULTIFIELD_CROP_IGNORE, $format_file_resize['crop_ignore']); $html .= "<div>"; $html .= CONTROL_FIELD_MULTIFIELD_IMAGE_WIDTH . ": " . nc_admin_input_simple('format_crop_ignore_width', $format_file_resize['crop_ignore_width'], 10) . " "; $html .= CONTROL_FIELD_MULTIFIELD_IMAGE_HEIGHT . ": " . nc_admin_input_simple('format_crop_ignore_height', $format_file_resize['crop_ignore_height'], 10); $html .= "</div><br/>"; $html .= nc_admin_checkbox_simple('format_use_preview', 1, CONTROL_FIELD_MULTIFIELD_USE_IMAGE_PREVIEW, $format_file_resize['use_preview']); $html .= "<div>"; $html .= CONTROL_FIELD_MULTIFIELD_IMAGE_WIDTH . ": " . nc_admin_input_simple('format_preview_width', $format_file_resize['preview_width'], 10) . " "; $html .= CONTROL_FIELD_MULTIFIELD_IMAGE_HEIGHT . ": " . nc_admin_input_simple('format_preview_height', $format_file_resize['preview_height'], 10); $html .= "</div>"; $html .= "</div><br/>"; echo $html; echo nc_admin_textarea_simple('Extension', $Array['Extension'], CONTROL_FIELD_ONE_EXTENSION . ":<br>", 7, 0, '', 'soft'); echo "<br><br>"; print nc_admin_checkbox_simple('NotNull', 1, CONTROL_FIELD_ONE_MUSTBE, $Array["NotNull"], 'notn') . "<br>"; if ($isSys) { print nc_admin_checkbox_simple('Inheritance', 1, CONTROL_FIELD_ONE_INHERITANCE, $Array["Inheritance"], 'inhr') . "<br>"; } else { print nc_admin_checkbox_simple('DoSearch', 1, CONTROL_FIELD_ONE_INDEX, $Array["DoSearch"] && $Array['TypeOfData_ID'] != 9, 'dosr', $Array['TypeOfData_ID'] != 9 ? " disabled='disabled'" : "") . "<br>"; print nc_admin_checkbox_simple('InTableView', 1, CONTROL_FIELD_ONE_IN_TABLE_VIEW, $Array["InTableView"]) . "<br>"; } print '<br>'; print CONTROL_CONTENT_CATALOUGE_FUNCS_CATALOGUEFORM_PRIORITY . ": " . nc_admin_input_simple('Priority', $Array["Priority"] + 0, 3, '', "maxlength='5'") . "<br><br>"; print CONTROL_FIELD_ONE_DEFAULT . "*:<br>"; print nc_admin_input_simple('DefaultState', $Array["DefaultState"], 50, '', "id='DefaultState' maxlength='255'") . "\n"; print "<br>* " . CONTROL_FIELD_ONE_DEFAULT_NOTE . ".<br><br>\n"; print "<table class='admin_table' width='60%' >" . "<col width='25%'/><col width='25%'/><col width='25%'/><col width='25%'/>" . "<tr><td></td>"; if (!$Array["TypeOfEdit_ID"]) { $Array["TypeOfEdit_ID"] = 1; } for ($i = 1; $i <= count($type_of_edit_name); $i++) { print "<td text-align:center'><label for='mod" . $i . "'>" . $type_of_edit_name[$i] . "</label></td>"; } print "</tr><tr><td text-align:center'>" . CONTROL_FIELD_ONE_ACCESS . "</td>"; for ($i = 1; $i <= count($type_of_edit_name); $i++) { print "<td text-align:center'>" . nc_admin_radio_simple('TypeOfEdit_ID', $i, '', $Array["TypeOfEdit_ID"] == $i, "mod" . $i, "class='w'") . "</td>"; } print "</tr>" . "</table>"; // js для визуальной настройки формата print $js; if (!$FieldID) { $UI_CONFIG->actionButtons[] = array("id" => "submit", "caption" => CONTROL_FIELD_LIST_ADD, "action" => "mainView.submitIframeForm('" . $FormID . "')"); } else { $UI_CONFIG->actionButtons[] = array("id" => "submit", "caption" => CONTROL_CONTENT_CATALOUGE_FUNCS_CATALOGUEFORM_SAVE, "action" => "mainView.submitIframeForm('" . $FormID . "')"); } $name = $isSys ? "SystemTableID" : ($isWidget ? "widgetclass_id" : "ClassID"); if ($Id) { print "<input type='hidden' name='" . $name . "' value='" . $Id . "'>\n"; print "<input type='hidden' name='phase' value='3'>\n"; } else { if ($isSys) { print "<input type='hidden' name='SystemTableID' value='" . $Id . "'>\n"; } print "<input type='hidden' name='FieldID' value='" . $FieldID . "'>\n"; print "<input type='hidden' name='phase' value='5'>\n"; } print $Additional; print $nc_core->token->get_input(); print "<input type='hidden' name='isSys' value='" . $isSys . "'>\n"; print "<input type='hidden' name='fs' value='" . +$_REQUEST['fs'] . "'>"; print "<input type='submit' class='hidden'>\n"; print "<input type='hidden' name='isWidget' value='{$isWidget}' />"; print "</form>\n"; print "</fieldset>"; return true; }
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; }
// список сайтов if ($node_type == "root") { /** * Получить список сайтов */ $sites = $db->get_results("SELECT Catalogue_ID, Catalogue_Name, Domain, Mirrors, Checked, ncMobile, ncResponsive\n FROM Catalogue\n {$security_limit}\n ORDER BY Priority ", ARRAY_A); $found_current_site = false; foreach ((array) $sites as $site) { $icon = 'nc-icon nc--site' . ($site['ncMobile'] ? '-mobile' : ($site['ncResponsive'] ? '-adaptive' : '')); if (!$site['Checked']) { $icon .= ' nc--disabled'; } $ret_sites[] = array("nodeId" => "site-{$site['Catalogue_ID']}", "name" => $site['Catalogue_ID'] . ". " . $site['Catalogue_Name'], "href" => "#", "sprite" => $icon, "hasChildren" => true); $domain_name = preg_quote($site['Domain']); if ($site['Mirrors']) { $domain_name .= "|" . nc_preg_replace("/\r\n/", "|", preg_quote($site['Mirrors'])); } if ($domain_name && preg_match("/^(?:{$domain_name})\$/", $HTTP_HOST)) { $ret_sites[sizeof($ret_sites) - 1]["expand"] = true; $found_current_site = true; } } if (!$found_current_site) { $ret_sites[0]["expand"] = true; } } elseif (($node_type == 'sub' || $node_type == 'site') && $node_id) { if ($node_type == 'site') { $qry_where = "sub.Catalogue_ID={$node_id} AND sub.Parent_Sub_ID=0"; } else { $qry_where = "sub.Parent_Sub_ID={$node_id}"; }
/** * * @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; }
/** * Make request and process it * * @access private * @param array * Assoc array * - name * - url * - params (array) * - pattern * - method * @return array */ function request_and_process($source) { global $nc_core; if (!is_array($source)) { return array("ok" => false); } foreach (array("name", "url", "pattern") as $param) { if (!$source[$param]) { user_error($source['name'] . ": " . $param . " not set", E_USER_WARNING); return array("ok" => false); } } if (!$source["method"]) { $source["method"] = "get"; } $ret = array("ok" => false); $this->user_agent->{$source["method"]}($source["url"], $source["params"]); $response = $this->user_agent->currentResponse(); if ($response["code"] == "200") { // START --- Encode content in preg expressions --- $source_encoding = MAIN_ENCODING ? MAIN_ENCODING : "windows-1251"; // вся обработка идет в utf-8, конвертация в кодировке пользователя - при выдаче результата, // в файле get_data.php $source_encoding = 'utf-8'; if ($response['headers']['content-type']) { preg_match('/charset=([\\w\\d-]+)/is', $response['headers']['content-type'], $matches); $source_charset = $matches[1] ? $matches[1] : $source_encoding; } if ($source_encoding && $source_charset && strtolower($source_encoding) != strtolower($source_charset)) { $response["body"] = $nc_core->utf8->conv($source_charset, 'utf-8', $response["body"]); //$source["pattern"] = $source["pattern"] ? iconv($source_encoding, $source_charset, $source["pattern"]) : $source["pattern"]; //$source["replace"][0] = $source["pattern"] ? iconv($source_encoding, $source_charset, $source["replace"][0]) : $source["pattern"]; } // END --- Encode content in preg expressions --- // extract data if (!$source["pattern"]) { user_error("NO DATA PATTERN", E_USER_WARNING); } else { nc_preg_match($source["pattern"], $response["body"], $regs); if (nc_strlen($regs[1])) { array_shift($regs); if (sizeof($regs) > 1) { if ($source["reverse"]) { $regs = array_reverse($regs); } } $ret["value"] = join(" / ", $regs); $ret["ok"] = true; if (is_array($source["replace"]) && nc_strlen($source["replace"][0])) { $ret["value"] = nc_preg_replace($source["replace"][0], $source["replace"][1], $ret["value"]); } } } } $ret["name"] = $source["name"]; $ret["href"] = $source["href"]; if (!$ret["value"] && $source["negative"]) { $ret["value"] = $source["negative"]; } $ret = array_merge($response, $ret); return $ret; }
/** * Get catalogue data by the hostname * * @param string $host * @param bool use returned value as current catalogue data * @param bool reset stored data in the static variable * * @return catalogue data associative array */ public function get_by_host_name($host, $current = false, $reset = false) { $catalogue_id = 0; // поиск по доменом и зеркалам foreach ($this->data as $catalog) { $domain = $catalog['Domain']; $mirrors = $catalog['Mirrors'] ? str_replace(array('http://', '/'), '', $catalog['Mirrors']) : ""; if (nc_preg_match("/^(?:" . $domain . "|" . nc_preg_replace("/\r\n/", "|", preg_quote($mirrors)) . ")\$/", $host)) { $catalogue_id = $catalog['Catalogue_ID']; } if ($catalog['Checked']) { $chn = isset($expected_id) ? $catalog['Priority'] < $this->data[$expected_id]['Priority'] : 0; $expected_id = isset($expected_id) ? $chn ? $catalog['Catalogue_ID'] : $expected_id : $catalog['Catalogue_ID']; } } // поиск по приоритету if (!$catalogue_id && ($expected_id || !empty($this->data))) { $catalogue_id = $expected_id ? $expected_id : $this->data[min(array_keys($this->data))]['Catalogue_ID']; } $res = $this->get_by_id($catalogue_id); if ($current) { // set current catalogue data $this->current = $res; } // return result return $res; }