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>');
    }
}
/**
 * Подключает группу системных плагинов.
 * @param  $group группа
 * @param string $function подгруппа(если есть)
 * @param bool $return возвратить имена файлов плагинов вместо их автоматического подключения
 * @param bool $return_full возвращать вместо имен файлов массив с полной информацией по плагинам
 * @return array
 */
function SystemPluginsIncludeGroup($group, $function = '', $return = false, $return_full = false)
{
    global $config;
    $result = array();
    // Поиск плагинов
    $group_dir = System::config('sys_plug_dir') . $group;
    if (!is_dir($group_dir)) {
        return array();
    }
    $plugins = GetFolders($group_dir . '/');
    // Подготавливаем результат
    foreach ($plugins as $plugin) {
        if ($function != '') {
            $plugin_name = RealPath2($group_dir . '/' . $plugin . '/' . $function) . '/';
        } else {
            $plugin_name = RealPath2($group_dir . '/' . $plugin) . '/';
        }
        global $include_plugin_path;
        // эта переменная будет доступна из плагина
        $include_plugin_path = $plugin_name;
        if ($return) {
            $result[] = $include_plugin_path;
        } else {
            include $include_plugin_path . 'index.php';
        }
    }
    return $result;
}
/**
 * Вызывается при запросе несуществующей
 * страницы или ошибки и использования спецсимволов в параметрах
 * @param bool $LowProtect
 * @param bool $Redirect
 * @return void
 */
function HackOff($LowProtect = false, $Redirect = true)
{
    global $config;
    if (System::user()->isAdmin() || $LowProtect) {
        if (defined('MAIN_SCRIPT') || defined('PLUG_SCRIPT') || !defined('ADMIN_SCRIPT')) {
            if ($Redirect) {
                GO(Ufu('index.php'));
            }
        } elseif (defined('ADMIN_SCRIPT')) {
            GO(ADMIN_FILE);
        }
    } else {
        if (System::config('security/hack_event') == 'alert') {
            die(System::config('security/hack_alert'));
        } elseif (System::config('security/hack_event') == 'ban') {
            die('Вам был запрещен доступ к сайту, возможно система обнаружила подозрительные
			действия с Вашей стороны. Если Вы считаете, что это произошло по ошибке, - обратитесь
			в службу поддержки по e-mail ' . System::config('general/site_email') . '.');
        } else {
            if ($Redirect) {
                GO(Ufu('index.php'));
            }
        }
    }
}
/**
 * Парсер смайликов.
 * @param  $text
 * @return void
 */
function SmiliesReplace(&$text)
{
    static $codes = null;
    if (!isset($codes)) {
        $codes = array();
        $smilies_dir = System::config('general/smilies_dir');
        $smilies = System::database()->Select('smilies');
        // Пусть отключенные смайлики тоже парсятся
        foreach ($smilies as $smile) {
            $sub_codes = explode(',', $smile['code']);
            $smile_file = SafeDB($smile['file'], 255, str);
            if ($smile['desc'] != '') {
                $title = SafeDB($smile['desc'], 255, str);
            } else {
                $title = SafeDB(GetFileName($smile_file, true), 255, str);
            }
            foreach ($sub_codes as $code) {
                $code = trim($code);
                if ($code != '') {
                    $codes[$code] = '<img src="' . RealPath2($smilies_dir . $smile_file) . '" title="' . $title . '">';
                }
            }
        }
    }
    $text = strtr($text, $codes);
}
/**
 * Подключение библиотеки из папки lib. Принимает произвольное количество параметров или массив.
 * @param $FileName1 Имя папки библиотеки в папке Lib (base/lib/ по умолчанию), функция подключает lib.php файл)
 * @param string $FileName2
 * @param string $FileName3
 * @return void
 */
function UseLib($FileName1, $FileName2 = '', $FileName3 = '')
{
    $args = func_get_args();
    if (is_array($args[0])) {
        $args = $args[0];
    }
    foreach ($args as $path) {
        include_once RealPath2(System::config('lib_dir') . $path . '/lib.php');
    }
}
Esempio n. 6
0
 /**
  * 자동 라우팅 처리 start
  * @throws ConfigureException
  * @throws DirectoryException
  */
 protected function autoload()
 {
     System::config();
     $siteConfig = Configure::site();
     $siteNamespace = $siteConfig['namespace'] . "\\";
     Autoloader::setPsr4(array($siteNamespace => array(Directory::sitePath('controller')), $siteNamespace . "Model\\" => array(Directory::sitePath('model'))));
     //방화벽 가동
     Firewall::ruleStart();
     //실제 작업 시작
     $this->execute();
 }
 function __construct()
 {
     global $config;
     $this->XMailer = CMS_VERSION_STR;
     if (System::config('smtp/use_smtp')) {
         $this->SmtpSend = true;
         $this->SmtpHost = System::config('smtp/host');
         $this->SmtpPort = System::config('smtp/port');
         $this->SmtpLogin = System::config('smtp/login');
         $this->SmtpPassword = System::config('smtp/password');
     }
 }
/**
 * Отправляет E-mail
 * @param $ToName
 * @param $ToEmail
 * @param $Subject
 * @param $Text
 * @param bool $Html
 * @param string $From
 * @param string $FromEmail
 */
function SendMail($ToName, $ToEmail, $Subject, $Text, $Html = false, $From = '', $FromEmail = '')
{
    $mail = LmEmailExtended::Instance();
    if ($From == '' && $FromEmail == '') {
        $mail->SetFrom(System::config('general/site_email'), Cp1251ToUtf8(System::config('general/site_name')));
    } else {
        $mail->SetFrom($FromEmail, Cp1251ToUtf8($From));
    }
    $mail->SetSubject(Cp1251ToUtf8($Subject));
    if (!$Html) {
        $mail->AddTextPart(Cp1251ToUtf8($Text));
    } else {
        $mail->AddHtmlPart(Cp1251ToUtf8($Text));
    }
    $mail->AddTo($ToEmail, Cp1251ToUtf8($ToName));
    if (!$mail->Send()) {
        ErrorHandler(USER_ERROR, 'Проблема при отправке E-mail "' . $Subject . '".', __FILE__);
    }
}
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);
    }
}
/**
 * Генерирует миниатюру и кэширует её. Возвращает имя файла миниатюры.
 * @param      $FileName   Исходный файл изображения.
 * @param int  $MaxWidth   Максимальная ширина миниатюры.
 * @param int  $MaxHeight  Максимальная высота миниатюры.
 * @param bool $Streech    Растягивать ли картинку если заданные размеры больше исходных
 * @param null $SaveFormat Формат сохранения миниатюры (jpeg, png, gif, wbmp).
 * @return mixed
 */
function GetThumb($FileName, $MaxWidth = 0, $MaxHeight = 0, $Streech = false, $SaveFormat = null)
{
    if ($FileName == '') {
        return 'images/no_image.png';
    } elseif (substr($FileName, 0, 7) == 'http://') {
        return $FileName;
    }
    $FileName = RealPath2($FileName);
    if (isset($SaveFormat)) {
        $ext = '.' . $SaveFormat;
    } else {
        $ext = GetFileExt($FileName);
    }
    $tmb_path = System::config('general/tmb_path');
    if (!is_dir($tmb_path)) {
        MkDirRecursive($tmb_path);
    }
    $tmb_file = $tmb_path . md5($FileName) . '_' . $MaxWidth . 'x' . $MaxHeight . ($Streech ? '_streech' : '') . $ext;
    if (!is_file($tmb_file)) {
        CreateThumb($FileName, $tmb_file, $MaxWidth, $MaxHeight, $Streech, $SaveFormat);
    }
    return $tmb_file;
}
<?php

/*
 * LinkorCMS 1.4
 * � 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
global $db;
if (System::config('db_type') == 'MySQL') {
    include_once $include_plugin_path . 'mysql.layer.php';
    $db = new LcDatabaseMySQL();
}
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
 */
AddCenterBox('Резервные копии');
$backup_dir = System::config('backup_dir');
if (!is_writable($backup_dir)) {
    System::admin()->HighlightError('<strong style="color: #FF0000;">Внимание!</strong> Нет прав на запись в папку ' . $backup_dir . '. Создание резервных копий не возможно.');
}
System::admin()->AddJS('
CreateBackup = function(){
	Admin.ShowSplashScreen("Создание резервной копии");
	$.ajax({
		type: "POST",
		url: "' . ADMIN_FILE . '?exe=dbadmin&a=backup_create",
		data: {},
		success: function(data){
			Admin.LoadPage("' . ADMIN_FILE . '?exe=dbadmin&a=backups", undefined, "Обновление страницы");
			Admin.HideSplashScreen();
		}
	});
};
');
$backup_files = GetFiles($backup_dir, false, true, '.zip');
rsort($backup_files, SORT_STRING);
$backup_files2 = array();
foreach ($backup_files as $file) {
    if (GetSecondFileExt($file, true) == System::database()->Name) {
        $backup_files2[] = $file;
/**
 * Выводит дату в строковом формате
 * @param $Time
 * @param bool $Full
 * @param bool $Logic
 * @return string
 */
function TimeRender($Time, $Full = true, $Logic = true)
{
    if ($Time == false || !is_numeric($Time)) {
        return 'Нет данных';
    }
    $now = time();
    $ld = round($now / 86400 - $Time / 86400);
    if ($ld > 1 || $now < $Time || !$Logic) {
        $fdate = 'd.m.Y';
    } elseif ($ld == 0) {
        $fdate = 'Сегодня';
    } elseif ($ld == 1) {
        $fdate = 'Вчера';
    } else {
        return 'Нет данных';
    }
    if ($Full) {
        $date = date($fdate . ' ' . System::config('general/datetime_delimiter') . ' H:i', $Time);
    } else {
        $date = date($fdate, $Time);
    }
    return $date;
}
 function __construct()
 {
     global $config;
     $this->path = System::config('cache_dir');
     $this->enabled = USE_CACHE && is_dir($this->path) && is_writable($this->path) && !defined('SETUP_SCRIPT');
 }
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']);
}
/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
define('RSS_SCRIPT', true);
define('VALID_RUN', true);
require 'config/init.php';
// Конфигурация и инициализация
@header("Content-Type: text/xml");
@header("Cache-Control: no-cache");
@header("Pragma: no-cache");
$rss_title = 'Новости на ' . System::config('general/site_url');
$rss_link = System::config('general/site_url');
$rss_description = 'RSS канал сайта ' . System::config('general/site_url') . '.';
$rss = new RssChannel($rss_title, $rss_link, $rss_description);
$rss->pubDate = gmdate('D, d M Y H:i:s') . ' GMT';
$rss->generator = CMS_NAME . ' ' . CMS_VERSION;
$rss->managingEditor = '*****@*****.**';
$rss->webMaster = System::config('general/site_email');
$num = 10;
// Пока максимум 10 заголовков по умолчанию
$news = System::database()->Select('news', "`enabled`='1'", $num, 'date', true);
foreach ($news as $s) {
    $title = SafeDB($s['title'], 255, str);
    $description = SafeDB($s['start_text'], 4048, str);
    $link = HtmlChars(GetSiteUrl() . Ufu('index.php?name=news&op=readfull&news=' . $s['id'] . '&topic=' . $s['topic_id'], 'news/{topic}/{news}/'));
    $pubDate = gmdate('D, d M Y H:i:s', $s['date']) . ' GMT';
    $rss->AddItem($title, $description, $link, $pubDate, $link);
}
echo $rss->Generate();
/**
 * Отображает страницу ошибки 404 и завершает скрипт.
 * @param bool $Exit Если false то скрипт не завершиться.
 */
function Error404($Exit = true)
{
    Header("HTTP/1.1 404 Not Found");
    $path = System::config('tpl_dir') . System::config('general/site_template') . '/';
    if ($path . '404.html') {
        $page = new Page('404.html', '', false, PAGE_AJAX);
        $page->TEcho(false, false);
    } else {
        readfile('errorpages/404.html');
    }
    if ($Exit) {
        exit;
    }
}
        $id = SafeEnv($r['id'], 11, int);
        System::database()->Update('forms', "`link`='{$link}'", "`id`='{$id}'");
    }
    // Обновление таблицы rewrite_rules
    System::database()->Truncate('rewrite_rules');
    System::database()->InsertColl('rewrite_rules', Unserialize('a:4:{s:4:"name";s:4:"name";s:4:"type";s:7:"varchar";s:6:"length";i:255;s:7:"notnull";b:1;}'), 0);
    System::database()->InsertColl('rewrite_rules', Unserialize('a:4:{s:4:"name";s:6:"module";s:4:"type";s:7:"varchar";s:6:"length";i:255;s:7:"notnull";b:1;}'), 1);
    System::database()->InsertColl('rewrite_rules', Unserialize('a:4:{s:4:"name";s:11:"description";s:4:"type";s:7:"varchar";s:6:"length";i:255;s:7:"notnull";b:1;}'), 2);
    System::database()->InsertColl('rewrite_rules', Unserialize('a:4:{s:4:"name";s:5:"order";s:4:"type";s:3:"int";s:6:"length";i:11;s:7:"notnull";b:1;}'), 6);
    // Системные правила
    UfuAddRuleByTemplate('system', 'mod', 'Ссылка на модуль', 'name={str}', '{name}/', 1000);
    // Правила для страниц
    UfuAddRuleByTemplate('pages', 'page', 'Ссылка на страницу', 'name=pages&file={ustr}', '{file}.html');
    // Правила для модуля веб форм
    UfuAddRuleByTemplate('forms', 'form', 'Страница с формой', 'name=forms&formlink={ustr}', 'forms/{formlink}.html');
    Ufu('index.php?name=forms&form={num}', 'forms/{form}/');
    Ufu('index.php?name=news&op=topics', 'news/{op}/', 15000);
    // Обновление шаблона
    $template = System::config('general/site_template');
    if ($template != 'default' && $template != 'IgrimTheme') {
        $file_name = System::config('tpl_dir') . $template . '/module/user_list.html';
        $temp_content = file_get_contents($file_name);
        $temp_content = str_replace('{title.last}', '{title.last_visit}', $temp_content);
        file_put_contents($file_name, $temp_content);
    }
    // Пересборка ядра
    if (is_file('config/system_build.php')) {
        unlink('config/system_build.php');
    }
    System::cache()->ClearAll();
}
 /**
  * Компилирует шаблоны и выводит результат в браузер
  * @param bool $Return
  * @return string|bool
  */
 public function EchoAll($Return = false)
 {
     if (!$this->Disabled) {
         $this->SetPage();
     }
     $start = microtime(true);
     $contents = $this->Compile();
     // Компиляция всей страницы
     $info = $this->GetPageInfo($start);
     if (defined('SETUP_SCRIPT') || !System::config('general/show_script_time')) {
         $info = '';
     }
     $contents = str_replace('%info%', $info, $contents);
     if ($Return) {
         return $contents;
     }
     if ($this->GZipCompressPage && $this->SupportGZip) {
         @header('Content-Encoding: gzip');
         ob_start('ob_gzhandler');
         echo $contents;
         ob_end_flush();
     } else {
         echo $contents;
     }
     return true;
 }
function AdminBlocksSave($a)
{
    $block_config = '';
    $editsave = System::config('blocks_dir') . SafeEnv($_POST['type'], 255, str) . '/editsave.php';
    if (file_exists($editsave)) {
        include_once $editsave;
        // Что-то записывает в $block_config
    }
    VisibilityConditionsAdminSave($showin, $extra_uri);
    $b_v = ViewLevelToInt($_POST['view']);
    $b_en = EnToInt($_POST['enabled']);
    if (isset($_GET['id'])) {
        $id = SafeEnv($_GET['id'], 11, int);
    } else {
        $id = 0;
    }
    $place = GetPlace(SafeEnv($_POST['position'][0], 1, str), $id);
    // FIXME: Ниже блок вытаскивается, тогда можно узнать его place без лишнего запроса
    if ($id != 0) {
        $block = System::database()->Select('blocks', "`id`='{$id}'");
        $block_pos = SafeEnv($block[0]['position'], 1, str);
    }
    $vals = Values('', SafeEnv($_POST['title'], 255, str), SafeEnv($_POST['type'], 255, str), $place, '', '1', $block_config, SafeEnv($_POST['template'], 255, str), SafeEnv($_POST['position'][0], 1, str), $b_v, $b_en, $showin, $extra_uri);
    if ($a == 'newsave') {
        System::database()->Insert('blocks', $vals);
        Audit('Блока: Добавление блока "' . $_POST['title'] . '"');
    } elseif ($a == 'update') {
        System::database()->Update('blocks', $vals, "`id`='" . $id . "'", true);
        Audit('Блока: Изменение блока "' . $_POST['title'] . '"');
        if ($block_pos != $_POST['position'][0]) {
            // Пересчитываем все place в предыдущем position
            $blocks = System::database()->Select('blocks', "`position`='" . $block_pos . "'");
            if (count($blocks) > 0) {
                usort($blocks, 'AdminBlocksSort');
                foreach ($blocks as $i => $b) {
                    System::database()->Update('blocks', "`place`='{$i}'", "`id`='" . SafeEnv($b['id'], 11, int) . "'");
                }
            }
        }
    }
    GO(ADMIN_FILE . '?exe=blocks');
}
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();
    }
}
 /**
  * Выводит форму добавления или редактирования комментария.
  * @param bool        $Edit              Метод редактирования
  * @param string      $PostFormBlockName Имя блока для вывода формы
  */
 public function RenderForm($Edit = false, $PostFormBlockName = 'postsform')
 {
     if ($this->DisableComments) {
         System::site()->AddBlock($PostFormBlockName, false, false, 'form', $this->PostFormTemplate);
         return;
     } else {
         System::site()->AddBlock($PostFormBlockName, true, false, 'form', $this->PostFormTemplate);
     }
     if ($Edit && isset($_GET['post_id'])) {
         $post_id = SafeEnv($_GET['post_id'], 11, int);
     } elseif ($Edit && !isset($_GET['post_id'])) {
         ErrorHandler(USER_ERROR, 'Posts::PostForm(): post_id не инициализирована.', __FILE__);
         return;
     }
     if (!$Edit && !$this->AlloyComments) {
         $this->Alert($PostFormBlockName, 'Обсуждение закрыто');
         return;
     }
     if (!$Edit && !System::user()->Auth && !$this->GuestPost) {
         // Гость
         $this->Alert($PostFormBlockName, 'Гости не могут добавлять комментарии, войдите или зарегистрируйтесь.');
         return;
     }
     System::site()->AddVars('template', array('lang_posts_username' => 'Имя', 'lang_posts_useremail' => 'E-mail', 'lang_posts_hideemail' => 'Скрыть E-mail', 'lang_posts_userhomepage' => 'Сайт', 'lang_posts_posttitle' => 'Заголовок', 'lang_posts_postmessage' => 'Сообщение', 'lang_posts_cancel' => 'Отмена', 'lang_posts_canceltitle' => 'Вернуться к теме без сохранения изменений'));
     $back = '';
     if (!$Edit) {
         $back = '&back=' . SaveRefererUrl();
     }
     $vars = array();
     if ($Edit) {
         System::database()->Select($this->PostsTable, "`id`='{$post_id}'");
         $post = System::database()->FetchRow();
         if (System::user()->Auth) {
             $access = System::user()->Get('u_id') == $post['user_id'] || System::user()->isAdmin();
         } else {
             $access = $post['user_id'] == '0' && $post['user_ip'] == getip();
         }
         if (!$access) {
             $this->Alert($PostFormBlockName, 'У вас не достаточно прав!');
             return;
         }
         $vars['form_title'] = 'Редактирование сообщения';
         $vars['form_action'] = $this->PostFormAction . "&post_id={$post_id}" . $back;
         $vars['post_message'] = HtmlChars($post['post_message']);
         $vars['edit'] = true;
         System::site()->SetVar('template', 'lang_posts_submit', 'Сохранить');
         System::site()->SetVar('template', 'lang_posts_submittitle', 'Сохранить изменения и вернуться');
         $vars['visibility'] = 'visible';
     } else {
         $vars['form_title'] = 'Добавить комментарий';
         $vars['form_action'] = $this->PostFormAction . $back;
         $vars['post_title'] = '';
         $vars['post_message'] = '';
         $vars['edit'] = false;
         System::site()->SetVar('template', 'lang_posts_submit', 'Добавить');
         System::site()->SetVar('template', 'lang_posts_submittitle', 'Добавить новое сообщение');
         $vars['visibility'] = 'hidden';
     }
     $vars['add'] = !$vars['edit'];
     $vars['add_guest'] = (System::user()->AccessLevel() == 3 || System::user()->AccessLevel() == 4) && $vars['add'];
     $vars['show_kaptcha'] = $vars['add_guest'] || !System::user()->isAdmin() && $this->ShowKaptchaForMembers;
     $vars['kaptcha_url'] = 'index.php?name=plugins&amp;p=antibot';
     $vars['kaptcha_width'] = '120';
     $vars['kaptcha_height'] = '40';
     // Подключаем BBCode редактор
     IncludePluginsGroup('bbcode_editors');
     // Смайлики для формы
     $smilies = System::database()->Select('smilies', "`enabled`='1'");
     $vars['is_smilies'] = System::database()->NumRows() != 0;
     if ($vars['is_smilies']) {
         System::site()->AddBlock('smilies', true, true, 'smile');
         foreach ($smilies as $smile) {
             $smile['file'] = RealPath2(System::config('general/smilies_dir') . $smile['file']);
             $sub_codes = explode(',', SafeDB($smile['code'], 255, str));
             $smile['code'] = $sub_codes[0];
             System::site()->AddSubBlock('smilies', true, $smile);
         }
     } else {
         System::site()->AddBlock('smilies', true, false, 'smile', '', 'Смайликов пока нет.');
     }
     System::site()->Blocks[$PostFormBlockName]['vars'] = $vars;
 }
 /**
  * Производит рендеринг и вывод всей страницы сайта
  * @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);
 }
function AdminExtensionsConfig()
{
    System::admin()->AddSubTitle('Настройки модуля');
    $name = SafeEnv($_GET['name'], 255, str);
    System::database()->Select('modules', "`folder`='" . $name . "'");
    $mod = System::database()->FetchRow();
    System::admin()->FormRow('Имя', System::admin()->Edit('name', $mod['name'], false, 'style="width:200px;" class="autofocus"'));
    $dir = System::config('tpl_dir') . System::config('general/site_template') . '/themes/';
    if (is_dir($dir)) {
        $templates = GetFiles($dir, false, true, ".html");
    } else {
        $templates = array();
    }
    System::admin()->DataAdd($templates_data, '', 'Стандартный "theme.html"', $mod['theme'] == '');
    foreach ($templates as $template) {
        System::admin()->DataAdd($templates_data, $template, $template, $mod['theme'] == $template);
    }
    System::admin()->FormRow('Шаблон страницы', System::admin()->Select('theme', $templates_data));
    System::admin()->FormRow('Кто видит', System::admin()->Select('view', GetUserTypesFormData(SafeDB($mod['view'], 1, int))));
    System::admin()->FormRow('Включить', System::admin()->Select('enabled', GetEnData((bool) $mod['enabled'], 'Да', 'Нет')));
    System::admin()->AddCenterBox('Настройка модуля "' . SafeDB($mod['name'], 255, str) . '"');
    System::admin()->AddForm(System::admin()->FormOpen(ADMIN_FILE . '?exe=extensions&a=mod_configsave&name=' . SafeDB($mod['folder'], 255, str)), System::admin()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Submit('Сохранить'));
}
/**
 * Сохраняет данные формы сгенерированной фукцией AdminUserEditor
 *
 * @param  $back_link
 * @param string $a
 * @param int $id
 * @param bool $IsAdmin
 * @return void
 */
function AdminUserEditSave($back_link, $a = 'insert', $id = 0, $IsAdmin = false)
{
    $SystemAdmin = System::user()->isSuperUser();
    $edit = $a == 'update';
    $editProfile = $edit && !$SystemAdmin && $id == System::user()->Get('u_id');
    // Администратор редактирует свой профиль
    $editStatus = false;
    // Разрешено редактирование статуса
    $editType = false;
    // Разрешено редактировать тип пользователя
    // Загружаем данные пользователя из БД
    if ($edit) {
        $user = System::database()->SelectOne('users', "`id`='{$id}'" . ($IsAdmin ? " and `type`='1'" : " and `type`='2'"));
        if (!$user) {
            AddTextBox('Ошибка', '<p align="center">Пользователь не найден, либо у вас не достаточно прав для редактирования администраторов.</p>');
            return;
        }
    }
    // Устанавливаем ограничения доступа
    if ($IsAdmin) {
        // Редактируем администратора
        if ($SystemAdmin) {
            // Только системные администраторы могут редактировать статус и тип администраторов
            if (!$edit) {
                $editStatus = true;
            } elseif (!(groupIsSystem(SafeEnv($user['access'], 11, int)) && GetSystemAdminsCount() <= 1)) {
                // Если он не системный или системных больше 1
                $editStatus = true;
            }
            $editType = $editStatus;
        }
    } else {
        // Если пользователь
        $editStatus = true;
        // Все администраторы с доступом могут редактировать статус пользователя
        $editType = $SystemAdmin;
        // Только системные администраторы могут создавать администраторов
    }
    // Обрабатываем данные
    $errors = array();
    // Логин
    if (isset($_POST['login']) && CheckLogin($_POST['login'], $errors, !$edit)) {
        $login = SafeEnv($_POST['login'], 30, str);
    } else {
        $login = '';
    }
    // Пароль
    $pass = '';
    if (!$edit || $_POST['pass'] != '') {
        $pass_generate_message = '';
        if (isset($_POST['pass']) && CheckPass($_POST['pass'], $errors)) {
            $pass = SafeEnv($_POST['pass'], 30, str);
            if (!isset($_POST['rpass']) || SafeEnv($_POST['rpass'], 30, str) != $pass) {
                $errors[] = 'Пароли не совпадают.';
            }
        } else {
            $pass = '';
        }
        if (isset($_POST['pass']) && $_POST['pass'] == '') {
            srand(time());
            $pass = GenBPass(rand(System::config('user/pass_min_length'), 15));
            $pass_generate_message = '<br />Так как вы не указали пароль, он был сгенерирован автоматически и выслан на указанный E-mail пользователя.';
        }
        $pass2 = md5($pass);
    }
    // e-mail
    if (isset($_POST['email']) && $_POST['email'] != '') {
        if (!CheckEmail($_POST['email'])) {
            $errors[] = 'Не правильный формат E-mail. Он должен быть вида: <b>domain@host.ru</b> .';
        }
        $email = SafeEnv($_POST['email'], 50, str, true);
    } else {
        $email = '';
        $errors[] = 'Вы не ввели E-mail.';
    }
    // Скрыть e-mail
    if (isset($_POST['hideemail'])) {
        $hide_email = '1';
    } else {
        $hide_email = '0';
    }
    // Имя пользователя на сайте
    if (isset($_POST['nikname']) && CheckNikname($_POST['nikname'], $errors, !$edit)) {
        $nik_name = SafeEnv($_POST['nikname'], 50, str, true);
    } else {
        $nik_name = '';
    }
    // Полное имя
    if (isset($_POST['realname'])) {
        $real_name = SafeEnv($_POST['realname'], 250, str, true);
    } else {
        $real_name = '';
    }
    // Возраст
    if (isset($_POST['age'])) {
        if ($_POST['age'] == '' || is_numeric($_POST['age'])) {
            $age = SafeEnv($_POST['age'], 3, int);
        } else {
            $errors[] = 'Ваш возраст должен быть числом!';
        }
    } else {
        $age = '';
    }
    // Домашняя страница
    if (isset($_POST['homepage'])) {
        if ($_POST['homepage'] != '' && substr($_POST['homepage'], 0, 7) == 'http://') {
            $_POST['homepage'] = substr($_POST['homepage'], 7);
        }
        $homepage = SafeEnv($_POST['homepage'], 250, str, true);
    } else {
        $homepage = '';
    }
    // Номер ICQ
    if (isset($_POST['icq'])) {
        if ($_POST['icq'] == '' || is_numeric($_POST['icq'])) {
            $icq = SafeEnv($_POST['icq'], 15, str, true);
        } else {
            $errors[] = 'Номер ICQ должен содержать только числа!';
        }
    } else {
        $icq = '';
    }
    // Город
    if (isset($_POST['city'])) {
        $city = SafeEnv($_POST['city'], 100, str, true);
    } else {
        $city = '';
    }
    // Часовой пояс
    if (isset($_POST['gmt'])) {
        $gmt = SafeEnv($_POST['gmt'], 255, str);
    } else {
        $gmt = System::config('general/default_timezone');
    }
    // О себе
    if (isset($_POST['about'])) {
        $about = SafeEnv($_POST['about'], System::config('user/about_max_length'), str, true);
    } else {
        $about = '';
    }
    // Подписка на новости
    if (isset($_POST['snews'])) {
        $server_news = '1';
    } else {
        $server_news = '0';
    }
    //Обрабатываем аватар
    $updateAvatar = true;
    if (isset($_POST['avatar'])) {
        if (System::config('user/avatar_transfer') == '1' && isset($_FILES['upavatar']) && file_exists($_FILES['upavatar']['tmp_name'])) {
            if ($edit) {
                $avatar = $user['avatar'];
                $a_personal = $user['a_personal'];
            } else {
                $avatar = '';
                $a_personal = '0';
            }
            UserLoadAvatar($errors, $avatar, $a_personal, $avatar, $a_personal, $edit);
        } elseif ($_POST['avatar'] == '') {
            $updateAvatar = false;
        } elseif (file_exists(RealPath2(System::config('general/avatars_dir') . $_POST['avatar']))) {
            if ($edit) {
                if ($user['a_personal'] == '1') {
                    UnlinkUserAvatarFiles($user['avatar']);
                }
            }
            $a_personal = '0';
            $avatar = $_POST['avatar'];
        } else {
            $avatar = '';
            $a_personal = '0';
        }
    } else {
        $avatar = '';
        $a_personal = '0';
    }
    $SendActivation = false;
    if ($edit) {
        $active = SafeEnv($user['active'], 11, int);
        $code = SafeEnv($user['activate'], 11, int);
    } else {
        $active = '1';
        $code = '';
    }
    if ($editStatus) {
        $activate = $_POST['activate'];
        $lastactivate = 'manual';
        if ($active == '0' && $code != '') {
            $lastactivate = 'mail';
        } elseif ($active == '1' && $code == '') {
            $lastactivate = 'auto';
        }
        if ($activate != $lastactivate) {
            switch ($activate) {
                case 'manual':
                    $active = '0';
                    $code = '';
                    $SendActivation = false;
                    break;
                case 'auto':
                    $active = '1';
                    $code = '';
                    $SendActivation = false;
                    break;
                case 'mail':
                    $active = '0';
                    $code = GenRandomString(8, 'qwertyuiopasdfghjklzxcvbnm');
                    $SendActivation = true;
                    break;
            }
        }
    }
    if ($edit) {
        $access = SafeEnv($user['type'], 11, int);
        $user_type = SafeEnv($user['access'], 11, int);
    } else {
        $access = '2';
        $user_type = '-1';
    }
    if ($editType && $_POST['status'] != 'member') {
        $access = '1';
        $user_type = SafeEnv($_POST['status'], 11, int);
    }
    $reg_date = time();
    $last_visit = time();
    $ip = getip();
    $points = 0;
    $visits = 0;
    if ($SendActivation) {
        UserSendActivationMail($nik_name, $email, $login, $pass, $code, $reg_date);
    } elseif (!$edit) {
        UserSendEndRegMail($email, $nik_name, $login, $pass, $reg_date);
    }
    if (!$edit) {
        $values = Values('', $login, $pass2, $nik_name, $real_name, $age, $email, $hide_email, $city, $icq, $homepage, $gmt, $avatar, $about, $server_news, $reg_date, $last_visit, $ip, $points, $visits, $active, $code, $access, $user_type, $a_personal, serialize(array()));
        System::database()->Insert('users', $values);
    } else {
        $set = "`login`='{$login}',`email`='{$email}',`hideemail`='{$hide_email}',`name`='{$nik_name}'," . "`truename`='{$real_name}',`age`='{$age}',`url`='{$homepage}',`icq`='{$icq}',`city`='{$city}'," . "`timezone`='{$gmt}'" . ($updateAvatar == true ? ",`avatar`='{$avatar}',`a_personal`='{$a_personal}'" : '') . "," . "`about`='{$about}',`servernews`='{$server_news}'" . ($pass != '' ? ",`pass`='{$pass2}'" : '') . ",`type`='{$access}'," . "`access`='{$user_type}',`active`='{$active}',`activate`='{$code}'";
        System::database()->Update('users', $set, "`id`='" . $id . "'");
        System::user()->UpdateMemberSession();
        UpdateUserComments($id, $id, $nik_name, $email, $hide_email, $homepage);
    }
    if (count($errors) > 0) {
        $text = 'Аккаунт сохранен, но имели место следующие ошибки:<br /><ul>';
        foreach ($errors as $error) {
            $text .= '<li>' . $error;
        }
        $text .= '</ul>';
        AddTextBox('Внимание', $text);
    } else {
        // Очищаем кэш пользователей
        System::cache()->Delete(system_cache, 'users');
        if (!$editProfile) {
            GO(ADMIN_FILE . '?exe=' . $back_link);
        } else {
            System::admin()->AddCenterBox('Редактирование профиля');
            System::admin()->Highlight('Ваш профиль сохранён, обновите страницу.');
        }
    }
}
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
/*
 * Плагин вывода карты архива статей
 * Автор: Мартин
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
global $sitemap_show_objects, $sitemap_articles;
$sitemap_show_objects = System::config('general/sitemap_show_objects') ? '___SitemapPluginArticles2' : null;
$sitemap_articles = array();
if (isset($sitemap_show_objects)) {
    $articles = System::database()->Select('articles', "`active` = '1' and `view` = '4'", null, 'public');
    // Только включенные и доступные гостям
    foreach ($articles as $art) {
        $sitemap_articles[$art['cat_id']][] = array($art['title'], Ufu('index.php?name=articles&op=read&art=' . SafeDB($art['id'], 11, int) . '&cat=' . SafeDB($art['cat_id'], 11, int), 'articles/{cat}/{art}/'));
    }
    unset($articles);
}
function ___SitemapPluginArticles($Cat, $Level)
{
    SitemapAddObject($Level, $Cat['title'], Ufu('index.php?name=articles&cat=' . SafeDB($Cat['id'], 11, int), 'articles/{cat}'));
}
function ___SitemapPluginArticles2($CatId, $Level)
{
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
// Восстановление БД из резервной копии
$name = RealPath2(System::config('backup_dir') . $_GET['name']);
if (isset($_GET['table'])) {
    $table = $_GET['table'];
    System::admin()->AddCenterBox('Восстановление таблицы "' . $table . '"');
    $table = System::database()->Prefix() . $table;
} else {
    $table = '';
    System::admin()->AddCenterBox('Восстановление базы данных');
}
$restore_r = System::database()->RestoreBackupFile($name, $table);
if ($restore_r == 3) {
    System::admin()->HighlightError('Ошибка. Неверный формат файла, либо это бекап другого типа Базы данных.');
} elseif ($restore_r == 2) {
    System::admin()->Highlight('Произошли ошибки при восстановлении некоторых таблиц.');
} else {
    if ($table == '') {
        System::admin()->Highlight('База данных успешно восстановлена из резервной копии.');
        Audit('Управление БД: База данных восстановлена из резервной копии "' . $name . '"');
    } else {
        System::admin()->Highlight('Таблица "' . $table . '" успешно восстановлена из резервной копии.');
        Audit('Управление БД: Таблица "' . $table . '" восстановлена из резервной копии "' . $name . '"');
    }
}
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'));
}
/*
 * 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()->isSuperUser()) {
    System::admin()->AccessDenied();
}
include_once System::config('inc_dir') . 'forms.inc.php';
if (isset($_GET['a'])) {
    $action = $_GET['a'];
} else {
    $action = 'view_all';
}
TAddToolLink('Все настройки', 'view_all', 'config_admin&a=view_all');
TAddToolLink('Добавить настройку', 'add', 'config_admin&a=add');
TAddToolLink('Группы настроек', 'view_groups', 'config_admin&a=view_groups');
TAddToolBox($action);
TAddToolLink('Все настройки плагинов', 'view_all_plugins', 'config_admin&a=view_all_plugins&plugins=1');
TAddToolLink('Добавить настройку плагина', 'add_plugins', 'config_admin&a=add_plugins&plugins=1');
TAddToolLink('Группы настроек плагинов', 'view_groups_plugins', 'config_admin&a=view_groups_plugins&plugins=1');
TAddToolBox($action);
switch ($action) {
    case 'view_all':