Файл: DESURE-dcms-f12de01ac63e/forum/theme.security.php
Строк: 46
<?php
include_once '../sys/inc/start.php';
$groups = groups::load_ini(); // загружаем массив групп
$doc = new document();
$doc->title = __('Редактирование темы');
if (!isset($_GET['id']) || !is_numeric($_GET['id'])) {
    header('Refresh: 1; url=./');
    $doc->err(__('Ошибка выбора темы'));
    exit;
}
$id_theme = (int) $_GET['id'];
$q = $db->prepare("SELECT * FROM `forum_themes` WHERE `id` = ? AND `group_edit` <= ?");
$q->execute(Array($id_theme, $user->group));
if (!$theme = $q->fetch()) {
    header('Refresh: 1; url=./');
    $doc->err(__('Тема не доступна для редактирования'));
    exit;
}
if (isset($_POST['save'])) {
    $t['top'] = (int) !empty($_POST['top']);
    if ($t['top'] != $theme['top']) {
        $theme['top'] = $t['top'];
        $res = $db->prepare("UPDATE `forum_themes` SET `top` = ? WHERE `id` = ? LIMIT 1");
        $res->execute(Array($theme['top'], $theme['id']));
        if ($theme['top']) {
            $dcms->log('Форум',
                'Прикрепление темы [url=/forum/theme.php?id=' . $theme['id'] . ']' . $theme['name'] . '[/url]');
            $doc->msg(__('Тема успешно закреплена'));
        } else {
            $dcms->log('Форум',
                'Открепление темы [url=/forum/theme.php?id=' . $theme['id'] . ']' . $theme['name'] . '[/url]');
            $doc->msg(__('Тема успешно откреплена'));
        }
    }
    if (isset($_POST['group_show'])) { // просмотр
        $group_show = (int) $_POST['group_show'];
        if (isset($groups[$group_show]) && $group_show != $theme['group_show']) {
            $theme_dir = new files(FILES . '/.forum/' . $theme['id']);
            $theme_dir->setGroupShowRecurse($group_show); // данный параметр необходимо применять рекурсивно
            $theme['group_show'] = $group_show;
            $res = $db->prepare("UPDATE `forum_themes` SET `group_show` = ? WHERE `id` = ? LIMIT 1");
            $res->execute(Array($theme['group_show'], $theme['id']));
            $doc->msg(__('Читать тему теперь разрешено группе "%s" и выше', groups::name($group_show)));
        }
    }
    if (isset($_POST['group_write'])) { // запись
        $group_write = (int) $_POST['group_write'];
        if (isset($groups[$group_write]) && $group_write != $theme['group_write']) {
            if ($theme['group_show'] > $group_write)
                    $doc->err(__('Для того, чтобы оставлять сообщения группе "%s" сначала необходимо дать права на чтение темы',
                        groups::name($group_write)));
            else {
                $theme['group_write'] = $group_write;
                $res = $db->prepare("UPDATE `forum_themes` SET `group_write` = ? WHERE `id` = ? LIMIT 1");
                $res->execute(Array($theme['group_write'], $theme['id']));
                $doc->msg(__('Оставлять сообщения в теме теперь разрешено группе "%s" и выше',
                        groups::name($group_write)));
            }
        }
    }
    if (isset($_POST['group_edit'])) { // редактирование
        $group_edit = (int) $_POST['group_edit'];
        if (isset($groups[$group_edit]) && $group_edit != $theme['group_edit']) {
            if ($theme['group_write'] > $group_edit)
                    $doc->err(__('Для изменения параметров темы группе "%s" сначала необходимо дать права на запись в тему',
                        groups::name($group_edit)));
            else {
                $theme['group_edit'] = $group_edit;
                $res = $db->prepare("UPDATE `forum_themes` SET `group_edit` = ? WHERE `id` = ? LIMIT 1");
                $res->execute(Array($theme['group_edit'], $theme['id']));
                $doc->msg(__('Изменять параметры темы теперь разрешено группе "%s" и выше', groups::name($group_edit)));
            }
        }
    }
    // после изменения параметров темы обновляем данные, сохраненные в базе
    $q = $db->prepare("SELECT * FROM `forum_themes` WHERE `id` = ? AND `group_edit` <= ?");
    $q->execute(Array($id_theme, $user->group));
    if (!$theme = $q->fetch()) {
        header('Refresh: 1; url=./');
        $doc->err(__('Тема не доступна для редактирования'));
        exit;
    }
}
$doc->title = __('Редактирование темы "%s"', $theme['name']); // шапка страницы
$form = new form(new url());
$options = array();
foreach ($groups as $type => $value)
    $options[] = array($type, $value['name'], $type == $theme['group_show']);
$form->select('group_show', __('Чтение темы'), $options);
$options = array();
foreach ($groups as $type => $value) {
    if ($type < 1) // гостям писать в тему уж точно запрещено
        continue;
    $options[] = array($type, $value['name'], $type == $theme['group_write']);
}
$form->select('group_write', __('Пишут в тему'), $options);
$options = array();
foreach ($groups as $type => $value) {
    if ($type < 2) // Изменять параметры темы пользователю тоже нельзя        
        continue;
    $options[] = array($type, $value['name'], $type == $theme['group_edit']);
}
$form->select('group_edit', __('Изменяют параметры'), $options);
$form->bbcode('* ' . __('Будьте внимательнее при установке доступа выше своего.'));
$form->checkbox('top', __('Всегда наверху'), $theme['top']);
$form->button(__('Применить'), 'save');
$form->display();
$doc->ret(__('Действия'), 'theme.actions.php?id=' . $theme['id']);
$doc->ret(__('Вернуться в тему'), 'theme.php?id=' . $theme['id']);
$doc->ret(empty($theme['topic_name']) ? __('В раздел') : $theme['topic_name'], 'topic.php?id=' . $theme['id_topic']);
$doc->ret(empty($theme['category_name']) ? __('В категорию') : $theme['category_name'],
    'category.php?id=' . $theme['id_category']);
$doc->ret(__('Форум'), './');