<?php

/**
 * AVE.cms
 *
 * @package AVE.cms
 * @version 3.x
 * @filesource
 * @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
 *
 */

/**
 * Класс работы с рубриками
 */
class AVE_Rubric
{

/**
 *	СВОЙСТВА
 */

	/**
	 * Количество рубрик на странице
	 *
	 * @public int
	 */
	public $_limit = 30;

/**
 *	ВНУТРЕННИЕ МЕТОДЫ
 */

	function get_rubric_fields_group($rubric_id)
	{

		global $AVE_DB, $AVE_Template;

		$sql = $AVE_DB->Query("
			SELECT
				*
			FROM
				" . PREFIX . "_rubric_fields_group
			WHERE
				rubric_id = '" . $rubric_id . "'
			ORDER BY
				group_position ASC
		");

		$groups = array();

		while($row = $sql->FetchRow())
		{
			array_push($groups, $row);
		}

		return $groups;
	}


/**
 *	ВНЕШНИЕ МЕТОДЫ
 */

	/**
	 * Вывод списка рубрик
	 *
	 */
	function rubricList()
	{
		global $AVE_DB, $AVE_Template;

		$rubrics = array();
		$num = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_rubrics")->GetCell();

		$page_limit = $this->_limit;
		$pages = ceil($num / $page_limit);
		$set_start = get_current_page() * $page_limit - $page_limit;

		if ($num > $page_limit)
		{
			$page_nav = " <a class=\"pnav\" href=\"index.php?do=rubs&page={s}&cp=" . SESSION . "\">{t}</a> ";
			$page_nav = get_pagination($pages, 'page', $page_nav);
			$AVE_Template->assign('page_nav', $page_nav);
		}

		$sql = $AVE_DB->Query("
			SELECT
				rub.*,
				COUNT(doc.Id) AS doc_count,
				(SELECT count(*) FROM " . PREFIX . "_rubric_fields AS fld WHERE fld.rubric_id = rub.Id) AS fld_count,
				(SELECT count(*) FROM " . PREFIX . "_rubric_templates AS tmpls WHERE tmpls.rubric_id = rub.Id) AS tmpls_count
			FROM
				" . PREFIX . "_rubrics AS rub
			LEFT JOIN
				" . PREFIX . "_documents AS doc
					ON rubric_id = rub.Id
			GROUP BY rub.Id
			ORDER BY rub.rubric_position
			LIMIT " . $set_start . "," . $page_limit
		);

		while ($row = $sql->FetchRow())
		{
			array_push($rubrics, $row);
		}

		$AVE_Template->assign('rubrics', $rubrics);
	}

	/**
	 * создание рубрики
	 *
	 */
	function rubricNew()
	{
		global $AVE_DB, $AVE_Template;

		switch ($_REQUEST['sub'])
		{
			case '':
				$AVE_Template->assign('content', $AVE_Template->fetch('rubs/rubnew.tpl'));
				break;

			case 'save':
				$errors = array();

				if (empty($_POST['rubric_title']))
				{
					array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NO_NAME'));
				}
				else
				{
					$name_exist = $AVE_DB->Query("
						SELECT 1
						FROM " . PREFIX . "_rubrics
						WHERE rubric_title = '" . $_POST['rubric_title'] . "'
						LIMIT 1
					")->NumRows();

					if ($name_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NAME_EXIST'));

					if (!empty($_POST['rubric_alias']))
					{
						if (preg_match(TRANSLIT_URL ? '/[^\%HYa-z0-9\/_-]+/' : '/[^\%HYa-zа-яА-Яёїєі0-9\/_-]+/u', $_POST['rubric_alias']))
						{
							array_push($errors, $AVE_Template->get_config_vars('RUBRIK_PREFIX_BAD_CHAR'));
						}
						else
						{
							$prefix_exist = $AVE_DB->Query("
								SELECT 1
								FROM " . PREFIX . "_rubrics
								WHERE rubric_alias = '" . $_POST['rubric_alias'] . "'
								LIMIT 1
							")->NumRows();

							if ($prefix_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_PREFIX_EXIST'));
						}
					}

					if (!empty($errors))
					{
						$AVE_Template->assign('errors', $errors);
						$AVE_Template->assign('templates', get_all_templates());
						$AVE_Template->assign('content', $AVE_Template->fetch('rubs/rubnew.tpl'));
					}
					else
					{
						$position = (int)$AVE_DB->Query("
							SELECT MAX(rubric_position)
							FROM " . PREFIX . "_rubrics
						")->GetCell() + 1;

						$AVE_DB->Query("
							INSERT " . PREFIX . "_rubrics
							SET
								rubric_title			= '" . $_POST['rubric_title'] . "',
								rubric_alias			= '" . $_POST['rubric_alias'] . "',
								rubric_template_id		= '" . intval($_POST['rubric_template_id']) . "',
								rubric_author_id		= '" . $_SESSION['user_id'] . "',
								rubric_created			= '" . time() . "',
								rubric_position			= '" . $position . "'
						");

						$iid = $AVE_DB->InsertId();

						// Выставляем всем право на просмотр рубрики, админу - все права
						$sql_user = $AVE_DB->Query("
							SELECT
								grp.*,
								COUNT(usr.Id) AS UserCount
							FROM
								" . PREFIX . "_user_groups AS grp
							LEFT JOIN
								" . PREFIX . "_users AS usr
									ON usr.user_group = grp.user_group
							GROUP BY grp.user_group
						");
						while ($row = $sql_user->FetchRow())
						{
							$AVE_DB->Query("
								INSERT " . PREFIX . "_rubric_permissions
								SET
									rubric_id         = '" . $iid . "',
									user_group_id     = '" . $row->user_group . "',
									rubric_permission = '". (($row->user_group == 1) ? "alles|docread|new|newnow|editown|editall|delrev" : "docread")."'
							");
						}

						// Сохраняем системное сообщение в журнал
						reportLog($AVE_Template->get_config_vars('RUBRIK_LOG_NEW_RUBRIC') . ' - ' . stripslashes(htmlspecialchars($_POST['rubric_title'], ENT_QUOTES)) . ' (id: '.$iid.')');

						header('Location:index.php?do=rubs&action=edit&Id=' . $iid . '&cp=' . SESSION);
						exit;
					}
				}
				break;
		}
	}

	/**
	 * Запись настроек рубрики
	 *
	 */
	function quickSave()
	{
		global $AVE_DB, $AVE_Template;

		if (check_permission_acp('rubric_edit'))
		{
			foreach ($_POST['rubric_title'] as $rubric_id => $rubric_title)
			{
				if (!empty($rubric_title))
				{
					$set_rubric_title = '';
					$set_rubric_alias = '';

					$name_exist = $AVE_DB->Query("
						SELECT 1
						FROM " . PREFIX . "_rubrics
						WHERE
							rubric_title = '" . $rubric_title . "'
						AND
							Id != '" . $rubric_id . "'
						LIMIT 1
					")->NumRows();

					if (!$name_exist)
					{
						$set_rubric_title = "rubric_title = '" . $rubric_title . "',";
					}

					if (isset($_POST['rubric_alias'][$rubric_id]) && $_POST['rubric_alias'][$rubric_id] != '')
					{
						$pattern = TRANSLIT_URL ? '/[^\%HYa-z0-9\/_-]+/' : '/[^\%HYa-zа-яА-Яёїєі0-9\/_-]+/u';
						if (!(preg_match($pattern, $_POST['rubric_alias'][$rubric_id])))
						{
							$prefix_exist = $AVE_DB->Query("
								SELECT 1
								FROM " . PREFIX . "_rubrics
								WHERE
									rubric_alias = '" . $_POST['rubric_alias'][$rubric_id] . "'
								AND
									Id != '" . $rubric_id . "'
								LIMIT 1
							")->NumRows();

							if (!$prefix_exist)
							{
								$set_rubric_alias = "rubric_alias = '" . trim(preg_replace($pattern, '', $_POST['rubric_alias'][$rubric_id]), '/') . "',";
							}
						}
					}
					else
					{
						$set_rubric_alias = "rubric_alias = '',";
					}

					$AVE_DB->Query("
						UPDATE " . PREFIX . "_rubrics
						SET
							" . $set_rubric_title . "
							" . $set_rubric_alias . "
							rubric_meta_gen = '" . (isset($_POST['rubric_meta_gen'][$rubric_id]) ? $_POST['rubric_meta_gen'][$rubric_id] : '0') . "',
							rubric_alias_history = '" . (isset($_POST['rubric_alias_history'][$rubric_id]) ? $_POST['rubric_alias_history'][$rubric_id] : '0') . "',
							rubric_template_id = '" . (int)$_POST['rubric_template_id'][$rubric_id] . "',
							rubric_docs_active = '" . (isset($_POST['rubric_docs_active'][$rubric_id]) ? $_POST['rubric_docs_active'][$rubric_id] : '0') . "'
						WHERE
							Id = '" . $rubric_id . "'
					");
				}
			}

			$message = $AVE_Template->get_config_vars('RUBRIK_REP_QUICKSAVE_T');
			$header = $AVE_Template->get_config_vars('RUBRIK_REP_QUICKSAVE_H');
			$theme = 'accept';

			reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_QUICKSAVE'));

			if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = 'run') {
				echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
				exit;
			} else {
				$page = !empty($_REQUEST['page']) ? '&page=' . $_REQUEST['page'] : '' ;
				header('Location:index.php?do=rubs' . $page . '&cp=' . SESSION);
			}
		}
	}

	/**
	 * Копирование рубрики
	 *
	 */
	function rubricCopy()
	{
		global $AVE_DB, $AVE_Template;

		$rubric_id = (int)$_REQUEST['Id'];

		$errors = array();

		if (empty($_REQUEST['rubric_title']))
		{
			array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NO_NAME'));
		}
		else
		{
			$name_exist = $AVE_DB->Query("
				SELECT 1
				FROM " . PREFIX . "_rubrics
				WHERE rubric_title = '" . $_POST['rubric_title'] . "'
				LIMIT 1
			")->NumRows();

			if ($name_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NAME_EXIST'));
		}

		if (!empty($_POST['rubric_alias']))
		{
			if (preg_match(TRANSLIT_URL ? '/[^\%HYa-z0-9\/-]+/' : '/[^\%HYa-zа-яёїєі0-9\/_-]+/', $_POST['rubric_alias']))
			{
				array_push($errors, $AVE_Template->get_config_vars('RUBRIK_PREFIX_BAD_CHAR'));
			}
			else
			{
				$prefix_exist = $AVE_DB->Query("
					SELECT 1
					FROM " . PREFIX . "_rubrics
					WHERE rubric_alias = '" . $_POST['rubric_alias'] . "'
					LIMIT 1
				")->NumRows();

				if ($prefix_exist) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_PREFIX_EXIST'));
			}
		}

		$row = $AVE_DB->Query("
			SELECT *
			FROM " . PREFIX . "_rubrics
			WHERE Id = '" . $rubric_id . "'
		")->FetchRow();

		if (!$row) array_push($errors, $AVE_Template->get_config_vars('RUBRIK_NO_RUBRIK'));

		if (!empty($errors))
		{
			$AVE_Template->assign('errors', $errors);
		}
		else
		{
			$AVE_DB->Query("
				INSERT " . PREFIX . "_rubrics
				SET
					rubric_title       = '" . $_POST['rubric_title'] . "',
					rubric_alias       = '" . $_POST['rubric_alias'] . "',
					rubric_template    = '" . addslashes($row->rubric_template) . "',
					rubric_template_id = '" . addslashes($row->rubric_template_id) . "',
					rubric_author_id   = '" . (int)$_SESSION['user_id'] . "',
					rubric_created     = '" . time() . "',
					rubric_teaser_template    = '" . addslashes($row->rubric_teaser_template) . "',
					rubric_header_template    = '" . addslashes($row->rubric_header_template) . "',
					rubric_admin_teaser_template    = '" . addslashes($row->rubric_admin_teaser_template) . "'
			");
			$iid = $AVE_DB->InsertId();

			$sql = $AVE_DB->Query("
				SELECT
					user_group_id,
					rubric_permission
				FROM " . PREFIX . "_rubric_permissions
				WHERE rubric_id = '" . $rubric_id . "'
			");
			while ($row = $sql->FetchRow())
			{
				$AVE_DB->Query("
					INSERT " . PREFIX . "_rubric_permissions
					SET
						rubric_id = '" . $iid . "',
						user_group_id = '" . (int)$row->user_group_id . "',
						rubric_permission = '" . addslashes($row->rubric_permission) . "'
				");
			}

			$sql = $AVE_DB->Query("
				SELECT
					rubric_field_title,
					rubric_field_alias,
					rubric_field_type,
					rubric_field_position,
					rubric_field_default,
					rubric_field_template,
					rubric_field_template_request,
					rubric_field_description
				FROM " . PREFIX . "_rubric_fields
				WHERE rubric_id = '" . $rubric_id . "'
				ORDER BY rubric_field_position ASC
			");
			while ($row = $sql->FetchRow())
			{
				$AVE_DB->Query("
					INSERT " . PREFIX . "_rubric_fields
					SET
						rubric_id                     = '" . $iid . "',
						rubric_field_title            = '" . addslashes($row->rubric_field_title) . "',
						rubric_field_alias            = '" . addslashes($row->rubric_field_alias) . "',
						rubric_field_type             = '" . addslashes($row->rubric_field_type) . "',
						rubric_field_position         = '" . (int)$row->rubric_field_position . "',
						rubric_field_default          = '" . addslashes($row->rubric_field_default) . "',
						rubric_field_template         = '" . addslashes($row->rubric_field_template) . "',
						rubric_field_template_request = '" . addslashes($row->rubric_field_template_request) . "',
						rubric_field_description      = '" . addslashes($row->rubric_field_description) . "'
				");
			}

			reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_COPY') . ' - ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ' (id: '.$rubric_id.')');

			echo '<script>window.opener.location.reload();window.close();</script>';
		}
	}

	/**
	 * Удаление рубрики
	 *
	 */
	function rubricDelete()
	{
		global $AVE_DB, $AVE_Template;

		$rubric_id = (int)$_REQUEST['Id'];

		if ($rubric_id <= 1)
		{
			header('Location:index.php?do=rubs&cp=' . SESSION);
			exit;
		}

		$rubric_not_empty = $AVE_DB->Query("
			SELECT 1
			FROM " . PREFIX . "_documents
			WHERE rubric_id = '" . $rubric_id . "'
			LIMIT 1
		")->GetCell();

		if (!$rubric_not_empty)
		{
			$AVE_DB->Query("
				DELETE
				FROM " . PREFIX . "_rubrics
				WHERE Id = '" . $rubric_id . "'
			");
			$AVE_DB->Query("
				DELETE
				FROM " . PREFIX . "_rubric_fields
				WHERE rubric_id = '" . $rubric_id . "'
			");
			$AVE_DB->Query("
				DELETE
				FROM " . PREFIX . "_rubric_permissions
				WHERE rubric_id = '" . $rubric_id . "'
			");
			// Очищаем кэш шаблона документов рубрики
			$AVE_DB->Query("
				DELETE
				FROM " . PREFIX . "_rubric_template_cache
				WHERE rub_id = '" . $rubric_id . "'
			");

			// Сохраняем системное сообщение в журнал
			reportLog($AVE_Template->get_config_vars('RUBRIK_LOG_DEL_RUBRIC') . ' - ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ' (id: '.$rubric_id.')');
		}

		header('Location:index.php?do=rubs&cp=' . SESSION);
		exit;
	}

	/**
	 * Вывод списка полей рубрики
	 *
	 * @param int $rubric_id	идентификатор рубрики
	 */
	function rubricFieldShow($rubric_id = 0, $ajax)
	{
		global $AVE_DB, $AVE_Template;

		if(check_permission_acp('rubric_edit'))
		{
			// Поля
			$sql = $AVE_DB->Query("
				SELECT
					a.*, b.group_title, b.group_description, b.group_position
				FROM
					" . PREFIX . "_rubric_fields AS a
				LEFT JOIN
					" . PREFIX . "_rubric_fields_group AS b
					ON a.rubric_field_group = b.Id
				WHERE
					a.rubric_id = '" . $rubric_id . "'
				ORDER BY
					b.group_position ASC, a.rubric_field_position ASC
			");

			$fields_list = array();

			while ($row = $sql->FetchRow())
			{
				$group_id = ($row->rubric_field_group) ? $row->rubric_field_group : 0;

				$fields_list[$group_id]['group_position'] = ($row->group_position) ? $row->group_position : 100;
				$fields_list[$group_id]['group_title'] = $row->group_title;
				$fields_list[$group_id]['group_description'] = $row->group_description;
				$fields_list[$group_id]['fields'][$row->Id]['Id'] = $row->Id;
				$fields_list[$group_id]['fields'][$row->Id]['rubric_id'] = $row->rubric_id;
				$fields_list[$group_id]['fields'][$row->Id]['rubric_field_group'] = $row->rubric_field_group;
				$fields_list[$group_id]['fields'][$row->Id]['rubric_field_alias'] = $row->rubric_field_alias;
				$fields_list[$group_id]['fields'][$row->Id]['rubric_field_title'] = $row->rubric_field_title;
				$fields_list[$group_id]['fields'][$row->Id]['rubric_field_type'] = $row->rubric_field_type;
				$fields_list[$group_id]['fields'][$row->Id]['rubric_field_numeric'] = $row->rubric_field_numeric;
				$fields_list[$group_id]['fields'][$row->Id]['rubric_field_default'] = $row->rubric_field_default;
				$fields_list[$group_id]['fields'][$row->Id]['rubric_field_search'] = $row->rubric_field_search;
			}

			$fields_list = msort($fields_list, 'group_position');

			$AVE_Template->assign('groups_count', count($fields_list));
			$AVE_Template->assign('fields_list', $fields_list);

			// Группы полей
			$fields_groups = array();

			$sql = $AVE_DB->Query("
				SELECT *
				FROM " . PREFIX . "_rubric_fields_group
				WHERE rubric_id = '" . $rubric_id . "'
				ORDER BY group_position ASC
			");

			while ($row = $sql->FetchRow())
			{
				array_push($fields_groups, $row);
			}

			$AVE_Template->assign('fields_groups', $fields_groups);


			// Права
			$groups = array();

			$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_user_groups");

			while ($row = $sql->FetchRow())
			{
				$row->doall = ($row->user_group == 1) ? ' disabled="disabled" checked="checked"' : '';
				$row->doall_h = ($row->user_group == 1) ? 1 : '';

				$rubric_permission = $AVE_DB->Query("
					SELECT rubric_permission
					FROM " . PREFIX . "_rubric_permissions
					WHERE user_group_id = '" . $row->user_group . "'
					AND rubric_id = '" . $rubric_id . "'
				")->GetCell();

				$row->permissions = @explode('|', $rubric_permission);

				array_push($groups,$row);
			}

			$sql = $AVE_DB->Query("
				SELECT rubric_title, rubric_linked_rubric, rubric_description
				FROM " . PREFIX . "_rubrics
				WHERE id = '" . $rubric_id . "'
				LIMIT 1
			");

			$rubrik = $sql->FetchRow();

			$rubrik->rubric_linked_rubric = ($rubrik->rubric_linked_rubric != '0') ? unserialize($rubrik->rubric_linked_rubric) : array();

			$AVE_Template->assign('rubric', $rubrik);
			$AVE_Template->assign('groups', $groups);
			$AVE_Template->assign('fields', get_field_type());
			$AVE_Template->assign('rubs', $this->rubricShow());

			if (isAjax())
			{
				$AVE_Template->assign('content', $AVE_Template->fetch('rubs/fields.tpl'));
			}
			else
			{
				$AVE_Template->assign('content', $AVE_Template->fetch('rubs/fields_list.tpl'));
			}
		}
		else
		{
			header('Location:index.php?do=rubs&cp=' . SESSION);
			exit;
		}
	}

	/**
	 * Вывод списка рубрик
	 *
	 * @param int $rubric_id идентификатор текущей рубрики
	 */
	function rubricShow($RubLink=null)
	{
		global $AVE_DB;

		if ($RubLink!==null) {
			$AVE_DB->Query("
				UPDATE " . PREFIX . "_rubrics
				SET
					rubric_linked_rubric = '" . serialize($_REQUEST['rubric_linked']) . "'
				WHERE
					Id = '" . (int)$_REQUEST['Id'] . "'
			");
			header('Location:index.php?do=rubs&action=edit&Id=' . (int)$_REQUEST['Id'] . '&cp=' . SESSION);
			exit;
		}
		else
		{
			$rubs = array();
			$sql = $AVE_DB->Query("
				SELECT rubric_title, Id
				FROM " . PREFIX . "_rubrics
				ORDER BY rubric_position ASC
			");

			while ($row = $sql->FetchRow())
			{
				array_push($rubs,$row);
			}
			return $rubs;
		}
	}

	/**
	 * Создание нового поля рубрики
	 *
	 * @param int $rubric_id	идентификатор рубрики
	 */
	function rubricFieldNew($rubric_id = 0, $ajax)
	{
		global $AVE_DB, $AVE_Template;

		if (!empty($_POST['title_new']))
		{
			$position = (int)$AVE_DB->Query("
				SELECT MAX(rubric_field_position)
				FROM " . PREFIX . "_rubric_fields
				WHERE rubric_id = '" . $rubric_id . "'
			")->GetCell() + 1;

			if ($_POST['rub_type_new'] == 'dropdown')
			{
				$rubric_field_default = trim($_POST['default_value']);
				$rubric_field_default = preg_split('/\s*,\s*/', $rubric_field_default);
				$rubric_field_default = implode(',', $rubric_field_default);
			}
			else
			{
				$rubric_field_default = $_POST['default_value'];
			}

			$AVE_DB->Query("
				INSERT " . PREFIX . "_rubric_fields
				SET
					rubric_id             = '" . $rubric_id . "',
					rubric_field_group    = '" . (($_POST['group_new'] != '') ? (int)$_POST['group_new'] : '0') . "',
					rubric_field_title    = '" . $_POST['title_new'] . "',
					rubric_field_type     = '" . $_POST['rub_type_new'] . "',
					rubric_field_position = '" . $position . "',
					rubric_field_default  = '" . $rubric_field_default . "',
					rubric_field_numeric     = '" . (($_POST['rubric_field_numeric'] == 1) ? $_POST['rubric_field_numeric'] : '0') . "',
					rubric_field_search     = '" . (($_POST['rubric_field_search'] == 1) ? $_POST['rubric_field_search'] : '0') . "'
			");

			$UpdateRubricField = $AVE_DB->InsertId();

			$sql = $AVE_DB->Query("
				SELECT Id
				FROM " . PREFIX . "_documents
				WHERE rubric_id = '" . $rubric_id . "'
			");

			while ($row = $sql->FetchRow())
			{
				$AVE_DB->Query("
					INSERT " . PREFIX . "_document_fields
					SET
						rubric_field_id = '" . $UpdateRubricField . "',
						document_id = '" . $row->Id . "'
				");
			}

			// Сохраняем системное сообщение в журнал
			reportLog($AVE_Template->get_config_vars('RUBRIK_LOG_NEW_FIELD').' (' . stripslashes(htmlspecialchars($_POST['title_new'], ENT_QUOTES)) . ') '. stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)). ' (id: '.$rubric_id.')');
		} else {

			if (!$ajax){

				header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION);
				exit;

			}else{

				$message = $AVE_Template->get_config_vars('RUBRIK_EMPTY_MESSAGE');
				$header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS');
				$theme = 'error';
				echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
				exit;
			}
		}
		if (!$ajax){

			header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION);
			exit;

		}else{

			$message = $AVE_Template->get_config_vars('RUBRIK_FILD_SAVED');
			$header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS');
			$theme = 'accept';
			echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
			exit;
		}
	}


	/**
	 * Редактирование кода для рубрики
	 *
	 * @param int $rubric_id	идентификатор рубрики
	 */
	function rubricCodeEdit($rubric_id = 0)
	{
		global $AVE_DB, $AVE_Template;

		switch ($_REQUEST['sub']) {

			case '':
				$code = $AVE_DB->Query("
					SELECT rubric_code_start, rubric_code_end, rubric_start_code
					FROM " . PREFIX . "_rubrics
					WHERE
						Id = '" . $rubric_id . "'
				")->FetchRow();

				$AVE_Template->assign('code', $code);
				$AVE_Template->assign('rubric_title', $this->rubricNameByIdGet($rubric_id)->rubric_title);
				$AVE_Template->assign('formaction', 'index.php?do=rubs&action=code&sub=save&Id=' . $rubric_id . '&cp=' . SESSION);
				$AVE_Template->assign('content', $AVE_Template->fetch('rubs/code.tpl'));
				break;

			case 'save':
				$sql = $AVE_DB->Query("
					UPDATE " . PREFIX . "_rubrics
					SET
						rubric_start_code           = '" . $_POST['rubric_start_code'] . "',
						rubric_code_start           = '" . $_POST['rubric_code_start'] . "',
						rubric_code_end             = '" . $_POST['rubric_code_end'] . "'
					WHERE
						Id = '" . $rubric_id . "'
				");

				if ($sql->_result === false) {
					$message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED_ERR');
					$header = $AVE_Template->get_config_vars('RUBRIK_CODE_ERROR');
					$theme = 'error';
				}else{
					$message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED');
					$header = $AVE_Template->get_config_vars('RUBRIK_CODE_SUCCESS');
					$theme = 'accept';
					reportLog($AVE_Template->get_config_vars('RUBRIK_CODE_UPDATE') . " (" . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ") (id: $rubric_id)");
				}

				if (isAjax()) {
					echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
				} else {
					header('Location:index.php?do=rubs&action=code&Id=' . $rubric_id . '&cp=' . SESSION);
				}
				exit;
		}
	}

	/**
	 * Редактирование кода для рубрики
	 *
	 * @param int $rubric_id	идентификатор рубрики
	 */
	function rubricCode($rubric_id = 0)
	{
		global $AVE_DB, $AVE_Template;

		$sql = $AVE_DB->Query("
					UPDATE " . PREFIX . "_rubrics
					SET
						rubric_code_start           = '" . $_POST['rubric_code_start'] . "',
						rubric_code_end             = '" . $_POST['rubric_code_end'] . "'
					WHERE
						Id = '" . $rubric_id . "'
		");

		if ($sql->_result === false) {
			$message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED_ERR');
			$header = $AVE_Template->get_config_vars('RUBRIK_CODE_ERROR');
			$theme = 'error';
		}else{
			$message = $AVE_Template->get_config_vars('RUBRIK_CODE_SAVED');
			$header = $AVE_Template->get_config_vars('RUBRIK_CODE_SUCCESS');
			$theme = 'accept';
			reportLog($AVE_Template->get_config_vars('RUBRIK_CODE_UPDATE') . " (" . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ") (id: $rubric_id)");
		}

		if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') {
			echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
		} else {
			header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION);
		}
		exit;
	}

	/**
	 * Редактирование описания рубрики
	 *
	 * @param int $rubric_id идентификатор рубрики
	 */
	function rubricDesc($rubric_id = 0)
	{
		global $AVE_DB;

		$AVE_DB->Query("
			UPDATE " . PREFIX . "_rubrics
			SET
				rubric_description           = '" . $_POST['rubric_description'] . "'
			WHERE
				Id = '" . $rubric_id . "'
		");

		header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION);
		exit;
	}

	/**
	 * Управление полями рубрики
	 *
	 * @param int $rubric_id	идентификатор рубрики
	 */
	function rubricFieldSave($rubric_id = 0)
	{
		global $AVE_DB, $AVE_Template;

		foreach ($_POST['title'] as $id => $title)
		{
			if (!empty($title))
			{
				$AVE_DB->Query("
					UPDATE " . PREFIX . "_rubric_fields
					SET
						rubric_field_title            = '" . $title . "',
						rubric_field_numeric          = '" . $_POST['rubric_field_numeric'][$id] . "',
						rubric_field_search           = '" . $_POST['rubric_field_search'][$id] . "'
					WHERE
						Id = '" . $id . "'
				");
				// Очищаем кэш шаблона документов рубрики
				$AVE_DB->Query("
					DELETE
					FROM " . PREFIX . "_rubric_template_cache
					WHERE rub_id = '" . $rubric_id . "'
				");

				$sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id);

				while ($row = $sql->FetchRow())
				{
					$AVE_DB->clearcache('doc_'.$row->Id);
					$AVE_DB->clearcompile('doc_'.$row->Id);
					$AVE_DB->clearcacherequest('doc_'.$row->Id);
				}

				reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_FIELD_EDIT') . ' (' . stripslashes($title) . ') '.$AVE_Template->get_config_vars('RUBRIK_REPORT_RUB').' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')');
			}
		}

		foreach ($_POST['del'] as $id => $Del)
		{
			if (!empty($Del))
			{
				$AVE_DB->Query("
					DELETE
					FROM " . PREFIX . "_rubric_fields
					WHERE Id = '" . $id . "'
					AND rubric_id = '" . $rubric_id . "'
				");
				$AVE_DB->Query("
					DELETE
					FROM " . PREFIX . "_document_fields
					WHERE rubric_field_id = '" . $id . "'
				");
				// Очищаем кэш шаблона документов рубрики
				$AVE_DB->Query("
					DELETE
					FROM " . PREFIX . "_rubric_template_cache
					WHERE rub_id = '" . $rubric_id . "'
				");

				reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_FIELD_DEL') . ' (' . stripslashes($_POST['title'][$id]) . ') '.$AVE_Template->get_config_vars('RUBRIK_REPORT_RUB').' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')');
			}
		}

		$AVE_DB->clearcache('rub_'.$rubric_id);

		$sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id);

		while ($row = $sql->FetchRow())
		{
			$AVE_DB->clearcache('doc_'.$row->Id);
			$AVE_DB->clearcompile('doc_'.$row->Id);
		}

		$message = $AVE_Template->get_config_vars('RUBRIK_FILDS_SAVED');
		$header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS');
		$theme = 'accept';

		reportLog($AVE_Template->get_config_vars('RUBRIK_FILDS_REPORT') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')');

		if (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] = '1') {
			echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
		} else {
			$AVE_Template->assign('message', $message);
			header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION);
		}
		exit;
	}

	/**
	 * Сортировка полей рубрики
	 *
	 * @param array $sorted	последовательность id полей
	 */
	function rubricFieldsSort()
	{
		global $AVE_DB, $AVE_Template;

		foreach ($_REQUEST['sort'] as $position => $field_id)
		{
			$AVE_DB->Query("
				UPDATE " . PREFIX . "_rubric_fields
				SET
					rubric_field_position = '" . (int)$position . "'
				WHERE
					Id = '" . (int)$field_id . "'
			");
		}

		reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_SORTE_FIELDS'));

		if (isAjax()){
			$message = $AVE_Template->get_config_vars('RUBRIK_SORTED');
			$header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS');
			$theme = 'accept';

			echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
		}

	}

	/**
	 * Сортировка рубрик
	 *
	 * @param array $sorted	последовательность id полей
	 */
	function rubricsSort()
	{
		global $AVE_DB, $AVE_Template;

		foreach ($_REQUEST['sort'] as $position => $rub_id)
		{
			$AVE_DB->Query("
				UPDATE " . PREFIX . "_rubrics
				SET
					rubric_position = '" . (int)$position . "'
				WHERE
					Id = '" . (int)$rub_id . "'
			");
		}

		reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_SORTE'));

		if (isAjax()){
			$message = $AVE_Template->get_config_vars('RUBRIK_SORTED');
			$header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS');
			$theme = 'accept';

			echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
		}

	}

	/**
	 * Вывод шаблона рубрики
	 *
	 * @param int $show
	 * @param int $extern
	 */
	function rubricTemplateShow($show = '', $extern = '0')
	{
		global $AVE_DB, $AVE_Template;

		if ($extern == 1)
		{
			$fetchId = (isset($_REQUEST['rubric_id']) && is_numeric($_REQUEST['rubric_id'])) ? $_REQUEST['rubric_id'] : 0;
		}
		else
		{
			$fetchId = (isset($_REQUEST['Id']) && is_numeric($_REQUEST['Id'])) ? $_REQUEST['Id'] : 0;
		}

		$rubric = $AVE_DB->Query("
			SELECT
				rubric_title,
				rubric_template,
				rubric_header_template,
				rubric_teaser_template,
				rubric_admin_teaser_template,
				rubric_description
			FROM " . PREFIX . "_rubrics
			WHERE Id = '" . $fetchId . "'
		")
		->FetchRow();

		// Поля
		$sql = $AVE_DB->Query("
			SELECT
				a.*, b.group_title, b.group_description, b.group_position
			FROM
				" . PREFIX . "_rubric_fields AS a
			LEFT JOIN
				" . PREFIX . "_rubric_fields_group AS b
				ON a.rubric_field_group = b.Id
			WHERE
				a.rubric_id = '" . $fetchId . "'
			ORDER BY
				b.group_position ASC, a.rubric_field_position ASC
		");

		$fields_list = array();
		$drop_down_fields = array();

		while ($row = $sql->FetchRow())
		{
			$group_id = ($row->rubric_field_group) ? $row->rubric_field_group : 0;

			if ($row->rubric_field_type == 'drop_down' || $row->rubric_field_type == 'drop_down_key')
				array_push($drop_down_fields, $row->Id);

			$fields_list[$group_id]['group_position'] = ($row->group_position) ? $row->group_position : 100;
			$fields_list[$group_id]['group_title'] = $row->group_title;
			$fields_list[$group_id]['group_description'] = $row->group_description;
			$fields_list[$group_id]['fields'][$row->Id]['Id'] = $row->Id;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_id'] = $row->rubric_id;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_group'] = $row->rubric_field_group;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_alias'] = $row->rubric_field_alias;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_title'] = $row->rubric_field_title;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_type'] = $row->rubric_field_type;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_numeric'] = $row->rubric_field_numeric;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_default'] = $row->rubric_field_default;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_search'] = $row->rubric_field_search;
		}

		$fields_list = msort($fields_list, 'group_position');

		$AVE_Template->assign('groups_count', count($fields_list));
		$AVE_Template->assign('fields_list', $fields_list);

		$AVE_Template->assign('field_array', get_field_type());

		if ($show == 1 )
			$rubric->rubric_template = stripslashes($_POST['rubric_template']);

		if ($extern == 1)
		{
			$AVE_Template->assign('ddid', implode(',', $drop_down_fields));
		}
		else
		{
			$AVE_Template->assign('rubric', $rubric);
			$AVE_Template->assign('formaction', 'index.php?do=rubs&action=template&sub=save&Id=' . $fetchId . '&cp=' . SESSION);
			$AVE_Template->assign('content', $AVE_Template->fetch('rubs/form.tpl'));
		}
	}

	/**
	 * Редактирование шаблона рубрики
	 *
	 * @param string $data
	 */
	function rubricTemplateSave($Rtemplate, $Htemplate = '', $Ttemplate = '', $Atemplate = '')
	{
		global $AVE_DB, $AVE_Template;

		$rubric_id = (int)$_REQUEST['Id'];

		$sql = $AVE_DB->Query("
			UPDATE " . PREFIX . "_rubrics
			SET
				rubric_template = '" . ($Rtemplate) . "',
				rubric_header_template = '" . $Htemplate . "',
				rubric_teaser_template = '" . $Ttemplate . "',
				rubric_admin_teaser_template = '" . $Atemplate . "'
			WHERE Id = '" . $rubric_id . "'
		");

		// Очищаем кэш шаблона документов рубрики
		$AVE_DB->Query("
			DELETE
			FROM " . PREFIX . "_rubric_template_cache
			WHERE rub_id = '" . $rubric_id . "'
		");

		if ($sql === false) {
			$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL_ERR');
			$header = $AVE_Template->get_config_vars('RUBRIK_ERROR');
			$theme = 'error';
		} else {
			$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL');
			$header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS');
			$theme = 'accept';
			reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_TEMPL_RUB') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')');
		}

		$sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents WHERE rubric_id = ".$rubric_id);

		while ($row = $sql->FetchRow())
		{
			$AVE_DB->clearcache('doc_'.$row->Id);
			$AVE_DB->clearcompile('doc_'.$row->Id);
		}

		if (isAjax()) {
			echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
			exit;
		} else {
			$AVE_Template->assign('message', $message);
			header('Location:index.php?do=rubs&cp=' . SESSION);
			exit;
		}

	}

	/**
	 * Управление правами доступа к документам рубрик
	 *
	 * @param int $rubric_id идентификатор рубрики
	 */
	function rubricPermissionSave($rubric_id = 0)
	{
		global $AVE_DB, $AVE_Template;

		if (check_permission_acp('rubric_perms') && is_numeric($rubric_id) && $rubric_id > 0)
		{
			foreach ($_POST['user_group'] as $key => $user_group_id)
			{
				$exist = $AVE_DB->Query("
					SELECT 1
					FROM " . PREFIX . "_rubric_permissions
					WHERE user_group_id = '" . $user_group_id . "'
					AND rubric_id = '" . $rubric_id . "'
					LIMIT 1
				")->NumRows();

				$rubric_permission = @implode('|', $_POST['perm'][$key]);
				if ($exist)
				{
					$AVE_DB->Query("
						UPDATE " . PREFIX . "_rubric_permissions
						SET rubric_permission = '" . $rubric_permission . "'
						WHERE user_group_id = '" . $user_group_id . "'
						AND rubric_id = '" . $rubric_id . "'
					");
				}
				else
				{
					$AVE_DB->Query("
						INSERT " . PREFIX . "_rubric_permissions
						SET
							rubric_id = '" . $rubric_id . "',
							user_group_id = '" . $user_group_id . "',
							rubric_permission = '" . $rubric_permission . "'
					");
				}
			}
				$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_PERMS');
				$header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS');
				$theme = 'accept';
				reportLog($AVE_Template->get_config_vars('RUBRIK_REPORT_PERMISION') . ' (' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ') (Id:' . $rubric_id . ')');

			if (isAjax()) {
				echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
				exit;
			} else {
				header('Location:index.php?do=rubs&action=edit&Id=' . $rubric_id . '&cp=' . SESSION);
				exit;
			}
		}
	}

	/**
	 * Получить наименование и URL-префикс Рубрики по идентификатору
	 *
	 * @param int $rubric_id идентификатор Рубрики
	 * @return object наименование Рубрики
	 */
	function rubricNameByIdGet($rubric_id = 0)
	{
		global $AVE_DB;

		static $rubrics = array();

		if (!isset($rubrics[$rubric_id]))
		{
			$rubrics[$rubric_id] = $AVE_DB->Query("
				SELECT
					rubric_title,
					rubric_alias,
					rubric_description
				FROM " . PREFIX . "_rubrics
				WHERE Id = '" . $rubric_id . "'
				LIMIT 1
			")->FetchRow();
		}

		return $rubrics[$rubric_id];
	}

	/**
	 * Формирование прав доступа Групп пользователей на все Рубрики
	 *
	 */
	function rubricPermissionFetch()
	{
		global $AVE_DB, $AVE_Document, $AVE_Template;

		$items = array();

		$sql = $AVE_DB->Query("
			SELECT
				Id,
				rubric_title,
				rubric_docs_active
			FROM
				" . PREFIX . "_rubrics
			ORDER
				BY rubric_position
		");

		while ($row = $sql->FetchRow())
		{
			$AVE_Document->documentPermissionFetch($row->Id);

			if (defined('UGROUP') && UGROUP == 1) $row->Show = 1;
			elseif (isset($_SESSION[$row->Id . '_editown']) && $_SESSION[$row->Id . '_editown'] == 1) $row->Show = 1;
			elseif (isset($_SESSION[$row->Id . '_editall']) && $_SESSION[$row->Id . '_editall'] == 1) $row->Show = 1;
			elseif (isset($_SESSION[$row->Id . '_new'])     && $_SESSION[$row->Id . '_new']     == 1) $row->Show = 1;
			elseif (isset($_SESSION[$row->Id . '_newnow'])  && $_SESSION[$row->Id . '_newnow']  == 1) $row->Show = 1;
			elseif (isset($_SESSION[$row->Id . '_alles'])   && $_SESSION[$row->Id . '_alles']   == 1) $row->Show = 1;

			array_push($items, $row);
		}

		$AVE_Template->assign('rubrics', $items);
	}

	/**
	 * Получить
	 */
	function rubricAliasAdd()
	{
		global $AVE_DB, $AVE_Template;

			$sql = $AVE_DB->Query("
				SELECT
					a.rubric_title,
					b.rubric_field_title,
					b.rubric_field_alias
				FROM
					" . PREFIX . "_rubrics AS a
				JOIN
					 " . PREFIX . "_rubric_fields AS b
				WHERE
					a.Id = '" . $_REQUEST['rubric_id'] . "'
				AND
					b.Id = '" . $_REQUEST['field_id'] . "'
			")->FetchAssocArray();

		$AVE_Template->assign($sql);
		$AVE_Template->assign('content', $AVE_Template->fetch('rubs/alias.tpl'));
	}

	function rubricAliasCheck($rubric_id, $field_id, $value)
	{

	global $AVE_DB, $AVE_Template;

	$errors = array();

		if(!intval($rubric_id)>0){
			$errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_RUBID');
		}

		if(!intval($field_id)>0) {
			$errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_FIELDID');
		};

		if(!preg_match('/^[A-Za-z][[:word:]]{0,19}$/', $value)) {
			$errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_MATCH');
		};

		//Проверяем есть такой алиас уже
		$res = $AVE_DB->Query("
			SELECT COUNT(*)
			FROM
				" . PREFIX . "_rubric_fields
			WHERE
				Id <> " . intval($field_id) . "
				AND rubric_id = " . intval($rubric_id) . "
				AND rubric_field_alias = '" . addslashes($value) . "'
			")->GetCell();

		if($res>0){
			$errors[] = $AVE_Template->get_config_vars('RUBRIK_ALIAS_MATCH');
		};

		if (empty($errors))
		{
			$AVE_DB->Query("
				UPDATE " . PREFIX . "_rubric_fields
				SET
					rubric_field_alias = '" . addslashes($value) . "'
				WHERE
					Id = '" . intval($field_id) . "'
				AND rubric_id = '" . intval($rubric_id) . "'
			");
			$AVE_Template->assign('success', true);
		}
		else
		{
			$AVE_Template->assign('errors', $errors);
		}

		$sql = $AVE_DB->Query("
				SELECT
					a.rubric_title,
					b.rubric_field_title,
					b.rubric_field_alias
				FROM " . PREFIX . "_rubrics AS a
				JOIN
					 " . PREFIX . "_rubric_fields AS b
				WHERE a.Id = '" . $_REQUEST['rubric_id'] . "'
				AND b.Id = '" . $_REQUEST['field_id'] . "'
			")->FetchAssocArray();

		$AVE_Template->assign($sql);
		$AVE_Template->assign('content', $AVE_Template->fetch('rubs/alias.tpl'));
 	}

	function rubricFieldTemplate() {
		global $AVE_DB, $AVE_Template;

		$field = $AVE_DB->Query("
				SELECT
					a.rubric_title,
					b.rubric_field_default,
					b.rubric_field_title,
					b.rubric_field_template,
					b.rubric_field_template_request,
					b.rubric_field_description
				FROM " . PREFIX . "_rubrics AS a
				JOIN
					 " . PREFIX . "_rubric_fields AS b
				WHERE a.Id = '" . $_REQUEST['rubric_id'] . "'
				AND b.Id = '" . $_REQUEST['field_id'] . "'
			")->FetchAssocArray();

		$AVE_Template->assign($field);
		$AVE_Template->assign('content', $AVE_Template->fetch('rubs/field_template.tpl'));
	}

	function rubricFieldTemplateSave($id, $rubric_id) {
		global $AVE_DB, $AVE_Template;

		$sql = $AVE_DB->Query("
			UPDATE " . PREFIX . "_rubric_fields
			SET
				rubric_field_default          = '" . $_POST['rubric_field_default'] . "',
				rubric_field_template         = '" . $_POST['rubric_field_template'] . "',
				rubric_field_template_request = '" . $_POST['rubric_field_template_request'] . "',
				rubric_field_description      = '" . $_POST['rubric_field_description'] . "'
			WHERE
				Id = '" . $id . "'
		");

		if ($sql->_result === false) {
			$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_FLDTPL_ERR');
			$header = $AVE_Template->get_config_vars('RUBRIK_ERROR');
			$theme = 'error';

			if (isAjax() && !$_REQUEST['save']) {
				echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
				exit;
			} else {
				$this->rubricFieldTemplate();
				exit;
			}

		}else{

			$AVE_DB->clearcache('rub_'.$rubric_id);

			$sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_documents");

			while ($row = $sql->FetchRow())
			{
				$AVE_DB->clearcache('doc_'.$row->Id);
				$AVE_DB->clearcompile('doc_'.$row->Id);
				$AVE_DB->clearcacherequest('doc_'.$row->Id);
			}

			// Очищаем кэш шаблона документов рубрики
			$AVE_DB->Query("
				DELETE
				FROM " . PREFIX . "_rubric_template_cache
				WHERE rub_id = '" . $rubric_id . "'
			");

			$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_FLDTPL');
			$header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS');
			$theme = 'accept';

			if (isAjax()) {
				echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
				exit;
			}
		}

	}

	function rubricFieldChange($field_id, $rubric_id)
	{
		global $AVE_DB, $AVE_Template;

		$sql = $AVE_DB->Query("
			SELECT
				*
			FROM
				" . PREFIX . "_rubric_fields
			WHERE
				rubric_id = '" . $rubric_id . "'
			AND
				Id = " . $field_id . "
		")->FetchAssocArray();

		$AVE_Template->assign('rf', $sql);
		$AVE_Template->assign('fields', get_field_type());
		$AVE_Template->assign('content', $AVE_Template->fetch('rubs/change.tpl'));
	}

	function rubricFieldChangeSave($field_id, $rubric_id)
	{
		global $AVE_DB, $AVE_Template;

		$AVE_DB->Query("
			UPDATE " . PREFIX . "_rubric_fields
			SET
				rubric_field_type         = '" . trim($_POST['rubric_field_type']) . "'
			WHERE
				Id = '" . $field_id . "'
			AND
				rubric_id = '" . $rubric_id . "'
		");

		$sql = $AVE_DB->Query("
			SELECT
				*
			FROM
				" . PREFIX . "_rubric_fields
			WHERE
				rubric_id = '" . $rubric_id . "'
			AND
				Id = " . $field_id . "
		")->FetchAssocArray();

		$AVE_Template->assign('rf', $sql);
		$AVE_Template->assign('fields', get_field_type());
		$AVE_Template->assign('content', $AVE_Template->fetch('rubs/change.tpl'));
	}


	function rubricFieldsGroups($rubric_id)
	{
		global $AVE_DB, $AVE_Template;

		$sql = $AVE_DB->Query("
			SELECT
				*
			FROM
				" . PREFIX . "_rubric_fields_group
			WHERE
				rubric_id = '" . $rubric_id . "'
			ORDER BY
				group_position
		");

		$groups = array();

		while($row = $sql->FetchRow())
		{
			array_push($groups, $row);
		}

		$AVE_Template->assign('rubric', $this->rubricNameByIdGet($rubric_id));
		$AVE_Template->assign('groups', $groups);
		$AVE_Template->assign('content', $AVE_Template->fetch('rubs/fields_groups.tpl'));
	}

	/**
	 * Сортировка групп полей рубрики
	 *
	 * @param array $sorted	последовательность id полей
	 */
	function rubricFieldsGroupsSort()
	{
		global $AVE_DB, $AVE_Template;

		foreach ($_REQUEST['sort'] as $position => $group_id)
		{
			$position++;
			$AVE_DB->Query("
				UPDATE
					" . PREFIX . "_rubric_fields_group
				SET
					group_position = '" . (int)$position . "'
				WHERE
					Id = '" . (int)$group_id . "'
			");
		}

		if (isAjax())
		{
			$message = $AVE_Template->get_config_vars('RUBRIK_SORTED');
			$header = $AVE_Template->get_config_vars('RUBRIK_FILDS_SUCCESS');
			$theme = 'accept';

			echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
		}
	}


	function rubricNewGroupFields($rubric_id)
	{
		global $AVE_DB;

		$position = $AVE_DB->Query("
			SELECT
				MAX(group_position)
			FROM
				" . PREFIX . "_rubric_fields_group
			WHERE
				rubric_id = '" . $rubric_id . "'
		")->GetCell();

		$position++;

		$AVE_DB->Query("
			INSERT
				" . PREFIX . "_rubric_fields_group
			SET
				rubric_id = '" . $rubric_id . "',
				group_position = '" . $position . "',
				group_title= '" . $_REQUEST['group_title'] . "'
		");

		header('Location:index.php?do=rubs&action=fieldsgroups&Id=' . $rubric_id . '&cp=' . SESSION);
		exit;
	}


	function rubricEditGroupFields($rubric_id)
	{
		global $AVE_DB;

		foreach($_REQUEST['group_title'] as $k => $v)
		{
			$AVE_DB->Query("
				UPDATE
					" . PREFIX . "_rubric_fields_group
				SET
					group_title= '" . $v . "'
				WHERE
					Id = '" . $k . "'
			");
		}

		header('Location:index.php?do=rubs&action=fieldsgroups&Id=' . $rubric_id . '&cp=' . SESSION);
		exit;
	}

	function rubricDelGroupFields($Id, $rubric_id)
	{
		global $AVE_DB;

		$AVE_DB->Query("
			DELETE FROM
				" . PREFIX . "_rubric_fields_group
			WHERE
				Id = '" . $Id . "'
		");

		$AVE_DB->Query("
			UPDATE
				" . PREFIX . "_rubric_fields
			SET
				rubric_field_group = '0'
			WHERE
				rubric_field_group = '" . $Id . "'
			AND
				rubric_id = '" . $rubric_id . "'
		");

		header('Location:index.php?do=rubs&action=fieldsgroups&Id=' . $rubric_id . '&cp=' . SESSION);
		exit;
	}


	function rubricFieldGroupChange($field_id, $rubric_id)
	{

		global $AVE_DB, $AVE_Template;

		$sql = $AVE_DB->Query("
			SELECT
				*
			FROM
				" . PREFIX . "_rubric_fields
			WHERE
				rubric_id = '" . $rubric_id . "'
			AND
				Id = " . $field_id . "
		")->FetchAssocArray();

		$AVE_Template->assign('rf', $sql);
		$AVE_Template->assign('groups', $this->get_rubric_fields_group($rubric_id));
		$AVE_Template->assign('content', $AVE_Template->fetch('rubs/groups.tpl'));
	}

	function rubricFieldGroupChangeSave($field_id, $rubric_id)
	{
		global $AVE_DB, $AVE_Template;

		$AVE_DB->Query("
			UPDATE " . PREFIX . "_rubric_fields
			SET
				rubric_field_group         = '" . trim($_POST['rubric_field_group']) . "'
			WHERE
				Id = '" . $field_id . "'
			AND
				rubric_id = '" . $rubric_id . "'
		");

		$sql = $AVE_DB->Query("
			SELECT
				*
			FROM
				" . PREFIX . "_rubric_fields
			WHERE
				rubric_id = '" . $rubric_id . "'
			AND
				Id = " . $field_id . "
		")->FetchAssocArray();

		$AVE_Template->assign('rf', $sql);
		$AVE_Template->assign('groups', $this->get_rubric_fields_group($rubric_id));
		$AVE_Template->assign('content', $AVE_Template->fetch('rubs/groups.tpl'));
	}

	// Список дополнительных шаблон для данной рубрики
	function tmplsList()
	{
		global $AVE_DB, $AVE_Template;

		$templates = array();

		$num = $AVE_DB->Query("
			SELECT
				COUNT(*)
			FROM
				" . PREFIX . "_rubric_templates
			WHERE
				rubric_id = '" . $_REQUEST['Id'] . "'
		")->GetCell();

		$page_limit = $this->_limit;

		$pages = ceil($num / $page_limit);

		$set_start = get_current_page() * $page_limit - $page_limit;

		if ($num > $page_limit)
		{
			$page_nav = " <a class=\"pnav\" href=\"index.php?do=rubs&action=tmpls&page={s}&cp=" . SESSION . "\">{t}</a> ";
			$page_nav = get_pagination($pages, 'page', $page_nav);
			$AVE_Template->assign('page_nav', $page_nav);
		}

		$sql = $AVE_DB->Query("
			SELECT
				rub.*,
				rubrics.rubric_title,
				COUNT(doc.Id) AS doc_count
			FROM
				" . PREFIX . "_rubric_templates AS rub
			LEFT JOIN
				" . PREFIX . "_rubrics AS rubrics
					ON rubrics.Id = rub.rubric_id
			LEFT JOIN
				" . PREFIX . "_documents AS doc
					ON (doc.rubric_id = rub.rubric_id AND doc.rubric_tmpl_id = rub.id)
			WHERE
				rub.rubric_id = '" . (int)$_REQUEST['Id'] . "'
			GROUP
				BY rub.id
			ORDER
				BY rub.id
			LIMIT
				" . $set_start . "," . $page_limit
		);

		while ($row = $sql->FetchRow())
		{
			$row->author_id = get_username_by_id($row->author_id);
			array_push($templates, $row);
		}

		$rubric = $this->rubricNameByIdGet((int)$_REQUEST['Id']);

		$AVE_Template->assign('rubric', $rubric);
		$AVE_Template->assign('templates', $templates);
	}

	/**
	 * Вывод шаблона рубрики
	 *
	 * @param int $show
	 * @param int $extern
	 */
	function tmplsEdit()
	{
		global $AVE_DB, $AVE_Template;

		$tmpls_id = (isset($_REQUEST['id']) && is_numeric($_REQUEST['id'])) ? $_REQUEST['id'] : 0;
		$rubric_id = (int)$_REQUEST['rubric_id'];

		if ($tmpls_id)
		{
			$template = $AVE_DB->Query("
				SELECT
					title,
					template
				FROM
					" . PREFIX . "_rubric_templates
				WHERE
					id = '" . $tmpls_id . "'
			")
			->FetchRow();
		}

		if ($_REQUEST['action'] == 'tmpls_from')
		{
			$template = $AVE_DB->Query("
				SELECT
					rubric_title as title,
					rubric_template as template
				FROM
					" . PREFIX . "_rubrics
				WHERE
					Id = '" . $rubric_id . "'
			")
			->FetchRow();
		}

		if ($_REQUEST['action'] == 'tmpls_copy')
		{
			$template = $AVE_DB->Query("
				SELECT
					title,
					template
				FROM
					" . PREFIX . "_rubric_templates
				WHERE
					id = '" . $_REQUEST['tmpls_id'] . "'
			")
			->FetchRow();
		}

		// Поля
		$sql = $AVE_DB->Query("
			SELECT
				a.*, b.group_title, b.group_description, b.group_position
			FROM
				" . PREFIX . "_rubric_fields AS a
			LEFT JOIN
				" . PREFIX . "_rubric_fields_group AS b
				ON a.rubric_field_group = b.Id
			WHERE
				a.rubric_id = '" . $rubric_id . "'
			ORDER BY
				b.group_position ASC, a.rubric_field_position ASC
		");

		$fields_list = array();
		$drop_down_fields = array();

		while ($row = $sql->FetchRow())
		{
			$group_id = ($row->rubric_field_group) ? $row->rubric_field_group : 0;

			if ($row->rubric_field_type == 'drop_down' || $row->rubric_field_type == 'drop_down_key')
				array_push($drop_down_fields, $row->Id);

			$fields_list[$group_id]['group_position'] = ($row->group_position) ? $row->group_position : 100;
			$fields_list[$group_id]['group_title'] = $row->group_title;
			$fields_list[$group_id]['group_description'] = $row->group_description;
			$fields_list[$group_id]['fields'][$row->Id]['Id'] = $row->Id;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_id'] = $row->rubric_id;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_group'] = $row->rubric_field_group;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_alias'] = $row->rubric_field_alias;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_title'] = $row->rubric_field_title;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_type'] = $row->rubric_field_type;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_numeric'] = $row->rubric_field_numeric;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_default'] = $row->rubric_field_default;
			$fields_list[$group_id]['fields'][$row->Id]['rubric_field_search'] = $row->rubric_field_search;
		}

		$fields_list = msort($fields_list, 'group_position');

		$AVE_Template->assign('groups_count', count($fields_list));
		$AVE_Template->assign('fields_list', $fields_list);

		$AVE_Template->assign('field_array', get_field_type());

		$rubric = $this->rubricNameByIdGet($rubric_id);

		$AVE_Template->assign('rubric', $rubric);

		$AVE_Template->assign('template', $template);

		$AVE_Template->assign('formaction', 'index.php?do=rubs&action=tmpls_edit&sub=save&id=' . $tmpls_id . '&rubric_id=' . $_REQUEST['rubric_id'] . '&cp=' . SESSION);
		$AVE_Template->assign('content', $AVE_Template->fetch('rubs/tmpls_form.tpl'));
	}


	/**
	 * Редактирование шаблона рубрики
	 *
	 * @param string $data
	 */
	function tmplsSave($template = '', $title = '')
	{
		global $AVE_DB, $AVE_Template;

		$tmpls_id = (int)$_REQUEST['id'];
		$rubric_id = (int)$_REQUEST['rubric_id'];

		if ($tmpls_id)
		{
			$sql = $AVE_DB->Query("
				UPDATE
					" . PREFIX . "_rubric_templates
				SET
					title = '" . $title . "',
					template = '" . $template . "'
				WHERE
					id = '" . $tmpls_id . "'
			");
		}
		else
		{
			$sql = $AVE_DB->Query("
				INSERT INTO
					" . PREFIX . "_rubric_templates
				SET
					title = '" . $title . "',
					template = '" . $template . "',
					rubric_id = '" . $rubric_id . "',
					author_id = '" . UID . "',
					created = '" . time() . "'
			");

			$tmpls_id = $AVE_DB->InsertId();
		}

		// Очищаем кэш шаблона документов рубрики
		$AVE_DB->Query("
			DELETE
			FROM
				" . PREFIX . "_rubric_template_cache
			WHERE
				rub_id = '" . $rubric_id . "'
			AND
				rub_tmpl_id = '" . $tmpls_id . "'
		");

		if ($sql === false)
		{
			$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL_ERR');
			$header = $AVE_Template->get_config_vars('RUBRIK_ERROR');
			$theme = 'error';
		}
		else
		{
			$message = $AVE_Template->get_config_vars('RUBRIC_SAVED_TPL');
			$header = $AVE_Template->get_config_vars('RUBRIC_SUCCESS');
			$theme = 'accept';
			reportLog($AVE_Template->get_config_vars('RUBRIC_TEMPL_REPORT') . ' ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title)) . ' (Id шаблона:' . $tmpls_id . ')');
		}

		$sql = $AVE_DB->Query("
			SELECT
				Id
			FROM
				" . PREFIX . "_documents
			WHERE
				rubric_id = ".$rubric_id."
			AND
				rubric_tmpl_id = " . $tmpls_id
		);

		while ($row = $sql->FetchRow())
		{
			$AVE_DB->clearcache('doc_'.$row->Id);
			$AVE_DB->clearcompile('doc_'.$row->Id);
		}

		if (isAjax())
		{
			echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
			exit;
		}
		else
		{
			$AVE_Template->assign('message', $message);
			header('Location:index.php?do=rubs&action=tmpls&Id='.$rubric_id.'&cp=' . SESSION);
			exit;
		}
	}

	function tmplsDelete()
	{
		global $AVE_DB, $AVE_Template;

		$rubric_id = (int)$_REQUEST['rubric_id'];
		$tmpls_id = (int)$_REQUEST['tmpls_id'];

		$rubric_not_empty = $AVE_DB->Query("
			SELECT 1
				FROM " . PREFIX . "_documents
			WHERE
				rubric_id = '" . $rubric_id . "'
			AND
				rubric_tmpl_id = '" . $tmpls_id . "'
			LIMIT 1
		")->GetCell();

		if (! $rubric_not_empty)
		{
			$AVE_DB->Query("
				DELETE
				FROM
					" . PREFIX . "_rubric_templates
				WHERE
					id = '" . $tmpls_id . "'
				AND
					rubric_id = '" . $rubric_id . "'
			");

			// Очищаем кэш шаблона документов рубрики
			$AVE_DB->Query("
				DELETE
				FROM
					" . PREFIX . "_rubric_template_cache
				WHERE
					rub_id = '" . $rubric_id . "'
				AND
					rub_tmpl_id = '" . $tmpls_id . "'
			");

			// Сохраняем системное сообщение в журнал
			reportLog($AVE_Template->get_config_vars('RUBRIC_TMPLS_LOG_DEL') . ' - ' . stripslashes(htmlspecialchars($this->rubricNameByIdGet($rubric_id)->rubric_title, ENT_QUOTES)) . ' (Id шаблона: '.$rubric_id.')');
		}

		header('Location:index.php?do=rubs&action=tmpls&Id='.$rubric_id.'&cp=' . SESSION);
		exit;
	}
}
?>