ave-cms/class/class.request.php
2022-08-03 17:58:25 +03:00

974 lines
39 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
*/
class AVE_Request
{
/**
* Количество Запросов на странице
*
* @public int
*/
public $_limit = 25;
/**
* Метод, предназначенный для получения и вывода списка Запросов
*
* @param boolean $pagination признак формирования постраничного списка
*
* @return array
*/
function _requestListGet($pagination = true)
{
global $AVE_DB, $AVE_Template;
$limit = '';
// Если используется постраничная навигация
if ($pagination)
{
// Определяем лимит записей на страницу и начало диапазона выборки
$limit = $this->_limit;
$start = get_current_page() * $limit - $limit;
// Получаем общее количество запросов
$num = $AVE_DB->Query("SELECT COUNT(*) FROM " . PREFIX . "_request")->GetCell();
// Если количество больше, чем установленный лимит, тогда формируем постраничную навигацию
if ($num > $limit)
{
$page_nav = "<li><a href=\"index.php?do=request&page={s}&amp;cp=" . SESSION . "\">{t}</a></li>";
$page_nav = get_pagination(ceil($num / $limit), 'page', $page_nav);
$AVE_Template->assign('page_nav', $page_nav);
}
$limit = $pagination ? "LIMIT " . $start . "," . $limit : '';
}
// Выполняем запрос к БД на получение списка запросов с учетом лимита вывода на страницу (если необходимо)
$items = array();
$sql = $AVE_DB->Query("
SELECT
*
FROM
" . PREFIX . "_request
ORDER BY Id ASC
" . $limit . "
");
// Формируем массив из полученных данных
while ($row = $sql->FetchRow())
{
$row->request_author = get_username_by_id($row->request_author_id);
array_push($items, $row);
}
// Возвращаем массив
return $items;
}
/**
* Получить наименование и описание Запроса по идентификатору
*
* @param int $request_id идентификатор Запроса
* @return object наименование Запроса
*/
function get_request_by_id($request_id = 0)
{
global $AVE_DB;
static $requests = array();
if (! isset($requests[$request_id]))
{
$requests[$request_id] = $AVE_DB->Query("
SELECT
rubric_id,
request_title,
request_description
FROM
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
LIMIT 1
")->FetchRow();
}
return $requests[$request_id];
}
/**
* Проверка алиаса тега на валидность и уникальность
*
* @param string $alias
* @param int $id
*
* @return bool|string
*/
function requestValidate ($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 . "_request
WHERE
request_alias = '" . $alias . "'
AND
Id != '" . $id . "'
")->GetCell();
}
/**
* Метод, предназначенный для формирования списка Запросов
*
*/
function requestListFetch()
{
global $AVE_Template;
$AVE_Template->assign('conditions', $this->_requestListGet(false));
}
/**
* Метод, предназначенный для отображения списка Запросов
*
*/
function requestListShow()
{
global $AVE_Template;
$AVE_Template->assign('rid', 0);
// Получаем список запросов
$AVE_Template->assign('items', $this->_requestListGet());
// Передаем в шаблон и отображаем страницу со списком
$AVE_Template->assign('content', $AVE_Template->fetch('request/list.tpl'));
}
/**
* Метод, предназначенный для создания нового Запроса
*
*/
function requestNew()
{
global $AVE_DB, $AVE_Template;
// Определяем действие пользователя
switch ($_REQUEST['sub'])
{
// Действие не определено
case '':
$AVE_Template->assign('rid', 0);
// Отображаем пустую форму для создания нового запроса
$AVE_Template->assign('formaction', 'index.php?do=request&action=new&sub=save&cp=' . SESSION);
$AVE_Template->assign('content', $AVE_Template->fetch('request/form.tpl'));
break;
// Нажата кнопка Сохранить запрос
case 'save':
$save = true;
$errors = array();
$row = new stdClass();
$row->request_template_item = stripslashes(pretty_chars($_REQUEST['request_template_item']));
$row->request_template_main = stripslashes(pretty_chars($_REQUEST['request_template_main']));
$row->request_title = stripslashes($_REQUEST['request_title']);
$row->rubric_id = stripslashes($_REQUEST['rubric_id']);
$row->request_items_per_page = stripslashes($_REQUEST['request_items_per_page']);
$row->request_order_by = stripslashes($_REQUEST['request_order_by']);
$row->request_order_by_nat = stripslashes($_REQUEST['request_order_by_nat']);
$row->request_asc_desc = stripslashes($_REQUEST['request_asc_desc']);
$row->request_description = stripslashes($_REQUEST['request_description']);
$row->request_show_pagination = (isset($_REQUEST['request_show_pagination']) ? (int)($_REQUEST['request_show_pagination']) : 0);
$row->request_pagination = (isset($_REQUEST['request_pagination']) ? (int)($_REQUEST['request_pagination']) : 1);
$row->request_only_owner = (isset($_REQUEST['request_only_owner']) ? (int)($_REQUEST['request_only_owner']) : 0);
$row->request_cache_lifetime = (int)($_REQUEST['request_cache_lifetime']);
$row->request_lang = (isset($_REQUEST['request_lang']) ? (int)$_REQUEST['request_lang'] : 0);
$row->request_cache_elements = (isset($_REQUEST['request_cache_elements']) ? (int)$_REQUEST['request_cache_elements'] : 0);
$row->request_external = (isset($_REQUEST['request_external']) ? (int)$_REQUEST['request_external'] : 0);
$row->request_ajax = (isset($_REQUEST['request_ajax']) ? (int)$_REQUEST['request_ajax'] : 0);
$row->request_show_sql = (isset($_REQUEST['request_show_sql']) ? (int)$_REQUEST['request_show_sql'] : 0);
if (empty($_REQUEST['rubric_id']))
{
$save = false;
$message = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_RUBRIC');
$errors[] = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_RUBRIC');
}
if (empty($_REQUEST['request_title']))
{
$save = false;
$errors[] = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_TITLE');
}
if (empty($_REQUEST['request_template_main']))
{
$save = false;
$errors[] = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_TEXT');
}
$check_code_template_item = strtolower($_REQUEST['request_template_item']);
$check_code_template_main = strtolower($_REQUEST['request_template_main']);
if ((is_php_code($check_code_template_item) || is_php_code($check_code_template_main)) && !check_permission('request_php'))
{
$save = false;
$message = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_PHP');
$errors[] = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_PHP');
reportLog($AVE_Template->get_config_vars('REQUEST_REPORT_ERR_PHP_N') . ' (' . stripslashes(htmlspecialchars($_REQUEST['request_title'], ENT_QUOTES)) . ')');
}
if ($save === false)
{
$AVE_Template->assign('row', $row);
$AVE_Template->assign('errors', $errors);
$AVE_Template->assign('formaction', 'index.php?do=request&action=new&sub=save&cp=' . SESSION);
$AVE_Template->assign('content', $AVE_Template->fetch('request/form.tpl'));
}
else
{
$sql = "
INSERT " . PREFIX . "_request
SET
rubric_id = '" . (int)$_REQUEST['rubric_id'] . "',
request_alias = '" . (isset($_REQUEST['request_alias']) ? stripslashes($_REQUEST['request_alias']) : '') . "',
request_title = '" . (isset($_REQUEST['request_title']) ? stripslashes($_REQUEST['request_title']) : '') . "',
request_items_per_page = '" . (isset($_REQUEST['request_items_per_page']) ? stripslashes($_REQUEST['request_items_per_page']) : 0) . "',
request_template_item = '" . (isset($_REQUEST['request_template_item']) ? stripslashes(pretty_chars($_REQUEST['request_template_item'])) : '') . "',
request_template_main = '" . (isset($_REQUEST['request_template_main']) ? stripslashes(pretty_chars($_REQUEST['request_template_main'])) : '') . "',
request_order_by = '" . (isset($_REQUEST['request_order_by']) ? stripslashes($_REQUEST['request_order_by']) : '') . "',
request_order_by_nat = '" . (isset($_REQUEST['request_order_by_nat']) ? (int)trim($_REQUEST['request_order_by_nat']) : 0) . "',
request_description = '" . (isset($_REQUEST['request_description']) ? stripslashes($_REQUEST['request_description']) : '') . "',
request_author_id = '" . (int)$_SESSION['user_id'] . "',
request_created = '" . time() . "',
request_asc_desc = '" . (isset($_REQUEST['request_asc_desc']) ? stripslashes($_REQUEST['request_asc_desc']) : 'DESC') . "',
request_show_pagination = '" . (isset($_REQUEST['request_show_pagination']) ? (int)$_REQUEST['request_show_pagination'] : 0) . "',
request_pagination = '" . (isset($_REQUEST['request_pagination']) ? (int)$_REQUEST['request_pagination'] : 1) . "',
request_use_query = '" . (isset($_REQUEST['request_use_query']) ? (int)$_REQUEST['request_use_query'] : 0) . "',
request_count_items = '" . (isset($_REQUEST['request_count_items']) ? (int)$_REQUEST['request_count_items'] : 0) . "',
request_hide_current = '" . (isset($_REQUEST['request_hide_current']) ? (int)($_REQUEST['request_hide_current']) : 0) . "',
request_only_owner = '" . (isset($_REQUEST['request_only_owner']) ? (int)($_REQUEST['request_only_owner']) : 0) . "',
request_cache_lifetime = '" . (isset($_REQUEST['request_cache_lifetime']) ? (int)($_REQUEST['request_cache_lifetime']) : 0) . "',
request_lang = '" . (isset($_REQUEST['request_lang']) ? (int)$_REQUEST['request_lang'] : 0). "',
request_cache_elements = '" . (isset($_REQUEST['request_cache_elements']) ? (int)$_REQUEST['request_cache_elements'] : 0). "',
request_show_statistic = '" . (isset($_REQUEST['request_show_statistic']) ? (int)$_REQUEST['request_show_statistic'] : 0). "',
request_external = '" . (isset($_REQUEST['request_external']) ? (int)$_REQUEST['request_external'] : 0). "',
request_ajax = '" . (isset($_REQUEST['request_ajax']) ? (int)$_REQUEST['request_ajax'] : 0). "',
request_show_sql = '" . (isset($_REQUEST['request_show_sql']) ? (int)$_REQUEST['request_show_sql'] : 0). "',
request_changed = '" . time() . "',
request_changed_elements = '" . time() . "'
";
// Выполняем запрос к БД и сохраняем введенную пользователем информацию
$AVE_DB->Query($sql);
// Получаем id последней записи
$iid = $AVE_DB->InsertId();
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('REQUEST_ADD_NEW_SUC') . ' (' . stripslashes(htmlspecialchars($_REQUEST['request_title'], ENT_QUOTES)) . ') (' . $iid . ')');
// Если в запросе пришел параметр на продолжение редактирования запроса
if ($_REQUEST['reedit'] == 1)
{
// Выполняем переход на страницу с редактированием запроса
header('Location:index.php?do=request&action=edit&Id=' . $iid . '&rubric_id=' . $_REQUEST['rubric_id'] . '&cp=' . SESSION);
}
else
{
// В противном случае выполняем переход к списку запросов
if (!$_REQUEST['next_edit'])
header('Location:index.php?do=request&cp=' . SESSION);
else
header('Location:index.php?do=request&action=edit&Id=' . $iid . '&rubric_id='.$_REQUEST['rubric_id'].'&cp=' . SESSION);
}
exit;
}
}
}
/**
* Метод, предназначенный для редактирования Запроса
*
* @param int $request_id идентификатор запроса
*/
function requestEdit($request_id)
{
global $AVE_DB, $AVE_Template;
// Определяем действие пользователя
switch ($_REQUEST['sub'])
{
// Если действие не определено
case '':
// Выполняем запрос к БД и получаем всю информацию о запросе
$sql = $AVE_DB->Query("
SELECT *
FROM
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
OR
request_alias = '" . $request_id . "'
");
if ($sql->_result->num_rows == 0)
{
header('Location:index.php?do=request&cp=' . SESSION);
exit;
}
$row = $sql->FetchRow();
// Получаем постраничную навигацию
$sql = $AVE_DB->Query("
SELECT
id,
pagination_name
FROM
" . PREFIX . "_paginations
");
$paginations = array();
while ($pages = $sql->FetchRow())
array_push($paginations, $pages);
// Передаем данные в шаблон и отображаем страницу с редактированием запроса
if (! isset($_REQUEST['rubric_id']))
$_REQUEST['rubric_id'] = $row->rubric_id;
$AVE_Template->assign('row', $row);
$AVE_Template->assign('rid', $row->Id);
$AVE_Template->assign('paginations', $paginations);
$AVE_Template->assign('formaction', 'index.php?do=request&action=edit&sub=save&Id=' . $row->Id . '&cp=' . SESSION);
$AVE_Template->assign('content', $AVE_Template->fetch('request/form.tpl'));
break;
// Пользователь нажал кнопку Сохранить изменения
case 'save':
$sql = $AVE_DB->Query("
SELECT *
FROM
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
");
if ($sql->_result->num_rows == 0)
{
header('Location:index.php?do=request&cp=' . SESSION);
exit;
}
$save = true;
$errors = array();
$row = new stdClass();
$row->request_template_item = (isset($_REQUEST['request_template_item']) ? stripslashes(pretty_chars($_REQUEST['request_template_item'])) : '');
$row->request_template_main = (isset($_REQUEST['request_template_main']) ? stripslashes(pretty_chars($_REQUEST['request_template_main'])) : '');
$row->request_title = (isset($_REQUEST['request_title']) ? stripslashes($_REQUEST['request_title']) : '');
$row->rubric_id = (isset($_REQUEST['rubric_id']) ? stripslashes($_REQUEST['rubric_id']) : 0);
$row->request_items_per_page = (isset($_REQUEST['request_items_per_page']) ? stripslashes($_REQUEST['request_items_per_page']) : 0);
$row->request_order_by = (isset($_REQUEST['request_order_by']) ? stripslashes($_REQUEST['request_order_by']) : '');
$row->request_order_by_nat = (isset($_REQUEST['request_order_by_nat']) ? (int)trim($_REQUEST['request_order_by_nat']) : 0);
$row->request_asc_desc = (isset($_REQUEST['request_asc_desc']) ? stripslashes($_REQUEST['request_asc_desc']) : 'DESC');
$row->request_description = (isset($_REQUEST['request_description']) ? stripslashes($_REQUEST['request_description']) : '');
$row->request_show_pagination = (isset($_REQUEST['request_show_pagination']) ? $_REQUEST['request_show_pagination'] : 0);
$row->request_pagination = (isset($_REQUEST['request_pagination']) ? (int)($_REQUEST['request_pagination']) : 1);
$row->request_use_query = (isset($_REQUEST['request_use_query']) ? $_REQUEST['request_use_query'] : 0);
$row->request_count_items = (isset($_REQUEST['request_count_items']) ? $_REQUEST['request_count_items'] : 0);
$row->request_only_owner = (isset($_REQUEST['request_only_owner']) ? (int)($_REQUEST['request_only_owner']) : 0);
$row->request_cache_lifetime = (isset($_REQUEST['request_cache_lifetime']) ? (int)($_REQUEST['request_cache_lifetime']) : 0);
$row->request_lang = (isset($_REQUEST['request_lang']) ? (int)$_REQUEST['request_lang'] : 0);
$row->request_cache_elements = (isset($_REQUEST['request_cache_elements']) ? (int)$_REQUEST['request_cache_elements'] : 0);
$row->request_show_statistic = (isset($_REQUEST['request_show_statistic']) ? (int)$_REQUEST['request_show_statistic'] : 0);
$row->request_external = (isset($_REQUEST['request_external']) ? (int)$_REQUEST['request_external'] : 0);
$row->request_ajax = (isset($_REQUEST['request_ajax']) ? (int)$_REQUEST['request_ajax'] : 0);
$row->request_show_sql = (isset($_REQUEST['request_show_sql']) ? (int)$_REQUEST['request_show_sql'] : 0);
$message = '';
if (empty($_REQUEST['rubric_id']))
{
$save = false;
$message = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_RUBRIC');
$errors[] = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_RUBRIC');
}
if (empty($_REQUEST['request_title']))
{
$save = false;
$message = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_TITLE');
$errors[] = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_TITLE');
}
if (empty($_REQUEST['request_template_main']))
{
$save = false;
$message = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_TEXT');
$errors[] = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_TEXT');
}
$check_code_template_item = strtolower($_REQUEST['request_template_item']);
$check_code_template_main = strtolower($_REQUEST['request_template_main']);
if ((is_php_code($check_code_template_item) || is_php_code($check_code_template_main)) && !check_permission('request_php'))
{
$save = false;
$message = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_PHP');
$errors[] = $AVE_Template->get_config_vars('REQUEST_REPORT_ERR_PHP');
reportLog($AVE_Template->get_config_vars('REQUEST_REPORT_ERR_PHP_E') . ' (' . stripslashes(htmlspecialchars($_REQUEST['request_title'], ENT_QUOTES)) . ') (Id:' . $request_id . ')');
}
if ($save === false)
{
if (isAjax())
{
$header = $AVE_Template->get_config_vars('REQUEST_ERROR');
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => 'error'));
exit;
}
$AVE_Template->assign('row', $row);
$AVE_Template->assign('errors', $errors);
$AVE_Template->assign('formaction', 'index.php?do=request&action=edit&sub=save&Id=' . $request_id . '&cp=' . SESSION);
$AVE_Template->assign('content', $AVE_Template->fetch('request/form.tpl'));
}
else
{
// Выполняем запрос к БД и обновляем имеющиеся данные
$sql = "
UPDATE " . PREFIX . "_request
SET
rubric_id = '" . (int)$_REQUEST['rubric_id'] . "',
request_alias = '" . (isset($_REQUEST['request_alias']) ? $_REQUEST['request_alias'] : '') . "',
request_title = '" . (isset($_REQUEST['request_title']) ? $_REQUEST['request_title'] : '') . "',
request_items_per_page = '" . (isset($_REQUEST['request_items_per_page']) ? $_REQUEST['request_items_per_page'] : 0) . "',
request_template_item = '" . (isset($_REQUEST['request_template_item']) ? $_REQUEST['request_template_item'] : '') . "',
request_template_main = '" . (isset($_REQUEST['request_template_main']) ? $_REQUEST['request_template_main'] : '') . "',
request_order_by = '" . (isset($_REQUEST['request_order_by']) ? $_REQUEST['request_order_by'] : '') . "',
request_order_by_nat = '" . (isset($_REQUEST['request_order_by_nat']) ? (int)trim($_REQUEST['request_order_by_nat']) : 0) . "',
request_description = '" . (isset($_REQUEST['request_description']) ? $_REQUEST['request_description'] : '') . "',
request_asc_desc = '" . (isset($_REQUEST['request_asc_desc']) ? $_REQUEST['request_asc_desc'] : 'DESC') . "',
request_show_pagination = '" . (isset($_REQUEST['request_show_pagination']) ? (int)$_REQUEST['request_show_pagination'] : 0) . "',
request_pagination = '" . (isset($_REQUEST['request_pagination']) ? (int)$_REQUEST['request_pagination'] : 1) . "',
request_use_query = '" . (isset($_REQUEST['request_use_query']) ? (int)$_REQUEST['request_use_query'] : 0) . "',
request_count_items = '" . (isset($_REQUEST['request_count_items']) ? (int)$_REQUEST['request_count_items'] : 0) . "',
request_hide_current = '" . (isset($_REQUEST['request_hide_current']) ? (int)($_REQUEST['request_hide_current']) : 0) . "',
request_only_owner = '" . (isset($_REQUEST['request_only_owner']) ? (int)($_REQUEST['request_only_owner']) : 0) . "',
request_cache_lifetime = '" . (isset($_REQUEST['request_cache_lifetime']) ? (int)($_REQUEST['request_cache_lifetime']) : '-1') . "',
request_lang = '" . (isset($_REQUEST['request_lang']) ? (int)$_REQUEST['request_lang'] : 0). "',
request_cache_elements = '" . (isset($_REQUEST['request_cache_elements']) ? (int)$_REQUEST['request_cache_elements'] : 0). "',
request_show_statistic = '" . (isset($_REQUEST['request_show_statistic']) ? (int)$_REQUEST['request_show_statistic'] : 0). "',
request_external = '" . (isset($_REQUEST['request_external']) ? (int)$_REQUEST['request_external'] : 0). "',
request_ajax = '" . (isset($_REQUEST['request_ajax']) ? (int)$_REQUEST['request_ajax'] : 0). "',
request_show_sql = '" . (isset($_REQUEST['request_show_sql']) ? (int)$_REQUEST['request_show_sql'] : 0). "',
request_changed = '" . time() . "',
request_changed_elements = '" . time() . "'
WHERE
Id = '" . $request_id . "'
";
$AVE_DB->Query($sql);
$AVE_DB->clearRequest($request_id);
// ToDO Сделать проверку на сохранение
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('REQUEST_SAVE_CHA_SUC') . ' (' . stripslashes(htmlspecialchars($_REQUEST['request_title'], ENT_QUOTES)) . ') (Id:' . $request_id . ')');
// В противном случае выполняем переход к списку запросов
if (! isAjax())
{
header('Location:index.php?do=request&cp=' . SESSION);
exit;
}
else
{
$message = $AVE_Template->get_config_vars('REQUEST_TEMPLATE_SAVED');
$header = $AVE_Template->get_config_vars('REQUEST_SUCCESS');
$theme = 'accept';
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
exit;
}
}
break;
}
}
/**
* Метод, предназначенный для создания копии Запроса
*
* @param int $request_id идентификатор запроса
*/
function requestCopy($request_id)
{
global $AVE_DB, $AVE_Template;
// Выполняем запрос к БД на получение информации о копиреумом запросе
$sql = $AVE_DB->Query("
SELECT *
FROM
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
");
if ($sql->_result->num_rows == 0)
{
header('Location:index.php?do=request&cp=' . SESSION);
exit;
}
$row = $sql->FetchRow();
// Выполняем запрос к БД на добавление нового запроса на основании полученных ранее данных
$AVE_DB->Query("
INSERT " . PREFIX . "_request
SET
rubric_id = '" . (int)$row->rubric_id . "',
request_items_per_page = '" . $row->request_items_per_page . "',
request_title = '" . $_REQUEST['cname'] . "',
request_template_item = '" . addslashes($row->request_template_item) . "',
request_template_main = '" . addslashes($row->request_template_main) . "',
request_order_by = '" . addslashes($row->request_order_by) . "',
request_order_by_nat = '" . addslashes($row->request_order_by_nat) . "',
request_author_id = '" . (int)$_SESSION['user_id'] . "',
request_created = '" . time() . "',
request_description = '" . addslashes($row->request_description) . "',
request_asc_desc = '" . $row->request_asc_desc . "',
request_show_pagination = '" . $row->request_show_pagination . "',
request_use_query = '" . $row->request_use_query . "',
request_count_items = '" . $row->request_count_items . "',
request_hide_current = '" . $row->request_hide_current . "',
request_lang = '" . $row->request_lang . "',
request_cache_elements = '" . (isset($row->request_cache_elements) ? $row->request_cache_elements : 0) . "'
");
// Получаем id добавленной записи
$iid = $AVE_DB->InsertId();
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('REQUEST_COPY_SUC') . ' (' . stripslashes(htmlspecialchars($this->get_request_by_id($request_id)->request_title, ENT_QUOTES)) . ') ( Id:'.$iid.' )');
// Выполняем запрос к БД и получаем все условия запроса для копируемого запроса
$sql = $AVE_DB->Query("
SELECT *
FROM
" . PREFIX . "_request_conditions
WHERE
request_id = '" . $request_id . "'
");
// Обрабатываем полученные данные и
while ($row_cond = $sql->FetchRow())
{
// Выполняем запрос к БД на добавление условий для нового, скопированного запроса
$AVE_DB->Query("
INSERT
" . PREFIX . "_request_conditions
SET
request_id = '" . $iid . "',
condition_compare = '" . $row_cond->condition_compare . "',
condition_field_id = '" . $row_cond->condition_field_id . "',
condition_value = '" . $row_cond->condition_value . "',
condition_join = '" . $row_cond->condition_join . "'
");
}
// Выполянем переход к списку запросов
header('Location:index.php?do=request&cp=' . SESSION);
exit;
}
/**
* Метод, предназначенный для удаления запроса
*
* @param int $request_id идентификатор запроса
*/
function requestDelete($request_id)
{
global $AVE_DB, $AVE_Template;
$request_name = $this->get_request_by_id($request_id)->request_title;
// Выполняем запрос к БД на удаление общей информации о запросе
$AVE_DB->Query("
DELETE FROM
" . PREFIX . "_request
WHERE
Id = '" . $request_id . "'
");
// Выполняем запрос к БД на удаление условий запроса
$AVE_DB->Query("
DELETE FROM
" . PREFIX . "_request_conditions
WHERE
request_id = '" . $request_id . "'
");
$AVE_DB->clearRequest($request_id);
// Сохраняем системное сообщение в журнал
reportLog($AVE_Template->get_config_vars('REQUEST_DELETE_SUC') . ' (' . stripslashes(htmlspecialchars($request_name, ENT_QUOTES)) . ') ( Id:' . $request_id . ' )');
// Выполянем переход к списку запросов
header('Location:index.php?do=request&cp=' . SESSION);
exit;
}
/**
* Метод, предназначенный для редактирования условий Запроса
*
* @param int $request_id идентификатор запроса
*/
function requestConditionEdit($request_id)
{
global $AVE_DB, $AVE_Template;
// Определяем действие пользователя
switch ($_REQUEST['sub'])
{
// Если действие не определено
case '':
$fields = array();
// Выполняем запрос к БД и получаем список полей у той рубрики, к которой относится данный запрос
$sql = $AVE_DB->Query("
SELECT *
FROM
" . PREFIX . "_rubric_fields
WHERE
rubric_id = '" . $_REQUEST['rubric_id'] . "'
ORDER BY rubric_field_position ASC
");
// Обрабатываем полученные данные и формируем массив
while ($row = $sql->FetchRow())
array_push($fields, $row);
$conditions = array();
// Выполняем запрос к БД и получаем условия запроса
$sql = $AVE_DB->Query("
SELECT *
FROM
" . PREFIX . "_request_conditions
WHERE
request_id = '" . $request_id . "'
ORDER BY condition_position ASC
");
// Обрабатываем полученные данные и формируем массив
while ($row = $sql->FetchRow())
array_push($conditions, $row);
// Передаем данные в шаблон и отображаем страницу с редактированием условий
$AVE_Template->assign('request_title', $this->get_request_by_id($request_id)->request_title);
$AVE_Template->assign('fields', $fields);
$AVE_Template->assign('conditions', $conditions);
if (isAjax() && (isset($_REQUEST['ajax']) && $_REQUEST['ajax'] == 1))
$AVE_Template->assign('content', $AVE_Template->fetch('request/cond_list.tpl'));
else
$AVE_Template->assign('content', $AVE_Template->fetch('request/conditions.tpl'));
break;
case 'sort':
foreach ($_REQUEST['sort'] as $position => $cond_id)
{
$AVE_DB->Query("
UPDATE
" . PREFIX . "_request_conditions
SET
condition_position = '" . (int)$position . "'
WHERE
Id = '" . (int)$cond_id . "'
");
}
if (isAjax())
{
$message = $AVE_Template->get_config_vars('REQUEST_SORTED');
$header = $AVE_Template->get_config_vars('REQUEST_SUCCESS');
$theme = 'accept';
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
}
exit;
// Если пользователь нажал кнопку Сохранить изменения
case 'save':
// Если существует хотя бы одно условие, тогда
if (isset($_REQUEST['conditions']) && is_array($_POST['conditions']))
{
$condition_edited = false;
// Обрабатываем данные полей
foreach ($_REQUEST['conditions'] as $condition_id => $val)
{
// Выполняем запрос к БД на обновление информации об условиях
$AVE_DB->Query("
UPDATE
" . PREFIX . "_request_conditions
SET
request_id = '" . $request_id . "',
condition_compare = '" . $val['condition_compare'] . "',
condition_field_id = '" . $val['condition_field_id'] . "',
condition_value = '" . (! empty($val['condition_value']) ? $val['condition_value'] : '') . "',
condition_join = '" . $val['condition_join'] . "',
condition_status = '" . ((! empty($val['condition_value'])) ? (($val['condition_status'] == '1') ? '1' : '0') : ''). "'
WHERE
Id = '" . $condition_id . "'
");
$condition_edited = true;
}
// Если изменения были, сохраняем системное сообщение в журнал
if ($condition_edited)
{
reportLog('' . $AVE_Template->get_config_vars('REQUEST_COND_CHA_SUC') . ' (' . stripslashes(htmlspecialchars($this->get_request_by_id($request_id)->request_title, ENT_QUOTES)) . ') - ( Id: '.$request_id.' )');
$message = $AVE_Template->get_config_vars('REQUEST_COND_POST_OK');
$header = $AVE_Template->get_config_vars('REQUEST_SUCCESS');
$theme = 'accept';
}
else
{
$message = $AVE_Template->get_config_vars('REQUEST_COND_POST_ERR');
$header = $AVE_Template->get_config_vars('REQUEST_ERROR');
$theme = 'error';
}
}
else
{
$message = $AVE_Template->get_config_vars('REQUEST_COND_NO_POST');
$header = $AVE_Template->get_config_vars('REQUEST_ERROR');
$theme = 'error';
}
// Если некоторые из условий были помечены на удаление
if (isset($_POST['del']) && is_array($_POST['del']))
{
// Обрабатываем все поля помеченные на удаление
foreach ($_POST['del'] as $condition_id => $val)
{
// Выполняем запрос к БД на удаление условий
$AVE_DB->Query("
DELETE FROM
" . PREFIX . "_request_conditions
WHERE
Id = '" . $condition_id . "'
");
}
// Сохраняем системное сообщение в журнал
reportLog('' . $AVE_Template->get_config_vars('REQUEST_COND_DEL_SUC') . ' (' . stripslashes(htmlspecialchars($this->get_request_by_id($request_id)->request_title, ENT_QUOTES)) . ') - ( Id: '.$request_id.' )');
}
// Нет смысла каждый раз формировать SQL-запрос с условиями Запроса
// поэтому формируем SQL-запрос только при изменении условий
// require(BASE_DIR . '/functions/func.parserequest.php');
request_get_condition_sql_string($request_id, true);
$AVE_DB->Query("
UPDATE
" . PREFIX . "_request
SET
request_changed = '" . time() . "'
WHERE
Id = '" . $request_id . "'
");
$AVE_DB->clearRequest($request_id);
if (! isAjax())
{
// Выполняем обновление страницы
header('Location:index.php?do=request&action=conditions&rubric_id=' . $_REQUEST['rubric_id'] . '&Id=' . $request_id . '&cp=' . SESSION . ($_REQUEST['pop'] ? '&pop=1' : ''));
exit;
}
else
{
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
exit;
}
break;
// Если пользователь добавил новое условие
case 'new':
if ($_POST['new_value'] !== '')
{
// Выполняем запрос к БД на добавление нового условия
$sql = $AVE_DB->Query("
INSERT
" . PREFIX . "_request_conditions
SET
request_id = '" . $request_id . "',
condition_compare = '" . $_POST['new_operator'] . "',
condition_field_id = '" . $_POST['field_new'] . "',
condition_value = '" . $_POST['new_value'] . "',
condition_join = '" . $_POST['oper_new'] . "'
");
if ($sql->_result === false)
{
$message = $AVE_Template->get_config_vars('REQUEST_COND_NEW_ERR');
$header = $AVE_Template->get_config_vars('REQUEST_ERROR');
$theme = 'error';
}
else
{
// Сохраняем системное сообщение в журнал
reportLog('' . $AVE_Template->get_config_vars('REQUEST_COND_ADD_SUC') . ' (' . stripslashes(htmlspecialchars($this->get_request_by_id($request_id)->request_title, ENT_QUOTES)) . ') - ( Id: '.$request_id.' )');
}
}
else
{
$message = $AVE_Template->get_config_vars('REQUEST_COND_VALUE_ERR');
$header = $AVE_Template->get_config_vars('REQUEST_ERROR');
$theme = 'error';
}
// Нет смысла каждый раз формировать SQL-запрос с условиями Запроса
// поэтому формируем SQL-запрос только при изменении условий
// require(BASE_DIR . '/functions/func.parserequest.php');
request_get_condition_sql_string($request_id, true);
$AVE_DB->Query("
UPDATE
" . PREFIX . "_request
SET
request_changed = '" . time() . "'
WHERE
Id = '" . $request_id . "'
");
$AVE_DB->clearRequest($request_id);
if (! isAjax())
{
header('Location:index.php?do=request&action=conditions&rubric_id=' . $_REQUEST['rubric_id'] . '&Id=' . $request_id . '&cp=' . SESSION);
exit;
}
else
{
if (! $message)
{
$message = $AVE_Template->get_config_vars('REQUEST_COND_NEW_SUC');
$header = $AVE_Template->get_config_vars('REQUEST_SUCCESS');
$theme = 'accept';
}
echo json_encode(array('message' => $message, 'header' => $header, 'theme' => $theme));
exit;
}
break;
}
}
/**
* @param $field_id
* @param $cond_id
*/
function conditionFieldChange($field_id, $cond_id)
{
global $AVE_DB, $AVE_Template;
// Передаем данные в шаблон и отображаем страницу с редактированием условий
$AVE_Template->assign('field_id', $field_id);
$AVE_Template->assign('cond_id', $cond_id);
$AVE_Template->assign('content', $AVE_Template->fetch('request/change.tpl'));
}
/**
* @param $field_id
* @param $cond_id
*/
function conditionFieldChangeSave($field_id, $cond_id)
{
global $AVE_DB, $AVE_Template;
// ToDo
$sql = $AVE_DB->Query("
UPDATE
" . PREFIX . "_request_conditions
SET
condition_field_id = '" . $field_id . "'
WHERE
Id = '" . $cond_id . "'
");
request_get_condition_sql_string((int)$_REQUEST['req_id'], true);
$request_id = $AVE_DB->Query("
SELECT
request_id
FROM
" . PREFIX . "_request_conditions
WHERE
Id = '" . $cond_id . "'
")->GetCell();
$AVE_DB->Query("
UPDATE
" . PREFIX . "_request
SET
request_changed = '" . time() . "'
WHERE
Id = '" . $request_id . "'
");
$AVE_DB->clearRequest($request_id);
// Передаем данные в шаблон и отображаем страницу с редактированием условий
$AVE_Template->assign('field_id', $field_id);
$AVE_Template->assign('cond_id', $cond_id);
$AVE_Template->assign('content', $AVE_Template->fetch('request/change.tpl'));
}
}
?>