2023-03-11 12:04:29 +03:00
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
if (!defined('IN_AJAX')) die(basename(__FILE__));
|
|
|
|
|
|
2023-09-25 18:47:23 +03:00
|
|
|
|
global $userdata, $lang;
|
2023-03-11 12:04:29 +03:00
|
|
|
|
|
2023-10-06 10:51:41 +03:00
|
|
|
|
if (!IS_SUPER_ADMIN) $this->ajax_die($lang['ONLY_FOR_SUPER_ADMIN']);
|
2023-03-11 12:04:29 +03:00
|
|
|
|
|
|
|
|
|
array_deep($this->request, 'trim');
|
|
|
|
|
|
|
|
|
|
$mode = (string) $this->request['mode'];
|
|
|
|
|
$sql_error = false;
|
|
|
|
|
|
|
|
|
|
// установка / начальная валидация значений
|
|
|
|
|
switch ($mode)
|
|
|
|
|
{
|
|
|
|
|
case 'load':
|
|
|
|
|
case 'save':
|
2023-08-21 11:08:20 +03:00
|
|
|
|
case 'remove':
|
2023-03-11 12:04:29 +03:00
|
|
|
|
if (!$tpl_id = (int) $this->request['tpl_id'])
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die('Выбранный шаблон не найден, создайте новый (empty tpl_id)');
|
|
|
|
|
}
|
|
|
|
|
if (!$tpl_data = DB()->fetch_row("SELECT * FROM ". BB_TOPIC_TPL ." WHERE tpl_id = $tpl_id LIMIT 1"))
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die("Шаблон [id: $tpl_id] не найден в БД");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
switch ($mode)
|
|
|
|
|
{
|
|
|
|
|
case 'save':
|
|
|
|
|
case 'new':
|
|
|
|
|
if (!$tpl_name = htmlCHR(str_compact($this->request['tpl_name'])))
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die('не заполнено название шаблона');
|
|
|
|
|
}
|
|
|
|
|
$tpl_name = substr($tpl_name, 0, 60);
|
|
|
|
|
|
|
|
|
|
if (!$tpl_src_form = htmlCHR($this->request['tpl_src_form']))
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die('не заполнен скрипт формы шаблона');
|
|
|
|
|
}
|
|
|
|
|
if (!$tpl_src_title = htmlCHR($this->request['tpl_src_title']))
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die('не заполнен формат названия темы');
|
|
|
|
|
}
|
|
|
|
|
$tpl_src_title = str_compact($tpl_src_title);
|
|
|
|
|
|
|
|
|
|
if (!$tpl_src_msg = htmlCHR($this->request['tpl_src_msg']))
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die('не заполнен формат создания сообщения');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$tpl_comment = htmlCHR($this->request['tpl_comment']);
|
|
|
|
|
|
|
|
|
|
preg_match('#\d+#', (string) $this->request['tpl_rules'], $m);
|
|
|
|
|
$tpl_rules_post_id = isset($m[0]) ? (int) $m[0] : 0;
|
|
|
|
|
|
|
|
|
|
$sql_args = array(
|
|
|
|
|
'tpl_name' => (string) $tpl_name,
|
|
|
|
|
'tpl_src_form' => (string) $tpl_src_form,
|
|
|
|
|
'tpl_src_title' => (string) $tpl_src_title,
|
|
|
|
|
'tpl_src_msg' => (string) $tpl_src_msg,
|
|
|
|
|
'tpl_comment' => (string) $tpl_comment,
|
|
|
|
|
'tpl_rules_post_id' => (int) $tpl_rules_post_id,
|
|
|
|
|
'tpl_last_edit_tm' => (int) TIMENOW,
|
|
|
|
|
'tpl_last_edit_by' => (int) $userdata['user_id'],
|
|
|
|
|
);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
// выполнение
|
|
|
|
|
switch ($mode)
|
|
|
|
|
{
|
|
|
|
|
// загрузка шаблона
|
|
|
|
|
case 'load':
|
|
|
|
|
$this->response['val']['tpl-name-save'] = $tpl_data['tpl_name'];
|
|
|
|
|
$this->response['val']['tpl-src-form'] = $tpl_data['tpl_src_form'];
|
|
|
|
|
$this->response['val']['tpl-src-title'] = $tpl_data['tpl_src_title'];
|
|
|
|
|
$this->response['val']['tpl-src-msg'] = $tpl_data['tpl_src_msg'];
|
|
|
|
|
$this->response['val']['tpl-comment-save'] = $tpl_data['tpl_comment'];
|
|
|
|
|
$this->response['val']['tpl-rules-save'] = $tpl_data['tpl_rules_post_id'];
|
|
|
|
|
array_deep($this->response['val'], 'html_ent_decode');
|
|
|
|
|
|
|
|
|
|
$this->response['val']['tpl-id-save'] = $tpl_id;
|
|
|
|
|
$this->response['val']['tpl-last-edit-tst'] = $tpl_data['tpl_last_edit_tm'];
|
|
|
|
|
$this->response['html']['tpl-name-old-save'] = $tpl_data['tpl_name'];
|
|
|
|
|
$this->response['html']['tpl-last-edit-time'] = bb_date($tpl_data['tpl_last_edit_tm'], 'd-M-y H:i');
|
2024-01-10 07:11:22 +03:00
|
|
|
|
$this->response['html']['tpl-last-edit-by'] = profile_url(get_userdata(intval($tpl_data['tpl_last_edit_by'])));
|
2023-03-11 12:04:29 +03:00
|
|
|
|
|
|
|
|
|
$this->response['tpl_rules_href'] = POST_URL . $tpl_data['tpl_rules_post_id'] .'#'. $tpl_data['tpl_rules_post_id'];
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// включение / отключение шаблона в форуме
|
|
|
|
|
case 'assign':
|
|
|
|
|
if (!$tpl_id = (int) $this->request['tpl_id'])
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die('Выбранный шаблон не найден, создайте новый (empty tpl_id)');
|
|
|
|
|
}
|
|
|
|
|
if (!$forum_id = (int) $this->request['forum_id'])
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die('empty forum_id');
|
|
|
|
|
}
|
|
|
|
|
if (!forum_exists($forum_id))
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die("нет такого форума [id: $forum_id]");
|
|
|
|
|
}
|
|
|
|
|
// отключение
|
|
|
|
|
if ($tpl_id == -1)
|
|
|
|
|
{
|
|
|
|
|
$new_tpl_id = 0;
|
|
|
|
|
$this->response['msg'] = 'Шаблоны в этом форуме отключены';
|
|
|
|
|
}
|
|
|
|
|
// включение
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if (!$tpl_name = DB()->fetch_row("SELECT tpl_name FROM ". BB_TOPIC_TPL ." WHERE tpl_id = $tpl_id LIMIT 1", 'tpl_name'))
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die("Шаблон [id: $tpl_id] не найден в БД");
|
|
|
|
|
}
|
|
|
|
|
$new_tpl_id = $tpl_id;
|
|
|
|
|
$this->response['msg'] = "Включен шаблон $tpl_name";
|
|
|
|
|
}
|
|
|
|
|
DB()->query("UPDATE ". BB_FORUMS ." SET forum_tpl_id = $new_tpl_id WHERE forum_id = $forum_id LIMIT 1");
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// сохранение изменений
|
|
|
|
|
case 'save':
|
|
|
|
|
if ($tpl_data['tpl_last_edit_tm'] > $this->request['tpl_l_ed_tst'] && $tpl_data['tpl_last_edit_by'] != $userdata['user_id'])
|
|
|
|
|
{
|
|
|
|
|
$last_edit_by_username = get_username(intval($tpl_data['tpl_last_edit_by']));
|
|
|
|
|
$msg = "Изменения не были сохранены!\n\n";
|
2024-01-10 11:20:06 +03:00
|
|
|
|
$msg .= 'Шаблон был отредактирован: ' . html_entity_decode($last_edit_by_username) . ', ' . bb_date($tpl_data['tpl_last_edit_tm'], 'd-M-y H:i') . "\n\n";
|
2023-03-11 12:04:29 +03:00
|
|
|
|
$this->ajax_die($msg);
|
|
|
|
|
}
|
|
|
|
|
$sql = "UPDATE ". BB_TOPIC_TPL ." SET ". DB()->build_array('UPDATE', $sql_args) ." WHERE tpl_id = $tpl_id LIMIT 1";
|
|
|
|
|
if (!@DB()->query($sql))
|
|
|
|
|
{
|
|
|
|
|
$sql_error = DB()->sql_error();
|
|
|
|
|
}
|
|
|
|
|
$this->response['tpl_id'] = $tpl_id;
|
|
|
|
|
$this->response['tpl_name'] = $tpl_name;
|
|
|
|
|
$this->response['html']['tpl-last-edit-time'] = bb_date(TIMENOW, 'd-M-y H:i');
|
2024-01-28 08:54:31 +03:00
|
|
|
|
$this->response['html']['tpl-last-edit-by'] = profile_url(get_userdata($userdata['username'], true));
|
2023-03-11 12:04:29 +03:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
// создание нового шаблона
|
|
|
|
|
case 'new':
|
|
|
|
|
$sql = "INSERT INTO ". BB_TOPIC_TPL . DB()->build_array('INSERT', $sql_args);
|
|
|
|
|
if (!@DB()->query($sql))
|
|
|
|
|
{
|
|
|
|
|
$sql_error = DB()->sql_error();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
2023-08-21 11:08:20 +03:00
|
|
|
|
// удаление шаблона
|
|
|
|
|
case 'remove':
|
|
|
|
|
if (!$forum_id = (int) $this->request['forum_id'])
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die('empty forum_id');
|
|
|
|
|
}
|
|
|
|
|
if (!forum_exists($forum_id))
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die("нет такого форума [id: $forum_id]");
|
|
|
|
|
}
|
|
|
|
|
$sql = "DELETE FROM ". BB_TOPIC_TPL . " WHERE tpl_id = $tpl_id LIMIT 1";
|
|
|
|
|
if (!@DB()->query($sql))
|
|
|
|
|
{
|
|
|
|
|
$sql_error = DB()->sql_error();
|
|
|
|
|
}
|
2024-01-28 09:09:37 +03:00
|
|
|
|
$get_forum_tpl_id = DB()->fetch_row("SELECT forum_tpl_id FROM " . BB_FORUMS . " WHERE forum_id = " . $forum_id . " LIMIT 1");
|
|
|
|
|
if ($tpl_id == $get_forum_tpl_id['forum_tpl_id'])
|
|
|
|
|
{
|
|
|
|
|
DB()->query("UPDATE ". BB_FORUMS ." SET forum_tpl_id = 0 WHERE forum_id = $forum_id LIMIT 1");
|
|
|
|
|
}
|
2023-08-21 11:08:20 +03:00
|
|
|
|
$this->response['msg'] = "Шаблон {$tpl_data['tpl_name']} успешно удалён";
|
|
|
|
|
break;
|
|
|
|
|
|
2023-03-11 12:04:29 +03:00
|
|
|
|
// ошибочный $mode
|
|
|
|
|
default:
|
2023-06-27 22:05:33 +03:00
|
|
|
|
$this->ajax_die("invalid mode: $mode");
|
2023-03-11 12:04:29 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// возможный дубль названия шаблона
|
|
|
|
|
if ($sql_error)
|
|
|
|
|
{
|
|
|
|
|
if ($sql_error['code'] == 1062) // Duplicate entry
|
|
|
|
|
{
|
|
|
|
|
$this->ajax_die('Шаблон с таким названием уже существует, выберите другое название');
|
|
|
|
|
}
|
|
|
|
|
$this->ajax_die("db error {$sql_error['code']}: {$sql_error['message']}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// выход
|
|
|
|
|
$this->response['mode'] = $mode;
|
2023-08-21 11:08:20 +03:00
|
|
|
|
$this->response['timestamp'] = TIMENOW;
|