Файл: CMS/core/admin/soo.php
Строк: 222
<?php
if (!defined('CMS')) { die('Access Denied!'); }
# Кеширование категорий сообществ
$categories = get_vars('comm_categories');
if (!$categories) {
$db->query("UPDATE ?_comm_category SET `cats_count` = (SELECT COUNT(1) FROM ?_comm_comm
WHERE ?_comm_category.`cats_id` = ?_comm_comm.`comm_cats_id`);");
$categories = array();
$cats = $db->select("SELECT * FROM ?_comm_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_about'], $cat['cats_count']);
}
set_vars('comm_categories',$categories);
}
}
if (is_admin(array(101,102))) {
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']) : '';
$about = !empty($_POST['about']) ? check($_POST['about']) : '';
if (cms_strlen($name) >= 3 && cms_strlen($name) < 101) {
$maxorder = (int) $db->selectCell("SELECT IFNULL(MAX(`cats_order`),0)+1 FROM ?_comm_category;");
$db->query("INSERT INTO ?_comm_category (`cats_order`, `cats_name`, `cats_about`) VALUES (?, ?, ?);", $maxorder, $name, $about);
del_vars('comm_categories');
$inSes->addMessage('Новый раздел успешно добавлен!', 'ok');
redirect('?m=soo&' . RND);
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое название раздела!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Добавлять разделы могут только суперадмины!');
}
if (!empty($_POST['edit_cat'])) {
if (is_admin(array(101))) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$name = !empty($_POST['name']) ? check($_POST['name']) : '';
$about = !empty($_POST['about']) ? check($_POST['about']) : '';
if (cms_strlen($name) >= 3 && cms_strlen($name) < 101) {
$is_cat = (int) $db->selectCell("SELECT `cats_id` FROM ?_comm_category WHERE `cats_id` = ?;", request('cat'));
if ($is_cat > 0) {
$db->query("UPDATE ?_comm_category SET `cats_name` = ?, `cats_about` = ? WHERE `cats_id` = ?;", $name, $about, $is_cat);
del_vars('comm_categories');
$inSes->addMessage('Раздел успешно отредактирован!', 'ok');
redirect('?m=soo&' . RND);
}
else $inSes->addMessage('Ошибка! Данного раздела не существует!');
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое название раздела!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Редактировать разделы могут только суперадмины!');
}
if (!empty($_GET['del_cat'])) {
if (is_admin(array(101))) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$is_cat = (int) $db->selectCell("SELECT `cats_id` FROM ?_comm_category WHERE `cats_id` = ?;", request('del_cat'));
if ($is_cat > 0) {
include_once( dirname(__FILE__) . '/del.inc.php' );
$dels = $db->select("SELECT `comm_id`, `comm_image` FROM ?_comm_comm WHERE `comm_cats_id` = ?", $is_cat);
if (!empty($dels) && @count($dels) > 0) {
foreach($dels as $del) {
delete_soo($del['comm_id'], $del['comm_image']);
}
}
$db->query("DELETE FROM ?_comm_category WHERE `cats_id` = ? LIMIT 1;", $is_cat);
$db->query("OPTIMIZE TABLE ?_comm_category;");
del_vars('comm_categories');
$inSes->addMessage('Раздел успешно удалён!', 'ok');
redirect('?m=soo&' . 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']) {
$db->query("UPDATE ?_comm_category SET `cats_count` = (SELECT COUNT(*) FROM ?_comm_comm WHERE ?_comm_category.`cats_id` = ?_comm_comm.`comm_cats_id`);");
$inSes->addMessage('Все данные успешно пересчитаны!', 'ok');
redirect('?m=soo&' . RND);
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Пересчитывать сообщения могут только суперадмины!');
}
switch ($mod):
default:
if (!empty($_GET['up'])) { // Перемещение на одну позицию вверх
$up = num($_GET['up']);
$row = $db->selectRow("SELECT * FROM ?_comm_category WHERE `cats_id` = ?", $up);
if (!empty($row)) {
$rows = $db->selectRow("SELECT * FROM ?_comm_category WHERE `cats_order` < ?
ORDER BY `cats_order` DESC LIMIT 1", $row['cats_order']);
if (!empty($rows)) {
$db->query("UPDATE ?_comm_category SET `cats_order` = ? WHERE `cats_id` = ?", $rows['cats_order'], $up);
$db->query("UPDATE ?_comm_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 ?_comm_category WHERE `cats_id` = ?", $down);
if (!empty($row)) {
$rows = $db->selectRow("SELECT * FROM ?_comm_category WHERE `cats_order` > ?
ORDER BY `cats_order` ASC LIMIT 1", $row['cats_order']);
if (!empty($rows)) {
$db->query("UPDATE ?_comm_category SET `cats_order` = ? WHERE `cats_id` = ?", $rows['cats_order'], $down);
$db->query("UPDATE ?_comm_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 ?_comm_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=soo&edit_cat=' . $row['cats_id'] . '#edit">Ред.</a> | ';
echo '<a href="?m=soo&del_cat=' . $row['cats_id'] . '&rnd=' . $_SESSION['token'] . '" onclick="return confirm('Вы действительно хотите удалить данный раздел?')">Уд.</a> | ';
echo '<a href="?m=soo&up=' . $row['cats_id'] . '">Вверх</a> | ';
echo '<a href="?m=soo&down=' . $row['cats_id'] . '">Вниз</a></div>';
}
echo $row['cats_order'] . '. <a href="?m=soo_list&cat=' . $row['cats_id'] . '&' . RND . '">' . $row['cats_name'] . '</a> ';
echo '(' . num($row['cats_count']) . ')<br />';
if (!empty($row['cats_about'])) echo bb_code($row['cats_about']) . '<br />';
echo '</div>';
}
}
else {
show_error('Разделы сообществ еще не созданы!');
}
if (is_admin(array(101))) {
if (!empty($_GET['edit_cat'])) {
$cat = $db->selectRow("SELECT * FROM ?_comm_category
WHERE `cats_id` = ? LIMIT 1", num($_GET['edit_cat']));
if (!empty($cat)) {
$form = new cmsForm('?m=soo&rnd=' . $_SESSION['token'], 'post', ' id="edit"');
$form->addText('Название:', 'name', $cat['cats_name']);
$form->addTextarea('Описание (max 250):', 'about', $cat['cats_about']);
$form->addHidden('cat', $cat['cats_id']);
echo $form->Submit(array('Изменить','Отмена'), array('edit_cat','cancel'));
unset($form);
}
else show_error('Категория не найдена!');
}
else if (!empty($_GET['add_cat'])) {
$form = new cmsForm('?m=soo&rnd=' . $_SESSION['token'], 'post', ' id="add"');
$form->addText('Название:', 'name', request('name'));
$form->addTextarea('Описание (max 250):', 'about', request('about'));
echo $form->Submit(array('Создать раздел','Отмена'), array('add_cat','cancel'));
unset($form);
}
else {
echo '<div class="b">' . icon('mail.png');
echo ' <a href="?m=soo&add_cat=1&' . RND . '#add">Создать раздел</a></div>';
echo '<div class="b">' . icon('mail.png');
echo ' <a href="?m=soo&restatement=1&rnd=' . $_SESSION['token'] . '">Пересчитать</a> |';
echo ' <a href="?m=set_soo&' . RND . '">Настройки</a> |';
echo ' <a href="/comm/' . gen_uri('index', '', RND) . '">Обзор</a><br /></div>';
}
}
break;
case 'soo_list':
$cats = $db->selectRow("SELECT * FROM ?_comm_category WHERE `cats_id` = ?;", request('cat'));
if (empty($cats) || !is_array($cats)) {
$inSes->addMessage('Ошибка! Данного раздела не существует!');
redirect('?m=soo&' . RND);
}
show_header($cats['cats_name'] . ' - Сообщества');
$onpage = !empty($config['comm_onpage']) ? num($config['comm_onpage']) : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = $db->selectPage($total, "SELECT `c`.*, `v`.`visit_nowtime`, `u`.`users_gender`
FROM ?_comm_comm `c`
LEFT JOIN ?_users_visit `v`
ON `c`.`comm_user` = `v`.`visit_user`
LEFT JOIN ?_users `u`
ON `c`.`comm_user` = `u`.`users_login`
WHERE `c`.`comm_cats_id` = ?
ORDER BY `c`.`comm_create` DESC
LIMIT ?d, ?d", $cats['cats_id'], $from, $onpage);
if (!empty($rows) && $total > 0) {
foreach($rows as $row) {
$icon = ($row['comm_status'] == 1) ? 'com_closed.gif' : 'com_open.gif';
echo '<div class="b">';
echo '<div class="right">' . get_date($row['comm_create']) . '</div>';
echo icon($icon, 'icons');
echo '<a href="/comm/' . $row['comm_url'] . DS . gen_uri('comm', '', RND) . '">' . $row['comm_name'] . '</a> ';
echo '(' . $row['comm_count'] . ')<br />';
echo 'Создал: ' . user_visit_icon($row['comm_user'], $row['users_gender'], $row['visit_nowtime']);
echo ' <b>' . users_anketa($row['comm_user']) . '</b>';
echo ' [<a href="?m=users_edit&uz=' . $row['comm_user'] . '&' . RND . '">Ред.</a> | ';
echo ' <a href="?m=ban_user&uz=' . $row['comm_user'] . '&' . RND . '">Бан</a>]<br />';
echo ' [<a href="?m=soo_edit&id=' . $row['comm_id'] . '&' . RND . '">Редактировать</a> | ';
echo ' <a href="?m=soo_del&id=' . $row['comm_id'] . '&rnd=' . $_SESSION['token'] . '" onclick="return confirm('Вы действительно хотите удалить данное сообщество?')">Удалить</a>]<br />';
echo '</div>';
}
echo show_pages('?m=soo_list');
echo '<div class="b">Всего сообществ: <b>' . num($total) . '</b></div>';
}
else show_error('В данном разделе ещё нет сообществ!');
break;
case 'soo_edit':
$row = array();
$row = $db->selectRow("SELECT ?_comm_comm.*, ?_comm_category.*
FROM ?_comm_comm LEFT JOIN ?_comm_category
ON ?_comm_comm.`comm_cats_id` = ?_comm_category.`cats_id`
WHERE `comm_id` = ? LIMIT 1;", $id);
if (empty($row) || !is_array($row)) {
$inSes->addMessage('Ошибка! Сообщество не найдено!');
redirect('?m=soo&' . RND);
}
if (!empty($_POST['cancel'])) {
redirect('?m=soo_list&cat=' . $row['comm_cats_id'] . '&' . RND);
}
if (!empty($_POST['submit'])) {
$cid = !empty($_POST['cid']) ? num($_POST['cid']) : 0;
$url = !empty($_POST['url']) ? check($_POST['url']) : '';
$name = !empty($_POST['name']) ? check($_POST['name']) : '';
$text = !empty($_POST['text']) ? check($_POST['text']) : '';
$rules = !empty($_POST['rules']) ? check($_POST['rules']) : '';
$status = !empty($_POST['status']) ? 1 : 0;
$forum = !empty($_POST['forum']) ? 1 : 0;
$obmen = !empty($_POST['obmen']) ? 1 : 0;
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (array_key_exists($cid,$categories)) {
if (cms_strlen($url) >= 3 && cms_strlen($url) <= 50) {
if (cms_strlen($name) >= 3 && cms_strlen($name) <= 100) {
if (cms_strlen($text) >= 5 && cms_strlen($text) <= 1000) {
if (preg_match('|^[a-z0-9-_]+$|i', $url)) {
$url = cms_tolower($url);
$is_soo = (int) $db->selectCell("SELECT `comm_id` FROM ?_comm_comm
WHERE LOWER(`comm_url`) = ? AND `comm_id` <> ? LIMIT 1;", $url, $row['comm_id']);
if ($is_soo < 1) {
$rules = antimat($rules);
$rules = smiles($rules);
$text = antimat($text);
$text = smiles($text);
$db->query("UPDATE ?_comm_comm SET `comm_cats_id` = ?, `comm_url` = ?, `comm_name` = ?, `comm_about` = ?, `comm_rules` = ?, `comm_status` = ?, `comm_forum` = ?, `comm_obmen` = ? WHERE `comm_id` = ?", $cid, $url, $name, $text, $rules, $status, $forum, $obmen, $row['comm_id']);
if ($cid <> $row['comm_cats_id']) {
$db->query("UPDATE ?_comm_category SET `cats_count` = (`cats_count` - 1)
WHERE `cats_id` = ?;", $row['cats_id']);
$db->query("UPDATE ?_comm_category SET `cats_count` = (`cats_count` + 1)
WHERE `cats_id` = ?;", $cid);
}
del_vars('community');
$inSes->addMessage('Данные сообщества успешно изменены!', 'ok');
redirect('?m=soo_list&cat=' . $cid . '&' . RND);
}
else $inSes->addMessage('Ошибка! Сообщество с таким адресом уже зарегистрировано!');
}
else $inSes->addMessage('Ошибка! Адрес сообщества содержит плохие символы!');
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое описание сообщества (от 5 до 1000 символов)!');
}
else $inSes->addMessage('Ошибка! Слишком длинное или короткое название (от 3 до 100 символов)!');
}
else $inSes->addMessage('Ошибка! Слишком длинный или короткий адрес сообщества (от 3 до 50 символов)!');
}
else $inSes->addMessage('Ошибка! Выбранный вами раздел не существует!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Управление сообществом ' . $row['comm_name']);
$cats = array();
foreach($categories as $key => $val) $cats[$key] = $val[0];
$form = new cmsForm('?m=soo_edit&id=' . $row['comm_id'] . '&rnd=' . $_SESSION['token'], 'post', ' name="form" id="form"');
$form->addSelect('Категория:', 'cid', $row['comm_cats_id'], $cats);
$form->addText('Адрес сообщества (a-z, 0-9, _, -):<br />' . $config['site_url'] . '/comm/', 'url', $row['comm_url'], ' maxlength="30"');
$form->addText('Название сообщества:', 'name', $row['comm_name'], ' maxlength="100"');
$form->addTextarea('Краткое описание:', 'text', $row['comm_about'], ' id="msg"');
$form->addTextarea('Правила:', 'rules', $row['comm_rules']);
$form->addRadio('Сообщество:', 'status', $row['comm_status'], array('0' => 'Открытое', '1' => 'Закрытое'));
$form->addRadio('Форум:', 'forum', $row['comm_forum'], array('0' => 'Нет', '1' => 'Есть'));
$form->addRadio('Обменник:', 'obmen', $row['comm_obmen'], array('0' => 'Нет', '1' => 'Есть'));
echo $form->Submit(array('Изменить', 'Отмена'), array('submit', 'cancel'));
unset($form);
break;
case 'soo_del':
if (is_admin(array(101))) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$row = array();
$row = $db->selectRow("SELECT * FROM ?_comm_comm
WHERE `comm_id` = ? LIMIT 1;", $id);
if (!empty($row)) {
include_once( dirname(__FILE__) . '/del.inc.php' );
delete_soo($row['comm_id'], $row['comm_image']);
$db->query("UPDATE ?_comm_category SET `cats_count` = (SELECT COUNT(*) FROM ?_comm_comm WHERE ?_comm_category.`cats_id` = ?_comm_comm.`comm_cats_id`);");
del_vars('comm_categories');
$inSes->addMessage('Сообщество успешно удалено!', 'ok');
redirect('?m=soo_list&cat=' . $row['comm_cats_id'] . '&' . RND);
}
else $inSes->addMessage('Ошибка! Сообщество не найдено!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
else $inSes->addMessage('Ошибка! Удалять сообщества могут только суперадмины!');
redirect('?m=soo&' . RND);
break;
endswitch;
echo '<div class="b">' . icon('return.png');
if (!empty($mod) && $mod <> 'soo') {
echo '<a href="?m=soo&' . RND . '">Сообщества</a> | ';
}
echo '<a href="?' . RND . '">В админку</a><br /></div>';
show_footer();
}
else {
redirect('/?' . RND);
}
?>