Файл: core/admin/blog.php
Строк: 312
<?php
if (!defined('CMS')) { die('Access Denied!'); }
function restatement() {
global $db;
$db->query("UPDATE ?_blog_category SET `cats_count` = (SELECT COUNT(`blog_id`) FROM ?_blog_posts WHERE ?_blog_category.`cats_id` = ?_blog_posts.`blog_cats_id` AND ?_blog_posts.`blog_moders` = '0');");
$db->query("UPDATE ?_blog_posts SET `blog_comments` = (SELECT COUNT(*) FROM ?_comments WHERE ?_blog_posts.`blog_id` = ?_comments.`comm_post` AND `comm_type` = 'blog');");
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 ?_blog_category;");
$db->query("INSERT INTO ?_blog_category (`cats_order`, `cats_name`) VALUES (?, ?);", $maxorder, $name);
del_vars('blog_categories');
$inSes->addMessage('Новый раздел успешно добавлен!', 'ok');
redirect('?m=blog&' . 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=blog&' . 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 ?_blog_posts SET `blog_moders` = '0' WHERE `blog_id` IN (" . $del . ");");
restatement();
del_vars('blog_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` = 'blog';");
$delblogs = $db->query("DELETE FROM ?_blog_posts WHERE `blog_id` IN (" . $del . ");");
restatement();
del_vars('blog_categories');
$inSes->addMessage('Выбранные статьи успешно удалены!', 'ok');
redirect('?m=blog&' . RND);
}
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
switch ($mod):
default:
if (!empty($_GET['up'])) { // Перемещение на одну позицию вверх
$up = num($_GET['up']);
$row = $db->selectRow("SELECT * FROM ?_blog_category WHERE `cats_id` = ?", $up);
if (!empty($row)) {
$rows = $db->selectRow("SELECT * FROM ?_blog_category WHERE `cats_order` < ?
ORDER BY `cats_order` DESC LIMIT 1", $row['cats_order']);
if (!empty($rows)) {
$db->query("UPDATE ?_blog_category SET `cats_order` = ? WHERE `cats_id` = ?", $rows['cats_order'], $up);
$db->query("UPDATE ?_blog_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 ?_blog_category WHERE `cats_id` = ?", $down);
if (!empty($row)) {
$rows = $db->selectRow("SELECT * FROM ?_blog_category WHERE `cats_order` > ?
ORDER BY `cats_order` ASC LIMIT 1", $row['cats_order']);
if (!empty($rows)) {
$db->query("UPDATE ?_blog_category SET `cats_order` = ? WHERE `cats_id` = ?", $rows['cats_order'], $down);
$db->query("UPDATE ?_blog_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 ?_blog_category ORDER BY `cats_order` ASC;");
if (!empty($rows) && count($rows) > 0) {
foreach($rows as $row) {
echo '<div class="bl">';
if (is_admin(array(101))) {
echo '<div class="fr small">';
echo '<a href="?m=blog_edit_cat&c=' . $row['cats_id'] . '">Ред.</a> | ';
echo '<a href="?m=blog_del_cat&c=' . $row['cats_id'] . '">Уд.</a> | ';
echo '<a href="?m=blog&up=' . $row['cats_id'] . '">Вверх</a> | ';
echo '<a href="?m=blog&down=' . $row['cats_id'] . '">Вниз</a></div>';
}
echo $row['cats_order'] . '. <a href="?m=blogs&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['blog_moder'] == 1) {
$count = (int) $db->selectCell("SELECT COUNT(`blog_id`) FROM ?_blog_posts WHERE `blog_moders` = '1';");
$moder_link = ' | <a href="?m=moders">На модерации</a> (' . $count . ')';
}
else $moder_link = '';
echo '<div class="bl">';
echo '<form action="?m=blog&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="bl">' . icon('mail.png');
echo ' <a href="?m=blog&restatement=1&rnd=' . $_SESSION['token'] . '">Пересчитать</a> |';
echo ' <a href="?m=set_blog&' . RND . '">Настройки</a> |';
echo ' <a href="/blog/' . gen_uri('index') . '">Обзор</a>';
echo $moder_link . '<br /></div>';
}
else {
if ($config['blog_moder'] == 1) {
$count = (int) $db->selectCell("SELECT COUNT(`blog_id`) FROM ?_blog_posts WHERE `blog_moders` = '1';");
echo '<div class="bl"><a href="?m=moders">На модерации</a> (' . $count . ')<br /></div>';
}
}
break;
case 'blog_edit_cat':
if (is_admin(array(101))) {
$blogs = $db->selectRow("SELECT * FROM ?_blog_category WHERE `cats_id` = ? LIMIT 1;", num($_REQUEST['c']));
if (!empty($blogs)) {
if (!empty($_POST['cancel'])) {
redirect('?m=blog&' . 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 ?_blog_category SET `cats_name` = ?, `cats_text` = ?
WHERE `cats_id` = ?;", $name, $text, $blogs['cats_id']);
$inSes->addMessage('Раздел успешно отредактирован!', 'ok');
redirect('?m=blog&' . RND);
} else {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
}
} else {
$inSes->addMessage('Ошибка! Слишком длинное или короткое название раздела!');
}
} else {
$inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
}
show_header('Редактирование');
$form = new cmsForm('?m=blog_edit_cat&rnd=' . $_SESSION['token'], 'post');
$form->addText('Заголовок (max 100):', 'name', $blogs['cats_name'], ' style="width:100%"');
$form->addTextarea('Описание (max 255):', 'text', $blogs['cats_text']);
$form->addHidden('c', $blogs['cats_id']);
echo $form->Submit(array('Изменить','Отмена'), array('submit','cancel'));
unset($form);
}
else {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
redirect('?m=blog&' . RND);
}
}
else {
$inSes->addMessage('Ошибка! Изменять разделы могут только суперадмины!');
redirect('?m=blog&' . RND);
}
break;
case 'blog_del_cat':
if (is_admin(array(101))) {
$blogs = $db->selectRow("SELECT * FROM ?_blog_category WHERE `cats_id` = ? LIMIT 1;", num($_REQUEST['c']));
if (!empty($blogs)) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$db->query("DELETE FROM ?_comments WHERE `comm_type` = 'blog' AND `comm_cats` = ?;", num($blogs['cats_id']));
$db->query("DELETE FROM ?_blog_posts WHERE `blog_cats_id` = ?;", num($blogs['cats_id']));
$db->query("DELETE FROM ?_blog_category WHERE `cats_id` = ?;", num($blogs['cats_id']));
$db->query("OPTIMIZE TABLE ?_comments, ?_blog_posts, ?_blog_category;");
$inSes->addMessage('Раздел успешно удален!', 'ok');
redirect('?m=blog&' . RND);
}
show_header('Удаление раздела ' . $blogs['cats_name']);
echo '<div class="bl">';
echo 'Вы уверены что хотите удалить раздел <b>' . $blogs['cats_name'] . '</b> в блогах?<br /><br />';
echo icon('close.png');
echo ' <a href="?m=blog_del_cat&c=' . num($blogs['cats_id']) . '&rnd=' . $_SESSION['token'] . '">Да, уверен!</a></b></div>';
echo '<div class="link"><a href="?m=blog&' . RND . '">Вернуться</a></div>';
}
else {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
redirect('?m=blog&' . RND);
}
}
else {
$inSes->addMessage('Ошибка! Изменять разделы могут только суперадмины!');
redirect('?m=blog&' . RND);
}
break;
case 'blogs':
$cid = !empty($_REQUEST['c']) ? num($_REQUEST['c']) : 0;
# Кеширование категорий блога
$categories = get_vars('blog_categories');
if (!$categories) {
$db->query("UPDATE ?_blog_category SET `cats_count` = (SELECT COUNT(`blog_id`) FROM ?_blog_posts
WHERE ?_blog_category.`cats_id` = ?_blog_posts.`blog_cats_id` AND ?_blog_posts.`blog_moders` = '0');");
$categories = array();
$cats = $db->select("SELECT * FROM ?_blog_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('blog_categories',$categories);
}
}
if (!array_key_exists($cid,$categories)) {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
redirect('?m=blog&' . RND);
}
list($name, $desc, $count) = $categories[$cid];
show_header('Управление блогами - ' . $name);
$onpage = !empty($config['blog_num']) ? num($config['blog_num']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = array();
$rows = $db->selectPage($total, "SELECT `p`.*, `users_id`
FROM ?_blog_posts `p`
LEFT JOIN ?_users `u`
ON `p`.`blog_user` = `u`.`users_login`
WHERE `p`.`blog_cats_id` = ?
ORDER BY `p`.`blog_time` DESC
LIMIT ?d, ?d", $cid, $from, $onpage);
if (!empty($rows) && $total > 0) {
echo '<form action="?m=blogs&cid=' . $cid . '&rnd=' . $_SESSION['token'] . '" method="post" name="blogs">';
foreach($rows as $row) {
if (!empty($row['blog_is_xxx'])) {
$xxx = ' <span style="color:#ff0000">(18+)</span>';
}
else $xxx = '';
$author = ($row['blog_user'] == 'guest') ? 'Гость' : users_anketa($row['users_id'], $row['blog_user']);
$icon = ($row['blog_moders'] == 1) ? 'cancel.png' : 'list.png';
echo '<div class="bl">' . icon($icon);
echo '<b><a href="/blog/' . gen_uri('post', $row['blog_id']) . '">' . $row['blog_title'] . '</a></b>' . $xxx . '<br />';
echo 'Автор: ' . $author . ' (' . get_date($row['blog_time']) . ')<br />';
echo 'Просмотров: ' . num($row['blog_read']) . '<br />';
echo '<a href="/blog/' . gen_uri('comments', $row['blog_id']) . '">Комментарии</a> (' . num($row['blog_comments']) . ')<br />';
echo '<input type="checkbox" name="del_post[]" value="' . num($row['blog_id']) . '" /> ';
echo '<a href="?m=blog_edit&id=' . num($row['blog_id']) . '&' . RND . '">Редактировать</a><br />';
echo '</div>';
}
echo '<div class="bl">';
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=blogs');
}
else {
show_error('В данном разделе еще нет статей!');
}
echo '<div class="link"><a href="?m=blog&' . RND . '">Категории</a></div>';
echo <<<JSCRIPT
<script language='JavaScript' type="text/javascript">
<!--
function ckeck_uncheck_all() {
var frm = document.blogs;
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 'blog_edit':
$blogs = $db->selectRow("SELECT * FROM ?_blog_posts WHERE `blog_id` = ? LIMIT 1;", $id);
if (!empty($blogs)) {
if (!empty($_POST['cancel'])) {
redirect('?m=blogs&c=' . num($blogs['blog_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;
$xxx = !empty($_POST['xxx']) ? 1 : 0;
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (cms_strlen($title) >= 5 && cms_strlen($title) <= 101) {
if (cms_strlen($text) >= $config['blog_min_text'] && cms_strlen($text) <= $config['blog_max_text']) {
if (preg_match('|^[a-z0-9-]+$|i', $user)) {
if ($cid > 0) {
$text = smiles($text);
$db->query("UPDATE ?_blog_posts SET `blog_cats_id` = ?, `blog_title` = ?, `blog_text` = ?, `blog_user` = ?, `blog_moders` = ?, `blog_is_xxx` = ? WHERE `blog_id` = ?;", $cid, $title, $text, $user, $moders, $xxx, $id);
restatement();
del_vars('blog_categories');
$inSes->addMessage('Статья успешно отредактирована!', 'ok');
redirect('?m=blogs&c=' . num($blogs['blog_cats_id']) . '&' . RND);
}
else $inSes->addMessage('Ошибка! Неверно указана категория!');
}
else $inSes->addMessage('Ошибка! Недопустимые символы в логине! Разрешены только знаки латинского алфавита и цифры!');
}
else $inSes->addMessage('Ошибка! Слишком длинный или короткий текст статьи (от ' . $config['blog_min_text'] . ' до ' . $config['blog_max_text'] . ' символов)!');
}
else $inSes->addMessage('Ошибка! Слишком длинный или короткий заголовок (от 5 до 100 символов)!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Редактирование ' . $blogs['blog_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('blog_categories');
foreach($categories as $key => $val) $cats[$key] = $val[0];
$blogs['blog_text'] = nosmiles($blogs['blog_text']);
$blogs['blog_text'] = str_ireplace(array('<br>','<br/>','<br />'), "n", $blogs['blog_text']);
$form = new cmsForm('?m=blog_edit&id=' . $id . '&rnd='.$_SESSION['token'], 'post', ' name="form" id="editnews"');
$form->addSelect('Категория:', 'cid', $blogs['blog_cats_id'], $cats);
$form->addText('Заголовок:', 'title', $blogs['blog_title'], ' maxlength="100" style="width:98%;"');
$form->addCode('Текст: <small>[<a href="?m=blog_edit&id=' . $id . '&smiles=1">Смайлы</a>] ');
$form->addCode('[<a href="?m=blog_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', $blogs['blog_text'], ' id="markItUp" style="width:98%;"');
$form->addText('Автор:', 'user', $blogs['blog_user'], ' maxlength="100"');
$form->addCheckBox(array('', ' - Для взрослых'), 'xxx', $blogs['blog_is_xxx']);
$form->addCheckBox(array('', ' - На модерации'), 'moders', $blogs['blog_moders']);
echo $form->Submit(array('Изменить','Отмена'), array('submit','cancel'));
unset($form);
}
else {
$inSes->addMessage('Ошибка! Данной статьи не существует!');
redirect('?m=blogs&' . RND);
}
break;
case 'moders':
show_header('Управление блогами - На модерации');
$onpage = !empty($config['blog_num']) ? num($config['blog_num']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = array();
$rows = $db->selectPage($total, "SELECT `p`.*, `users_id`
FROM ?_blog_posts `p`
LEFT JOIN ?_users `u`
ON `p`.`blog_user` = `u`.`users_login`
WHERE `p`.`blog_moders` = '1'
ORDER BY `p`.`blog_time` DESC
LIMIT ?d, ?d", $from, $onpage);
if (!empty($rows) && $total > 0) {
echo '<form action="?m=moders&rnd=' . $_SESSION['token'] . '" method="post" name="blogs">';
foreach ($rows as $numRow => $row) {
$icon = ($row['blog_moders'] == 1) ? 'close.png' : 'list.png';
if (!empty($row['blog_is_xxx'])) {
$xxx = ' <span style="color:#ff0000">(18+)</span>';
}
else $xxx = '';
echo '<div class="bl">' . icon($icon);
echo '<b><a href="/blog/' . gen_uri('post', $row['blog_id']) . '">' . $row['blog_title'] . '</a></b>' . $xxx . '<br />';
echo 'Автор: ' . users_anketa($row['users_id'], $row['blog_user']) . ' (' . get_date($row['blog_time']) . ')<br />';
echo 'Просмотров: ' . num($row['blog_read']) . '<br />';
echo '<a href="/blog/' . gen_uri('comments', $row['blog_id']) . '">Комментарии</a> (' . num($row['blog_comments']) . ')<br />';
echo '<input type="checkbox" name="del_post[]" value="' . num($row['blog_id']) . '" /> ';
echo '<a href="?m=blog_edit&id=' . num($row['blog_id']) . '&' . RND . '">Редактировать</a><br />';
echo '</div>';
}
echo '<div class="bl">';
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="bl">Всего статей на модерации: <b>' . $total . '</b><br /></div>';
}
else {
show_error('Статей на модерации еще нет!');
}
echo '<div class="link"><a href="?m=blog&' . RND . '">Категории</a></div>';
echo <<<JSCRIPT
<script language='JavaScript' type="text/javascript">
<!--
function ckeck_uncheck_all() {
var frm = document.blogs;
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="link"><a href="?' . RND . '">В админку</a></div>';
show_footer();
}
else {
redirect('/?' . RND);
}
?>