/**
 * Добавляет строку таблицы для выбора и загрузки изображения
 * @param $Title
 * @param $LoadTitle
 * @param $FileName
 * @param $Dir
 * @param string $Name
 * @param string $LoadName
 * @param string $FormName
 * @return void
 */
function AdminImageControl($Title, $LoadTitle, $FileName, $Dir, $Name = 'image', $LoadName = 'up_image', $FormName = 'edit_form')
{
    $max_file_size = ini_get('upload_max_filesize');
    $images_data = array();
    $Dir = RealPath2($Dir) . '/';
    $images = array();
    $images = GetFiles($Dir, false, true, '.gif.png.jpeg.jpg');
    $images[-1] = 'no_image/no_image.png';
    System::admin()->DataAdd($images_data, $images[-1], 'Нет картинки', $FileName == '');
    $selindex = -1;
    for ($i = 0, $c = count($images) - 1; $i < $c; $i++) {
        if ($FileName == $images[$i]) {
            $sel = true;
            $selindex = $i;
        } else {
            $sel = false;
        }
        System::admin()->DataAdd($images_data, $images[$i], $images[$i], $sel);
    }
    $select = System::admin()->Select($Name, $images_data, false, 'onchange="document.' . $FormName . '.iconview.src=\'' . $Dir . '\'+document.' . $FormName . '.' . $Name . '.value;"');
    $ctrl = <<<HTML
<table cellspacing="0" cellpadding="0" border="0" width="100%">
\t<tr>
\t\t<td valign="top" style="border-bottom:none;">{$select}</td>
\t</tr>
\t<tr>
\t\t<td style="border-bottom:none; padding-top: 5px;" width="100%" align="left"><img height="80" id="iconview" src="{$Dir}{$images[$selindex]}"></td>
\t</tr>
</table>
HTML;
    System::admin()->FormRow($Title, $ctrl);
    System::admin()->FormRow($LoadTitle, System::admin()->FFile($LoadName) . '<br /><small>Формат изображений только *.jpg,*.jpeg,*.gif,*.png</small><br /><small>Максимальный размер файла: ' . $max_file_size . '</small>');
}
function AdminFileManager()
{
    UseScript('elfinder');
    $options = array('url' => 'index.php?name=plugins&p=connectors&mod=elfinder', 'lang' => 'ru', 'docked' => true, 'height' => 490);
    System::admin()->AddOnLoadJS('var elfinder = $("#finder").elfinder(' . JsonEncode($options) . ')');
    System::admin()->AddTextBox('�איכמג�י לוםוהזונ', '<div id="finder">finder</div>');
}
 public function AddTable($Title = '', $DivName = 'jqueryuitable')
 {
     if ($Title != '') {
         System::admin()->AddCenterBox($Title);
     }
     System::admin()->AddOnLoadJS('$("#' . $DivName . '").table(' . $this->GetOptions() . ');');
     System::admin()->AddText('<div id="' . $DivName . '"></div>');
 }
function AdminFeedBackDepartments()
{
    System::database()->Select('feedback', '');
    $text = '<table cellspacing="0" cellpadding="0" class="cfgtable">';
    $text .= '<tr><th>Название</th><th>E-mail</th><th>Статус</th><th>Функции</th></tr>';
    while ($row = System::database()->FetchRow()) {
        $fid = SafeDB($row['id'], 11, int);
        $st = System::admin()->SpeedStatus('Вкл.', 'Выкл.', ADMIN_FILE . '?exe=feedback&a=changestatus&id=' . $fid, $row['active'] == '1');
        $func = System::admin()->SpeedButton('Редактировать', ADMIN_FILE . '?exe=feedback&a=edit&id=' . $fid, 'images/admin/edit.png') . System::admin()->SpeedConfirm('Удалить', ADMIN_FILE . '?exe=feedback&a=delete&id=' . $fid, 'images/admin/delete.png', 'Удалить департамент?');
        $text .= '<tr>
		<td><b>' . System::admin()->Link(SafeEnv($row['name'], 255, str), ADMIN_FILE . '?exe=feedback&a=edit&id=' . $fid, 'Редактировать') . '</b></td>
		<td>' . PrintEmail($row['email']) . '</td>
		<td>' . $st . '</td>
		<td>' . $func . '</td>
		</tr>';
    }
    $text .= '</table>';
    AddTextBox('Департаменты', $text);
}
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);
}
function AdminSiteMessagesMain()
{
    System::database()->Select('messages', '');
    $text = '<table cellspacing="0" cellpadding="0" class="cfgtable">';
    $text .= '<tr><th>Название</th><th>Осталось времени</th><th>Кто видит</th><th>Статус</th><th>Функции</th></tr>';
    while ($msg = System::database()->FetchRow()) {
        $mid = SafeDB($msg['id'], 11, int);
        $st = System::admin()->SpeedStatus('Вкл.', 'Выкл.', ADMIN_FILE . '?exe=messages&a=changestatus&id=' . $mid, $msg['active'] == '1');
        $resettime = '';
        if ($msg['expire'] != '0') {
            $total = TotalTime(time(), SafeDB($msg['date'], 11, int) + Day2Sec * SafeDB($msg['expire'], 11, int));
            if ($total['days'] > 0 || $total['hours'] > 0) {
                if ($total['days'] > 0) {
                    $resettime .= $total['sdays'];
                    if ($total['hours'] > 0) {
                        $resettime .= ' и ';
                    }
                }
                if ($total['hours'] > 0) {
                    $resettime .= $total['shours'];
                }
            } else {
                $resettime = 'Время вышло';
            }
        } else {
            $resettime = 'Неограниченно';
        }
        $func = '';
        $func .= SpeedButton('Редактировать', ADMIN_FILE . '?exe=messages&a=msgeditor&id=' . $mid, 'images/admin/edit.png');
        $func .= System::admin()->SpeedConfirm('Удалить', ADMIN_FILE . '?exe=messages&a=delete&id=' . $mid . '&ok=0', 'images/admin/delete.png', 'Удалить сообщение?');
        $text .= '<tr><td><b>' . System::admin()->Link(SafeDB($msg['title'], 250, str), ADMIN_FILE . '?exe=messages&a=msgeditor&id=' . $mid) . '</b></td>
		<td>' . $resettime . '</td>
		<td>' . ViewLevelToStr(SafeDB($msg['view'], 1, int)) . '</td>
		<td>' . $st . '</td>
		<td>' . $func . '</td>
		</tr>';
    }
    $text .= '</table>';
    AddTextBox('Все сообщения', $text);
}
 /**
  * Выводит дерево в html-коде для отображения в админ-панели
  * @param int $ParentId
  * @return bool|string
  */
 public function ShowCats($ParentId = 0)
 {
     UseScript('jquery_ui_treeview');
     if ($ParentId == 0 && isset($_GET['_cat_parent'])) {
         $ParentId = SafeEnv($_GET['_cat_parent'], 11, int);
     }
     $elements = array();
     if ($ParentId == 0 && !isset($this->Cats[$ParentId])) {
         return 'Нет категорий';
     }
     foreach ($this->Cats[$ParentId] as $cat) {
         $id = SafeDB($cat['id'], 11, int);
         $icon = trim(SafeDB($cat['icon'], 255, str));
         $info = '';
         if ($icon != '') {
             $info .= '<img src="' . $icon . '">';
         }
         if ($this->index_id_par_name != '') {
             $link_go = Ufu('index.php?name=' . $this->module . '&' . $this->index_id_par_name . '=' . $id, $this->module . '/{' . $this->index_id_par_name . '}/');
             $info .= ($icon != '' ? '<br>' : '') . '<b>Адрес</b>: <a href="' . $link_go . '" target="_blank">/' . $link_go . '</a>';
         }
         $icon = 'images/folder.png';
         $add_cat_link = ADMIN_FILE . '?exe=' . $this->module . '&' . $this->action_par_name . '=' . $this->edit_met . '&_cat_adto=' . $id;
         $edit_cat_link = ADMIN_FILE . '?exe=' . $this->module . '&' . $this->action_par_name . '=' . $this->edit_met . '&' . $this->id_par_name . '=' . $id;
         $func = '';
         $func .= System::admin()->SpeedButton('Добавить дочернюю категорию', $add_cat_link, 'images/admin/folder_add.png');
         $func .= System::admin()->SpeedButton('Редактировать', $edit_cat_link, 'images/admin/edit.png');
         $func .= System::admin()->SpeedConfirmJs('Удалить категорию', '$(\'#cats_tree_container\').treeview(\'deleteNode\', ' . $id . ');', 'images/admin/delete.png', 'Уверены что хотите удалить? Все дочерние объекты так-же будут удалены.');
         $obj_counts = $this->GetCountersRecursive($id);
         $elements[] = array('id' => $id, 'icon' => $icon, 'title' => '<b>' . System::admin()->Link(SafeDB($cat['title'], 255, str) . ' (' . $obj_counts['files'] . ')', $edit_cat_link) . '</b>', 'info' => $info, 'func' => $func, 'isnode' => isset($this->Cats[$id]), 'child_url' => ADMIN_FILE . '?exe=' . $this->module . '&' . $this->action_par_name . '=' . $this->showcats_met . '&_cat_parent=' . $id);
     }
     if ($ParentId == 0) {
         System::admin()->AddOnLoadJS('$("#cats_tree_container").treeview({del: \'' . ADMIN_FILE . '?exe=' . $this->module . '&' . $this->action_par_name . '=' . $this->del_met . '&ok=1\', delRequestType: \'GET\', tree: ' . JsonEncode($elements) . '});');
         return '<div id="cats_tree_container"></div>';
     } else {
         echo JsonEncode($elements);
         exit;
     }
 }
<?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 AdminConfigGroupDelete()
{
    $back_url = '';
    if (!AdminConfigPlugins()) {
        $back_url = ADMIN_FILE . '?exe=config_admin&a=view_groups&delok';
    } else {
        $back_url = ADMIN_FILE . '?exe=config_admin&a=view_groups_plugins&plugins=1&delok';
    }
    if (!isset($_GET['id'])) {
        GO($back_url);
    } else {
        $id = SafeEnv($_GET['id'], 11, int);
    }
    if (isset($_GET['ok']) && $_GET['ok'] == '1' || IsAjax()) {
        System::database()->Select(AdminConfigGroupTable(), "`id`='{$id}'");
        $conf = System::database()->FetchRow();
        System::database()->Delete(AdminConfigGroupTable(), "`id`='{$id}'");
        System::database()->Delete(AdminConfigConfigTable(), "`group_id`='{$id}'");
        Audit('Управление настройками: Удаление группы настроек "' . $conf['hname'] . '(' . $conf['name'] . ')" в "' . AdminConfigGroupTable() . '"');
        GO($back_url);
    } else {
        $r = System::database()->Select(AdminConfigGroupTable(), "`id`='{$id}'");
        AddCenterBox('Удаление группы навтроек');
        System::admin()->HighlightConfirm('Это может повлиять на работу системы. Нажмите отмена, если не уверены. Удалить группу настроек "' . SafeDB($r[0]['hname'], 255, str) . '"?', ADMIN_FILE . '?exe=config_admin&a=delete&id=' . $id . '&ok=1' . (AdminConfigPlugins() ? '&plugins=1' : ''));
    }
}
/**
 * Сохраняет данные формы сгенерированной фукцией 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('Ваш профиль сохранён, обновите страницу.');
        }
    }
}
    if (!isset($col['default'])) {
        $col['default'] = '';
    }
    if (!isset($col['attributes'])) {
        $col['attributes'] = '';
    }
    if (!isset($col['auto_increment'])) {
        $col['auto_increment'] = false;
    }
    $func = '';
    $func .= SpeedButton('Просмотреть информацию для установки', ADMIN_FILE . '?exe=dbadmin&a=viewcollinfo&name=' . $name . '&collid=' . $i, 'images/admin/info.png');
    $func .= System::admin()->SpeedConfirm('Удалить колонку', ADMIN_FILE . '?exe=dbadmin&a=deletecoll&name=' . $name . '&collid=' . $i, 'images/admin/delete.png', 'Удалить колонку?');
    $text .= '<tr>
	<td>' . $i . '</td>
	<td>' . SafeDB($col['name'], 255, str) . '</td>
	<td>' . SafeDB($col['type'], 255, str) . (isset($col['length']) ? '(' . SafeDB($col['length'], 11, int) . ')' : '') . '</td>
	<td>' . SafeDB($col['attributes'], 255, str) . '</td>
	<td>' . ($col['notnull'] ? '<font color="#0000FF">Нет</font>' : '<font color="#FF0000">Да</font>') . '</td>
	<td>' . SafeDB($col['default'], 255, str) . '</td>
	<td>' . ($col['auto_increment'] ? '<font color="#FF0000">Да</font>' : '<font color="0000FF">Нет</a>') . '</td>
	<td>' . $func . '</td>';
    System::site()->DataAdd($selcoldata, $i, SafeDB($col['name'], 255, str), $i == $colcount);
    $i++;
}
$text .= '</table><br />';
AddCenterBox('Структура таблицы "' . $name . '"');
AddText($text);
System::admin()->FormTitleRow('Вставить колонку');
FormRow('После', System::site()->Select('toindex', $selcoldata));
AddForm('<form action="' . ADMIN_FILE . '?exe=dbadmin&a=newcoll&name=' . $name . '" method="post">', $site->Submit('Далее', 'title="Перейти к след. шагу добавления колонки."'));
AdminFdbAdminGenTableMenu($name);
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
$name = SafeEnv($_GET['name'], 255, str);
$onid = SafeEnv($_POST['toindex'], 11, int);
$text = '';
$text .= '<form action="' . ADMIN_FILE . '?exe=dbadmin&a=addcoll&to=' . $name . '&onid=' . $onid . '" method="post"><table cellspacing="0" cellspacing="0" class="cfgtable">' . '<tr><th>Поле</th><th>Тип</th><th>Длина/значения</th><th>Атрибуты</th><th>Ноль</th><th>По умолчанию</th><th>Авто приращение</th><th>Первичный</th><th>Индекс</th><th>Уникальное</th><th> - </th><th>Полный текст</th></tr>';
$type = array('varchar', 'tinyint', 'text', 'date', 'smallint', 'mediumint', 'int', 'bigint', 'float', 'double', 'decimal', 'datetime', 'time', 'year', 'char', 'tinyblob', 'tinytext', 'blob', 'mediumblob', 'mediumtext', 'longblob', 'longtext', 'enum', 'set');
for ($i = 0; $i < count($type); $i++) {
    System::admin()->DataAdd($types, $type[$i], $type[$i]);
}
$Attributes = array(array('none', ''), array('binary', 'binary'), array('unsigned', 'unsigned'), array('unsigned_zerofill', 'unsigned zerofill'));
$AtrData = array();
for ($i = 0; $i < count($Attributes); $i++) {
    System::admin()->DataAdd($AtrData, $Attributes[$i][0], $Attributes[$i][1]);
}
$i = '0';
$text .= '<tr><td>' . System::admin()->Edit('name' . $i, '', false, 'style="width:80px;" class="autofocus"') . '</td><td>' . System::admin()->Select('type' . $i, $types) . '</td><td>' . System::admin()->Edit('length' . $i, '', false, 'style="width:50px"') . '</td><td>' . System::admin()->Select('atributes' . $i, $AtrData) . '</td><td>' . System::admin()->Check('null' . $i, 'null') . '</td><td>' . System::admin()->Edit('default' . $i, '', false, 'style="width:80px;"') . '</td><td>' . System::admin()->Check('auto_increment' . $i, 'val') . '</td><td>' . System::admin()->Radio('params' . $i, 'primary') . '</td><td>' . System::admin()->Radio('params' . $i, 'index') . '</td><td>' . System::admin()->Radio('params' . $i, 'unique') . '</td><td>' . System::admin()->Radio('params' . $i, 'noparams', true) . '</td><td>' . System::admin()->Check('fulltext' . $i, '1') . '</td></tr>';
$text .= '</table>';
$text .= System::admin()->Hidden('cols', '1') . "<br><br>" . System::site()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Submit('Добавить') . '</form>';
AddTextBox('Форма добавления колонки в таблицу "' . $name . '"', $text);
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
$count = 10;
$title = 'Настройка блока для показа последних тем на форуме';
if ($a == 'edit') {
    $count = SafeDB($block_config, 11, int);
}
FormRow('Сколько последних тем показывать', System::admin()->Edit('count', $count, false, 'style="width:400px;"'));
<?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 AdminArticlesResetRating()
{
    global $editarticles;
    if (!$editarticles) {
        System::admin()->AccessDenied();
    }
    $id = SafeEnv($_GET['id'], 11, int);
    System::database()->Select('articles', "`id`='{$id}'");
    $r = System::database()->FetchRow();
    System::database()->Update('articles', "num_votes='0',all_votes='0'", "`id`='{$id}'");
    Audit('Статьи: Сброс рейтинга для "' . $r['title'] . '"');
    GoRefererUrl($_REQUEST['back']);
}
function AdminFdbAdminAddTableForm(&$text, $tablename, $SetComment = '', $SetTableType = '')
{
    $tabletypes = array(array('default', 'По умолчанию'), array('myisam', 'MyISAM'), array('heap', 'MyISAM'), array('merge', 'Merge'), array('berkeleydb', 'Berkeley DB'), array('isam', 'ISAM'));
    for ($i = 0; $i < 4; $i++) {
        if ($SetTableType == $tabletypes[$i][0]) {
            $checked = true;
        } else {
            $checked = false;
        }
        System::admin()->DataAdd($tabletype, $tabletypes[$i][0], $tabletypes[$i][1]);
    }
    $text .= '<font size="2">Комментарий к таблице ' . System::admin()->Edit('comment', $SetComment, false, 'style="width: 300px;"') . '&nbsp;&nbsp;&nbsp;&nbsp;Тип ' . System::admin()->Select('tabletype', $tabletype) . '</font>' . System::admin()->Hidden('tablename', $tablename);
}
<?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 AdminCommentsFind()
{
    if (System::config('comments/disable_posts_engine')) {
        System::admin()->AddCenterBox('Ошибка');
        System::admin()->HighlightError('Система комментариев отключена.');
        return;
    }
    // Рекурсивная функция для поиска родителя комментария верхнего уровня
    function CommentsFindTopLevelPost(&$posts, $post_id, $post_parent_id)
    {
        if (isset($posts[$post_parent_id])) {
            if ($posts[$post_parent_id]['post_parent_id'] == 0) {
                return $posts[$post_parent_id]['id'];
            }
            return CommentsFindTopLevelPost($posts, $posts[$post_parent_id]['id'], $posts[$post_parent_id]['post_parent_id']);
        } else {
            return $post_id;
        }
    }
    // id таблицы комментариев в таблице comments и id комментария
    $table_id = SafeEnv($_GET['table'], 11, int);
    $post_id = SafeEnv($_GET['post_id'], 11, int);
    System::database()->Select('comments', "`id`='{$table_id}'");
    if (!System::database()->NumRows()) {
        System::admin()->AddCenterBox('Ошибка');
        System::admin()->HighlightError('Таблица комментариев не найдена.');
        return;
    }
    $table = System::database()->FetchRow();
    // Загружаем комментарий
    System::database()->Select($table['table'], "`id`='{$post_id}'");
    if (!System::database()->NumRows()) {
        System::admin()->AddCenterBox('Ошибка');
        System::admin()->HighlightError('Комментарий не найден.');
        return;
    }
    $post = System::database()->FetchRow();
    // Загружаем объект комментария
    $id_coll = SafeEnv($table['id_coll'], 255, str);
    $object_id = SafeEnv($post['object_id'], 11, int);
    System::database()->Select($table['objects_table'], "`{$id_coll}`='{$object_id}'");
    if (!System::database()->NumRows()) {
        System::admin()->AddCenterBox('Ошибка');
        System::admin()->HighlightError('Объект комментария не найден.');
        return;
    }
    $object = System::database()->FetchRow();
    $en_navigation = System::config('comments/ennav');
    $navigation_page = 1;
    if ($en_navigation) {
        // Включена постраничная навигация в комментариях
        // Количество комментарий на страницу
        $comments_on_page = System::config('comments/onpage');
        // Загружаем комментарии объекта
        $object_postsdb = System::database()->Select($table['table'], "`object_id`='{$object_id}'");
        SortArray($object_postsdb, 'post_date', !System::config('comments/decreasesort'));
        if (count($object_postsdb) <= $comments_on_page) {
            // Навигация не требуется
            $en_navigation = false;
        } else {
            // Определяем страницу на котором отображается комментарий
            if ($post['post_parent_id'] == 0) {
                // Комментарий верхнего уровня
                $post_top_id = $post_id;
            } else {
                // Поиск родительского комментария верхнего уровня
                // Агрегируем комментарии объекта по id
                $object_posts = array();
                foreach ($object_postsdb as $p) {
                    $object_posts[$p['id']] = $p;
                }
                $post_top_id = CommentsFindTopLevelPost($object_posts, $post_id, $post['post_parent_id']);
            }
            // Берём только комментарии верхнего уровня
            $object_top_posts = array();
            foreach ($object_postsdb as $p) {
                if ($p['post_parent_id'] == 0) {
                    $object_top_posts[$p['id']] = true;
                }
            }
            // Узнаём порядковый номер post_top_id
            $index = array_search($post_top_id, array_keys($object_top_posts));
            $navigation_page = ceil(($index + 1) / $comments_on_page);
            // Определили страницу
            if ($navigation_page > 1) {
                $en_navigation = true;
            }
        }
    }
    if (System::config('general/ufu')) {
        if ($en_navigation) {
            $url_template = $table['nav_ufu'];
        } else {
            $url_template = $table['ufu'];
        }
    } else {
        $url_template = $table['url'];
        if ($en_navigation) {
            $url_template .= '&' . urlencode($table['page_param']) . '=' . $navigation_page;
        }
    }
    // Парсим шаблон URL
    $keys = array();
    foreach ($object as $key => &$val) {
        $val = urlencode($val);
        $keys['{' . $key . '}'] =& $val;
    }
    $keys['{' . $table['page_param'] . '}'] = $navigation_page;
    $url = str_replace(array_keys($keys), array_values($keys), $url_template);
    GO($url . '#post_' . $post_id);
}
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
// Здесь осуществляется вывод элементов формы которые потребуются для настройки блока
// Так же надо учитывать что может вызываться метод редактирования блока, тогда нужно
//  все поля заполнить на основе переданной конфигурации блока в переменной $block_config
// Указателем на то, что происходит редактирование блока может служить переменная $a. При
//  редактировании она должна иметь значение 'edit'.
// Вы можете использовать переменную $title для изменения заголовка формы.
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
$mod_text = '';
if ($a == 'edit') {
    $mod_text = SafeDB($block_config, 0, str, false);
}
FormTextRow('Текст', System::admin()->HtmlEditor('mod_text', $mod_text, 600, 400));
$title = 'Настройка текстового блока';
 /**
  * Восстанавливает базу данных из резервной копии.
  * @param type $BackupFile Имя файла бекапа
  * @param type $Table      Имя таблицы, если нужно восстановить одну таблицу
  */
 public function RestoreBackupFile($BackupFile, $Table = '')
 {
     $zip = new ZipArchive();
     $iferrors = false;
     if (GetSecondFileExt($BackupFile, true) == $this->Name && $zip->open($BackupFile) === true) {
         for ($i = 0; $i < $zip->numFiles; $i++) {
             $filename = $zip->getNameIndex($i);
             if ($Table == '' || $Table == GetFileName($filename, true)) {
                 $sql = $zip->getFromIndex($i);
                 $sql = explode(";", $sql);
                 foreach ($sql as $query) {
                     if (trim($query) == '') {
                         continue;
                     }
                     if (System::database()->MySQLQuery($query) === false) {
                         if (defined('ADMIN_SCRIPT')) {
                             System::admin()->HighlightError(System::database()->MySQLGetErrMsg() . ' (' . $filename . ')');
                         }
                         $iferrors = true;
                     }
                 }
             }
         }
         $zip->close();
         // Обрабытываем ошибки
         if ($iferrors) {
             return 2;
             // Ошибки при восстановлении таблиц
         }
         return 1;
         // Успешно восстановлено
     } else {
         return 3;
         // Неверный формат файла
     }
 }
			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);
	$("#perform").button("option", "label", "Запуск <img src=\\"images/ajax-loader.gif\\">");
	$("#result_container").hide();
	$("#perform_result").html("");
	$("#perform_result").hide();
	$.ajax({
		type: "POST",
		url: "' . ADMIN_FILE . '?exe=dbadmin&a=performsql",
		data: {code: $("#sqlcode").val()},
		success: function(data){
			$("#perform").button("option", "label", label);
			$("#perform_result").html("<pre>"+data+"</pre>");
			$("#result_container").show();
			$("#sqlcode_replace").animate({height: "100"}, 500);
			$("#perform_result").slideDown();
		}
	});
};');
$html = <<<HTML
<textarea id="sqlcode" style="width: 100%; height: 400px;">SELECT * FROM `table_news` WHERE `enabled`=1 ORDER BY `date`;</textarea>
<div style="margin: 2px 0 0 0; ">
\t<div style="float: right; margin-top: 1px;">
\t\t<a href="#" id="perform" class="button" onclick="PerformSqlCode(); return false;" title="Отправить код на выполнение и вывести результат">Запуск<img src="images/arrow_blue_right.png" /></a>
\t</div>
\t<div style="clear: both;"></div>
</div>
<div id="result_container" style="margin: 8px 0; width: 100%; background-color: #EEE; display: none; text-align: left; border: 3px #DDD solid; border-radius: 3px;-moz-border-radius: 3px;">
\t<div id="perform_result" style="display: none; padding: 5px; overflow-x: auto;"></div>
</div>
HTML;
System::admin()->AddText($html);
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 = 'Добавить';
        $title = 'Добавление записи';
    }
    if (strtolower($col['type']) != 'text') {
        FormRow('<font color="#0000FF">' . (isset($col['auto_increment']) && $col['auto_increment'] == true ? '<u>' . $col['name'] . '</u>' : $col['name']) . '</font>' . '<br /><font color="#666666">' . $col['type'] . (isset($col['length']) ? '(' . $col['length'] . ')</font>' : '</font>'), System::admin()->Edit($col['name'], $val, false, 'style="width: 400px;"' . ($i == 0 ? ' class="autofocus"' : '')));
    } else {
        FormRow('<font color="#0000FF">' . $col['name'] . '</font>', System::admin()->TextArea($col['name'], $val, 'style="width: 400px; height: 200px;"' . ($i == 0 ? ' class="autofocus"' : '')));
    }
    $i++;
}
AddCenterBox($title);
AddForm('<form action="' . ADMIN_FILE . '?exe=dbadmin&a=' . ($edit ? 'editsave' : 'insertsave') . '&name=' . $table . ($edit ? '&index=' . $index : '') . $where_url . $back . '" method="post">', ($edit ? System::site()->Button('Отмена', 'onclick="history.go(-1)"') : '') . System::admin()->Submit($cap));
AdminFdbAdminGenTableMenu($table);
function AdminUserSaveAvatar()
{
    $alloy_mime = array('image/gif' => '.gif', 'image/jpeg' => '.jpg', 'image/pjpeg' => '.jpg', 'image/png' => '.png', 'image/x-png' => '.png');
    include_once System::config('inc_dir') . 'picture.class.php';
    $asize = getimagesize($_FILES['avatar']['tmp_name']);
    $alloy_mime = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png');
    $alloy_exts = array('.gif', '.jpg', '.jpeg', '.png');
    if (in_array($_FILES['avatar']['type'], $alloy_mime) && in_array(strtolower(GetFileExt($_FILES['avatar']['name'])), $alloy_exts)) {
        $NewName = $_FILES['avatar']['name'];
        if ($asize[0] > System::config('user/max_avatar_width') || $asize[1] > System::config('user/max_avatar_height')) {
            $thumb = new TPicture($_FILES['avatar']['tmp_name']);
            $thumb->SetImageSize(System::config('user/max_avatar_width'), System::config('user/max_avatar_height'));
            $thumb->SaveToFile(System::config('general/avatars_dir') . $NewName);
        } else {
            copy($_FILES['avatar']['tmp_name'], System::config('general/avatars_dir') . $NewName);
        }
        Audit('Пользователи: Добавление аватара в галерею аватар "' . $NewName . '"');
    } else {
        System::admin()->AddCenterBox('Загрузка аватара');
        System::admin()->HighlightError('Неправильный формат аватара. Ваш аватар должен быть формата GIF, JPEG или PNG.<br /><a href="javascript:history.go(-1)">Назад в галерею</a>');
    }
    GO(ADMIN_FILE . '?exe=user&a=avatars');
}
function AdminBlocksMain()
{
    System::database()->Select('block_types', '');
    while ($type = System::database()->FetchRow()) {
        $types[SafeDB($type['folder'], 255, str)] = SafeDB($type['name'], 255, str);
    }
    unset($type);
    $b_pos = array('L' => 'Левые блоки', 'R' => 'Правые блоки', 'T' => 'Верхние блоки', 'B' => 'Нижние блоки', 'A' => 'A Нижние блоки');
    $text = '';
    $text .= '<table cellspacing="0" cellpadding="0" class="cfgtable">' . '<tr>
		<th>Заголовок</th>
		<th>Положение</th>
		<th>Тип</th>
		<th>Кто видит</th>
		<th>Статус</th>
		<th>Функции</th>
	</tr>';
    foreach ($b_pos as $pos => $pos_title) {
        System::database()->Select('blocks', "`position`='" . SafeEnv($pos, 255, str) . "'");
        $maxplace = System::database()->NumRows() - 1;
        if ($maxplace + 1 > 0) {
            $text .= '<tr><th colspan="6">' . SafeDB($pos_title, 255, str) . '</th></tr>';
        }
        usort(System::database()->QueryResult, 'AdminBlocksSort');
        while ($block = System::database()->FetchRow()) {
            $block_id = SafeDB($block['id'], 11, int);
            $st = System::admin()->SpeedStatus('Вкл.', 'Выкл.', ADMIN_FILE . '?exe=blocks&a=changestatus&id=' . $block_id, $block['enabled'] == '1');
            $vi = ViewLevelToStr(SafeDB($block['view'], 1, int));
            $move_menu = '';
            if ($maxplace == 0) {
                // Единственный элемент в списке
                $move_menu .= ' - ';
            } else {
                if ($block['place'] >= 0 && $block['place'] < $maxplace) {
                    // Первый элемент
                    $move_menu .= System::admin()->SpeedButton('Вниз', ADMIN_FILE . '?exe=blocks&a=move&to=down&id=' . $block_id, 'images/admin/down.png');
                }
                if ($block['place'] <= $maxplace && $block['place'] > 0) {
                    $move_menu .= System::admin()->SpeedButton('Вверх', ADMIN_FILE . '?exe=blocks&a=move&to=up&id=' . $block_id, 'images/admin/up.png');
                }
            }
            $func = '';
            $func .= System::admin()->SpeedButton('Редактировать', ADMIN_FILE . '?exe=blocks&a=edit&id=' . $block_id, 'images/admin/edit.png');
            $func .= System::admin()->SpeedConfirm('Удалить', ADMIN_FILE . '?exe=blocks&a=del&id=' . $block_id, 'images/admin/delete.png', 'Удалить блок?');
            $text .= '<tr>
			<td><b>' . System::admin()->Link(SafeDB($block['title'], 255, str), ADMIN_FILE . '?exe=blocks&a=edit&id=' . $block_id) . '</b></td>
			<td>' . $move_menu . '</td>
			<td>' . $types[SafeDB($block['type'], 255, str)] . '</td>
			<td>' . $vi . '</td>
			<td>' . $st . '</td>
			<td>' . $func . '</td>
			</tr>';
        }
    }
    $text .= '</table><br />';
    AddCenterBox('Блоки');
    AddText($text);
}
function AdminGalleryResetRating()
{
    global $edit_images;
    if (!$edit_images) {
        System::admin()->AccessDenied();
    }
    $id = SafeEnv($_GET['id'], 11, int);
    System::database()->Select('gallery', "`id`='{$id}'");
    $img = System::database()->FetchRow();
    System::database()->Update('gallery', "`num_votes`='0',`sum_votes`='0'", "`id`='{$id}'");
    Audit('Фотогалерея: Сброс рейтинга для изображения "' . $img['title'] . '" (id: ' . $img['id'] . ')');
    GoRefererUrl($_REQUEST['back']);
}
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 AdminNewsTopicSave()
{
    global $news_access_edittopics, $action;
    if (!$news_access_edittopics) {
        System::admin()->AccessDenied();
    }
    $image = SafeEnv($_POST['topic_image'], 255, str, true);
    if ($action == 'addtopic') {
        $values = Values('', SafeEnv($_POST['topic_name'], 255, str), SafeEnv($_POST['topic_description'], 255, str), $image, '0');
        System::database()->Insert('news_topics', $values);
        Audit('Новости: Добавление новостного раздела "' . $_POST['topic_name'] . '"');
    } elseif ($action == 'savetopic') {
        $id = SafeEnv($_GET['id'], 11, int);
        System::database()->Select('news_topics', "`id`='" . $id . "'");
        $topic = System::database()->FetchRow();
        $values = Values('', SafeEnv($_POST['topic_name'], 255, str), SafeEnv($_POST['topic_description'], 255, str), $image, SafeEnv($topic['counter'], 11, int));
        System::database()->Update('news_topics', $values, "`id`='{$id}'", true);
        Audit('Редактирование новостного раздела "' . $_POST['topic_name'] . '"');
    }
    GO(ADMIN_FILE . '?exe=news&a=topics');
}
 /**
  * Подключает модуль.
  * @param      $ClassName
  * @param bool $Admin
  * @return mixed
  */
 public static function run($ClassName, $Admin = false)
 {
     $anns = GetAnnotations($ClassName);
     $action_param = isset($anns['class']['ActionParam']) ? $anns['class']['ActionParam'] : 'a';
     $action = isset($_GET[$action_param]) ? $_GET[$action_param] : 'main';
     $title = isset($anns['class']['Title']) ? $anns['class']['Title'] : '';
     if ($Admin && $title != '') {
         self::admin()->AddSubTitle($title);
     }
     foreach ($anns['methods'] as $method => $params) {
         if (!isset($params['Action'])) {
             continue;
         }
         $actions = array();
         $titles = array();
         if (is_string($params['Action'])) {
             $actions[] = $params['Action'];
         } else {
             $actions = $params['Action'];
         }
         /*
          * Параметр ActionParam класса модуля совпадает с параметром Action метода.
          */
         if (($s = array_search($action, $actions)) !== false) {
             $params['Action'] = $action;
             $anns['Action'] = $action;
             /*
              * Проверка доступа.
              * Если есть заголовок аннотации Access проверяем доступ для администратора.
              */
             if (isset($params['Access']) && !System::user()->CheckAccess2($params['Access'][0], $params['Access'][1])) {
                 if ($Admin) {
                     System::admin()->AccessDenied();
                 } else {
                     Header('HTTP/1.1 403 Forbidden');
                     System::site()->InitPage();
                     System::site()->AddTextBox('Ошибка', '<p align="center">Доступ запрещен.</p>');
                     System::site()->TEcho();
                     exit;
                 }
             }
             /*
              * Генерируем массив заголовков.
              */
             if (isset($params['Title'])) {
                 if (is_string($params['Title'])) {
                     $titles[] = $params['Title'];
                 } else {
                     $titles = $params['Title'];
                 }
             } else {
                 $titles[] = $title;
             }
             /*
              * Берём заголовок для этого действия (Action)
              */
             $title = $titles[$s];
             $params['Title'] = $title;
             $anns['Title'] = $title;
             if ($title != '') {
                 if ($Admin) {
                     self::admin()->AddSubTitle($title);
                 } else {
                     self::site()->SetTitle($title);
                 }
             }
             /*
              * Создаём объект и вызываем метод.
              */
             $mod_obj = new $ClassName($anns);
             call_user_func(array($mod_obj, $method), $params);
         }
     }
 }
function AdminsDelete()
{
    $userid = SafeEnv($_GET['id'], 11, int);
    System::database()->Select('users', "`id`='" . $userid . "' and `type`='1'");
    $user = System::database()->FetchRow();
    if (groupIsSystem(SafeEnv($user['access'], 11, int)) && GetSystemAdminsCount() <= 1) {
        System::admin()->AddCenterBox('Ошибка');
        System::admin()->HighlightError('Нельзя удалить последнего системного администратора.');
        return;
    }
    if (isset($_GET['ok']) && $_GET['ok'] == '1') {
        // Удалить
        $id = SafeEnv($_GET['id'], 11, int);
        if (!isset($_POST['del_comments'])) {
            System::database()->Select('users', "`id`='{$id}'");
            if (System::database()->NumRows() > 0) {
                $suser = System::database()->FetchRow();
                UpdateUserComments($id, '0', SafeEnv($suser['name'], 50, str), SafeEnv($suser['email'], 50, str), SafeEnv($suser['hideemail'], 1, bool), SafeEnv($suser['url'], 250, str));
            }
        } else {
            DeleteAllUserComments($id);
        }
        System::database()->Delete('users', "`id`='{$id}' and `type`='1'");
        System::cache()->Delete(system_cache, 'users');
        Audit('Администраторы: Удаление администратора "' . $user['name'] . '"');
        GO(ADMIN_FILE . '?exe=admins');
    } elseif (isset($_GET['ok']) && $_GET['ok'] == '2') {
        // Сделать пользователем
        System::database()->Update('users', "type='2',access='-1'", "`id`='" . SafeEnv($_GET['id'], 11, int) . "' and `type`='1'");
        System::cache()->Delete(system_cache, 'users');
        Audit('Администраторы: "' . $user['name'] . '" разжалован в пользователи');
        GO(ADMIN_FILE . '?exe=admins');
    } else {
        System::admin()->AddJS('
		AjaxDeleteAdmin = function(){
			var del = $("#del_comments:checked").val();
			if(del == null){
				del = "0";
			}
			Admin.LoadPage("' . ADMIN_FILE . '?exe=admins&a=deladmin&id=' . $userid . '&ok=1&del_comments="+del, undefined, "Удаление");
		};
		AjaxAdminSetToUser = function(){
			Admin.LoadPage("' . ADMIN_FILE . '?exe=admins&a=deladmin&id=' . $userid . '&ok=2");
		};
		');
        AddCenterBox('Удаление администратора');
        $Text = 'Что вы хотите сделать с администратором "' . SafeDB($user['name'], 255, str) . '"?';
        $Text .= '<br /><br />' . System::admin()->Check('del_comments', '1', false, 'id="del_comments"') . '<label for="del_comments" style="cursor: pointer;">Удалить все комментарии этого пользователя</label><br /><br />' . System::admin()->SpeedButton('Отмена', 'javascript:history.go(-1)', 'images/admin/cancel.png', false, true) . '&nbsp;&nbsp;' . System::admin()->SpeedConfirmJs('Удалить', 'AjaxDeleteAdmin();', 'images/admin/delete.png', '', true) . '&nbsp;&nbsp;' . System::admin()->SpeedConfirmJs('Сделать пользователем', 'AjaxAdminSetToUser();', 'images/user_green.png', '', true);
        System::admin()->Highlight($Text);
    }
}