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; }
/** * This function load jQuery and modules, once * * @param boolean addslashes or not * @param boolean load jQuery as $nc object or not * * @return mixed html text */ function nc_jquery($noconflict = false, $extensions = false) { static $released = array(); static $released_mods = 0; if (isset($released[$noconflict])) { return; } // get super object $nc_core = nc_Core::get_object(); // determine file mode if ($addslashes = $nc_core->template->get_current() ? !$nc_core->template->get_current("File_Mode") : false) { // get backtrace $debug_backtrace = (array) debug_backtrace(); // search eval foreach ($debug_backtrace as $row) { if ($row['function'] == 'eval') { $addslashes = false; break; } } } $http_jquery_folder_path = nc_standardize_path_to_folder($nc_core->SUB_FOLDER . $nc_core->HTTP_TEMPLATE_PATH . "jquery/"); $jquery_file_array = array(); $jquery_dir = opendir($nc_core->JQUERY_FOLDER); $result = PHP_EOL . "<script type='text/javascript' src='" . $http_jquery_folder_path . "jquery.min.js'></script>" . PHP_EOL; if ($noconflict) { $result .= "<script type='text/javascript'>var " . ($addslashes ? '\\$nc' : '$nc') . " = jQuery.noConflict();</script>" . PHP_EOL; if ($nc_core->get_settings('JSLoadjQueryDollar')) { $result .= "<script type='text/javascript'>if (typeof \$ == 'undefined') \$ = jQuery;</script>" . PHP_EOL; } } $released[$noconflict] = 1; if ($nc_core->get_variable("admin_mode") || $nc_core->get_settings("JSLoadjQueryExtensionsAlways") || $nc_core->get_settings("QuickBar") && nc_quickbar_permission()) { if ($extensions && !$released_mods) { // modules to load while ($file = readdir($jquery_dir)) { if ($file == '.' || $file == '..' || strpos($file, '.') === 0) { continue; } if ($file == 'jquery.min.js' || $file == '_jquery.min.js') { continue; } //$jquery_file_array[] = "<script type='text/javascript' src='" . $http_jquery_folder_path . $file . "'></script>"; $jquery_file_array[] = $http_jquery_folder_path . $file; } // sort files sort($jquery_file_array); // released_mods $released_mods++; } } //$ret = $result . join(PHP_EOL, $jquery_file_array) . PHP_EOL; $ret = $result; if (count($jquery_file_array) > 0) { foreach (nc_minify_file($jquery_file_array, 'js', true) as $file) { $ret .= "<script type='text/javascript' src='" . $file . "'></script>" . PHP_EOL; } } return $addslashes ? str_replace(array("\\'", "\\\$"), array("'", "\$"), addslashes($ret)) : $ret; }