mirror of
				https://github.com/avecms/AVE.cms.git
				synced 2025-10-30 13:26:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1305 lines
		
	
	
		
			41 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1305 lines
		
	
	
		
			41 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | ||
| 
 | ||
| 	/**
 | ||
| 	 * AVE.cms
 | ||
| 	 *
 | ||
| 	 * Класс, предназначенный для работы шаблонами и пунктами меню навигаций
 | ||
| 	 *
 | ||
| 	 * @package AVE.cms
 | ||
| 	 * @version 3.x
 | ||
| 	 * @filesource
 | ||
| 	 * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
 | ||
| 	 *
 | ||
| 	 */
 | ||
| 
 | ||
| 	class AVE_Navigation
 | ||
| 	{
 | ||
| 
 | ||
| 	/**
 | ||
| 	 *	Свойства класса
 | ||
| 	 */
 | ||
| 
 | ||
| 
 | ||
| 	/**
 | ||
| 	 *	Внутренние методы класса
 | ||
| 	 */
 | ||
| 
 | ||
| 		/**
 | ||
| 		 * Метод, предназначенный для удаления запрещённых символов
 | ||
| 		 * и преобразование специальных символов в HTML сущности
 | ||
| 		 *
 | ||
| 		 * @param string $text
 | ||
| 		 * @return string
 | ||
| 		 */
 | ||
| 		function _replace_wildcode($text)
 | ||
| 		{
 | ||
| 			//$text = html_entity_decode($text,ENT_QUOTES,'UTF-8');
 | ||
| 			//$text = preg_replace('/\s/i',' ',$text);
 | ||
| 			//$text = str_replace(array('ô','ç','é','è','ä','à','â','ü','ñ'),array('o','c','e','e','a','a','a','u','n'), $text);
 | ||
| 			//$text = htmlspecialchars($text, ENT_QUOTES, '"&><\'');
 | ||
| 			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']))  ? "<a target=\"[tag:target]\" href=\"[tag:link]\">[tag:linkname]</a>" : $_REQUEST['level1'];
 | ||
| 					$navigation_level1_active	= (empty($_REQUEST['level1_active'])) ? "<a target=\"[tag:target]\" href=\"[tag:link]\" class=\"first_active\">[tag:linkname]</a>" : $_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);
 | ||
| 		}
 | ||
| 	}
 | ||
| ?>
 |