function __construct($HtmlName, $Action = '', $Method = 'post', $OtherParams = '')
 {
     $this->htmlName = SafeDB($HtmlName, 255, str);
     $this->action = SafeDB($Action, 255, str);
     $this->method = SafeDB($Method, 255, str);
     $this->otherParams = $OtherParams;
 }
/**
 * Парсер смайликов.
 * @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);
}
 /**
  * Редактор категорий
  * @param null   $CatId
  * @param null   $ToId
  * @param string $OtherUrlParams
  * @return void
  */
 public function CatEditor($CatId = null, $ToId = null, $OtherUrlParams = '')
 {
     $title = '';
     $desc = '';
     $icon = '';
     $boxtitle = 'Добавить категорию';
     $save_met = $this->save_met;
     if ($CatId != null) {
         $cat = System::database()->SelectOne($this->Table, "`id`='{$CatId}'");
         $title = SafeDB($cat['title'], 255, str);
         $desc = SafeDB($cat['description'], 0, str, false);
         $icon = SafeDB($cat['icon'], 255, str);
         $parent = SafeDB($cat['parent'], 11, int);
         $boxtitle = 'Редактирование категории';
         $save_met = $this->save_met . '&' . $this->id_par_name . '=' . $CatId;
         $cmd = 'Сохранить изменения';
     } else {
         if ($ToId != null) {
             $parent = $ToId;
         } elseif (isset($_GET['_cat_adto'])) {
             $parent = SafeEnv($_GET['_cat_adto'], 11, int);
         } else {
             $parent = -1;
         }
         $cmd = 'Добавить';
     }
     $cats_data = $this->GetCatsData($parent, false, true, $CatId, true);
     FormRow('В категорию', System::site()->Select('cat', $cats_data, false, $parent == -1 ? 'class="autofocus"' : ''));
     FormRow('Имя категории', System::site()->Edit('title', $title, false, 'maxlength="250" style="width:400px;"' . ($parent != -1 ? 'class="autofocus"' : '')));
     FormRow('Иконка', System::site()->Edit('icon', $icon, false, 'maxlength="250" style="width:400px;"'));
     FormTextRow('Описание', System::site()->HtmlEditor('desc', $desc));
     AddCenterBox($boxtitle);
     AddForm('<form action="' . ADMIN_FILE . '?exe=' . $this->module . '&' . $this->action_par_name . '=' . $save_met . $OtherUrlParams . '" method="post">', System::site()->Button('Отмена', 'onclick="history.go(-1);"') . System::site()->Submit($cmd));
 }
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>');
    }
}
function ___SitemapPluginForum($Forum, $Level, $i, $c)
{
    global $forums_tree;
    $forum_config = $forums_tree->GetForumConfigRecursive($Forum['id'], ACCESS_ALL);
    if (!$forum_config['access']) {
        return false;
    }
    SitemapAddObject($Level, $Forum['title'], Ufu('index.php?name=forum&op=showforum&forum=' . SafeDB($Forum['id'], 11, int), 'forum/{forum}/'));
}
function getconf_TemplatesList($name)
{
    $r = array();
    $templates = System::database()->Select('templates', "`admin`='0'");
    foreach ($templates as $t) {
        $r[] = array(SafeDB($t['folder'], 255, str), SafeDB($t['name'], 255, str));
    }
    return $r;
}
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}/' : '')));
}
/**
 * Вывод адреса электронной почты в админке
 * @param string $Email
 * @param string $Name
 * @return string
 */
function PrintEmail($Email, $Name = '')
{
    $Email = SafeDB($Email, 255, str);
    $Name = SafeDB($Name, 255, str);
    if ($Email == '') {
        return '&nbsp;';
    } else {
        return '<a href="mailto:' . $Email . '">' . ($Name != '' ? $Name : $Email) . '</a>';
    }
}
 /**
  * Выводит данные каталога.
  * @param type $cat_id
  */
 public function ShowCats($cat_id)
 {
     $vars = array();
     $cats = $this->GetChildTree($cat_id);
     $c = count($cats);
     if ($c > 0) {
         System::site()->AddTemplatedBox('', $this->catTemplate);
         System::site()->AddBlock('cats', true, true, 'cat');
         for ($i = 0; $i < $c; $i++) {
             $id = SafeDB($cats[$i]['id'], 11, int);
             $vars['url'] = Ufu('index.php?name=' . $this->moduleName . '&' . $this->id_par_name . '=' . $id, $this->moduleName . '/{' . $this->id_par_name . '}/');
             $vars['title2'] = SafeDB($cats[$i]['title'], 255, str);
             $vars['title'] = '<a href="' . $vars['url'] . '">' . $vars['title2'] . '</a>';
             if (file_exists($cats[$i]['icon'])) {
                 $vars['icon_url'] = SafeDB(RealPath2($cats[$i]['icon']), 255, str);
             } else {
                 $vars['icon_url'] = 'images/cat.gif';
             }
             $vars['icon'] = '<img border="0" src="' . $vars['icon_url'] . '" />';
             $vars['description'] = $cats[$i]['description'];
             $counters = $this->GetCountersRecursive($id);
             $vars['count'] = $counters['files'];
             $vars['cat_count'] = $counters['cats'];
             // Выодим подкатегории
             $childs = '';
             $sub = '';
             if (isset($cats[$i][TREE_CHILD_ID])) {
                 for ($j = 0, $k = count($cats[$i][TREE_CHILD_ID]); $j < $k; $j++) {
                     $child_id = SafeDB($cats[$i][TREE_CHILD_ID][$j]['id'], 11, int);
                     $child_counters = $this->GetCountersRecursive($child_id);
                     $link = Ufu('index.php?name=' . $this->moduleName . '&' . $this->id_par_name . '=' . $child_id, $this->moduleName . '/{' . $this->id_par_name . '}/');
                     $sub .= '<a href="' . $link . '">' . $cats[$i][TREE_CHILD_ID][$j]['title'] . '</a>' . '&nbsp;(' . $child_counters['files'] . '), ';
                 }
                 $childs .= substr($sub, 0, -2) . '.';
             }
             $vars['childs_cats'] = $childs;
             System::site()->AddSubBlock('cats', true, $vars);
         }
         if ($cat_id == 0 && function_exists($this->NumItems)) {
             $text = '<br>' . $this->NumItemsCaption . call_user_func($this->NumItems);
         } else {
             $text = '';
         }
         System::site()->AddBlock('cat_caption', true, false, '', '', $text);
     } elseif ($cat_id == 0) {
         System::site()->AddTextBox('', '<p align="center">Категорий пока нет.</p>');
     }
 }
/**
 * Записывает реферал в базу данных.
 * @param $referer
 */
function AuditWriteReferer($referer)
{
    if (trim($referer) != '' && !IsMainHost($referer)) {
        $referer = SafeEnv(Url($referer), 255, str);
        $count = 1;
        System::database()->Select('referers', "`referer`='{$referer}'");
        if (System::database()->NumRows() > 0) {
            $ref = System::database()->FetchRow();
            $count = SafeDB($ref['count'], 11, int);
            $count++;
            System::database()->Update('referers', "count='{$count}'", "`referer`='{$referer}'");
        } else {
            $values = Values('', $referer, $count);
            System::database()->Insert('referers', $values);
        }
    }
}
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 AdminCacheMain()
{
    AddCenterBox('Очистка кэша');
    if (!System::cache()->Enabled) {
        if (USE_CACHE) {
            System::admin()->HighlightError('<strong style="color: #FF0000;">Внимание!</strong> Папка "' . System::cache()->Path . '" не доступна для записи. Функция кэширования отключена.');
        } else {
            System::admin()->HighlightError('<strong style="color: #FF0000;">Внимание!</strong> Функция кэширования отключена в конфигурационном файле "config/config.php".');
        }
    }
    $text = '<table cellspacing="0" cellpadding="0" class="cfgtable">';
    $text .= '<tr><th>Группа</th><th>Папка</th><th>Записей</th><th>Занимаемое место</th><th>Функции</th></tr>';
    $num_rows = 0;
    $total_size = 0;
    $groups = System::cache()->GetGroups();
    foreach ($groups as $g) {
        $file_size = 0;
        $num_files = 0;
        $folder = System::cache()->Path . $g;
        $files = scandir($folder);
        foreach ($files as $file) {
            if ($file != '.' && $file != '..') {
                $f = $folder . '/' . $file;
                if (!is_dir($f)) {
                    $file_size += filesize($f);
                }
                $num_files++;
            }
        }
        $func = SpeedButton('Очистить', ADMIN_FILE . '?exe=cache&a=clear&group=' . SafeDB($g, 255, str), 'images/admin/cleanup.png');
        $rows = floor($num_files / 2);
        $text .= '<tr>' . '<td>' . SafeDB($g, 255, str) . '</td>' . '<td>' . SafeDB($folder, 255, str) . '</td>' . '<td>' . $rows . '</td>' . '<td>' . FormatFileSize($file_size) . '</td>' . '<td>' . $func . '</td>' . '</tr>';
        $num_rows += $rows;
        $total_size += $file_size;
    }
    $text .= '</table><br />';
    $text .= 'Итого <b>' . count($groups) . '</b> групп(ы), <b>' . $num_rows . '</b> записей и <b>' . FormatFileSize($total_size) . '</b> занято.&nbsp;' . System::admin()->SpeedButton('Очистить все группы', ADMIN_FILE . '?exe=cache&a=cleanup', '', true, true);
    $text .= '<br /><br />';
    AddText($text);
}
/*
 * 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();
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
$table = SafeEnv($_GET['name'], 255, str);
$index = SafeEnv($_GET['index'], 11, int);
$where = '';
if (isset($_GET['where'])) {
    $where = $_GET['where'];
}
$rows = System::database()->Select($table, $where);
$row = $rows[$index];
$row2 = array();
$columns = System::database()->GetTableColumns($table);
foreach ($columns as $col) {
    $row2[] = $row[$col['name']];
}
$row2 = SafeEnv($row2, 0, str);
$code_vals = Values($row2);
$install_code = "System::database()->Insert('{$table}',\"{$code_vals}\");" . EOL;
System::admin()->AddCenterBox('PHP код вставки');
System::admin()->FormRow('Установка', $site->TextArea('code', $install_code, 'style="width: 800px; height: 200px;" class="autofocus selectall"'));
System::admin()->AddForm('', $site->Button('Назад', 'onclick="history.go(-1);"'));
AdminFdbAdminGenTableMenu(SafeDB($table, 255, str));
function AdminBlocksMove()
{
    $move = SafeEnv($_GET['to'], 4, str);
    $id = SafeEnv($_GET['id'], 11, int);
    System::database()->Select('blocks', "`id`='" . $id . "'");
    if (System::database()->NumRows() > 0) {
        $block = System::database()->FetchRow();
        $pos = SafeDB($block['place'], 255, str);
        $blocks = System::database()->Select('blocks', "`position`='" . SafeDB($block['position'], 1, str) . "'");
        usort($blocks, 'AdminBlocksSort');
        $c = count($blocks);
        $cur_pos = 0;
        for ($i = 0; $i < $c; $i++) {
            $blocks[$i]['place'] = $i;
            if ($blocks[$i]['id'] == $id) {
                $cur_pos = $i;
            }
        }
        //Индекс перемещения
        $rep_pos = $cur_pos;
        if ($move == 'up') {
            $rep_pos = $cur_pos - 1;
        } elseif ($move == 'down') {
            $rep_pos = $cur_pos + 1;
        } else {
            $rep_pos = $cur_pos;
        }
        if ($rep_pos < 0 || $rep_pos >= $c) {
            $rep_pos = $cur_pos;
        }
        $temp = intval($blocks[$cur_pos]['place']);
        $blocks[$cur_pos]['place'] = intval($blocks[$rep_pos]['place']);
        $blocks[$rep_pos]['place'] = intval($temp);
        //Обновляем данные
        for ($i = 0; $i < $c; $i++) {
            System::database()->Update('blocks', "place='" . SafeDB($blocks[$i]['place'], 11, int) . "'", "`id`='" . SafeDB($blocks[$i]['id'], 11, int) . "'");
        }
    }
    Audit('Блока: Перемещение блока ' . ($move == 'up' ? 'вверх' : 'вниз') . ' "' . $block['title'] . '"');
    GO(ADMIN_FILE . '?exe=blocks');
}
    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;
        }
    }
/**
 * Главная страница форума, список форумов в категории или подфорумов в форуме.
 * @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']);
        }
    }
}
function AdminFdbAdminGenTableMenu($name)
{
    global $action;
    // Добавляем в меню список таблиц и выбраннную таблицу
    System::admin()->BreadCrumbAdd('Список таблиц', 'exe=dbadmin&a=main');
    $num_rows = 0;
    $tables = System::database()->GetTableInfo();
    SortArray($tables, 'name');
    $prefs = strpos($name, '_');
    if ($prefs !== false) {
        $pref = substr($name, 0, $prefs);
        // Выводим сначала таблицы с префиксом
        foreach ($tables as $table) {
            $n = SafeDb($table['name'], 255, str);
            if (substr($n, 0, $prefs) == $pref) {
                System::admin()->BreadCrumbMenuItem($n, 'exe=dbadmin&a=structure&name=' . $n);
            }
            if ($n == $name) {
                $num_rows = SafeDB($table['num_rows'], 11, int);
            }
        }
        System::admin()->BreadCrumbMenuDelimiter();
        foreach ($tables as $table) {
            $n = SafeDb($table['name'], 255, str);
            if (substr($n, 0, $prefs) != $pref) {
                System::admin()->BreadCrumbMenuItem($n, 'exe=dbadmin&a=structure&name=' . $n);
            }
            if ($n == $name) {
                $num_rows = SafeDB($table['num_rows'], 11, int);
            }
        }
    } else {
        foreach ($tables as $table) {
            $n = SafeDb($table['name'], 255, str);
            System::admin()->BreadCrumbMenuItem($n, 'exe=dbadmin&a=structure&name=' . $n);
            if ($n == $name) {
                $num_rows = SafeDB($table['num_rows'], 11, int);
            }
        }
    }
    System::admin()->BreadCrumbAdd($name, 'exe=dbadmin&a=main');
    System::admin()->SideBarAddMenuItem('Структура таблицы', 'exe=dbadmin&a=structure&name=' . $name, 'structure');
    System::admin()->SideBarAddMenuItem('Обзор записей (' . $num_rows . ')', 'exe=dbadmin&a=review&name=' . $name, 'review');
    System::admin()->SideBarAddMenuItem('Добавить запись', 'exe=dbadmin&a=insert&name=' . $name, 'insert');
    System::admin()->SideBarAddMenuItem('Редактировать структуру', 'exe=dbadmin&a=edittable&name=' . $name, 'edittable');
    System::admin()->SideBarAddMenuItem('Очистить таблицу', 'exe=dbadmin&a=truncatetable&name=' . $name, 'truncatetable');
    System::admin()->SideBarAddMenuItem('Удалить таблицу', 'exe=dbadmin&a=droptable&name=' . $name, 'droptable');
    System::admin()->SideBarAddMenuBlock('Таблица "' . $_GET['name'] . '"', $action);
}
    header("HTTP/1.1 404 Not Found");
    exit;
}
global $search_results, $searchstr;
$objects = System::database()->Select('articles', GetWhereByAccess('view', "`active`='1'"));
foreach ($objects as $object) {
    $result = array();
    $result['mod'] = $plugin_info['mod_title'];
    // Имя модуля
    $result['coincidence'] = '';
    // Показывает где было совпадение
    $result['title'] = SafeDB($object['title'], 255, str);
    $result['public'] = TimeRender(SafeDB($object['public'], 11, int));
    // Дата публикации
    $result['link'] = Ufu('index.php?name=articles&op=read&art=' . SafeDB($object['id'], 11, int) . '&cat=' . SafeDB($object['cat_id'], 11, int), 'articles/{cat}/{art}/');
    $result['text'] = SafeDB($object['description'], 0, str);
    if (strlen($result['text']) > 255) {
        $result['text'] = substr($result['text'], 0, 255) . '&nbsp; ...';
    }
    if (SSearch($object['seo_keywords'], $searchstr) != false) {
        $result['coincidence'] = 'Ключевые слова статьи';
        $search_results[] = $result;
    } elseif (SSearch($object['seo_description'], $searchstr) != false) {
        $result['coincidence'] = 'Описание статьи';
        $search_results[] = $result;
    } elseif (SSearch($object['title'], $searchstr) != false) {
        $result['coincidence'] = 'Заголовок статьи';
        $search_results[] = $result;
    } elseif (SSearch($object['description'], $searchstr) != false) {
        $result['text'] = SCoincidence($object['description'], $searchstr);
        $result['coincidence'] = 'Вводный текст статьи';
			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;
    }
}
$text = '';
$text .= '<table cellspacing="0" cellpadding="0" class="cfgtable">';
$text .= '<tr><th>Имя файла (дата-время...)</th><th>Функции</th></tr>';
foreach ($backup_files2 as $file) {
    $file = SafeDB($file, 255, str);
    $func = System::admin()->SpeedConfirm('Восстановить', ADMIN_FILE . '?exe=dbadmin&a=backup_restore&name=' . $file, 'images/admin/restore.png', 'Все текущие данные будут затёрты. Восстановить БД из резервной копии?');
    $func .= System::admin()->SpeedConfirm('Удалить', ADMIN_FILE . '?exe=dbadmin&a=backup_delete&name=' . $file, 'images/admin/delete.png', 'Удалить?');
    $text .= '<tr>
	<td><a href="' . $backup_dir . $file . '">' . $file . '</a></td>
	<td>' . $func . '</td>
	</tr>';
}
if (count($backup_files2) == 0) {
    $text .= '<tr><td colspan="2" style="text-align: left;">Нет резервных копий.</td></tr>';
}
$text .= '</table>';
$text .= '<a href="#" id="backup_button" class="button" onclick="CreateBackup(); return false;">Создать резервную копию</a>';
AddText($text);
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('Сохранить'));
}
function ___SitemapPluginArticles($Cat, $Level)
{
    SitemapAddObject($Level, $Cat['title'], Ufu('index.php?name=articles&cat=' . SafeDB($Cat['id'], 11, int), 'articles/{cat}'));
}
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']);
}
    exit;
}
$table = SafeEnv($_GET['name'], 255, str);
$index = SafeEnv($_GET['index'], 255, int);
$where = '';
$where_url = '';
if (isset($_GET['where'])) {
    $where = $_GET['where'];
    $where_url = '&where=' . $_GET['where'];
}
$rows = System::database()->Select($table, $where);
$row = $rows[$index];
$columns = System::database()->GetTableColumns($table);
$names = array();
foreach ($columns as $col) {
    $names[$col['name']] = $row[$col['name']];
}
$sql = '';
foreach ($row as $key => $value) {
    if (isset($names[$key])) {
        $sql .= "`" . $key . "`='" . System::database()->EscapeString($value) . "' and ";
    }
}
$sql = substr($sql, 0, strlen($sql) - 4);
System::database()->Delete($table, $sql);
Audit('Управление БД: Удаление строки из таблицы "' . $table . '"');
if (isset($_REQUEST['back'])) {
    GoRefererUrl($_REQUEST['back']);
} else {
    GO(ADMIN_FILE . '?exe=dbadmin&a=review&name=' . SafeDB($_GET['name'], 255, str) . $where_url);
}
 */
/*
 * Плагин вывода карты страниц
 * Автор: Мартин
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
global $pages, $pages_tree;
$pages = array();
$pages_db = System::database()->Select('pages', "`enabled` = '1' and `view` = '4'", null, 'order');
foreach ($pages_db as $p) {
    $link = false;
    if ($p['type'] == 'page') {
        $link = Ufu('index.php?name=pages&file=' . SafeDB($p['link'], 255, str), 'pages:page');
    }
    //	elseif($p['type'] == 'link'){
    //		$link = SafeDB($p['text'], 255, str);
    //		if(substr($link, 0, 6) == 'mod://'){
    //			$link = Ufu('index.php?name='.substr($link, 6), '{name}/');
    //		}
    //	}
    $p['link'] = $link;
    $pages[] = $p;
}
function ___SitemapPagesPlugin($Page, $Level)
{
    global $pages_tree;
    if ($Page['type'] != 'page') {
        $child_ids = $pages_tree->GetAllChildId($Page['id']);
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
$topic_id = 0;
if ($a == 'edit') {
    $topic_id = SafeDB($block_config, 11, int);
}
System::database()->Select('mail_topics', '');
$topicdata = array();
while ($topic = System::database()->FetchRow()) {
    System::admin()->DataAdd($topicdata, $topic['id'], $topic['title'], $topic['id'] == $topic_id);
}
FormRow('Тема рассылки', System::admin()->Select('topic', $topicdata, false, ''));
$title = 'Настройка блока рассылки';
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>');
        }
    }
}
/**
 * Обработчик ошибок.
 * @param  $No
 * @param  $Error
 * @param  $File
 * @param  $Line
 * @return void
 */
function ErrorHandler($No, $Error, $File, $Line = -1)
{
    global $SITE_ERRORS;
    if (!$SITE_ERRORS) {
        return;
    }
    $root = GetSiteRoot();
    $errortype = array(1 => 'Ошибка', 2 => 'Предупреждение!', 4 => 'Ошибка разборщика', 8 => 'Замечание', 16 => 'Ошибка ядра', 32 => 'Предупреждение ядра!', 64 => 'Ошибка компиляции', 128 => 'Предупреждение компиляции!', 256 => 'Пользовательская Ошибка', 512 => 'Пользовательскаое Предупреждение!', 1024 => 'Пользовательскаое Замечание', 2048 => 'Небольшое замечание', 4096 => 'Улавливаемая ошибка', 8192 => 'Устаревший код', 16384 => 'Устаревший код (пользовательская)');
    /*
     * Генерируем HTML код ошибки. Внешний вид ошибки можно задать через css классы.
     */
    $ErrorId = count(System::$Errors);
    $ErrorHtml = '<div class="debug_error_container" id="debug_error_' . $ErrorId . '" data-id="' . $ErrorId . '">';
    $ErrorHtml .= '<span class="debug_error"><span class="debug_error_type debug_error_type_' . $No . '">' . $errortype[$No] . '</span>: ' . '<span class="debug_error_text">"' . SafeDB($Error, 255, str) . '"</span> в <span class="debug_error_file">' . SafeDB(str_replace($root, '', $File), 255, str) . '</span>' . ($Line > -1 ? ' на линии <span class="debug_error_line">' . $Line . '</span>' : '') . '.</span>';
    /*
     * Выводим стэк вызовов
     */
    $trace = array_reverse(debug_backtrace());
    array_pop($trace);
    $ErrorHtml .= "\n" . '<div class="debug_backtrace_container" id="debug_backtrace_' . $ErrorId . '">';
    foreach ($trace as $i => $t) {
        $ErrorHtml .= $i + 1 . '. ';
        if (isset($t['class'])) {
            $ErrorHtml .= '<span class="debug_backtrace_class">' . $t['class'] . '</span>::';
        }
        if (isset($t['function'])) {
            $ErrorHtml .= '<span class="debug_backtrace_function">' . SafeDB($t['function'], 255, str) . '</span>';
        }
        if (isset($t['args']) && count($t['args'])) {
            $ErrorHtml .= '(';
            foreach ($t['args'] as $a) {
                if (is_array($a)) {
                    $a = 'Array';
                } elseif (is_object($a)) {
                    $a = 'Object';
                } elseif (is_bool($a)) {
                    $a = $a ? 'true' : 'false';
                }
                $ErrorHtml .= '<span class="debug_backtrace_arg">' . SafeDB((string) $a, 100, str) . '</span>, ';
            }
            $ErrorHtml = substr($ErrorHtml, 0, -2) . ')';
        }
        if (isset($t['file'])) {
            $ErrorHtml .= ' <span class="debug_backtrace_path">[' . SafeDB(str_replace($root, '', $t['file']), 255, str) . (isset($t['line']) ? ':' . $t['line'] : '') . ']</span>';
        }
        $ErrorHtml .= "<br>\n";
    }
    $ErrorHtml = substr($ErrorHtml, 0, -5) . ';';
    $ErrorHtml .= '</div></div>';
    /*
     * Добавляем ошибку в массив ошибок.
     */
    System::$Errors[] = $ErrorHtml;
}
    header("HTTP/1.1 404 Not Found");
    exit;
}
$table = SafeEnv($_GET['name'], 255, str);
$columns = System::database()->GetTableColumns($table);
$back = '';
if (isset($_REQUEST['back'])) {
    $back = '&back=' . SafeDB($_REQUEST['back'], 255, str);
}
$edit = false;
$where = '';
$where_url = '';
if ($action == 'editfield') {
    if (isset($_GET['where'])) {
        $where = $_GET['where'];
        $where_url = '&where=' . SafeDB($_GET['where'], 255, str);
    }
    $edit = true;
    $index = SafeEnv($_GET['index'], 255, int);
    $rows = System::database()->Select($table, $where);
    $row = $rows[$index];
}
$i = 0;
foreach ($columns as $col) {
    if ($edit) {
        $val = HtmlChars($row[$columns[$i]['name']]);
        $cap = 'Сохранить';
        $title = 'Редактирование записи';
    } else {
        $val = '';
        $cap = 'Добавить';