<\''); return $text; } /** * Внутренние методы */ /** * Проверка алиаса тега на валидность и уникальность */ function navigationValidate ($alias = '', $id = 0) { global $AVE_DB; //-- Соответствие требованиям if (empty ($alias) || preg_match('/^[A-Za-z0-9-_]{1,20}$/i', $alias) !== 1 || is_numeric($alias)) return 'syn'; //-- Уникальность return !(bool)$AVE_DB->Query(" SELECT 1 FROM " . PREFIX . "_navigation WHERE alias = '" . $alias . "' AND navigation_id != '" . $id . "' ")->GetCell(); } /** * Метод, предназначенный для вывода списка всех существующих меню навигаций в Паели управления * */ function navigationList() { global $AVE_DB, $AVE_Template; $navigations = array(); // Выполняем запрос к БД на получение списка всех меню навигаций $sql = $AVE_DB->Query(" SELECT navigation_id, alias, title FROM " . PREFIX . "_navigation ORDER BY navigation_id ASC "); // Формируем данные в массив while ($row = $sql->FetchRow()) { array_push($navigations, $row); } // Передаем данные в шаблон для вывода и отображаем страницу со списком меню $AVE_Template->assign('nid', 0); $AVE_Template->assign('navigations', $navigations); $AVE_Template->assign('content', $AVE_Template->fetch('navigation/list.tpl')); } /** * Метод, предназначенный для добавления нового меню * */ function navigationNew() { global $AVE_DB, $AVE_Template, $AVE_User; // Определяем действие пользователя switch($_REQUEST['sub']) { // Если действие не определено, отображаем чистую форму для создания шаблона навигации case '': // Передаем данные в шаблон и отображаем страницу для добавления нового шаблона меню $AVE_Template->assign('groups', $AVE_User->userGroupListGet()); $AVE_Template->assign('form_action', 'index.php?do=navigation&action=new&sub=save&cp=' . SESSION); $AVE_Template->assign('content', $AVE_Template->fetch('navigation/template.tpl')); break; // Если пользователь нажал на кнопку Добавить (Сохранить) case 'save': // Определяем название меню навигации $navigation_title = (empty($_REQUEST['title'])) ? 'title' : $_REQUEST['title']; // Определяем шаблон оформления 1-го уровня ссылок // в меню. Если шаблон не указан пользователем,тогда // используем вариант "по умолчанию" $navigation_level1 = (empty($_REQUEST['level1'])) ? "[tag:linkname]" : $_REQUEST['level1']; $navigation_level1_active = (empty($_REQUEST['level1_active'])) ? "[tag:linkname]" : $_REQUEST['level1_active']; // Выполняем запрос к БД на добавление нового меню $AVE_DB->Query(" INSERT INTO " . PREFIX . "_navigation SET navigation_id = '', alias = '" . $_REQUEST['alias'] . "', title = '" . $navigation_title . "', level1 = '" . $navigation_level1 . "', level1_active = '" . $navigation_level1_active . "', level2 = '" . $_REQUEST['level2'] . "', level2_active = '" . $_REQUEST['level2_active'] . "', level3 = '" . $_REQUEST['level3'] . "', level3_active = '" . $_REQUEST['level3_active'] . "', level1_begin = '" . $_REQUEST['level1_begin'] . "', level2_begin = '" . $_REQUEST['level2_begin'] . "', level3_begin = '" . $_REQUEST['level3_begin'] . "', level1_end = '" . $_REQUEST['level1_end'] . "', level2_end = '" . $_REQUEST['level2_end'] . "', level3_end = '" . $_REQUEST['level3_end'] . "', begin = '" . $_REQUEST['begin'] . "', end = '" . $_REQUEST['end'] . "', user_group = '" . (empty($_REQUEST['user_group']) ? '' : implode(',', $_REQUEST['user_group'])) . "', expand_ext = '" . $_REQUEST['expand_ext'] . "' "); $navigation_id = $AVE_DB->getLastInsertId(); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('NAVI_REPORT_NEW') . " (" . stripslashes($navigation_title) . ") (ID: $navigation_id)"); // Выполянем переход к списку меню навигаций header('Location:index.php?do=navigation&cp=' . SESSION); break; } } /** * Метод, предназначенный для редактирования шаблона навигации * * @param int $navigation_id идентификатор меню навигации */ function navigationEdit($navigation_id) { global $AVE_DB, $AVE_Template, $AVE_User; // Определяем действие пользователя switch ($_REQUEST['sub']) { // Если действие не определено, отображаем форму с данными для редактирования case '': // Выполняем запрос к БД и получаем всю информацию о данном меню $row = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation WHERE navigation_id = '" . $navigation_id . "' ")->FetchRow(); // Формируем список групп пользователей $row->user_group = explode(',', $row->user_group); // Формируем ряд переменных для использования в шаблоне и отображаем форм с данными для редактирования $AVE_Template->assign('nid', $navigation_id); $AVE_Template->assign('navigation', $row); $AVE_Template->assign('groups', $AVE_User->userGroupListGet()); $AVE_Template->assign('form_action', 'index.php?do=navigation&action=templates&sub=save&navigation_id=' . $navigation_id . '&cp=' . SESSION); $AVE_Template->assign('content', $AVE_Template->fetch('navigation/template.tpl')); break; // Если пользователь нажал на кнопку Сохранить изменения case 'save': // Выполняем запрос к БД и обновляем информацию в таблице для данного меню $sql = $AVE_DB->Query(" UPDATE " . PREFIX . "_navigation SET title = '" . $_REQUEST['title'] . "', alias = '" . $_REQUEST['alias'] . "', level1 = '" . $_REQUEST['level1'] . "', level1_active = '" . $_REQUEST['level1_active'] . "', level2 = '" . $_REQUEST['level2'] . "', level2_active = '" . $_REQUEST['level2_active'] . "', level3 = '" . $_REQUEST['level3'] . "', level3_active = '" . $_REQUEST['level3_active'] . "', level1_begin = '" . $_REQUEST['level1_begin'] . "', level2_begin = '" . $_REQUEST['level2_begin'] . "', level3_begin = '" . $_REQUEST['level3_begin'] . "', level1_end = '" . $_REQUEST['level1_end'] . "', level2_end = '" . $_REQUEST['level2_end'] . "', level3_end = '" . $_REQUEST['level3_end'] . "', begin = '" . $_REQUEST['begin'] . "', end = '" . $_REQUEST['end'] . "', user_group = '" . (empty($_REQUEST['user_group']) ? '' : implode(',', $_REQUEST['user_group'])) . "', expand_ext = '" . $_REQUEST['expand_ext'] . "' WHERE navigation_id = '" . $navigation_id . "' "); //-- Стираем кеш навигации $this->clearCache($navigation_id, $_REQUEST['alias']); $this->clearCacheNav($navigation_id, $_REQUEST['alias']); if ($sql === false) { $message = $AVE_Template->get_config_vars('NAVI_REPORT_SAVED_ERR'); $header = $AVE_Template->get_config_vars('NAVI_REPORT_ERROR'); $theme = 'error'; } else { $message = $AVE_Template->get_config_vars('NAVI_REPORT_SAVED'); $header = $AVE_Template->get_config_vars('NAVI_REPORT_SUCCESS'); $theme = 'accept'; reportLog($AVE_Template->get_config_vars('NAVI_REPORT_EDIT') . " (" . stripslashes($_REQUEST['title']) . ") (ID: $navigation_id)"); } if (isAjax()) { echo json_encode( array( 'message' => $message, 'header' => $header, 'theme' => $theme ) ); } else { $AVE_Template->assign('message', $message); header('Location:index.php?do=navigation&cp=' . SESSION); } exit; } } /** * Метод, предназначенный для копирования шаблона меню * * @param int $navigation_id идентификатор меню навигации источника */ function navigationCopy($navigation_id) { global $AVE_DB, $AVE_Template; // Если в запросе указано числовое значение id меню if (is_numeric($navigation_id)) { // Выполняем запрос к БД на получение информации о копируемом меню $row = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation WHERE navigation_id = '" . $navigation_id . "' ")->FetchRow(); // Если данные получены, тогда if ($row) { // Выполняем запрос к БД на добавление нового меню и сохраняем информацию с учетом данных, // полученных в предыдущем запросе к БД $AVE_DB->Query(" INSERT INTO " . PREFIX . "_navigation SET navigation_id = '', title = '" . addslashes((empty($_REQUEST['title']) ? $row->title : $_REQUEST['title'])) . "', alias = '', level1 = '" . addslashes($row->level1) . "', level1_active = '" . addslashes($row->level1_active) . "', level2 = '" . addslashes($row->level2) . "', level2_active = '" . addslashes($row->level2_active) . "', level3 = '" . addslashes($row->level3) . "', level3_active = '" . addslashes($row->level3_active) . "', level1_begin = '" . addslashes($row->level1_begin) . "', level2_begin = '" . addslashes($row->level2_begin) . "', level3_begin = '" . addslashes($row->level3_begin) . "', level1_end = '" . addslashes($row->level1_end) . "', level2_end = '" . addslashes($row->level2_end) . "', level3_end = '" . addslashes($row->level3_end) . "', begin = '" . addslashes($row->begin) . "', end = '" . addslashes($row->end) . "', user_group = '" . addslashes($row->user_group) . "', expand_ext = '" . $row->expand_ext . "' "); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('NAVI_REPORT_COPY') . " (" . (empty($_REQUEST['title']) ? $row->title : $_REQUEST['title']) . ") (ID: $navigation_id)"); } } // Выполянем переход к списку меню навигаций header('Location:index.php?do=navigation&cp=' . SESSION); } /** * Метод, предназначенный для удаления меню навигации и всех пунктов относящихся к нему * * @param int $navigation_id идентификатор меню навигации */ function navigationDelete($navigation_id) { global $AVE_DB, $AVE_Template; // Если id меню числовой и это не первое меню (id не 1) if (is_numeric($navigation_id) && $navigation_id != 1) { $sql= $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation WHERE navigation_id = '" . $navigation_id . "' ")->FetchRow(); //-- Стираем кеш навигации $this->clearCache($navigation_id, $sql->alias); //-- Выполняем запрос к БД на удаление общей информации и шаблона оформления меню $AVE_DB->Query("DELETE FROM " . PREFIX . "_navigation WHERE navigation_id = '" . $navigation_id . "'"); //-- Выполняем запрос к БД на удаление всех пунктов для данного меню $AVE_DB->Query("DELETE FROM " . PREFIX . "_navigation_items WHERE navigation_id = '" . $navigation_id . "'"); //-- Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('NAVI_REPORT_DEL') . " (" . stripslashes($sql->title) . ") (ID: $navigation_id)"); } //-- Выполянем переход к списку меню навигаций header('Location:index.php?do=navigation&cp=' . SESSION); } /** * Метод, предназначенный для получения списка всех пунктов у всех меню навигации * */ function navigationAllItemList() { global $AVE_DB, $AVE_Template; $navigations = array(); //-- Выполняем запрос к БД на получение id и названия меню навигации $sql = $AVE_DB->Query(" SELECT navigation_id, title FROM " . PREFIX . "_navigation "); $items = null; //-- Циклически обрабатываем полученные данные while ($navigation = $sql->FetchRow()) { //-- Выполняем запрос к БД на получение всех пунктов для каждого меню. $sql_items = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation_items WHERE navigation_id = " . (int)$navigation->navigation_id . " AND parent_id = 0 ORDER BY position ASC "); while ($row = $sql_items->FetchAssocArray()) { //-- имя связанного документа if ($row['document_id'] > 0) { $doc_info = get_document((int)$row['document_id']); $row['document_title'] = (($doc_info['document_breadcrum_title']) ? $doc_info['document_breadcrum_title'] : $doc_info['document_title']); } else { $row['document_title'] = ''; } $row['children'] = $this->getChildrenById($row['navigation_item_id'], 0, true); if (! empty($item_id)) $items = $row; else $items[] = $row; } $navigation->navigation_items = $items; unset($items); array_push($navigations, $navigation); } //-- Передаем полученные данные в шаблон для вывода $AVE_Template->assign('navigations', $navigations); $AVE_Template->assign('select_tpl', 'navigation/select.tpl'); } /** * Метод, предназначенный для вывода пунктов меню навигации в Панели управления * * @param int $id идентификатор меню навигации */ function navigationItemList($navigation_id) { global $AVE_DB, $AVE_Template; $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation_items WHERE navigation_id = " . (int)$navigation_id . " AND parent_id = 0 ORDER BY position ASC "); $items = array(); while ($row = $sql->FetchAssocArray()) { // имя связанного документа if ($row['document_id'] > 0) { $doc_info = get_document((int)$row['document_id']); $row['document_title'] = (($doc_info['document_breadcrum_title']) ? $doc_info['document_breadcrum_title'] : $doc_info['document_title']); } else { $row['document_title'] = ''; } $row['children'] = $this->getChildrenById($row['navigation_item_id'], 0, true); if (! empty($item_id)) $items = $row; else $items[] = $row; } $navigation = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation WHERE navigation_id = '" . $navigation_id . "' ")->FetchRow(); $AVE_Template->assign('navigation', $navigation); $AVE_Template->assign('items', $items); $AVE_Template->assign('level', 1); $AVE_Template->assign('nestable_tpl', 'navigation/nestable.tpl'); $AVE_Template->assign('content', $AVE_Template->fetch('navigation/items.tpl')); } /** * Метод для рекурсивного получения * пунктов меню навигации в Панели управления */ public function getChildrenById($navigation_item_id, $rec_status = 1, $recurse = false) { global $AVE_DB; $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation_items WHERE parent_id = " . $navigation_item_id . " ORDER BY position ASC "); $children = array(); while($row = $sql->FetchAssocArray()) { if($recurse) { // имя связанного документа if ($row['document_id'] > 0) { $doc_info = get_document((int)$row['document_id']); $row['document_title'] = (($doc_info['document_breadcrum_title']) ? $doc_info['document_breadcrum_title'] : $doc_info['document_title']); } else { $row['document_title'] = ''; } $row['children'] = $this->getChildrenById($row['navigation_item_id'], $rec_status,$recurse); } $children[] = $row; } return ((count($children) > 0) ? $children : false ); } /** * Метод, предназначенный для управления пунктами меню навигации в Панели управления * * @param int $id идентификатор меню навигации */ function navigationItemEdit($navigation_item_id = null) { global $AVE_DB, $AVE_Template; // Определяем действие пользователя switch ($_REQUEST['sub']) { // Если действие не определено, отображаем форму с данными для редактирования case 'new': $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation_items WHERE navigation_id = " . (int)$_REQUEST['navigation_id'] . " AND parent_id = 0 ORDER BY position ASC "); $items = array(); while ($row = $sql->FetchAssocArray()) { $row['css_style'] = stripslashes($row['css_style']); // имя связанного документа if ($row['document_id'] > 0) { $doc_info = get_document((int)$row['document_id']); $row['document_title'] = (($doc_info['document_breadcrum_title']) ? $doc_info['document_breadcrum_title'] : $doc_info['document_title']); } else { $row['document_title'] = ''; } $row['children'] = $this->getChildrenById($row['navigation_item_id'], 0, true); if (! empty($item_id)) $items = $row; else $items[] = $row; } $alias = $AVE_DB->Query(" SELECT alias FROM " . PREFIX . "_navigation WHERE navigation_id = " . $_REQUEST['navigation_id'] . " ")->GetCell(); //-- Стираем кеш навигации $this->clearCache($_REQUEST['navigation_id'], $alias); $AVE_Template->assign('select_tpl', 'navigation/select.tpl'); $AVE_Template->assign('items', $items); $AVE_Template->assign('content', $AVE_Template->fetch('navigation/item_new.tpl')); break; case 'edit': $item = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation_items WHERE navigation_item_id = " . $navigation_item_id . " ")->FetchRow(); $item->css_style = stripslashes($item->css_style); if ($item->document_id) $doc_info = get_document((int)$item->document_id); $item->document_title = (($doc_info['document_breadcrum_title']) ? $doc_info['document_breadcrum_title'] : $doc_info['document_title']); $item->document_alias = $doc_info['document_alias']; $AVE_Template->assign('item', $item); $AVE_Template->assign('content', $AVE_Template->fetch('navigation/item_edit.tpl')); break; case 'save': $_REQUEST['alias'] = (strpos($_REQUEST['alias'], 'javascript') !== false) ? str_replace(array(' ', '%'), '-', $_REQUEST['alias']) : $_REQUEST['alias']; // Определяем флаг статуса пункта меню (активен/неактивен) $status = (empty($_REQUEST['alias'])) ? 0 : 1; if ($navigation_item_id) { // Выполняем запрос к БД и обновляем информацию в таблице для данного меню $sql = $AVE_DB->Query(" UPDATE " . PREFIX . "_navigation_items SET document_id = '" . (($_REQUEST['document_id']) ? (int)$_REQUEST['document_id'] : '') . "', title = '" . $this->_replace_wildcode($_REQUEST['title']) . "', alias = '" . $_REQUEST['alias'] . "', description = '" . $this->_replace_wildcode($_REQUEST['description']) . "', image = '" . $_REQUEST['image'] . "', css_style = '" . addslashes($_REQUEST['css_style']) . "', css_class = '" . $_REQUEST['css_class'] . "', css_id = '" . $_REQUEST['css_id'] . "', target = '" . $_REQUEST['target'] . "', status = '" . $status . "' WHERE navigation_item_id = '" . $navigation_item_id . "' "); $navigation_id = $AVE_DB->Query(" SELECT navigation_id FROM " . PREFIX . "_navigation_items WHERE navigation_item_id = '" . $navigation_item_id . "' ")->GetCell(); $alias = $AVE_DB->Query(" SELECT alias FROM " . PREFIX . "_navigation WHERE navigation_id = " . $navigation_id . " ")->GetCell(); //-- Стираем кеш навигации $this->clearCache($_REQUEST['navigation_id'], $alias); } else { if ($_REQUEST['after']) $after = $AVE_DB->Query("SELECT * FROM ".PREFIX."_navigation_items WHERE navigation_item_id = '" . $_REQUEST['after'] . "' ")->FetchArray(); else $after = array('parent_id' => 0, 'level' => 1, 'position' => 0); // Выполняем запрос к БД и обновляем информацию в таблице для данного меню $sql = $AVE_DB->Query(" INSERT " . PREFIX . "_navigation_items SET navigation_id = '" . $_REQUEST['navigation_id'] . "', document_id = '" . (($_REQUEST['document_id']) ? (int)$_REQUEST['document_id'] : '') . "', title = '" . $this->_replace_wildcode($_REQUEST['title']) . "', alias = '" . $_REQUEST['alias'] . "', description = '" . $this->_replace_wildcode($_REQUEST['description']) . "', image = '" . $_REQUEST['image'] . "', css_style = '" . addslashes($_REQUEST['css_style']) . "', css_class = '" . $_REQUEST['css_class'] . "', css_id = '" . $_REQUEST['css_id'] . "', target = '" . $_REQUEST['target'] . "', parent_id = '" . $after['parent_id'] . "', level = '" . $after['level'] . "', position = '" . $after['position'] . "', status = '" . $status . "' "); $navigation_item_id = $AVE_DB->getLastInsertId(); $alias = $AVE_DB->Query(" SELECT alias FROM " . PREFIX . "_navigation WHERE navigation_id = " . $_REQUEST['navigation_id'] . " ")->GetCell(); //-- Стираем кеш навигации $this->clearCache($_REQUEST['navigation_id'], $alias); } $message = 'Пункт меню успешно сохранен'; $header = 'Выполнено'; $theme = 'accept'; echo json_encode( array( 'message' => $message, 'header' => $header, 'theme' => $theme, 'after' => $_REQUEST['after'], 'item_id' => $navigation_item_id) ); exit; } /* // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('NAVI_REPORT_ADDIT') . " (" . $this->_replace_wildcode($title) . ") - ". $AVE_Template->get_config_vars('NAVI_REPORT_TLEV')); // Выполняем обновление страницы header('Location:index.php?do=navigation&action=entries&id=' . $nav_id . '&cp=' . SESSION); exit; */ } /** * Метод, предназначенный для удаления пунктов меню навигации связанных с удаляемым документом. * Данный метод вызывается при удалении документа с идентификатором $document_id. * Если у пункта меню нет потомков - пункт удаляется, в противном случае пункт деактивируется * * @param int $document_id идентификатор удаляемого документа */ function navigationItemDeleteFromDoc($document_id) { global $AVE_DB, $AVE_Template; if (! is_numeric($document_id)) return; // Выполняем запрос к БД и получаем ID пункта меню, с которым связан документ $sql = $AVE_DB->Query(" SELECT navigation_item_id FROM " . PREFIX . "_navigation_items WHERE document_id = '" . $document_id . "' "); while ($row = $sql->FetchRow()) { // Выполняем запрос к БД для определения у удаляемого пункта подпунктов $num = $AVE_DB->Query(" SELECT COUNT(1) FROM " . PREFIX . "_navigation_items WHERE parent_id = '" . $row->navigation_item_id . "' ")->GetCell(); // Если данный пункт имеет подпункты, тогда if ($num > 0) { // Выполняем запрос к БД и деактивируем пункт меню $AVE_DB->Query(" UPDATE " . PREFIX . "_navigation_items SET status = '0' WHERE navigation_item_id = '" . $row->navigation_item_id . "' "); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('NAVI_REPORT_DEACT') . " (id: $row->navigation_item_id)"); } else { // В противном случае, если данный пункт не имеет подпунктов, тогда // Выполняем запрос к БД и удаляем помеченный пункт $AVE_DB->Query(" DELETE FROM " . PREFIX . "_navigation_items WHERE navigation_item_id = '" . $row->navigation_item_id . "' "); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('NAVI_REPORT_DELIT') . " (id: $row->navigation_item_id)"); } } } /** * Метод, предназначенный для удаления пункта меню навигации в Панели управления * * @param int $navigation_item_id идентификатор меню навигации */ function navigationItemDelete($navigation_item_id) { global $AVE_DB, $AVE_Template; if (!is_numeric($navigation_item_id)) return; // Выполняем запрос к БД для определения у удаляемого пункта подпунктов $num = $AVE_DB->Query(" SELECT COUNT(1) FROM " . PREFIX . "_navigation_items WHERE parent_id = '" . $navigation_item_id . "' ")->GetCell(); // Если данный пункт имеет подпункты, тогда if ($num > 0) { $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation_items WHERE navigation_item_id = '" . $navigation_item_id . "' LIMIT 1 ")->FetchRow(); // Выполняем запрос к БД и деактивируем пункт меню $AVE_DB->Query(" UPDATE " . PREFIX . "_navigation_items SET status = '0' WHERE navigation_item_id = '" . $navigation_item_id . "' "); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('NAVI_REPORT_DEACT') . " (" . stripslashes($sql->title) . ") (id: $navigation_item_id)"); } else { // В противном случае, если данный пункт не имеет подпунктов, тогда $sql = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation_items WHERE navigation_item_id = '" . $navigation_item_id . "' LIMIT 1 ")->FetchRow(); // Выполняем запрос к БД и удаляем помеченный пункт $AVE_DB->Query(" DELETE FROM " . PREFIX . "_navigation_items WHERE navigation_item_id = '" . $navigation_item_id . "' "); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('NAVI_REPORT_DELIT') . " (" . stripslashes($sql->title) . ") (id: $navigation_item_id)"); } $nav = $AVE_DB->Query(" SELECT navigation_id, alias FROM " . PREFIX . "_navigation WHERE navigation_id = " . $sql->navigation_id . " ")->FetchRow(); //-- Стираем кеш навигации $this->clearCache($nav->navigation_id, $nav->alias); // Выполняем обновление страницы header('Location:' . get_referer_admin_link()); exit; } /** * Метод, предназначенный для активации пункта меню навигации. * Данный метод используется при изменении статуса документа с идентификатором $document_id * * @param int $document_id идентификатор документа на который ссылается пункт меню */ function navigationItemStatusOn($document_id) { global $AVE_DB, $AVE_Template; if (!is_numeric($document_id)) return; // Выполняем запрос к БД и получаем id пункта меню, который соответствует идентификатору документа в ссылке $sql = $AVE_DB->Query(" SELECT navigation_id, navigation_item_id FROM " . PREFIX . "_navigation_items WHERE document_id = '" . $document_id . "' AND status = '0' "); while ($row = $sql->FetchRow()) { // Выполняем запрос к БД изменяем статус пункта меню на активный (1) $AVE_DB->Query(" UPDATE " . PREFIX . "_navigation_items SET status = '1' WHERE navigation_item_id = '" . $row->navigation_item_id . "' "); $nav = $AVE_DB->Query(" SELECT navigation_id, alias FROM " . PREFIX . "_navigation WHERE navigation_id = " . $row->navigation_id . " ")->FetchRow(); //-- Стираем кеш навигации $this->clearCache($nav->navigation_id, $nav->alias); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('NAVI_REPORT_ACT') . " (id: $row->navigation_item_id)"); } } /** * Метод, предназначенный для деактивации пункта меню навигации. * Данный метод используется при изменении статуса документа с идентификатором $document_id * * @param int $document_id идентификатор документа на который ссылается пункт меню */ function navigationItemStatusOff($document_id) { global $AVE_DB, $AVE_Template; if (! is_numeric($document_id)) return; // Выполняем запрос к БД и получаем id пункта меню, // который соответствует идентификатору документа в ссылке $sql = $AVE_DB->Query(" SELECT navigation_id, navigation_item_id FROM " . PREFIX . "_navigation_items WHERE document_id = '" . $document_id . "' AND status = '1' "); while ($row = $sql->fetchrow()) { // Выполняем запрос к БД изменяем статус пункта меню на неактивный (0) $AVE_DB->Query(" UPDATE " . PREFIX . "_navigation_items SET status = '0' WHERE navigation_item_id = '" . $row->navigation_item_id . "' "); $nav = $AVE_DB->Query(" SELECT navigation_id, alias FROM " . PREFIX . "_navigation WHERE navigation_id = " . $row->navigation_id . " ")->FetchRow(); //-- Стираем кеш навигации $this->clearCache($nav->navigation_id, $nav->alias); // Сохраняем системное сообщение в журнал reportLog($AVE_Template->get_config_vars('NAVI_REPORT_DEACT') . " (id: $row->navigation_item_id)"); } } /** * Метод, предназначенный для активации пункта меню навигации. * Данный метод используется при изменении статуса документа с идентификатором $document_id * * @param int $document_id идентификатор документа на который ссылается пункт меню */ function navigationItemGet($navigation_item_id) { global $AVE_DB, $AVE_Template; if (! is_numeric($navigation_item_id)) return; // Выполняем запрос к БД и получаем id пункта меню, который соответствует идентификатору документа в ссылке $item = $AVE_DB->Query(" SELECT * FROM " . PREFIX . "_navigation_items WHERE navigation_item_id = '" . $navigation_item_id . "' ")->FetchAssocArray(); if ($item['document_id']) $doc_info = get_document((int)$item['document_id']); $item['document_title'] = (($doc_info['document_breadcrum_title']) ? $doc_info['document_breadcrum_title'] : $doc_info['document_title']); $item['document_alias'] = $doc_info['document_alias']; $nav = $AVE_DB->Query(" SELECT navigation_id, alias FROM " . PREFIX . "_navigation WHERE navigation_id = " . $item['navigation_id'] . " ")->FetchRow(); //-- Стираем кеш навигации $this->clearCache($nav->navigation_id, $nav->alias); $AVE_Template->assign('item', $item); $AVE_Template->assign('content', $AVE_Template->fetch('navigation/item.tpl')); } /** * Метод, предназначенный для рекурсивоной * сортировки пунктов меню навигации. */ function navigationSort() { global $AVE_DB, $AVE_Template; $level = 1; $navigation_id = (int)$_REQUEST['navigation_id']; foreach ($_REQUEST['data'] as $item_id => $item) { $AVE_DB->Query(" UPDATE " . PREFIX . "_navigation_items SET level = '" . $level . "', parent_id = '0', position = '" . (int)$item_id . "' WHERE navigation_item_id = " . $item['id'] ." AND navigation_id = " . $navigation_id . " "); if (is_array($item['children'])) { $this->navigationSortNested($item['children'], $item['id'], $level, $navigation_id); } } $nav = $AVE_DB->Query(" SELECT navigation_id, alias FROM " . PREFIX . "_navigation WHERE navigation_id = " . $navigation_id . " ")->FetchRow(); //-- Стираем кеш навигации $this->clearCache($nav->navigation_id, $nav->alias); if (isAjax()) { echo json_encode( array( 'message' => $AVE_Template->get_config_vars('NAVI_SORTED'), 'header' => $AVE_Template->get_config_vars('NAVI_REPORT_SUCCESS'), 'theme' => 'accept' ) ); } exit; } /** * Метод, предназначенный для рекурсивоной * сортировки пунктов меню навигации. */ function navigationSortNested($array = array(), $parent_id = null, $level = null, $navigation_id = null) { global $AVE_DB; $level++; foreach($array as $key => $value) { $AVE_DB->Query(" UPDATE " . PREFIX . "_navigation_items SET level = '" . $level . "', parent_id = '" . (int)$parent_id . "', position = '" . $key . "' WHERE navigation_item_id = " . $value['id'] . " AND navigation_id = " . $navigation_id . " "); if (is_array($value['children'])) { $this->navigationSortNested($value['children'], $value['id'], $level, $navigation_id); } } } function getDocumentById($doc_id = null) { $document = get_document($doc_id); echo json_encode( array( 'doc_id' => $doc_id, 'document_title' => $document['document_title'], 'document_alias' => $document['document_alias'] ) ); exit; } function navigationItemStatus($navigation_item_id, $status = 1) { global $AVE_DB; $AVE_DB->Query(" UPDATE " . PREFIX . "_navigation_items SET status = '" . $status . "' WHERE navigation_item_id = '" . $navigation_item_id . "' "); $navigation_id = $AVE_DB->Query(" SELECT navigation_id FROM " . PREFIX . "_navigation_items WHERE navigation_item_id = '" . $navigation_item_id . "' ")->GetCell(); $nav = $AVE_DB->Query(" SELECT navigation_id, alias FROM " . PREFIX . "_navigation WHERE navigation_id = " . $navigation_id . " ")->FetchRow(); //-- Стираем кеш навигации $this->clearCache($nav->navigation_id, $nav->alias); echo json_encode( array( 'status' => ($status == 0 ? 1 : 0) ) ); exit; } function clearCache($id, $alias = '') { if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/template.cache')) unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/template.cache'); if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/template.cache')) unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/template.cache'); if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/items.cache')) unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $id . '/items.cache'); if (file_exists(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/items.cache')) unlink(BASE_DIR . '/tmp/cache/sql/navigations/' . $alias . '/items.cache'); } function clearCacheNav($id, $alias) { $cache_id = explode('_', $id); $cache_id = 'navigations/' . $cache_id[1]; $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' ? trim($cache_id) . '/' : ''); rrmdir($cache_dir); $cache_id = explode('_', $alias); $cache_id = 'navigations/' . $cache_id[1]; $cache_dir = BASE_DIR . '/tmp/cache/sql/' . (trim($cache_id) > '' ? trim($cache_id) . '/' : ''); rrmdir($cache_dir); } } ?>