function IndexForumEditTopic()
{
    global $forum_lang;
    if (!System::user()->Auth) {
        System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $forum_lang['error_auth'] . '</p>');
        return;
    }
    $topic = SafeEnv($_GET['topic'], 11, int);
    $post = System::database()->Select('forum_posts', "`object`='{$topic}' and `delete`='0'");
    SortArray($post, 'id', false);
    System::database()->Select('forum_topics', "`id`='{$topic}'");
    $topic = System::database()->FetchRow();
    if ($topic['delete'] == 0 || System::config('forum/basket') == false) {
        $title = '';
        if (SafeDB($topic['starter_id'], 11, str) == System::user()->Get('u_id') or System::user()->IsAdmin()) {
            $title = SafeDB($topic['title'], 0, str);
        }
        if (System::user()->Get('u_id') == $post[0]['user_id'] || System::user()->isAdmin()) {
            ForumRenderPostForm(true, 0, SafeEnv($_GET['topic'], 11, int), SafeDB($post[0]['id'], 11, int), SafeDB($post[0]['message'], 0, str, false, true), $title);
        } else {
            System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $forum_lang['no_right_comment_edit'] . '</p>');
            return;
        }
    } else {
        System::site()->AddTextBox($forum_lang['topic_basket_current_post'], '<p align="center">' . $forum_lang['topic_basket_post'] . '<br><input type="button" value="' . $forum_lang['back'] . '"onclick="history.back();"></p>');
    }
}
 /**
  * Функция обновляет статус онлайн пользователя на форуме.
  * Перед вызовом всех остальных функций, нужно вызвать Process вначале.
  * @param type $cat
  * @param type $topic
  * @return type
  */
 public function Process($cat = '0', $topic = '0')
 {
     if (!$this->online_process) {
         $time = time();
         $time2 = $time - $this->AliveStatusTime;
         System::database()->Delete('forum_online', "`time` < {$time2}");
         $user_ip = getip();
         if (System::user()->Auth === true) {
             $user_id = System::user()->Get('u_id');
         } else {
             $user_id = 0;
         }
         $user_name = System::user()->Get('u_name');
         if (!$user_name) {
             $user_name = '';
         }
         $user_level = System::user()->Get('u_level');
         $where = "`user_ip`='{$user_ip}'";
         System::database()->Select('forum_online', $where);
         if (System::database()->NumRows() > 0) {
             System::database()->Update('forum_online', "`time`='{$time}',`user_id`='{$user_id}',`user_name`='{$user_name}',`user_level`='{$user_level}',`user_ip`='{$user_ip}',`forum_cat`='{$cat}',`forum_topic`='{$topic}'", $where);
         } else {
             System::database()->Insert('forum_online', "'{$time}','{$user_id}','{$user_name}','{$user_level}','{$user_ip}','{$cat}','{$topic}'");
         }
         $this->online_process = true;
     }
 }
function IndexForumLogin()
{
    if (!System::user()->Auth) {
        System::site()->Login('');
        System::user()->Def('forum_referrer', $_SERVER['HTTP_REFERER']);
    } else {
        GO(System::user()->Get('forum_referrer'), 202);
    }
}
function HistoryGetUrl($BackSteps)
{
    $history = System::user()->Get('HISTORY');
    if (isset($history[10 - $BackSteps])) {
        return $history[10 - $BackSteps];
    } else {
        return '';
    }
}
function IndexForumMarkRead()
{
    $mark_forums = array();
    // Форумы на которых устанавливать метки
    $forums_tree = ForumTree::Instance();
    if (isset($_GET['forum'])) {
        // Только внутри определённого форума
        $forum = SafeDB($_GET['forum'], 11, int);
        $mark_forums = $forums_tree->GetAllAccessForumId($forum);
    } else {
        // На всех форумах
        $mark_forums = $forums_tree->GetAllAccessForumId();
    }
    $user_id = System::user()->Get('u_id');
    if (System::user()->Auth) {
        // Загружаем данные о прочтении тем пользователем
        $read_data = Forum_Marker_GetReadData();
        // Загружаем топики (агрегированы по forum_id)
        $topics = ForumCacheGetTopics();
        $del_where = '';
        $insert_values = array();
        $time = time();
        foreach ($mark_forums as $forum_id) {
            if (!isset($topics[$forum_id])) {
                continue;
            }
            foreach ($topics[$forum_id] as $topic) {
                $tid = SafeEnv($topic['id'], 11, int);
                // Не прочитана или метка устарела
                if (!isset($read_data[$topic['id']])) {
                    $insert_values[] = "'{$user_id}','{$tid}','{$time}'";
                    // Добавить новую метку
                } elseif ($read_data[$topic['id']]['date'] < $topic['last_post']) {
                    $del_where .= "(`tid`='{$tid}' and `mid`= '{$user_id}') or ";
                    // Удалить текущую метку
                    $insert_values[] = "'{$user_id}','{$tid}','{$time}'";
                    // Добавить новую метку
                }
            }
        }
        // Удаляем устаревшие метки
        if ($del_where != '') {
            $del_where = substr($del_where, 0, -4);
            // Удаляем .or.
            System::database()->Delete('forum_topics_read', $del_where);
        }
        // Добавляем новые метки
        // TODO: В будущем нужно перейти на InnoDB и использовать транзакции как в MySQL так и в FilesDB.
        if (count($insert_values) > 0) {
            foreach ($insert_values as $vals) {
                System::database()->Insert('forum_topics_read', $vals);
            }
        }
    }
    GO(GetSiteUrl() . Ufu('index.php?name=forum' . (isset($forum) ? '&op=showforum&forum=' . $forum : ''), 'forum/' . (isset($forum) ? '{forum}/' : '')));
}
Ejemplo n.º 6
0
 /**
  * Initialises the system
  * @static
  */
 public static function init()
 {
     self::redirectHTTPS();
     Router::getInstance()->init(HOST_PATH, MOD_REWRITE);
     self::$database = new Database('mysql:dbname=' . DATABASE_NAME . ';host=' . DATABASE_HOST, DATABASE_USER, DATABASE_PASS);
     self::$session = new Session();
     self::$user = System::getSession()->getUID() != NULL ? User::find('_id', System::getSession()->getUID()) : NULL;
     self::$language = new L10N(System::getUser() != NULL ? System::getUser()->lang : LANGUAGE);
     self::buildNavigation();
 }
/**
 * Добавляет новую запись в лог действий администраторов.
 * @param $Action
 * @return bool
 */
function Audit($Action)
{
    if (System::user()->Auth == false) {
        return false;
    }
    $user_ip = getip();
    $user_id = System::user()->Get('u_id');
    $date = time();
    $Action = SafeEnv($Action, 255, str);
    System::database()->Insert('audit', Values('', $user_id, $date, $Action, $user_ip));
    return true;
}
function IndexForumRestoreBasketTopic($topic_id = 0, $go_back = true)
{
    global $forum_lang;
    if (!System::user()->isAdmin()) {
        HackOff();
        return;
    }
    $topic = System::database()->Select('forum_topics', "`id`='{$topic_id}' and `delete`='1'");
    if (count($topic) > 0) {
        $topic = $topic[0];
        $forum_id = SafeEnv($topic['forum_id'], 11, int);
        // Восстанавливаем количество сообщений и тем для форума
        System::database()->Select('forums', "`id`='{$forum_id}'");
        if (System::database()->NumRows() == 0) {
            // Форум не найден
            System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_forum']);
            return;
        }
        $forum = System::database()->FetchRow();
        $forum_topics = SafeEnv($forum['topics'], 11, int) + 1;
        if ($forum_topics < 0) {
            $forum_topics = 0;
        }
        $forum_posts = SafeEnv($forum['posts'], 11, int) + SafeEnv($topic['posts'], 11, int);
        if ($forum_posts < 0) {
            $forum_posts = 0;
        }
        $forum_set = "`topics`='{$forum_topics}',`posts`='{$forum_posts}'";
        System::database()->Update('forums', $forum_set, "`id`='{$forum_id}'");
        // Восстанавливаем тему
        System::database()->Update('forum_topics', "`delete`='0'", "`id`='{$topic_id}'");
        // Удаляем метку в корзине
        System::database()->Delete('forum_basket_topics', "`obj_id`='{$topic_id}'");
        // Устанавливаем инф-ю о последнем сообщении для темы и форума
        ForumSetLastPost($topic_id);
        ForumSetLastTopic($forum_id);
        // Очищаем кэш форума
        ForumCacheClear();
        if ($go_back) {
            if (isset($_GET['back'])) {
                GoRefererUrl($_GET['back']);
            } else {
                GoBack();
            }
        }
    } else {
        System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_topic']);
        return;
    }
}
function IndexForumCloseTopic()
{
    if (!System::user()->isAdmin()) {
        HackOff();
        return;
    }
    if (CheckGet('topic')) {
        $topic_id = SafeEnv($_GET['topic'], 11, int);
    } else {
        System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_data']);
        return;
    }
    System::database()->Select('forum_topics', "`id`='{$topic_id}'");
    $topic = System::database()->FetchRow();
    $forum_id = SafeDB($topic['forum_id'], 11, int);
    System::database()->Update('forum_topics', "`close_topics`='1'", "`id`='{$topic_id}'");
    GO(Ufu('index.php?name=forum&op=showforum&forum=' . $forum_id, 'forum/{forum}/'));
}
function IndexForumEditPosts()
{
    global $forum_lang;
    if (!System::user()->isAdmin()) {
        System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $forum_lang['error_no_right_edit'] . '.</p>');
        return;
    }
    if (!isset($_POST['posts'])) {
        System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $forum_lang['error_no_messages'] . '</p><br><a href="javascript:history.go(-1)">' . System::site()->Button($forum_lang['back']) . '</a>');
        return;
    }
    if (isset($_GET['ok']) && $_GET['ok'] == '1') {
        $posts_ids = SafeEnv(explode(',', $_POST['posts']), 11, int);
        $moderation_result = ForumModerationPosts($_GET['edit'], $posts_ids, true);
        if ($moderation_result) {
            if (isset($_GET['back'])) {
                GoRefererUrl($_GET['back']);
            } else {
                GO($_POST['backurl']);
            }
        }
    } else {
        $posts_ids = array();
        foreach (array_keys($_POST['posts']) as $post_id) {
            $posts_ids[] = SafeEnv($post_id, 11, int);
        }
        $do = SafeDB($_POST['do'], 255, str);
        $form_url = 'index.php?name=forum&op=edit_posts&edit=' . $do . '&ok=1';
        if (isset($_GET['back'])) {
            $form_url .= '&back=' . SafeDB($_GET['back'], 10, str);
        }
        $vars['lang_premoderation'] = $forum_lang['moderation_messages'];
        $vars['posts_count'] = count($posts_ids);
        $vars['form_action'] = $form_url;
        $vars['form_name'] = 'forum_delete';
        $vars['posts'] = implode(',', $posts_ids);
        $vars['backurl'] = $_SERVER['HTTP_REFERER'];
        $vars['reason'] = System::config('forum/basket') && $do == 'deleteposts';
        $vars['lang_do'] = ForumModerationPosts($do, $posts_ids, false);
        System::site()->AddTemplatedBox($vars['lang_do'], 'module/forum_moderation.html');
        System::site()->AddBlock('forum_moderation', true, false, 'mod');
        System::site()->SetVars('forum_moderation', $vars);
    }
}
function UrlRender($url)
{
    static $out = null;
    if (!isset($out)) {
        $out = System::config('general/specialoutlinks');
        if ($out == 0) {
            $out = false;
        } elseif ($out == 1) {
            $out = true;
        } elseif ($out == 2 && !System::user()->Auth) {
            $out = true;
        } else {
            $out = false;
        }
    }
    if ($out && !IsMainHost($url)) {
        return 'index.php?name=plugins&p=out&url=' . urlencode(Url($url));
    } else {
        return 'http://' . Url($url);
    }
}
function IndexForumEditTopics()
{
    global $forum_lang;
    if (!System::user()->isAdmin()) {
        System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $forum_lang['error_no_right_edit'] . '.</p>');
        return;
    }
    if (!isset($_POST['topics'])) {
        System::site()->AddTextBox($forum_lang['forum'], '<p align="center">' . $forum_lang['error_no_topics'] . '</p><br><a href="javascript:history.go(-1)">' . System::site()->Button('Назад') . '</a>');
        return;
    }
    if (isset($_GET['ok']) && $_GET['ok'] == '1') {
        $topics_ids = SafeEnv(explode(',', $_POST['topics']), 11, int);
        $back_url = $_POST['backurl'];
        if (isset($_GET['back'])) {
            $back_url = GetRefererUrl($_GET['back']);
        }
        $moderation_result = ForumModerationTopics($_GET['edit'], $topics_ids, true);
        if ($moderation_result !== false) {
            $text = $moderation_result . '<br><br><b><a href="' . $back_url . '">' . $forum_lang['return_read'] . '</a></b>';
            System::site()->AddTextBox($forum_lang['executed'], $text);
        }
    } else {
        $topics_ids = array();
        foreach (array_keys($_POST['topics']) as $topic_id) {
            $topics_ids[] = SafeEnv($topic_id, 11, int);
        }
        $form_url = 'index.php?name=forum&op=edit_topics&edit=' . SafeDB($_POST['do'], 255, str) . '&ok=1';
        if (isset($_GET['back'])) {
            $form_url .= '&back=' . SafeDB($_GET['back'], 10, str);
        }
        $moderation_content = ForumModerationTopics($_POST['do'], $topics_ids, false);
        if ($moderation_content !== false) {
            $text = System::site()->FormOpen($form_url) . System::site()->Hidden('topics', implode(',', $topics_ids)) . System::site()->Hidden('backurl', $_SERVER['HTTP_REFERER']) . $moderation_content . System::site()->Button($forum_lang['back'], 'onclick="history.go(-1);"') . System::site()->Submit($forum_lang['execute']);
            System::site()->AddTextBox('Модерация тем', $text);
        }
    }
}
            $frsy = $sy - floor($sy);
            $frsx1 = 1 - $frsx;
            $frsy1 = 1 - $frsy;
            // вычисление цвета нового пикселя как пропорции от цвета основного пикселя и его соседей
            $newcolor = floor($color * $frsx1 * $frsy1 + $color_x * $frsx * $frsy1 + $color_y * $frsx1 * $frsy + $color_xy * $frsx * $frsy);
        }
        imagesetpixel($result_MultiWave->gd, $x, $y, imagecolorallocate($result_MultiWave->gd, $newcolor, $newcolor, $newcolor));
    }
}
// Сглаживание
if (function_exists('imageconvolution')) {
    $matrix = array(array(1, 2, 1), array(2, 4, 2), array(1, 2, 1));
    imageconvolution($result_MultiWave->gd, $matrix, 16, 0);
}
// Добавляем рамку
//if($border > 0){
//	imagerectangle($result_MultiWave->gd, 0, 0, $result_MultiWave->Width-1, $result_MultiWave->Height-1, $border_color);
//}
// -----------------------------------------------------------------------
header('Expires: Mon, 1 Jan 2006 00:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');
$result_MultiWave->SendToHTTPClient();
$captcha->Destruct();
$result_image->Destruct();
$result_MultiWave->Destruct();
System::user()->Def('captcha_keystring', $code);
// Восстанавливаем Referer
System::user()->Def('REFERER', $_SERVER['HTTP_REFERER']);
exit;
/**
 * Главная страница форума, список форумов в категории или подфорумов в форуме.
 * @param int   $cat_id Идентификатор просматриваемого каталога
 * @global type $forum_lang
 * @return type
 */
function IndexForumMain($cat_id = null, &$topics_data = null)
{
    global $forum_lang;
    $forums_tree = ForumTree::Instance();
    if (isset($cat_id)) {
        $parent = $forums_tree->IdCats[$cat_id]['parent_id'];
        // Чтобы сделать просмотр категории нужно её выводить как подкатегорию родительской категории
        $cat = $parent == 0;
        // Просмотр категории или главной страницы форума
        $main = false;
        // Не главная страница (просмотр категории или форума)
    } else {
        $cat = true;
        // Однозначно просматриваем категрию или главную страницу форума (выводим блоки онлайн и статистики)
        $cat_id = 0;
        $parent = 0;
        // Корневой раздел в качестве родительской категории
        $main = true;
        // Главная страница
    }
    // Нет категорий, выводим сообщение
    if (!isset($forums_tree->Cats[$parent]) && $cat) {
        System::site()->AddTextBox($forum_lang['forum'], $forum_lang['no_category']);
        return;
    }
    if ($cat) {
        // Выводим категорию или главная страница форума (без топиков)
        // Устанавливаем заголовок страницы
        if (!$main) {
            System::site()->SetTitle(SafeDB($forums_tree->IdCats[$cat_id]['title'], 255, str) . ' - ' . $forum_lang['forum']);
        }
        // Объекты статистини и онлайн
        $statistics = ForumStatistics::Instance();
        $online = ForumOnline::Instance($cat_id, '0', true);
        // Инициализируем статистику
        $statistics->Initialize($forum_lang['statistics']);
        // Загружаем информацию по топикам в $topics_data и считаем статистику (кэшировать статистику)
        $topics_data = ForumCacheGetTopics();
        // Запрашиваем данные тем (агрегированы по форумам)
        $resolve_cats = array_keys($topics_data);
        foreach ($resolve_cats as $resolve_cat) {
            if (!isset($topics_data[$resolve_cat])) {
                continue;
            }
            foreach ($topics_data[$resolve_cat] as $topic) {
                $statistics->hits += $topic['hits'];
                $statistics->AddTopicAuthor($topic['starter_id'], $topic['starter_name']);
            }
        }
        // Подсчитываем количество тем и постов
        $counters = $forums_tree->GetCountersRecursive($cat_id);
        $statistics->topics_count = $counters['files'];
        $statistics->reply_count = $counters['cats'];
        // Выводим хлебные крошки
        $forums_tree->BreadCrumbsF($cat_id);
        System::site()->BreadCrumbsLastUrl = true;
        // Ссылки, Отметить все как прочитанные и показать все не прочитанные темы.
        System::site()->AddBlock('is_forum_member', AccessIsResolved(2), false, 'mark');
        $vars_is_forum_member = array();
        $vars_is_forum_member['url'] = '<a href="' . Ufu('index.php?name=forum&op=markread', 'forum/markread/') . '">' . $forum_lang['mark_all_read'] . '</a>';
        $vars_is_forum_member['viewnoreadurl'] = '<a href="' . Ufu('index.php?name=forum&op=viewnoread', 'forum/viewnoread/') . '">' . $forum_lang['viewnoread'] . '</a>';
        System::site()->Blocks['is_forum_member']['vars'] = $vars_is_forum_member;
        // Последние темы форума
        System::site()->AddBlock('old', true, false, 'mark');
        $vars_old = array();
        $vars_old['lasttopics'] = '<a href="' . Ufu('index.php?name=forum&op=lasttopics', 'forum/lasttopics/') . '">' . $forum_lang['lasttopics'] . '</a>';
        System::site()->Blocks['old']['vars'] = $vars_old;
    }
    // Загружаем данные о прочтении тем
    $read_data = Forum_Marker_GetReadData();
    $auth = System::user()->Auth;
    // Блоки форума
    System::site()->AddBlock('forums', true, true, 'forum');
    System::site()->AddBlock('is_no_sub_forum', $cat, false);
    // Блок со статистикой и онлайн (отключается в категории)
    $visable_cats = false;
    // Выведена хотябы одна категория с форумом - если нет то показываем ошибку
    foreach ($forums_tree->Cats[$parent] as $category) {
        // Категории
        if (!$main && ($category['id'] != $cat_id || !isset($forums_tree->Cats[$category['id']]))) {
            // Если просматриваем только одну категорию
            continue;
        }
        // Рекурсивно определяем настройки
        $forum_config = $forums_tree->GetForumConfigRecursive($category['id']);
        // Нет доступа или форум не виден или отключён
        if (!$forum_config['access']) {
            continue;
        }
        $visable_cats = true;
        $category = IndexForumDataFilter($category, $forum_config);
        // Выводим категорию
        IndexForumCatOpen($category);
        IndexForumRender($category);
        // Выводим форумы
        foreach ($forums_tree->Cats[$category['id']] as $forum) {
            $forum_id = $forum['id'];
            $forum_config = $forums_tree->GetForumConfigRecursive($forum_id);
            // Нет доступа или форум не виден или отключён
            if (!$forum_config['access']) {
                continue;
            }
            $forum = IndexForumDataFilter($forum, $forum_config);
            // Обрабатываем подфорумы
            $subforums = array();
            if (isset($forums_tree->Cats[$forum_id])) {
                foreach ($forums_tree->Cats[$forum_id] as $sforum) {
                    // Подфорумы, нужно добавить только пометку о прочтении и обработать
                    $read = true;
                    // прочитан
                    if ($auth) {
                        $childs_forums = $forums_tree->GetAllChildId($sforum['id']);
                        foreach ($childs_forums as $child_forum_id) {
                            if (!isset($topics_data[$child_forum_id])) {
                                continue;
                            }
                            foreach ($topics_data[$child_forum_id] as $topic) {
                                if (!isset($read_data[$topic['id']]) || $topic['last_post'] > $read_data[$topic['id']]['date']) {
                                    $read = false;
                                    // не прочитан
                                    break;
                                }
                            }
                            if (!$read) {
                                break;
                            }
                        }
                    }
                    $sforum = IndexForumDataFilter($sforum);
                    $sforum['read'] = $read;
                    $subforums[] = $sforum;
                }
            }
            // Определяем статус "прочинано" для форума
            $read = true;
            // прочитан
            if ($auth) {
                $childs_forums = $forums_tree->GetAllChildId($forum_id);
                foreach ($childs_forums as $child_forum_id) {
                    if (!isset($topics_data[$child_forum_id])) {
                        continue;
                    }
                    foreach ($topics_data[$child_forum_id] as $topic) {
                        if (!isset($read_data[$topic['id']]) || $topic['last_post'] > $read_data[$topic['id']]['date']) {
                            $read = false;
                            // не прочитан
                            break;
                        }
                    }
                    if (!$read) {
                        break;
                    }
                }
            }
            // Вывод форума в шаблон
            IndexForumRender($forum, false, $read, $subforums);
        }
        // Закрываем категорию
        IndexForumCatClose($category);
    }
    if ($visable_cats) {
        // Шаблон форума (полезно подключать шаблоны вконце, там может быть PHP код)
        System::site()->AddTemplatedBox('', 'module/forums.html');
    }
    if ($cat) {
        // Не при просмотре форума (субфорумы + топики)
        if (!$visable_cats) {
            System::site()->AddTextBox($forum_lang['forum'], $forum_lang['no_category']);
            return;
        }
        // Выводим блок онлайн
        $online->Render($cat_id, '0', $cat_id == 0 ? $forum_lang['all_online'] : $forum_lang['current_category']);
        // Выводим статистику
        $statistics->Render();
        // Быстрый переход
        if (!$cat) {
            ForumQuickTransitionBox($cat_id, $forum_lang['quick_transition']);
        }
    }
}
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
System::admin()->AddSubTitle('Блоки');
if (!System::user()->CheckAccess2('blocks', 'blocks')) {
    System::admin()->AccessDenied();
}
/**
 * Возвращает имена шаблонов блоков, которые имеет текущий шаблон сайта
 * @return Array
 */
function GetBlockTemplates()
{
    $TemplateDir = System::config('tpl_dir') . System::config('general/site_template') . '/block/';
    return GetFiles($TemplateDir, false, true, '.html.htm.tpl', true);
}
if (isset($_GET['a'])) {
    $action = $_GET['a'];
} else {
    $action = 'main';
}
switch ($action) {
    case 'main':
        // SideBar
function IndexPollsVoice()
{
    if (!isset($_GET['poll_id'])) {
        GoBack();
    }
    if (!isset($_POST['voice'])) {
        System::site()->AddTextBox('', '<p align="center">Вы не выбрали ни одного варианта ответа.</p>');
    } else {
        $pid = SafeEnv($_GET['poll_id'], 11, int);
        System::database()->Select('polls', GetWhereByAccess('view', "`id`='{$pid}' and `active`='1'"));
        if (System::database()->NumRows() == 0) {
            GoBack();
        }
        $poll = System::database()->FetchRow();
        $answers = unserialize($poll['answers']);
        $multianswers = SafeDB($poll['multianswers'], 1, int);
        $voice = SafeEnv($_POST['voice'], 11, int);
        if (!$multianswers) {
            $voice = $voice[0];
        }
        //Проверяем, учавствовал ли данный пользователь в этом опросе
        $ip = getip();
        if (System::user()->Auth) {
            $uid = System::user()->Get('u_id');
        } else {
            $uid = -1;
        }
        System::database()->Select('polls_voices', "`poll_id`='{$pid}' and (`user_ip`='{$ip}' or `user_id`='{$uid}')");
        if (System::database()->NumRows() == 0) {
            if (!$multianswers) {
                if (isset($answers[$voice])) {
                    $answers[$voice][2] = $answers[$voice][2] + 1;
                    $answers = serialize($answers);
                    System::database()->Update('polls', "answers='{$answers}'", "`id`='{$pid}'");
                } else {
                    GoBack();
                }
            } else {
                $c = count($voice);
                for ($i = 0; $i < $c; $i++) {
                    if (isset($answers[$voice[$i]])) {
                        $answers[$voice[$i]][2] = $answers[$voice[$i]][2] + 1;
                    } else {
                        GoBack();
                    }
                }
                $answers = serialize($answers);
                System::database()->Update('polls', "answers='{$answers}'", "`id`='{$pid}'");
            }
            $voice = serialize($voice);
            if (System::user()->Auth) {
                $user_id = System::user()->Get('u_id');
            } else {
                $user_id = 0;
            }
            System::database()->Insert('polls_voices', "'','{$pid}','" . getip() . "','{$voice}','{$user_id}'");
            System::user()->ChargePoints(System::config('points/polls_answer'));
            GoBack();
        } else {
            System::site()->AddTextBox('', '<p align="center">Извините, Вы уже принимали участие в этом опросе.</p>');
        }
    }
}
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
global $db_types;
$db_type = System::user()->Session('db_type');
$selected = $db_type === false || $db_type == 'flatfilesdb_setup';
System::site()->DataAdd($db_types, 'flatfilesdb_setup', 'FlatFiles (текстовые файлы)', $selected);
/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
System::admin()->AddSubTitle('Фотогалерея');
if (!System::user()->CheckAccess2('gallery', 'gallery')) {
    System::admin()->AccessDenied();
}
global $edit_images, $edit_cats, $edit_conf, $GalleryDir, $ThumbsDir;
$edit_images = System::user()->CheckAccess2('gallery', 'edit_images');
$edit_cats = System::user()->CheckAccess2('gallery', 'edit_cats');
$edit_conf = System::user()->CheckAccess2('gallery', 'config');
$GalleryDir = System::config('gallery/gallery_dir');
$ThumbsDir = System::config('gallery/thumbs_dir');
if (isset($_GET['a'])) {
    $action = $_GET['a'];
} else {
    $action = 'main';
}
TAddToolLink('Изображения', 'main', 'gallery');
if ($edit_images) {
    TAddToolLink('Добавить изображение', 'editor', 'gallery&a=editor');
    TAddToolLink('Мультизагрузка', 'upload', 'gallery&a=upload');
}
if ($edit_cats) {
    TAddToolLink('Категории', 'cats', 'gallery&a=cats');
    TAddToolLink('Добавить категорию', 'cateditor', 'gallery&a=cateditor');
/**
 * Удаление ключа индивидуальной настройки пользователя в базе данных.
 * @param      $Name Имя настройки.
 * @param null $UserId Идентификатор пользователя. Если не указан, то используется идентификатор текущего пользователя.
 * @return var|null Возвращает значение удаленной настройки, или null, если настройка не найдена.
 */
function UserDataDelete($Name, $UserId = null)
{
    $this_user = false;
    if (!isset($UserId)) {
        if (System::user()->Auth) {
            $UserId = SafeEnv($this->Get('u_id'), 11, int);
            $this_user = true;
        } else {
            return null;
        }
    }
    $Data = GetUserInfo($UserId);
    $Data = $Data['data'];
    if (isset($Data[$Name])) {
        $value = $Data[$Name];
        unset($Data[$Name]);
        $system_users_cache = GetUsers();
        $system_users_cache[$UserId]['data'] = $Data;
        if ($this_user) {
            System::user()->Session('u_data', $Data);
        }
        System::database()->Update('users', "`data`='" . SafeEnv(serialize($Data), 0, str) . "'", "`id`='{$UserId}'");
        return $value;
    }
}
 /**
  * Рекурсивно проверяет ограничения доступа у всех родителей объекта и возвращает наименьшие права, а так-же ищет последнее сообщение
  * в ветке форума и подсчитывает общее количество тем и сообщений.
  * @param type $CatId
  * @param null $UserLevel
  * @param null $RankMin
  * @return array [no_link_guest, new_message_email, access, add_topic, add_post, close, access_reason, add_topic_reason, add_post_reason, ...]
  */
 public function GetForumConfigRecursive($CatId, $UserLevel = null, $RankMin = null)
 {
     $config = array('no_link_guest' => '0', 'new_message_email' => '1', 'admin_theme_add' => '0', 'rang_access' => '0', 'rang_message' => '0', 'rang_add_theme' => '0', 'close_topic' => '0', 'view' => '4', 'status' => '1');
     $result = array('no_link_guest' => false, 'new_message_email' => true, 'access' => true, 'add_topic' => true, 'add_post' => true, 'close' => false, 'access_reason' => '', 'add_topic_reason' => '', 'add_post_reason' => '', 'topics' => 0, 'posts' => 0, 'last_post' => 0, 'last_poster_id' => 0, 'last_poster_name' => '', 'last_title' => '', 'last_id' => 0);
     // Подсчитываем наименьшие права
     $parents = $this->GetAllParent($CatId);
     // У всех родителей и у себя
     foreach ($parents as &$parent) {
         if ($parent['no_link_guest'] == '1') {
             $config['no_link_guest'] = '1';
         }
         if ($parent['new_message_email'] == '0') {
             $config['new_message_email'] = '0';
         }
         if ($parent['admin_theme_add'] == '1') {
             $config['admin_theme_add'] = '1';
         }
         if ($parent['rang_access'] != '0' && $config['rang_access'] == '0') {
             $config['rang_access'] = $parent['rang_access'];
         } elseif ($parent['rang_access'] != '0' && $config['rang_access'] != '0' && GetRankInfo($parent['rang_access'], 'min') > GetRankInfo($config['rang_access'], 'min')) {
             $config['rang_access'] = $parent['rang_access'];
         }
         if ($parent['rang_message'] != '0' && $config['rang_message'] == '0') {
             $config['rang_message'] = $parent['rang_message'];
         } elseif ($parent['rang_message'] != '0' && $config['rang_message'] != '0' && GetRankInfo($parent['rang_message'], 'min') > GetRankInfo($config['rang_message'], 'min')) {
             $config['rang_message'] = $parent['rang_message'];
         }
         if ($parent['rang_add_theme'] != '0' && $config['rang_add_theme'] == '0') {
             $config['rang_add_theme'] = $parent['rang_add_theme'];
         } elseif ($parent['rang_add_theme'] != '0' && $config['rang_add_theme'] != '0' && GetRankInfo($parent['rang_add_theme'], 'min') > GetRankInfo($config['rang_add_theme'], 'min')) {
             $config['rang_add_theme'] = $parent['rang_add_theme'];
         }
         if ($parent['close_topic'] == '1') {
             $config['close_topic'] = '1';
         }
         if ($parent['view'] < $config['view']) {
             $config['view'] = $parent['view'];
         }
         if ($parent['status'] == '0') {
             $config['status'] = '0';
         }
     }
     $user_rank = array();
     if (isset($UserLevel)) {
         $user_level = $UserLevel;
         if (isset($RankMin)) {
             $user_rank['min'] = $RankMin;
         } else {
             $user_rank['min'] = 0;
         }
     } else {
         $user_level = System::user()->AccessLevel();
         if ($user_level == ACCESS_MEMBER) {
             // Пользователь
             $user_rank = GetUserRankInfo();
             // Ранг текущего пользователя
         }
     }
     $result['no_link_guest'] = $user_level == ACCESS_GUEST && $config['no_link_guest'] == '1';
     // Только для гостей
     $result['new_message_email'] = $user_level < ACCESS_MEMBER && $config['new_message_email'] == '1';
     // Только для пользователй
     // Доступ
     if (!AccessIsResolved($config['view'])) {
         // Проверяем доступ по view
         $result['access'] = false;
         $result['access_reason'] = 'Доступ в этот раздел ограничен.';
     } elseif ($config['status'] == '0') {
         $result['access'] = false;
         $result['access_reason'] = 'Раздел отключён.';
     } elseif ($user_level != ACCESS_ADMIN && $config['rang_access'] != '0') {
         if ($user_level > ACCESS_MEMBER) {
             // Гость
             $result['access'] = false;
             $result['access_reason'] = 'Доступ в этот раздел ограничен для гостей.';
         } elseif ($user_level == ACCESS_MEMBER && GetRankInfo($config['rang_access'], 'min') > $user_rank['min']) {
             // Пользователь
             $result['access'] = false;
             $result['access_reason'] = 'Доступ в этот раздел разрешен только пользователям с рангом "' . SafeDB(GetRankInfo($config['rang_access'], 'title'), 255, str) . '" и выше.';
         }
     }
     // Добавление тем
     if (!$result['access']) {
         $result['add_topic'] = false;
         $result['add_topic_reason'] = $result['access_reason'];
     } elseif ($user_level != ACCESS_ADMIN) {
         if ($user_level > ACCESS_MEMBER) {
             $result['add_topic'] = false;
             $result['add_topic_reason'] = 'Гости не могут создавать темы.';
         } elseif ($config['close_topic'] == '1') {
             $result['add_topic'] = false;
             $result['add_topic_reason'] = 'Форум закрыт для обсуждения.';
         } elseif ($config['admin_theme_add'] == '1') {
             $result['add_topic'] = false;
             $result['add_topic_reason'] = 'Создавать новые темы могут только администраторы.';
         } elseif ($config['rang_add_theme'] != '0') {
             if ($user_level == ACCESS_MEMBER && GetRankInfo($config['rang_add_theme'], 'min') > $user_rank['min']) {
                 // Пользователь
                 $result['add_topic'] = false;
                 $result['add_topic_reason'] = 'Создание тем разрешено только пользователям с рангом "' . SafeDB(GetRankInfo($config['rang_add_theme'], 'title'), 255, str) . '" и выше.';
             }
         }
     }
     // Добавление сообщений
     if (!$result['access']) {
         $result['add_post'] = false;
         $result['add_post_reason'] = $result['access_reason'];
     } elseif ($user_level != ACCESS_ADMIN) {
         if ($user_level > ACCESS_MEMBER) {
             $result['add_post'] = false;
             $result['add_post_reason'] = 'Гости не могут добавлять сообщения.';
         } elseif ($config['close_topic'] == '1') {
             $result['add_post'] = false;
             $result['add_post_reason'] = 'Форум закрыт для обсуждения.';
         } elseif ($config['rang_add_theme'] != '0') {
             if ($user_level == ACCESS_MEMBER && GetRankInfo($config['rang_message'], 'min') > $user_rank['min']) {
                 // Пользователь
                 $result['add_post'] = false;
                 $result['add_post_reason'] = 'Добавление сообщений разрешено только пользователям с рангом "' . SafeDB(GetRankInfo($config['rang_message'], 'title'), 255, str) . '" и выше.';
             }
         }
     }
     // Форум закрыт
     $result['close'] = $config['close_topic'] == '1';
     // Ищем данные о последнем посте, подсчитываем общее количество тем и сообщений
     $childs = $this->GetAllChildId($CatId);
     foreach ($childs as $child) {
         $child = $this->IdCats[$child];
         $result['topics'] += $child['topics'];
         $result['posts'] += $child['posts'];
         if ($result['last_post'] < $child['last_post']) {
             $result['last_post'] = $child['last_post'];
             $result['last_poster_id'] = $child['last_poster_id'];
             $result['last_poster_name'] = $child['last_poster_name'];
             $result['last_title'] = $child['last_title'];
             $result['last_id'] = $child['last_id'];
         }
     }
     return $result;
 }
function AdminNewsSave()
{
    global $news_access_editnews;
    if (!$news_access_editnews) {
        System::admin()->AccessDenied();
    }
    $author = SafeEnv(System::user()->Get('u_name'), 255, str);
    // Получаем параметры
    $topic_id = SafeEnv($_POST['topic_id'], 11, int);
    $title = SafeEnv($_POST['title'], 255, str);
    // Модуль SEO
    $seo_title = SafeEnv($_POST['seo_title'], 255, str);
    $seo_keywords = SafeEnv($_POST['seo_keywords'], 255, str);
    $seo_description = SafeEnv($_POST['seo_description'], 255, str);
    //
    $allow_comments = EnToInt($_POST['acomments']);
    $icon = SafeEnv($_POST['icon'], 255, str);
    $start_text = SafeEnv($_POST['shorttext'], 0, str, false);
    $end_text = SafeEnv($_POST['continuation'], 0, str, false);
    $auto_br = EnToInt($_POST['auto_br']);
    $view = ViewLevelToInt(SafeEnv($_POST['view'], 15, str));
    $enabled = EnToInt($_POST['enabled']);
    $img_view = SafeEnv($_POST['img_view'], 1, int);
    $public_date = $_POST['public_date'];
    $public_time = $_POST['public_time'];
    $public = strtotime(str_replace('.', '-', $public_date) . ' ' . $public_time);
    $comments_counter = 0;
    $hit_counter = 0;
    if (isset($_GET['id'])) {
        $id = SafeEnv($_GET['id'], 11, int);
        System::database()->Select('news', "`id`='{$id}'");
        $news = System::database()->FetchRow();
        $author = SafeEnv($news['author'], 255, str);
        $comments_counter = SafeEnv($news['comments_counter'], 11, int);
        $hit_counter = SafeEnv($news['hit_counter'], 11, int);
        if ($topic_id != $news['topic_id'] && $news['enabled'] == 1) {
            CalcNewsCounter($news['topic_id'], false);
            CalcNewsCounter($topic_id, true);
        }
        if ($enabled != $news['enabled']) {
            CalcNewsCounter($topic_id, $enabled);
        }
    }
    $vals = Values('', $title, $public, $author, $topic_id, $allow_comments, $icon, $start_text, $end_text, $auto_br, $comments_counter, $hit_counter, $view, $enabled, $img_view, $seo_title, $seo_keywords, $seo_description);
    if (isset($id)) {
        System::database()->Update('news', $vals, "`id`='{$id}'", true);
        Audit('Редактирование новости "' . $title . '" (id: ' . $id . ')');
    } else {
        System::database()->Insert('news', $vals);
        CalcNewsCounter($topic_id, true);
        Audit('Новости: Добавление новости "' . $title . '"');
    }
    AdminNewsClearBlockCache();
    if (isset($_REQUEST['back'])) {
        GoRefererUrl($_REQUEST['back']);
    } else {
        GO(ADMIN_FILE . '?exe=news');
    }
}
 /**
  * Подключает модуль.
  * @param      $ClassName
  * @param bool $Admin
  * @return mixed
  */
 public static function run($ClassName, $Admin = false)
 {
     $anns = GetAnnotations($ClassName);
     $action_param = isset($anns['class']['ActionParam']) ? $anns['class']['ActionParam'] : 'a';
     $action = isset($_GET[$action_param]) ? $_GET[$action_param] : 'main';
     $title = isset($anns['class']['Title']) ? $anns['class']['Title'] : '';
     if ($Admin && $title != '') {
         self::admin()->AddSubTitle($title);
     }
     foreach ($anns['methods'] as $method => $params) {
         if (!isset($params['Action'])) {
             continue;
         }
         $actions = array();
         $titles = array();
         if (is_string($params['Action'])) {
             $actions[] = $params['Action'];
         } else {
             $actions = $params['Action'];
         }
         /*
          * Параметр ActionParam класса модуля совпадает с параметром Action метода.
          */
         if (($s = array_search($action, $actions)) !== false) {
             $params['Action'] = $action;
             $anns['Action'] = $action;
             /*
              * Проверка доступа.
              * Если есть заголовок аннотации Access проверяем доступ для администратора.
              */
             if (isset($params['Access']) && !System::user()->CheckAccess2($params['Access'][0], $params['Access'][1])) {
                 if ($Admin) {
                     System::admin()->AccessDenied();
                 } else {
                     Header('HTTP/1.1 403 Forbidden');
                     System::site()->InitPage();
                     System::site()->AddTextBox('Ошибка', '<p align="center">Доступ запрещен.</p>');
                     System::site()->TEcho();
                     exit;
                 }
             }
             /*
              * Генерируем массив заголовков.
              */
             if (isset($params['Title'])) {
                 if (is_string($params['Title'])) {
                     $titles[] = $params['Title'];
                 } else {
                     $titles = $params['Title'];
                 }
             } else {
                 $titles[] = $title;
             }
             /*
              * Берём заголовок для этого действия (Action)
              */
             $title = $titles[$s];
             $params['Title'] = $title;
             $anns['Title'] = $title;
             if ($title != '') {
                 if ($Admin) {
                     self::admin()->AddSubTitle($title);
                 } else {
                     self::site()->SetTitle($title);
                 }
             }
             /*
              * Создаём объект и вызываем метод.
              */
             $mod_obj = new $ClassName($anns);
             call_user_func(array($mod_obj, $method), $params);
         }
     }
 }
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
System::admin()->AddSubTitle('Администраторы');
global $editprofile, $action;
if (isset($_GET['a'])) {
    $action = $_GET['a'];
} else {
    $action = 'main';
}
$editprofile = ($action == 'editadmin' || $action == 'adminsave') && !System::user()->isSuperUser() && isset($_GET['id']) && $_GET['id'] == System::user()->Get('u_id');
if (!System::user()->isSuperUser() && !$editprofile) {
    System::admin()->AccessDenied();
}
if (!$editprofile) {
    TAddToolLink('Администраторы', 'main', 'admins');
    TAddToolLink('Группы администраторов', 'groups', 'admins&a=groups');
    TAddToolLink('Добавить группу', 'addgroup', 'admins&a=addgroup');
    TAddToolBox($action);
}
switch ($action) {
    case 'main':
        AdminsMain();
        break;
    case 'groups':
        AdminsGroups();
        break;
    public function DeletePost($post_id = null, $first = true)
    {
        if ($post_id == null) {
            if (isset($_GET['post_id'])) {
                $post_id = $_GET['post_id'];
            }
        }
        if ($post_id != null) {
            System::database()->Select($this->PostsTable, "`id`='{$post_id}'");
            $post = System::database()->FetchRow();
        } else {
            $text = 'post_id нигде не инициализирована.';
            System::site()->AddTextBox('Ошибка.', '<p align="center">' . $text . '</p>');
            return 0;
        }
        if ($first) {
            if (System::user()->Auth) {
                $editing = System::user()->Get('u_id') == $post['user_id'] || System::user()->isAdmin();
            } else {
                $editing = $post['user_id'] == '0' && $post['user_ip'] == getip();
            }
            if (!$editing) {
                $text = 'У вас недостаточно прав для удаления этого сообщения.';
                System::site()->AddTextBox('Ошибка.', '<p align="center">' . $text . '</p>');
                return 0;
            }
        }
        if (!$first || isset($_GET['ok'])) {
            $del_count = 1;
            $parent_posts = System::database()->Select($this->PostsTable, "`post_parent_id`='{$post_id}'");
            foreach ($parent_posts as $post) {
                $del_count += $this->DeletePost(SafeDB($post['id'], 11, int), false);
            }
            System::database()->Delete($this->PostsTable, "`id`='{$post_id}'");
            if (System::user()->isAdmin()) {
                Audit('Posts: Удаление комментария "' . $this->PostsTable . '"/"' . "(user: {$post['user_name']}, object_id: {$post['object_id']})" . '"');
            }
            return $del_count;
        } else {
            $text = '<br />Удалить сообщение?<br /><br />' . '<a href="' . $this->DeletePageUrl . '&amp;post_id=' . $post_id . '&amp;ok=1">Да</a> &nbsp;
			&nbsp;&nbsp;&nbsp;&nbsp; <a href="javascript:history.go(-1)">Нет</a><br /><br />';
            System::site()->AddTextBox('', '<p align="center">' . $text . '</p>');
            return 0;
        }
    }
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
if (!System::user()->isSuperUser()) {
    System::admin()->AccessDenied();
}
System::admin()->AddSubTitle('Расширения');
$action = isset($_GET['a']) ? $_GET['a'] : 'main';
System::admin()->SideBarAddMenuItem('Расширения', 'exe=extensions&a=main', 'main');
System::admin()->SideBarAddMenuItem('Установить', 'exe=extensions&a=installlist', 'installlist');
System::admin()->SideBarAddMenuItem('Загрузить', 'exe=extensions&a=uploadform', 'uploadform');
System::admin()->SideBarAddMenuBlock('', $action);
switch ($action) {
    case 'main':
        AdminExtensions();
        break;
    case 'installlist':
        AdminExtensionsInstallList();
        break;
    case 'install':
        AdminExtensionsInstall();
        break;
    case 'uploadform':
        AdminExtensionsUploadForm();
function IndexFeedBackSend()
{
    $err = array();
    if (!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['subject']) || !isset($_POST['department']) || !isset($_POST['message']) || !isset($_POST['feedback_form'])) {
        GO(Ufu('index.php'));
    } else {
        if ($_POST['name'] != '') {
            $name = SafeDB($_POST['name'], 250, str);
        } else {
            $err[] = 'Пожалуйста, укажите Ваше имя!';
        }
        if ($_POST['email'] != '') {
            $email = SafeDB($_POST['email'], 50, str);
        } else {
            $err[] = 'Пожалуйста, укажите Ваш действительный адрес E-mail!';
        }
        if ($_POST['subject'] != '') {
            $subject = SafeDB($_POST['subject'], 250, str, false, false, false);
        } else {
            $err[] = 'Пожалуйста, введите тему сообщения!';
        }
        // Проверяем капчу
        if (!System::user()->isDef('captcha_keystring') || System::user()->Get('captcha_keystring') != $_POST['keystr']) {
            $err[] = 'Вы ошиблись при вводе кода с картинки.';
        }
        if ($_POST['department'] != '') {
            $department = SafeEnv($_POST['department'], 11, int);
            System::database()->Select('feedback', "`active`='1' and `id`='{$department}'");
            if (System::database()->NumRows() > 0) {
                $dep = System::database()->FetchRow();
                $dep_email = SafeDB($dep['email'], 255, str);
                $department = SafeDB($dep['name'], 255, str);
            } else {
                $err[] = 'Департамент больше не существует или обратная связь с этим департаментом отключена.';
            }
        } else {
            $err[] = 'Пожалуйста, выберите департамент!';
        }
        if ($_POST['message'] != '') {
            $message = SafeDB($_POST['message'], 65535, str, false, false, false);
        } else {
            $err[] = 'Пожалуйста, введите сообщение!';
        }
    }
    $size = $_FILES['attach']['size'];
    // / 1024;
    if ($_FILES['attach']['error'] == UPLOAD_ERR_OK && $size >= System::config('feedback/max_filesize')) {
        $err[] = 'Слишком большой размер файла.';
    }
    if (count($err) == 0) {
        $mail = LmEmailExtended::Instance();
        $mail->SetTo($dep_email, Cp1251ToUtf8($department));
        $mail->SetFrom($email, Cp1251ToUtf8($name));
        $mail->SetSubject(Cp1251ToUtf8($subject));
        $text = Indent("\n\t\t\tЗдравствуйте!\n\n\t\t\tС помощью формы обратной связи на сайте \"" . System::config('general/site_name') . "\"\n\t\t\tвам было отправлено сообщение.\n\n\t\t\tДепартамент: {$department}\n\t\t\tИмя: {$name}\n\t\t\tE-mail: {$email}\n\t\t\tТема сообщения: {$subject}\n\t\t\tДата отправки: " . TimeRender(time(), true, false) . "\n\t\t\tСообщение: {$message}\n\t\t");
        $mail->AddTextPart(Cp1251ToUtf8($text));
        if ($_FILES['attach']['error'] == UPLOAD_ERR_OK) {
            $mail->AddAttachmentPart(file_get_contents($_FILES['attach']['tmp_name']), $_FILES['attach']['name']);
        }
        if ($mail->Send()) {
            System::site()->AddTextBox('Обратная связь', '<div style="text-align: center;">Ваше сообщение успешно отправлено!</div>');
        } else {
            System::site()->AddTextBox('Обратная связь', '<div style="text-align: center;">При отправке вашего сообщения произошла ошибка, повторите попытку или обратитесь к администратору.</div>');
        }
    } else {
        $text = 'Сообщение не отправлено:<br /><ul>';
        foreach ($err as $error) {
            $text .= '<li>' . $error . '</li>';
        }
        $text .= '</ul>';
        System::site()->AddTextBox('Ошибка', $text);
        IndexFeedBackForm();
    }
}
function IndexForumUserTopics()
{
    global $forum_lang;
    $forums_tree = ForumTree::Instance();
    // Проверка данных
    if (isset($_GET['user'])) {
        $user_id = SafeEnv($_GET['user'], 11, int);
        $user = GetUserInfo($user_id);
        if ($user === false) {
            // Пользователь не найден
            System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_user']);
            return;
        }
    } else {
        System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_no_data']);
        // Нет параметра
        return;
    }
    // Параметры постраничной навигации
    if (isset($_GET['page'])) {
        $page = SafeEnv($_GET['page'], 11, int);
    } else {
        $page = 1;
    }
    $topics_on_page = System::config('forum/topics_on_page');
    // Устанавливаем заголовок страницы
    $function_title = $forum_lang['allusertopics'] . ' "' . $user['name'] . '"';
    System::site()->SetTitle(SafeDB($function_title, 255, str) . ' - ' . ($page > 1 ? $forum_lang['page'] . $page . ' - ' : '') . $forum_lang['forum']);
    $forum_nav_url = Ufu('index.php?name=forum&op=usertopics&user='******'forum/usertopics/{user}-{page}/', true);
    //$forum_url = Ufu('index.php?name=forum&op=usertopics&user='******'forum/usertopics/{user}/');
    // Объекты статистики и онлайн
    $statistics = ForumStatistics::Instance();
    $online = ForumOnline::Instance('0', '0', true);
    // Обновляем статус онлайн
    // Инициализируем статистику
    $statistics->Initialize($forum_lang['statistics_cat']);
    // Хлебные крошки
    System::site()->BreadCrumbAdd($function_title);
    $auth = System::user()->Auth;
    $is_admin = System::user()->isAdmin();
    $current_user_id = System::user()->Get('u_id');
    // Загружаем данные корзины для видимых топиков
    $basket = ForumBasketGetData('forum_basket_topics');
    // Загружаем информацию по топикам в $topics_data и считаем статистику (кэшировать статистику)
    $topics_data = ForumCacheGetTopics();
    // Запрашиваем данные тем (агрегированы по форумам)
    $topics = array();
    // Сюда будем добавлять топики для вывода
    $resolve_cats = $forums_tree->GetAllAccessForumId(0);
    // Считаем только в открытых для доступа форумах
    foreach ($resolve_cats as $resolve_cat) {
        if (!isset($topics_data[$resolve_cat])) {
            continue;
        }
        foreach ($topics_data[$resolve_cat] as $topic) {
            // Отсеиваем
            if ($topic['starter_id'] == $user_id) {
                // Добавляем данные из корзины, если топик удалён в корзину
                $topic['status'] = '';
                $topic['show_delete'] = $is_admin;
                if ($topic['delete'] && isset($basket[$topic['id']]) && $auth && ($is_admin || $topic['starter_id'] == $current_user_id)) {
                    // Добавляем сообщение - "Удалено в корзину"
                    $topic['status'] = ForumBasketRender($topic['id'], $topic['title'], $basket, false);
                    $topic['show_delete'] = false;
                } elseif ($topic['delete']) {
                    continue;
                    // Удалён топик и корзина не показывается для этого пользователя
                }
                $statistics->hits += $topic['hits'];
                $statistics->AddTopicAuthor($topic['starter_id'], $topic['starter_name']);
                $statistics->topics_count += 1;
                $statistics->reply_count += $topic['posts'];
                $topics[] = $topic;
            }
        }
    }
    unset($topics_data);
    // Заголовки (Темы, Ответов, Просмотры)
    System::site()->AddBlock('statistik', true, false, 'stat');
    System::site()->SetVars('statistik', array('count_read' => ''));
    // Отключаем некоторые блоки
    System::site()->AddBlock('topic_form', false, false, 'form');
    System::site()->AddBlock('topic_right', false, false, 'topic');
    System::site()->AddBlock('forum', false);
    System::site()->AddBlock('forum_guest_message', false);
    // Блоки шаблона
    // Ссылки, Отметить все как прочитанные и показать все не прочитанные темы.
    $vars_is_forum_member = array();
    $vars_is_forum_member['url'] = '<a href="' . Ufu('index.php?name=forum&op=markread', 'forum/markread/') . '">' . $forum_lang['mark_all_read'] . '</a>';
    $vars_is_forum_member['viewnoreadurl'] = '<a href="' . Ufu('index.php?name=forum&op=viewnoread', 'forum/viewnoread/') . '">' . $forum_lang['viewnoread'] . '</a>';
    $vars_is_forum_member['forum_id'] = '0';
    if (!System::site()->HasBlock('is_forum_member')) {
        System::site()->AddBlock('is_forum_member', AccessIsResolved(2), false, 'mark');
    }
    System::site()->SetVars('is_forum_member', $vars_is_forum_member);
    // Последние темы форума
    System::site()->AddBlock('old', true, false, 'mark');
    $vars_old = array();
    $vars_old['lasttopics'] = '<a href="' . Ufu('index.php?name=forum&op=lasttopics', 'forum/lasttopics/') . '">' . $forum_lang['lasttopics'] . '</a>';
    System::site()->SetVars('old', $vars_old);
    // Блок списка топиков
    System::site()->AddBlock('topics', true, true, 'topic');
    // Инициализируем постраничную навигацию
    $navigation = new Navigation($page);
    $navigation->FrendlyUrl = System::config('general/ufu');
    // Выводим топики в шаблон
    if (count($topics) == 0) {
        // В этом форуме пока нет ни одной темы
        System::site()->AddBlock('no_topics', true);
        $navigation->DisableNavigation();
    } else {
        // Вывод постраничной навигации
        $navigation->GenNavigationMenu($topics, $topics_on_page, $forum_nav_url);
        // Загружаем данные о прочтении тем
        $read_data = Forum_Marker_GetReadData();
        $visable_topics = false;
        // Вывод тем из этой категории с постраничной навигацией
        foreach ($topics as $topic) {
            $forum_config = $forums_tree->GetForumConfigRecursive($topic['forum_id']);
            // Конфигурация просматриваемого форума
            // Статус прочитано
            $read = true;
            // прочитано
            if ($auth && (!isset($read_data[$topic['id']]) || $topic['last_post'] > $read_data[$topic['id']]['date'])) {
                $read = false;
            }
            $topic = ForumTopicFilterData($topic);
            // Фильтрация данных топика
            $topic['on'] = !$read;
            $topic['off'] = $read;
            if (!$topic['close']) {
                $topic['close'] = $forum_config['close'];
                $topic['begin'] = !$forum_config['close'];
            }
            $topic['page'] = $page;
            $visable_topics = true;
            System::site()->AddSubBlock('topics', true, $topic);
        }
        System::site()->AddBlock('no_topics', !$visable_topics);
    }
    // Блоки модерации
    ModerationForumTopicsBlocks();
    // Подключаем шаблон
    System::site()->AddTemplatedBox('', 'module/forum_topics.html');
    // Выводм блок онлайн
    $online->Render('0', '0', $forum_lang['all_online'], 'forum_topics_online');
    // Выводим статистику
    $statistics->Render('forum_topics_statistics');
    // Выбор периода и быстрый переход
    ForumQuickTransitionBox(0, $forum_lang['quick_transition']);
}
        }
        $text = "<div class=\"license_frame\"><div>" . $license . "</div></div>";
        $this->SetContent($text);
        $this->AddButton('Назад', 'main&p=2');
        $this->AddButton('Принимаю', 'install&p=2');
        break;
    case 2:
        // Выбор типа базы данных
        global $db_types;
        $db_types = array();
        SetupPlugins('db_types');
        $this->SetTitle("Выбор типа Базы данных.");
        $this->OpenForm('install&p=3');
        $text = '<p>Выберите тип Базы данных:&nbsp;</p>' . System::site()->Select('db_type', $db_types, true);
        $this->SetContent($text);
        $this->AddButton('Назад', 'install&p=1');
        $this->AddSubmitButton('Далее');
        break;
    case 3:
        // Перенаправление соответственно выбранному типу БД
        if (!isset($_POST['db_type'])) {
            $this->SetTitle('Ошибка');
            $this->SetContent('Вы не выбрали тип Базы данных.');
            $this->AddButton('Назад', 'install&p=2');
            break;
        }
        $smod = SafeEnv($_POST['db_type'], 255, str);
        System::user()->Session('db_type', $smod);
        GO('setup.php?mod=' . $smod);
        break;
}
function IndexForumAddPost()
{
    global $forum_lang;
    $forums_tree = ForumTree::Instance();
    // Проверки на доступ
    if (CheckGet('topic')) {
        // Тема
        $topic_id = SafeEnv($_GET['topic'], 11, int);
        System::database()->Select('forum_topics', "`id`='{$topic_id}'");
        if (System::database()->NumRows() > 0) {
            $topic = System::database()->FetchRow();
        } else {
            System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_access_category']);
            return;
        }
        if ($topic['delete'] == '1') {
            // Тема на удалении
            System::site()->AddTextBox($forum_lang['error'], $forum_lang['topic_basket'] . '.' . $forum_lang['no_topic_basket_edit']);
            return;
        }
        if ($topic['close_topics'] == '1') {
            // Тема закрыта
            System::site()->AddTextBox($forum_lang['error'], $forum_lang['topic_close_for_discussion'] . '.' . $forum_lang['no_create_new_message_current_topic_add']);
            return;
        }
        // Форум
        $forum_id = SafeEnv($topic['forum_id'], 11, int);
        if (!isset($forums_tree->IdCats[$forum_id])) {
            System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_data']);
            return;
        }
        $forum = $forums_tree->IdCats[$forum_id];
        $forum_config = $forums_tree->GetForumConfigRecursive($forum_id);
        if (!$forum_config['access']) {
            // Доступ
            System::site()->AddTextBox($forum_lang['error'], $forum_config['access_reason']);
            return;
        } elseif (!$forum_config['add_post']) {
            // Разрешено ли добавлять новые сообщения (+ защита от гостей)
            System::site()->AddTextBox($forum_lang['error'], $forum_config['add_post_reason']);
            return;
        }
    } else {
        System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_data']);
        return;
    }
    // Добавляем сообщение
    if (!CheckPost('text') || strlen($_POST['text']) == 0) {
        System::site()->AddTextBox($forum_lang['error'], $forum_lang['error_data']);
        return;
    }
    $name = System::user()->Get('u_name');
    $email = System::user()->Get('u_email');
    $hideemail = System::user()->Get('u_hideemail');
    $site = System::user()->Get('u_homepage');
    $icq = System::user()->Get('u_icq');
    $uid = System::user()->Get('u_id');
    $text = SafeEnv($_POST['text'], 0, str);
    $vals = Values('', $topic_id, $uid, time(), $name, $site, $email, $hideemail, $icq, $text, getip(), 0);
    System::database()->Insert('forum_posts', $vals);
    // Обновляем время прочтения темы автором сообщения
    $user_id = System::user()->Get('u_id');
    System::database()->Delete('forum_topics_read', "`tid`='{$topic_id}' and `mid`='{$user_id}'");
    $time = time();
    $vals = "'{$user_id}','{$topic_id}','{$time}'";
    System::database()->Insert('forum_topics_read', $vals);
    // Информация о последнем сообщении в теме и форуме
    $forum['posts'] = (int) $forum['posts'] + 1;
    $topic['posts'] = (int) $topic['posts'] + 1;
    IndexForumSetLastPostInfo($forum, $topic);
    // Добавляем очков пользователю
    System::user()->ChargePoints(System::config('points/forum_post'));
    // Увеличиваем счётчик сообщений пользователя
    ForumCalcUserCounters(1);
    // Делаем рассылку подписчикам на эту тему
    Forum_Subscription_Send($topic_id);
    // Очищаем кэш форума
    ForumCacheClear();
    GO(Ufu('index.php?name=forum&op=showtopic&topic=' . $topic_id . '&view=lastpost#last', 'forum/topic{topic}-new.html'));
}
 /**
  * Производит рендеринг и вывод всей страницы сайта
  * @param bool $Blocks
  * @param bool $OnlineProcess
  * @param bool $Return
  * @return bool|string
  */
 public function TEcho($Blocks = true, $OnlineProcess = true, $Return = false)
 {
     if (defined('INDEX_PHP') && INDEX_PHP == true) {
         $title = 'Главная';
     } else {
         $title = $this->Title;
     }
     if ($OnlineProcess) {
         System::user()->OnlineProcess($title);
         if (System::user()->Auth) {
             System::user()->ChargePoints(System::config('points/browsing'));
         }
     }
     if ($Blocks) {
         $this->ViewBlocks();
     }
     if ($this->ShowBreadCrumbs) {
         $this->ViewBreadCrumbs();
     }
     // Вывод ошибок и отладочных данных
     $ErrorsText = '';
     if (System::config('debug/php_errors')) {
         $ErrorsText .= implode("<br>\n", System::$Errors);
     }
     if (ob_get_level() > 0 && ob_get_length() > 0) {
         $ErrorsText .= ob_get_clean();
     }
     $this->SetVar('template', 'errors_text', $ErrorsText);
     return $this->EchoAll($Return);
 }