Файл: CMS/core/admin/journal.php
Строк: 518
<?php
if (!defined('CMS')) { die('Access Denied!'); }
function restatement() {
global $db;
$db->query("UPDATE ?_journal_category SET `cats_count` = (SELECT COUNT(`journal_id`) FROM ?_journal_posts WHERE ?_journal_category.`cats_id` = ?_journal_posts.`journal_cats_id` AND ?_journal_posts.`journal_moders` = '0');");
$db->query("UPDATE ?_journal_posts SET `journal_comments` = (SELECT COUNT(*) FROM ?_comments WHERE ?_journal_posts.`journal_id` = ?_comments.`comm_post` AND `comm_type` = 'journal');");
return true;
}
if (is_admin()) {
if (!empty($_POST['add_cat'])) {
if (is_admin(array(101))) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$name = !empty($_POST['name']) ? check($_POST['name']) : '';
if (cms_strlen($name) >= 3 && cms_strlen($name) < 101) {
$maxorder = (int) $db->selectCell("SELECT IFNULL(MAX(`cats_order`),0)+1 FROM ?_journal_category;");
$db->query("INSERT INTO ?_journal_category (`cats_order`, `cats_name`) VALUES (?, ?);", $maxorder, $name);
del_vars('journal_categories');
$inSes->addMessage('Новый раздел успешно добавлен!', 'ok');
redirect('?m=journal&' . RND);
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое название раздела!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Добавлять разделы могут только суперадмины!');
}
if (!empty($_GET['restatement'])) {
if (is_admin(array(101))) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
restatement();
$inSes->addMessage('Все данные успешно пересчитаны!', 'ok');
redirect('?m=journal&' . RND);
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Пересчитывать сообщения могут только суперадмины!');
}
if (!empty($_REQUEST['del_post'])) {
$del = intar($_REQUEST['del_post']);
$del = is_array($del) ? $del : array($del);
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (!empty($_POST['moders'])) {
$del = implode(',', $del);
$db->query("UPDATE ?_journal_posts SET `journal_moders` = '0' WHERE `journal_id` IN (" . $del . ");");
restatement();
del_vars('journal_categories');
$inSes->addMessage('Выбранные статьи успешно опубликованы!', 'ok');
redirect('?m=moders&' . RND);
}
else {
$del = implode(',', $del);
$db->query("DELETE FROM ?_comments WHERE `comm_post` IN (" . $del . ") AND `comm_type` = 'journal';");
$deljournals = $db->query("DELETE FROM ?_journal_posts WHERE `journal_id` IN (" . $del . ");");
restatement();
del_vars('journal_categories');
$inSes->addMessage('Выбранные статьи успешно удалены!', 'ok');
redirect('?m=journals&' . RND);
}
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
switch ($mod):
default:
if (!empty($_GET['up'])) { // Перемещение на одну позицию вверх
$up = num($_GET['up']);
$row = $db->selectRow("SELECT * FROM ?_journal_category WHERE `cats_id` = ?", $up);
if (!empty($row)) {
$rows = $db->selectRow("SELECT * FROM ?_journal_category WHERE `cats_order` < ?
ORDER BY `cats_order` DESC LIMIT 1", $row['cats_order']);
if (!empty($rows)) {
$db->query("UPDATE ?_journal_category SET `cats_order` = ? WHERE `cats_id` = ?", $rows['cats_order'], $up);
$db->query("UPDATE ?_journal_category SET `cats_order` = ? WHERE `cats_id` = ?", $row['cats_order'], $rows['cats_id']);
}
else $inSes->addMessage('Выше некуда!', 'info');
unset($up,$row,$rows);
}
}
if (!empty($_GET['down'])) { // Перемещение на одну позицию вниз
$down = num($_GET['down']);
$row = $db->selectRow("SELECT * FROM ?_journal_category WHERE `cats_id` = ?", $down);
if (!empty($row)) {
$rows = $db->selectRow("SELECT * FROM ?_journal_category WHERE `cats_order` > ?
ORDER BY `cats_order` ASC LIMIT 1", $row['cats_order']);
if (!empty($rows)) {
$db->query("UPDATE ?_journal_category SET `cats_order` = ? WHERE `cats_id` = ?", $rows['cats_order'], $down);
$db->query("UPDATE ?_journal_category SET `cats_order` = ? WHERE `cats_id` = ?", $row['cats_order'], $rows['cats_id']);
}
else $inSes->addMessage('Ниже некуда!', 'info');
unset($down,$row,$rows);
}
}
show_header('Управление журналом');
$rows = $db->select("SELECT * FROM ?_journal_category ORDER BY `cats_order` ASC;");
if (!empty($rows) && count($rows) > 0) {
foreach($rows as $row) {
echo '<div class="b">';
if (is_admin(array(101))) {
echo '<div class="right">';
echo '<a href="?m=journal_edit_cat&c=' . $row['cats_id'] . '">Ред.</a> | ';
echo '<a href="?m=journal_del_cat&c=' . $row['cats_id'] . '">Уд.</a> | ';
echo '<a href="?m=journal&up=' . $row['cats_id'] . '">Вверх</a> | ';
echo '<a href="?m=journal&down=' . $row['cats_id'] . '">Вниз</a></div>';
}
echo $row['cats_order'] . '. <a href="?m=journals&c=' . $row['cats_id'] . '&' . RND . '">' . $row['cats_name'] . '</a> ';
echo '(' . num2name($row['cats_count'],array('статей','статьи','статья')) . ')<br />';
if (!empty($row['cats_text'])) echo bb_code($row['cats_text']) . '<br />';
echo '</div>';
}
}
else {
show_error('Разделы журнала еще не созданы!');
}
if (is_admin(array(101))) {
if ($config['journal_moder'] == 1) {
$count = (int) $db->selectCell("SELECT COUNT(`journal_id`) FROM ?_journal_posts WHERE `journal_moders` = '1';");
$moder_link = ' | <a href="?m=moders_journal">На модерации</a> (' . $count . ')';
}
else $moder_link = '';
echo '<div class="b form">';
echo '<form action="?m=journal&rnd=' . $_SESSION['token'] . '" method="post">';
echo '<b>Заголовок:</b><br />';
echo '<input type="text" name="name" maxlength="50" />';
echo '<input type="submit" name="add_cat" class="btns" value="Создать раздел" /></form></div>';
echo '<div class="b">' . icon('mail.png');
echo ' <a href="?m=journal&restatement=1&rnd=' . $_SESSION['token'] . '">Пересчитать</a> |';
echo ' <a href="?m=set_journal&' . RND . '">Настройки</a> |';
echo ' <a href="/journal/' . gen_uri('index', '', RND) . '">Обзор</a>';
echo $moder_link . '<br /></div>';
}
else {
if ($config['journal_moder'] == 1) {
$count = (int) $db->selectCell("SELECT COUNT(`journal_id`) FROM ?_journal_posts WHERE `journal_moders` = '1';");
echo '<div class="b"><a href="?m=moders_journal">На модерации</a> (' . $count . ')<br /></div>';
}
}
break;
case 'journal_edit_cat':
if (is_admin(array(101))) {
$journals = $db->selectRow("SELECT * FROM ?_journal_category WHERE `cats_id` = ? LIMIT 1;", num($_REQUEST['c']));
if (!empty($journals)) {
if (!empty($_POST['cancel'])) {
redirect('?m=journal&' . RND);
}
if (!empty($_POST['submit'])) {
$name = !empty($_POST['name']) ? check($_POST['name']) : '';
$text = !empty($_POST['text']) ? check($_POST['text']) : '';
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (cms_strlen($name) >= 3 && cms_strlen($name) < 101) {
if (cms_strlen($text) < 555) {
$db->query("UPDATE ?_journal_category SET `cats_name` = ?, `cats_text` = ?
WHERE `cats_id` = ?;", $name, $text, $journals['cats_id']);
$inSes->addMessage('Раздел успешно отредактирован!', 'ok');
redirect('?m=journal&' . RND);
} else {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
}
} else {
$inSes->addMessage('Ошибка! Слишком длинное или короткое название раздела!');
}
} else {
$inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
}
show_header('Редактирование раздела');
$form = new cmsForm('?m=journal_edit_cat&rnd=' . $_SESSION['token'], 'post');
$form->addText('Заголовок (max 100):', 'name', $journals['cats_name']);
$form->addTextarea('Описание (max 255):', 'text', $journals['cats_text']);
$form->addHidden('c', $journals['cats_id']);
echo $form->Submit(array('Изменить','Отмена'), array('submit','cancel'));
unset($form);
}
else {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
redirect('?m=journal&' . RND);
}
}
else {
$inSes->addMessage('Ошибка! Изменять разделы могут только суперадмины!');
redirect('?m=journal&' . RND);
}
break;
case 'journal_del_cat':
if (is_admin(array(101))) {
$journals = $db->selectRow("SELECT * FROM ?_journal_category WHERE `cats_id` = ? LIMIT 1;", num($_REQUEST['c']));
if (!empty($journals)) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$db->query("DELETE FROM ?_comments WHERE `comm_type` = 'journal' AND `comm_cats` = ?;", num($journals['cats_id']));
$db->query("DELETE FROM ?_journal_posts WHERE `journal_cats_id` = ?;", num($journals['cats_id']));
$db->query("DELETE FROM ?_journal_category WHERE `cats_id` = ?;", num($journals['cats_id']));
$db->query("OPTIMIZE TABLE ?_comments, ?_journal_posts, ?_journal_category;");
$inSes->addMessage('Раздел успешно удален!', 'ok');
redirect('?m=journal&' . RND);
}
show_header('Удаление раздела ' . $journals['cats_name']);
echo '<div class="b">';
echo 'Вы уверены что хотите удалить раздел <b>' . $journals['cats_name'] . '</b> журнала?<br /><br />';
echo icon('error.gif', 'icons');
echo '<a href="?m=journal_del_cat&c=' . num($journals['cats_id']) . '&rnd=' . $_SESSION['token'] . '">Да, уверен!</a></b>';
echo '<br /></div>';
echo '<div class="b">' . icon('return.png') . ' <a href="?m=journal&' . RND . '">Вернуться</a><br /></div>';
}
else {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
redirect('?m=journal&' . RND);
}
}
else {
$inSes->addMessage('Ошибка! Изменять разделы могут только суперадмины!');
redirect('?m=journal&' . RND);
}
break;
case 'journals':
$cid = !empty($_REQUEST['c']) ? num($_REQUEST['c']) : 0;
# Кеширование категорий журнала
$categories = get_vars('journal_categories');
if (!$categories) {
$db->query("UPDATE ?_journal_category SET `cats_count` = (SELECT COUNT(`journal_id`) FROM ?_journal_posts
WHERE ?_journal_category.`cats_id` = ?_journal_posts.`journal_cats_id` AND ?_journal_posts.`journal_moders` = '0');");
$categories = array();
$cats = $db->select("SELECT * FROM ?_journal_category ORDER BY `cats_order` ASC;");
if (!empty($cats) && count($cats) > 0) {
foreach( $cats as $cat ) {
$categories[$cat['cats_id']] = array($cat['cats_name'], $cat['cats_text'], $cat['cats_count']);
}
set_vars('journal_categories',$categories);
}
}
if (!array_key_exists($cid,$categories)) {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
redirect('?m=journal&' . RND);
}
list($name, $desc, $count) = $categories[$cid];
show_header('Управление журналом - ' . $name);
$onpage = !empty($config['journal_num']) ? num($config['journal_num']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = $db->selectPage($total, "SELECT * FROM ?_journal_posts
WHERE `journal_cats_id` = ?
ORDER BY `journal_time` DESC
LIMIT ?d, ?d", $cid, $from, $onpage );
if ($total > 0) {
echo '<form action="?m=journals&cid=' . $cid . '&rnd=' . $_SESSION['token'] . '" method="post" name="journals">';
foreach($rows as $row) {
$icon = ($row['journal_moders'] == 1) ? 'cancel.png' : 'vcard_edit.png';
echo '<div class="b">' . icon($icon, 'icons');
echo '<b><a href="/journal/' . gen_uri('post', $row['journal_id']) . '">' . $row['journal_title'] . '</a></b><br />';
echo 'Автор: ' . users_anketa($row['journal_user']) . ' (' . get_date($row['journal_time']) . ')<br />';
echo 'Просмотров: ' . num($row['journal_read']) . '<br />';
echo '<a href="/journal/' . gen_uri('comments', $row['journal_id']) . '">Комментарии</a> (' . num($row['journal_comments']) . ')<br />';
echo '<input type="checkbox" name="del_post[]" value="' . num($row['journal_id']) . '" /> ';
echo '<a href="?m=journal_edit&id=' . num($row['journal_id']) . '&' . RND . '">Редактировать</a>';
echo '</div>';
}
echo '<div class="b">';
echo '<input type="checkbox" name="master_box" title="Отметить всё" onclick="javascript:ckeck_uncheck_all()">';
echo '<input type="submit" class="btns" value="Удалить выбранное" /></div></form>';
echo show_pages('?m=journals');
echo '<div class="b">Всего статей: <b>' . $count . '</b><br /></div>';
}
else {
show_error('В данном разделе еще нет статей!');
}
echo '<div class="b">' . icon('return.png') . ' <a href="?m=journal&' . RND . '">Категории</a> | ';
echo '<a href="/journal/' . gen_uri('add', '', RND) . '">Добавить</a><br /></div>';
echo <<<JSCRIPT
<script language='JavaScript' type="text/javascript">
<!--
function ckeck_uncheck_all() {
var frm = document.journals;
if(frm.master_box.checked == true){ frm.master_box.checked = false; }
else{ frm.master_box.checked = true; }
for (var i=0;i<frm.elements.length;i++) {
var elmnt = frm.elements[i];
if (elmnt.type=='checkbox') {
if(frm.master_box.checked == true){ elmnt.checked=false; }
else{ elmnt.checked=true; }
}
}
//if(frm.master_box.checked == true){ frm.master_box.checked = false; }
//else{ frm.master_box.checked = true; }
}
-->
</script>
JSCRIPT;
break;
case 'journal_edit':
$journals = $db->selectRow("SELECT * FROM ?_journal_posts WHERE `journal_id` = ? LIMIT 1;", $id);
if (!empty($journals)) {
if (!empty($_POST['cancel'])) {
redirect('?m=journals&c=' . num($journals['journal_cats_id']) . '&' . RND);
}
if (!empty($_POST['submit'])) {
$cid = !empty($_POST['cid']) ? num($_POST['cid']) : 0;
$title = !empty($_POST['title']) ? check($_POST['title']) : '';
$text = !empty($_POST['text']) ? check($_POST['text']) : '';
$user = !empty($_POST['user']) ? check($_POST['user']) : '';
$moders = !empty($_POST['moders']) ? 1 : 0;
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (cms_strlen($title) >= 3 && cms_strlen($title) <= 101) {
if (cms_strlen($text) >= $config['journal_min_text'] && cms_strlen($text) <= $config['journal_max_text']) {
if (preg_match('|^[a-z0-9-]+$|i', $user)) {
if ($cid > 0) {
$text = smiles($text);
$db->query("UPDATE ?_journal_posts SET `journal_cats_id` = ?, `journal_title` = ?, `journal_text` = ?, `journal_user` = ?, `journal_moders` = ? WHERE `journal_id` = ?;", $cid, $title, $text, $user, $moders, $id);
restatement();
del_vars('journal_categories');
$inSes->addMessage('Статья успешно отредактирована!', 'ok');
redirect('?m=journals&c=' . num($journals['journal_cats_id']) . '&' . RND);
}
else $inSes->addMessage('Ошибка! Неверно указана категория!');
}
else $inSes->addMessage('Ошибка! Недопустимые символы в логине! Разрешены только знаки латинского алфавита и цифры!');
}
else $inSes->addMessage('Ошибка! Слишком длинный или короткий текст статьи (от ' . $config['journal_min_text'] . ' до ' . $config['journal_max_text'] . ' символов)!');
}
else $inSes->addMessage('Ошибка! Слишком длинный или короткий заголовок (от 5 до 100 символов)!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Редактирование ' . $journals['journal_title']);
if (!empty($_GET['code'])) include( MODULES_PATH . 'code.inc.php' );
else if (!empty($_GET['smiles'])) include( MODULES_PATH . 'smiles.inc.php' );
$cats = array();
$cats[0] = 'Список разделов';
$categories = get_vars('journal_categories');
foreach($categories as $key => $val) $cats[$key] = $val[0];
$journals['journal_text'] = nosmiles($journals['journal_text']);
$journals['journal_text'] = str_ireplace(array('<br>','<br/>','<br />'), "n", $journals['journal_text']);
$form = new cmsForm('?m=journal_edit&id=' . $id . '&rnd='.$_SESSION['token'], 'post', ' name="form" id="editnews"');
$form->addSelect('Категория:', 'cid', $journals['journal_cats_id'], $cats);
$form->addText('Заголовок:', 'title', $journals['journal_title'], ' maxlength="100" style="width:98%;"');
$form->addCode('Текст: <small>[<a href="?m=journal_edit&id=' . $id . '&smiles=1">Смайлы</a>] ');
$form->addCode('[<a href="?m=journal_edit&id=' . $id . '&code=1">ББ-коды</a>]</small>');
$form->addCode(' [<a href="#" onclick="document.editnews.markItUp.rows += 10;">+</a>]');
$form->addCode(' [<a href="#" onclick="document.editnews.markItUp.rows -= 10;">-</a>]');
$form->addTextarea('', 'text', $journals['journal_text'], ' id="markItUp" style="width:98%;"');
$form->addText('Автор:', 'user', $journals['journal_user'], ' maxlength="100"');
$form->addCheckBox(array('', ' - Для взрослых'), 'xxx', $journals['journal_is_xxx']);
$form->addCheckBox(array('', ' - На модерации'), 'moders', $journals['journal_moders']);
echo $form->Submit(array('Изменить','Отмена'), array('submit','cancel'));
unset($form);
}
else {
$inSes->addMessage('Ошибка! Данной статьи не существует!');
redirect('?m=journals&' . RND);
}
break;
case 'moders_journal':
show_header('Управление журналом - На модерации');
$onpage = !empty($config['journal_num']) ? num($config['journal_num']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = $db->selectPage($total, "SELECT * FROM ?_journal_posts
WHERE `journal_moders` = '1'
ORDER BY `journal_time` DESC
LIMIT ?d, ?d", $from, $onpage );
if ($total > 0) {
echo '<form action="?m=moders&rnd=' . $_SESSION['token'] . '" method="post" name="journals">';
foreach( $rows as $row ) {
$icon = ($row['journal_moders'] == 1) ? 'cancel.png' : 'vcard_edit.png';
echo '<div class="b">' . icon($icon, 'icons');
echo '<b><a href="/journal/' . gen_uri('post', $row['journal_id']) . '">' . $row['journal_title'] . '</a></b><br />';
echo 'Автор: ' . users_anketa($row['journal_user']) . ' (' . get_date($row['journal_time']) . ')<br />';
echo 'Просмотров: ' . num($row['journal_read']) . '<br />';
echo '<a href="/journal/' . gen_uri('comments', $row['journal_id']) . '">Комментарии</a> (' . num($row['journal_comments']) . ')<br />';
echo '<input type="checkbox" name="del_post[]" value="' . num($row['journal_id']) . '" /> ';
echo '<a href="?m=journal_edit&id=' . num($row['journal_id']) . '&' . RND . '">Редактировать</a><br />';
echo '</div>';
}
echo '<div class="b">';
echo '<input type="checkbox" name="master_box" title="Отметить всё" onclick="javascript:ckeck_uncheck_all()">';
echo '<input type="submit" class="btns" value="Удалить выбранное" /> ';
echo '<input type="submit" class="btns" name="moders" value="Опубликовать" /></div></form>';
echo show_pages('?m=moders');
echo '<div class="b">Всего статей на модерации: <b>' . $total . '</b><br /></div>';
}
else {
show_error('Публикаций на модерации пока еще нет!');
}
echo '<div class="b">' . icon('return.png') . ' <a href="?m=journal&' . RND . '">Категории</a><br /></div>';
echo <<<JSCRIPT
<script language='JavaScript' type="text/javascript">
<!--
function ckeck_uncheck_all() {
var frm = document.journals;
if(frm.master_box.checked == true){ frm.master_box.checked = false; }
else{ frm.master_box.checked = true; }
for (var i=0;i<frm.elements.length;i++) {
var elmnt = frm.elements[i];
if (elmnt.type=='checkbox') {
if(frm.master_box.checked == true){ elmnt.checked=false; }
else{ elmnt.checked=true; }
}
}
}
-->
</script>
JSCRIPT;
break;
endswitch;
echo '<div class="b">' . icon('return.png') . ' <a href="?' . RND . '">В админку</a><br /></div>';
show_footer();
}
else {
redirect('/?' . RND);
}
?>