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 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);
}
function AdminsDeleteGroup()
{
    if (!isset($_GET['id'])) {
        GO(ADMIN_FILE . '?exe=admins&a=groups');
        exit;
    }
    $id = SafeEnv($_GET['id'], 11, int);
    if (isset($_GET['ok']) && SafeEnv($_GET['ok'], 1, int) == '1') {
        // Очищаем кэш
        if (System::cache()->HasCache(system_cache, 'usertypes')) {
            System::cache()->Delete(system_cache, 'usertypes');
        }
        System::database()->Select('users', "`access`='" . $id . "'");
        $num_users = System::database()->NumRows();
        System::database()->Select('usertypes', "`id`='{$id}'");
        $group = System::database()->FetchRow();
        if ($num_users > 0) {
            if (!isset($_GET['users'])) {
                $text = 'К этой группе принадлежат ' . $num_users . ' пользователей. Вы можете:<br />' . '<a href="' . ADMIN_FILE . '?exe=admins&a=delgroup&id=' . $id . '&ok=1&users=del">Удалить их...</a> <br />' . '<a href="' . ADMIN_FILE . '?exe=admins&a=delgroup&id=' . SafeEnv($_GET['id'], 11, int) . '&ok=1&users=move">Переместить их в другую группу.</a>';
                AddTextBox('Внимание!', $text);
            } else {
                if ($_GET['users'] == 'del') {
                    System::database()->Delete('users', "`access`='" . $id . "'");
                } elseif ($_GET['users'] == 'move' && !isset($_POST['to'])) {
                    $text = 'Выберите группу, в которую Вы желаете переместить пользователей:<br />' . '<form action="' . ADMIN_FILE . '?exe=admins&a=delgroup&id=' . $id . '&ok=1&users=move" method="post">';
                    System::database()->Select('usertypes', "`id`<>'" . $id . "'");
                    System::site()->DataAdd($group_data, '-1', 'Пользователи');
                    while ($tp = System::database()->FetchRow()) {
                        System::site()->DataAdd($group_data, $tp['id'], $tp['name']);
                    }
                    $text .= System::site()->Select('to', $group_data) . '<br />';
                    $text .= System::site()->Submit('Продолжить') . '<br />';
                    $text .= '</form>';
                    AddTextBox('Внимание!', $text);
                    return;
                } elseif ($_GET['users'] == 'move' && isset($_POST['to'])) {
                    $to = SafeEnv($_POST['to'], 11, int);
                    if ($to == '-1') {
                        $set = "type='2',access='" . $to . "'";
                    } else {
                        $set = "access='" . $to . "'";
                    }
                    System::database()->Update('users', $set, "`access`='" . $id . "'");
                }
            }
        }
        System::database()->Delete('usertypes', "`id`='" . $id . "'");
        Audit('Администраторы: Удаление группы администраторов "' . $group['name'] . '"');
        GO(ADMIN_FILE . '?exe=admins&a=groups');
    } else {
        System::database()->Select('usertypes', "`id`='" . $id . "'");
        $group = System::database()->FetchRow();
        $text = 'Вы действительно хотите удалить группу "' . SafeDB($group['name'], 255, str) . '"?<br />' . '<a href="' . ADMIN_FILE . '?exe=admins&a=delgroup&id=' . $id . '&ok=1">Да</a> &nbsp;&nbsp;&nbsp; <a href="javascript:history.go(-1)">Нет</a>';
        AddTextBox("Предупреждение", $text);
    }
}
/**
 * Редактор новостей (редактирование / добавление)
 * @return void
 */
function AdminNewsEditor()
{
    global $news_access_editnews;
    if (!$news_access_editnews) {
        System::admin()->AccessDenied();
    }
    UseScript('jquery_ui', 'colorbox?theme=admin');
    System::admin()->AddOnLoadJS('
	$("#datepicker").datepicker({
		dateFormat: "dd.mm.yy",
		changeMonth: true,
		changeYear: true
	});');
    $topic_id = 0;
    // Номер темы
    $newstitle = '';
    // Заголовок новости
    $icon = '';
    // Иконки
    $stext = '';
    // Короткая новость
    $ctext = '';
    // Полная новость
    $view = 4;
    // Кто видит
    $allow_comments = true;
    // Разрешить комментарии
    $auto_br = false;
    // Авто добавление тега <br />
    $enabled = true;
    // Включить да/нет
    $alname = 'Разместить';
    // Надпись на отправляющей кнопке
    $img_view = 0;
    //Модуль SEO
    $seo_title = '';
    $seo_keywords = '';
    $seo_description = '';
    $public_date = date("d.m.Y", time());
    $public_time = date("G:i", time());
    if (!isset($_GET['id'])) {
        // Добавление новости
        $auto_br = false;
        $title = 'Добавить новость';
        $caption = 'Добавить';
        TAddSubTitle($title);
        $met = '';
    } else {
        // Редактирование новости
        System::database()->Select('news', "`id`='" . SafeEnv($_GET['id'], 11, int) . "'");
        $news = System::database()->FetchRow();
        $topic_id = SafeDB($news['topic_id'], 11, int);
        $newstitle = SafeDB($news['title'], 255, str);
        $icon = SafeDB($news['icon'], 255, str);
        $stext = SafeDB($news['start_text'], 0, str, false);
        $ctext = SafeDB($news['end_text'], 0, str, false);
        $allow_comments = SafeDB($news['allow_comments'], 1, bool);
        $auto_br = SafeDB($news['auto_br'], 1, bool);
        $img_view = SafeDB($news['img_view'], 1, int);
        $view = SafeDB($news['view'], 1, int);
        $enabled = SafeDB($news['enabled'], 1, bool);
        //Модуль SEO
        $seo_title = SafeDB($news['seo_title'], 255, str);
        $seo_keywords = SafeDB($news['seo_keywords'], 255, str);
        $seo_description = SafeDB($news['seo_description'], 255, str);
        $public_date = date("d.m.Y", $news['date']);
        $public_time = date("G:i", $news['date']);
        $title = 'Редактирование новости';
        $caption = 'Сохранить изменения';
        TAddSubTitle($title);
        $met = '&id=' . SafeEnv($_GET['id'], 11, int);
    }
    System::admin()->AddJS(Indent('
		NewsPreviewOpen = function(){
			if(tinyMCE){
				tinyMCE.triggerSave();
			}
			var form_data = Admin.SerializeFormData(document.forms.news_editor);
			var left = parseInt(screen.width / 2) - 400;
			var top = parseInt(screen.height / 10);
			var wp = window.open("", "Preview", "resizable=yes,scrollbars=yes,menubar=no,status=no,location=no,width=800,height=600,left="+left+",top="+top+"");
			wp.document.open();
			$.ajax({
				type: "POST",
				url: "' . ADMIN_FILE . '?exe=news&a=preview' . $met . '",
				data: form_data,
				dataType: "html",
				success: function(data){
					wp.document.write(data);
					wp.document.close();
				}
			});
		}
	'));
    System::database()->Select('news_topics', '');
    $topicdata = array();
    while ($topic = System::database()->FetchRow()) {
        System::admin()->DataAdd($topicdata, $topic['id'], $topic['title'], $topic['id'] == $topic_id);
    }
    if (count($topicdata) == 0) {
        AddTextBox($title, 'Нет раздела для добавления. Создайте хотя бы один раздел.');
        return;
    }
    $img_view_data = array();
    System::admin()->DataAdd($img_view_data, '0', 'Авто', $img_view == 0);
    System::admin()->DataAdd($img_view_data, '1', 'Исходная картинка', $img_view == 1);
    System::admin()->DataAdd($img_view_data, '2', 'Эскиз', $img_view == 2);
    $acts = array();
    System::admin()->DataAdd($acts, 'save', $alname);
    System::admin()->DataAdd($acts, 'preview', 'Предпросмотр');
    FormRow('Раздел', System::admin()->Select('topic_id', $topicdata, false, 'class="autofocus"'));
    FormRow('Заголовок новости', System::admin()->Edit('title', $newstitle, false, 'style="width:400px;"'));
    // Модуль SEO
    FormRow('[seo] Заголовок страницы', System::admin()->Edit('seo_title', $seo_title, false, 'style="width:400px;"'));
    FormRow('[seo] Ключевые слова', System::admin()->Edit('seo_keywords', $seo_keywords, false, 'style="width:400px;"'));
    FormRow('[seo] Описание', System::admin()->Edit('seo_description', $seo_description, false, 'style="width:400px;"'));
    list($width, $height) = SafeDB(explode(':', System::config('news/tmb_size')), 11, int);
    FormRow('Изображение', System::admin()->FileManager('icon', $icon) . '<br>
		<a href="' . $icon . '" class="filemanager_icon colorbox" data-content="href:path" target="_blank">
			<img src="' . GetThumb($icon, $width, $height) . '" class="filemanager_icon" data-content="src:tmb" style="margin-top: 5px; max-width: 250px;">
		</a>');
    //AdminImageControl('Изображение', 'Загрузить изображение', $icon, System::config('news/icons_dirs'), 'icon', 'up_photo', 'news_editor');
    FormRow('Отображение рисунка', System::admin()->Select('img_view', $img_view_data));
    FormTextRow('Короткая новость (HTML)', System::admin()->HtmlEditor('shorttext', $stext, 600, 200));
    FormTextRow('Полная новость (HTML)', System::admin()->HtmlEditor('continuation', $ctext, 600, 400));
    FormRow('', 'Преобразовать текст в HTML: ' . System::admin()->Select('auto_br', GetEnData($auto_br, 'Да', 'Нет')));
    FormRow('Дата и время публикации', System::admin()->Edit('public_date', $public_date, false, 'id="datepicker" style="width:120px;"') . '&nbsp;' . System::admin()->Edit('public_time', $public_time, false, 'style="width:60px;"'));
    FormRow('Комментарии', System::admin()->Select('acomments', GetEnData($allow_comments, 'Разрешить', 'Запретить')));
    FormRow('Кто видит', System::admin()->Select('view', GetUserTypesFormData($view)));
    FormRow('Включить', System::admin()->Select('enabled', GetEnData($enabled, 'Да', 'Нет')));
    AddCenterBox($title);
    $back = '';
    if (isset($_REQUEST['back'])) {
        $back = '&back=' . SafeDB($_REQUEST['back'], 255, str);
    }
    AddForm('<form name="news_editor" action="' . ADMIN_FILE . '?exe=news&a=save' . $met . $back . '" method="post" enctype="multipart/form-data" name="news_editor">', System::admin()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Button('Предпросмотр', 'onclick="NewsPreviewOpen();"') . System::admin()->Submit($caption));
}
function AdminGalleryUploadForm()
{
    global $edit_images;
    if (!$edit_images) {
        System::admin()->AccessDenied();
    }
    $top = 'Мультизагрузка';
    $cat_id = isset($_GET['to']) ? SafeDB($_GET['to'], 11, int) : 0;
    $cats_data = AdminGalleryGetTree()->GetCatsData($cat_id);
    if (count($cats_data) == 0) {
        $back_to_form = SaveRefererUrl();
        AddTextBox($top, 'Нет категорий для добавления! ' . System::admin()->SpeedButton('Добавить категорию', ADMIN_FILE . '?exe=gallery&a=cateditor&back=' . $back_to_form, '', true, true));
        return;
    }
    System::admin()->AddCenterBox($top);
    UseScript('swfupload');
    $formid = uniqid();
    // Уникальный ID формы
    $_SESSION['uploadforms'][$formid] = array('photos' => array(), 'category' => '0', 'allow_comments' => '1', 'allow_votes' => '1', 'view' => '4', 'show' => '1');
    System::admin()->AddOnLoadJS(Indent('
		window.photo_id = 1;
		window.allUploadComplete = false;
		window.photosCountFiles = 0;
		window.photosUploaded = 0;

		// SWFUpload
		if(window.gallery_swfu){
			window.gallery_swfu.destroy();
		}else{
			window.GallerySubmitFormGuard = function(){
				if(window.photosCountFiles == 0){
					alert("Выберите фотографии для загрузки");
					return false;
				}
				if(!window.allUploadComplete){
					window.gallery_swfu.startUpload();
					Admin.ShowSplashScreen("Загрузка фотографий на хостинг");
					return false;
				}
				return true;
			}
		}

		window.gallery_swfu = new SWFUpload({
			upload_url: "' . ADMIN_FILE . '?exe=gallery&a=upload&formid=' . $formid . '",
			file_post_name : "up_image",
			post_params: {
				"action": "upload"
			},
			file_size_limit: "100 MB",
			file_types: "*.jpg; *.png; *.jpeg; *.gif",
			file_types_description: "Все файлы",
			file_upload_limit: 0,
			file_queue_limit: 0,
			debug: false,

			button_placeholder_id: "uploadbutton",
			button_width: "54",
			button_height: "18",
			button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
			button_text: "<span class=\\"btnCap\\">Обзор<span>",
			button_text_style: ".btnCap{ align: center; color: #4F4F4F; font-family: Verdana, Tahoma, sans-serif; font-weight: bold; }",
			button_text_left_padding: 4,
			button_text_top_padding: 1,

			file_dialog_complete_handler: function(numFilesSelected, numFilesQueued, total){
				$("#uploadFilesCount").html("Выбрано " + total + " файл(ов)");
				window.photosCountFiles = total;
			},
			upload_progress_handler: function(file, bytesLoaded, bytesTotal){
				var current = window.photosUploaded + 1;
				Admin.SetSplashScreenMessage("Загрузка фотографий на хостинг: " + current + "/" + window.photosCountFiles + " (" + Math.round(bytesLoaded/bytesTotal*100) + "%)");
			},
			upload_complete_handler: function(file){
				window.photosUploaded++;
				if(window.photosUploaded == window.photosCountFiles){
					window.allUploadComplete = true;
					$("#galleryForm").submit();
				}
			}
		});
	'));
    FormRow('В категорию', System::site()->Select('category', $cats_data));
    FormRow('Выберите файлы', RemoveIndent('
		<div style="float: left;" id="uploadFilesCount">Выбрано 0 файл(ов)</div>
		&nbsp;&nbsp;&nbsp;&nbsp;
		<div class="button" style="float: right; border: 1px #ccc solid;">
			<span id="uploadbutton">
				<a href="http://www.adobe.com/go/getflashplayer">Get Adobe Flash player</a>
			</span>
		</div>
	'));
    FormRow('Комментарии', System::site()->Select('allow_comments', GetEnData(true, 'Разрешить', 'Запретить')));
    FormRow('Оценки', System::site()->Select('allow_votes', GetEnData(true, 'Разрешить', 'Запретить')));
    FormRow('Кто видит', System::site()->Select('view', GetUserTypesFormData(4)));
    FormRow('Показать', System::site()->Select('show', GetEnData(true, 'Да', 'Нет')));
    AddForm('<form action="' . ADMIN_FILE . '?exe=gallery&a=upload&formid=' . $formid . '" method="post" onsubmit="return GallerySubmitFormGuard();" id="galleryForm">', System::admin()->Hidden('action', 'preview') . System::admin()->Submit('Загрузить'));
}
        $index_disabled = '';
    }
    $unique = isset($col['unique']) ? $col['unique'] : false;
    $index = isset($col['index']) ? $col['index'] : false;
    $fulltext = isset($col['fulltext']) ? $col['fulltext'] : false;
    $text .= '<tr>
		<td>' . $site->Edit('name' . $i, isset($col['name']) ? $col['name'] : '', false, 'style="width:80px;"') . '</td>
		<td>' . $site->Select('type' . $i, $types) . '</td>
		<td>' . $site->Edit('length' . $i, isset($col['length']) ? $col['length'] : '', false, 'style="width:50px"') . '</td>
		<td>' . $site->Select('attributes' . $i, $atr) . '</td>
		<td>' . $site->Check('notnull' . $i, 'notnull', isset($col['notnull']) ? false : true) . '</td>
		<td>' . $site->Edit('default' . $i, isset($col['default']) ? $col['default'] : '', false, 'style="width:80px;"') . '</td>
		<td>' . $site->Check('auto_increment' . $i, 'val', isset($col['auto_increment']) ? $col['auto_increment'] : false) . '</td>
		<td>' . $site->Radio('params' . $i, 'primary', $primary, $primary_disabled) . '</td>
		<td>' . $site->Radio('params' . $i, 'unique', $unique, $index_disabled) . '</td>
		<td>' . $site->Radio('params' . $i, 'index', $index, $index_disabled) . '</td>
		<td>' . $site->Radio('params' . $i, 'fulltext', $fulltext, $fulltext_disabled) . '</td>
		<td>' . $site->Radio('params' . $i, 'noparams', !$primary && !$unique && !$index && !$fulltext, $disabled) . '</td>
	</tr>';
}
$text .= '</table>';
$table_comment = isset($info['comment']) ? SafeDB($info['comment'], 255, str) : '';
$table_counter = isset($info['counter']) ? SafeDB($info['counter'], 11, int) : 0;
$disabled_counter = System::database()->Name != 'FilesDB' ? ' disabled' : '';
$text .= 'Комментарий к таблице:&nbsp;' . $site->Edit('comment', $table_comment, false, 'style="width: 300px;"') . ' &nbsp;&nbsp;&nbsp;&nbsp;' . 'Тип:&nbsp;' . $site->Select('tabletype', $tabletypes) . ' &nbsp;&nbsp;&nbsp;&nbsp;' . 'Индекс автоинкремента:&nbsp;' . $site->Edit('increment_index', $table_counter, false, 'style="width: 60px; text-align: right;"' . $disabled_counter) . $site->Hidden('tablename', $name) . $site->Hidden('cols', $columns_count) . '<br><br>';
if ($action == 'edittable') {
    $text .= $site->Hidden('num_rows', $info['num_rows']) . $site->Hidden('counter', $info['counter']) . System::site()->Button('Отмена', 'onclick="history.go(-1)"');
}
$text .= $site->Submit($bcaption) . '</form>';
AddTextBox($tcaption, $text);
function AdminArticlesSaveArticle($action)
{
    global $editarticles;
    if (!$editarticles) {
        System::admin()->AccessDenied();
    }
    $cat_id = SafeEnv($_POST['category'], 11, int);
    if (in_array($cat_id, AdminArticlesGetTree()->GetAllChildId(0)) === false || $cat_id == 0) {
        GO(ADMIN_FILE . '?exe=articles');
    }
    $author = SafeEnv($_POST['author'], 200, str, true);
    $email = SafeEnv($_POST['email'], 50, str, true);
    $www = SafeEnv(Url($_POST['www']), 250, str, true);
    $title = SafeEnv($_POST['title'], 255, str);
    $description = SafeEnv($_POST['description'], 0, str, false, true, false);
    $article = SafeEnv($_POST['article'], 0, str, false, true, false);
    // Загружаем изображение
    $Error = false;
    $image = LoadImage('up_image', System::config('articles/images_dir'), System::config('articles/images_dir') . 'thumbs', System::config('articles/thumb_max_width'), System::config('articles/thumb_max_height'), $_POST['image'], $Error);
    $auto_br_desc = EnToInt($_POST['auto_br_desc']);
    $auto_br_article = EnToInt($_POST['auto_br_article']);
    $allow_comments = EnToInt($_POST['allow_comments']);
    $allow_votes = EnToInt($_POST['allow_votes']);
    $view = ViewLevelToInt($_POST['view']);
    $active = EnToInt($_POST['active']);
    //Модуль SEO
    $seo_title = SafeEnv($_POST['seo_title'], 255, str);
    $seo_keywords = SafeEnv($_POST['seo_keywords'], 255, str);
    $seo_description = SafeEnv($_POST['seo_description'], 255, str);
    //
    $form = SafeEnv($_POST['form'], 11, int);
    $product_id = SafeEnv($_POST['product_id'], 255, str);
    if ('add' == $action) {
        $values = Values('', $cat_id, time(), $author, $email, $www, $title, $description, $article, $image, 0, $allow_comments, 0, $allow_votes, 0, 0, $active, $view, $auto_br_desc, $auto_br_article, $seo_title, $seo_keywords, $seo_description, $form, $product_id);
        System::database()->Insert('articles', $values);
        if ($active) {
            AdminArticlesGetTree()->CalcFileCounter($cat_id, true);
        }
        Audit('Статьи: Добавление статьи "' . $title . '"');
    } elseif ('save' == $action) {
        $set = "`cat_id`='{$cat_id}',`author`='{$author}',`email`='{$email}',`www`='{$www}',`title`='{$title}',`description`='{$description}',`article`='{$article}',`image`='{$image}',`allow_comments`='{$allow_comments}',`allow_votes`='{$allow_votes}',`view`='{$view}',`active`='{$active}',`auto_br_desc`='{$auto_br_desc}',`auto_br_article`='{$auto_br_article}',`seo_title`='{$seo_title}',`seo_keywords`='{$seo_keywords}',`seo_description`='{$seo_description}',`form`='{$form}',`product_id`='{$product_id}'";
        $id = SafeEnv($_GET['id'], 11, int);
        $r = System::database()->Select('articles', "`id`='{$id}'");
        if ($r[0]['cat_id'] != $cat_id && $r[0]['active'] == '1') {
            // Если переместили в другой раздел
            AdminArticlesGetTree()->CalcFileCounter($r[0]['cat_id'], false);
            AdminArticlesGetTree()->CalcFileCounter($cat_id, true);
        }
        if ($r[0]['active'] != $active) {
            // Выключили / Включили
            if ($active == 0) {
                AdminArticlesGetTree()->CalcFileCounter($cat_id, false);
            } else {
                AdminArticlesGetTree()->CalcFileCounter($cat_id, true);
            }
        }
        System::database()->Update('articles', $set, "`id`='{$id}'");
        Audit('Статьи: Изменение статьи "' . $title . '"');
    }
    if ($Error) {
        AddTextBox('Ошибка', '<p align="center">Неправильный формат файла. Можно загружать только изображения формата GIF, JPEG или PNG. Остальные изменения сохранены.</p><br><a href="' . GetRefererUrl($_REQUEST['back']) . '" class="button">Далее</a>');
        return;
    }
    GoRefererUrl($_REQUEST['back']);
}
function AcAddRetrofitting()
{
    if (RequestMethod() != 'POST') {
        return;
    }
    $back_url = '';
    if (!AdminConfigPlugins()) {
        $access_config = 'System::config(';
        $back_url = ADMIN_FILE . '?exe=config_admin&a=view_all&saveok';
    } else {
        $access_config = 'System::plug_config(';
        $back_url = ADMIN_FILE . '?exe=config_admin&a=view_all_plugins&plugins=1&saveok';
    }
    System::database()->Select(AdminConfigGroupTable());
    $groups = array();
    while ($g = System::database()->FetchRow()) {
        $groups[$g['id']] = $g['name'];
    }
    $group = SafeEnv($_POST['group'], 11, int);
    $hname = SafeEnv($_POST['hname'], 255, str, true);
    $name = SafeEnv($_POST['name'], 255, str);
    $value = SafeEnv($_POST['value'], 0, str);
    $description = SafeEnv($_POST['description'], 255, str, true);
    if (isset($_POST['visible'])) {
        $visible = '1';
    } else {
        $visible = '0';
    }
    if (isset($_POST['autoload'])) {
        $autoload = '1';
    } else {
        $autoload = '0';
    }
    // генерируем kind
    $kind = '';
    $values = '';
    $savefunc = '';
    $type = '';
    if ($visible == '1') {
        $kind .= SafeEnv($_POST['control'], 25, str);
        $width = SafeEnv($_POST['cwidth'], 14, str);
        $height = SafeEnv($_POST['cheight'], 14, str);
        $cols = SafeEnv($_POST['ccols'], 11, int);
        if ($width != '') {
            $kind .= ':w' . $width;
        }
        if ($height != '') {
            $kind .= ':h' . $height;
        }
        if ($cols > 1) {
            $kind .= ':c' . $cols;
        }
        $getfunc = SafeEnv($_POST['valuesfunc'], 255, str);
        if ($getfunc == '' || !function_exists(CONF_GET_PREFIX . $getfunc)) {
            $values = SafeEnv($_POST['values'], 0, str);
        } else {
            $values = 'function:' . $getfunc;
        }
    }
    if (function_exists(CONF_SAVE_PREFIX . $_POST['savefunc'])) {
        $savefunc = SafeEnv($_POST['savefunc'], 255, str);
    } else {
        $savefunc = '';
    }
    $maxlenght = SafeEnv($_POST['maxlength'], 11, int);
    $type = SafeEnv($_POST['datatype'], 255, str);
    if (isset($_POST['striptags'])) {
        $striptags = 'true';
    } else {
        $striptags = 'false';
    }
    $type = $maxlenght . ',' . $type . ',' . $striptags;
    // Сохраняем
    $to_db = Values('', $group, $name, $value, $visible, $hname, $description, $kind, $values, $savefunc, $type, $autoload);
    if (isset($_GET['id'])) {
        $id = SafeEnv($_GET['id'], 11, str);
        System::database()->Update(AdminConfigConfigTable(), $to_db, "`id`='{$id}'", true);
        Audit('Управление настройками: Изменение настройки "' . $hname . '(' . $name . ')" в "' . AdminConfigConfigTable() . '"');
        if (isset($_REQUEST['back'])) {
            GoRefererUrl($_REQUEST['back']);
        } else {
            GO($back_url);
        }
    } else {
        if (isset($_REQUEST['back'])) {
            $back_url = GetRefererUrl($_REQUEST['back']);
        }
        System::database()->Insert(AdminConfigConfigTable(), $to_db);
        Audit('Управление настройками: Добавление настройки "' . $hname . '(' . $name . ')" в "' . AdminConfigConfigTable() . '"');
        AddTextBox('Подтверждение', 'Новая настройка успешно добавлена.<br />Для доступа к значению настройки используйте код:<br /><br />' . $access_config . "<span style=\"color: #008200\">'" . $groups[$group] . '/' . "" . $name . "'</span>)" . '<br><br>' . System::admin()->SpeedButton('Назад', $back_url, '', true, true));
    }
}
function AdminMailAddEmail()
{
    if (!isset($_GET['topic_id'])) {
        GO(ADMIN_FILE . '?exe=mail');
    }
    $topic_id = SafeEnv($_GET['topic_id'], 11, int);
    if (!isset($_POST['email'])) {
        GO(ADMIN_FILE . '?exe=mail');
    }
    if (CheckEmail($_POST['email'])) {
        $email = SafeEnv($_POST['email'], 50, str, true);
    } else {
        $text = 'Не правильный формат E-mail. Он должен быть вида: <b>domain@host.ru</b>.<br />' . '<a href="javascript:history.go(-1)">Назад</a>';
        AddTextBox("Внимание!", $text);
        return;
    }
    System::database()->Select('mail_topics', "`id`='{$topic_id}'");
    $topic = System::database()->FetchRow();
    $html = SafeEnv($_POST['html'], 1, int);
    $vals = Values('0', $topic_id, $email, $html);
    System::database()->Insert('mail_list', $vals);
    Audit('Рассылки: Добавление адреса ' . $email . ' в список рассылки темы "' . $topic['title'] . '"');
    CalcListCounter($topic_id, true);
    GO(ADMIN_FILE . '?exe=mail&a=list&topic_id=' . $topic_id);
}
function AdminAdminMenuMain()
{
    UseScript('jquery_ui_treeview');
    $reserved = array('_system_menu', '_site_menu', '_mods_menu', '_help_menu');
    if (isset($_GET['parent'])) {
        $parent = SafeEnv($_GET['parent'], 11, int);
    } else {
        $parent = 0;
    }
    $itemsdb = System::database()->Select('adminmenu');
    SortArray($itemsdb, 'order');
    $items = array();
    foreach ($itemsdb as $item) {
        $items[$item['parent']][] = $item;
    }
    if (!isset($items[$parent])) {
        return '';
    }
    foreach ($items[$parent] as $item) {
        $id = SafeDB($item['id'], 11, int);
        $icon = SafeDB($item['icon'], 255, str);
        $type = SafeDB($item['type'], 255, str);
        $title = SafeDB($item['title'], 255, str);
        if ($icon == '') {
            $icon = 'images/page.png';
        }
        if ($type == 'delimiter') {
            $title = '-- Разделитель --';
        }
        $editlink = ADMIN_FILE . '?exe=adminmenu&a=editor&id=' . $id;
        $func = '';
        $func .= System::admin()->SpeedButton('Добавить дочернюю ссылку', ADMIN_FILE . '?exe=adminmenu&a=editor&parent=' . $id, 'images/admin/link_add.png');
        $func .= '&nbsp;';
        $func .= System::admin()->SpeedStatus('Выключить', 'Включить', ADMIN_FILE . '?exe=adminmenu&a=changestatus&id=' . $id, $item['enabled'] == '1', 'images/bullet_green.png', 'images/bullet_red.png');
        if (!in_array($item['module'], $reserved)) {
            $func .= '&nbsp;';
            $func .= System::admin()->SpeedButton('Редактировать', $editlink, 'images/admin/edit.png');
            $func .= System::admin()->SpeedConfirmJs('Удалить', '$(\'#tree_container\').treeview(\'deleteNode\', ' . $id . ');', 'images/admin/delete.png', 'Удалить элемент "' . $title . '"?');
            $title = '<strong>' . System::admin()->Link($title, $editlink, 'Редактировать') . '</strong>';
        }
        $elements[] = array('id' => $id, 'icon' => $icon, 'title' => $title, 'func' => $func, 'isnode' => isset($items[$id]), 'child_url' => 'admin.php?exe=adminmenu&a=ajaxtree&parent=' . $id);
    }
    if ($parent == 0) {
        System::admin()->AddOnLoadJS('$("#tree_container").treeview({move: \'' . ADMIN_FILE . '?exe=adminmenu&a=ajaxmove\', del: \'' . ADMIN_FILE . '?exe=adminmenu&a=delete\', tree: ' . JsonEncode($elements) . '});');
        AddTextBox('Меню администратора', '<div id="tree_container"></div>');
    } else {
        echo JsonEncode($elements);
        exit;
    }
}
function AdminForumBasket($table = 'forum_basket_post')
{
    global $config, $site;
    if (isset($_GET['page'])) {
        $page = SafeEnv($_GET['page'], 10, int);
    } else {
        $page = 1;
    }
    if ($table == 'forum_basket_post') {
        $site->Title .= ' > Удаляемые сообщения';
        $caption = 'Удаляемые сообщения';
    } else {
        $site->Title .= ' > Удаляемые Темы';
        $caption = 'Удаляемые Темы';
    }
    $result = System::database()->Select($table);
    if (count($result) > 20) {
        $navigator = new Navigation($page);
        $navigator->GenNavigationMenu($result, 20, ADMIN_FILE . '?exe=forum&a=' . $table);
        $nav = true;
    } else {
        $nav = false;
    }
    $mop = 'showtopic&topic=';
    if ($table == 'forum_basket_post') {
        $table_caption = ' (сообщение)';
        if (count($result) > 0) {
            $mposts = array();
            $where = '';
            foreach ($result as $mpost) {
                $where .= "`id`='" . $mpost['obj_id'] . "' or ";
            }
            $where = substr($where, 0, strlen($where) - 3);
            $result_posts = System::database()->Select('forum_posts', $where);
            if (count($result_posts) > 0) {
                foreach ($result_posts as $mpost) {
                    $mposts[$mpost['id']] = $mpost['object'];
                    $mpostsm[$mpost['id']] = $mpost['message'];
                }
                foreach ($result as $mpost) {
                    $mpost['obj_id2'] = $mposts[$mpost['obj_id']];
                    $mpost['obj_id'] = $mpost['obj_id'];
                    $mpost['date'] = $mpost['date'];
                    $mpost['user'] = $mpost['user'];
                    $mpost['reason'] = $mpost['reason'];
                    $mpost['message'] = $mpostsm[$mpost['obj_id']];
                    $result2[] = $mpost;
                }
                $result = $result2;
            }
        }
    } else {
        $table_caption = ' (название темы)';
        if (count($result) > 0) {
            $where = '';
            foreach ($result as $mpost) {
                $where .= "`id`='" . $mpost['obj_id'] . "' or ";
            }
            $where = substr($where, 0, strlen($where) - 3);
            $result_topics = System::database()->Select('forum_topics', $where);
            if (count($result_topics) > 0) {
                foreach ($result_topics as $mtopic) {
                    $mtopics[$mtopic['id']] = $mtopic['title'];
                }
                foreach ($result as $mtopic) {
                    $mpost['obj_id'] = $mtopic['obj_id'];
                    $mpost['date'] = $mtopic['date'];
                    $mpost['user'] = $mtopic['user'];
                    $mpost['reason'] = $mtopic['reason'];
                    $mpost['message'] = $mtopics[$mtopic['obj_id']];
                    $result2[] = $mpost;
                }
                $result = $result2;
            }
        }
    }
    $text = '<table cellspacing="0" cellpadding="0" class="cfgtable">';
    $text .= '<tr><th>Кто удалил</th><th>Дата удаления</th><th>Дата окончательного удаления</th><th>Комментарий</th><th>Содержимое удаляемого <BR>' . $table_caption . '</th><th>Функции</th></tr>';
    foreach ($result as $basket) {
        $mop = 'showtopic&topic=' . ($table == 'forum_basket_post' ? $basket['obj_id2'] : $basket['obj_id']);
        $restore_link = ADMIN_FILE . '?exe=forum&a=basket_restore&' . $table . '=' . $basket['obj_id'];
        $ainfo = GetUserInfo($basket['user']);
        $text .= '<tr>
		<td>' . $ainfo['name'] . '</td>
		<td>' . TimeRender($basket['date'], false, false) . '</td>
		<td>' . TimeRender($basket['date'] + 86400 * $config['forum']['clear_basket_day'], false, false) . '</td>
		<td>' . $basket['reason'] . '</td>
		<td>' . (isset($basket['message']) ? $basket['message'] : '') . '</td>
		<td><a href="' . $restore_link . '">Восстановить</a>
		&nbsp;<a href="index.php?name=forum&op=' . $mop . '" target="_blank">Просмотр</a></td>
		</tr>';
    }
    $text .= '</table>';
    AddTextBox($caption, $text);
    if ($nav) {
        AddNavigation();
    }
}
function AdminFormsViewPosts($new)
{
    $file_save_dir = 'uploads/forms';
    if (!isset($_GET['id'])) {
        return;
    }
    $id = SafeEnv($_GET['id'], 11, int);
    System::database()->Select('forms', "`id`='{$id}'");
    $form = System::database()->FetchRow();
    $box_title = $form['hname'];
    if ($new) {
        $moderated = " and `moderated`='0'";
    } else {
        $moderated = '';
    }
    $posts = System::database()->Select('forms_data', "`form_id`='{$id}'" . $moderated);
    if (count($posts) == 0) {
        System::admin()->AddCenterBox('Новые поcты формы "' . $box_title . '"');
        System::admin()->Highlight('Нет новых сообщений');
        return;
    }
    $text = '';
    foreach ($posts as $post) {
        $time = TimeRender(SafeDB($post['time'], 11, int));
        if ($post['user_id'] > 0) {
            $user_info = GetUserInfo(SafeDB($post['user_id'], 11, int));
            $user_name = '<a href="' . 'index.php?name=user&op=userinfo&user='******'id'] . '">' . $user_info['name'] . '</a>';
        } else {
            $user_name = '-';
        }
        $ip = SafeDB($post['user_ip'], 20, str);
        $data_rows = unserialize($post['data']);
        $post_text = '';
        foreach ($data_rows as $row) {
            if ($row[2] == 'file') {
                $post_text .= '<b>' . SafeDB($row[0], 255, str) . ':</b><br><a href="' . SafeDB($file_save_dir . '/' . $row[1], 0, str) . '">' . SafeDB($row[3], 255, str) . '</a><br>';
            } else {
                $post_text .= '<b>' . SafeDB($row[0], 255, str) . ':</b><br>' . SafeDB($row[1], 0, str) . '<br>';
            }
        }
        $delfunc = System::admin()->SpeedConfirm('Удалить данные формы', ADMIN_FILE . '?exe=forms&a=delpost&id=' . $id . '&pid=' . SafeDB($post['id'], 11, int) . '&ok=0' . ($new ? '&new=1' : ''), 'images/admin/delete.png', 'Удалить?');
        //'<a href="'.ADMIN_FILE.'?exe=forms&a=delpost&id='.$id.'&pid='.SafeDB($post['id'], 11, int).'&ok=0&new=1"><img src="images/admin/delete.png" title="Удалить эти данные" /></a>';
        $text .= '<table cellspacing="0" cellpadding="0" border="0" class="cfgtable">';
        $text .= '<tr><th>Дата: ' . $time . '</td><th>Пользователь: ' . $user_name . '</td><th>IP: ' . $ip . '</td><th width="30">' . $delfunc . '</td></tr>';
        $text .= '<tr><td colspan="4" style="text-align:left;padding-left:10px;">' . $post_text . '</td></tr>';
        $text .= '</table>';
    }
    if ($new) {
        $text .= '<div style="text-align: right;">' . System::admin()->SpeedButton('Отметить все как просмотренные', ADMIN_FILE . '?exe=forms&a=checkall&id=' . $id, '', true, true) . '</div>';
    }
    AddTextBox('Новые поcты формы "' . $box_title . '"', $text);
}
/**
 * Генерирует Ajax дерево страниц
 * @return void
 */
function AdminPagesAjaxTree()
{
    UseScript('jquery_ui_treeview');
    if (CheckGet('parent')) {
        $parent = SafeEnv($_GET['parent'], 11, int);
    } else {
        $parent = 0;
    }
    $pages = System::database()->Select('pages');
    SortArray($pages, 'order');
    $pages_tree = new Tree($pages);
    $elements = array();
    if ($parent == 0) {
        $func = '';
        $func .= SpeedButton('Добавить дочернюю страницу', ADMIN_FILE . '?exe=pages&a=editor', 'images/admin/page_add.png');
        $func .= SpeedButton('Добавить дочернюю ссылку', ADMIN_FILE . '?exe=pages&a=link', 'images/admin/link_add.png');
        $func .= SpeedButton('Добавить дочернюю категорию', ADMIN_FILE . '?exe=pages&a=cat', 'images/admin/folder_add.png');
        $site_node = array('id' => '0', 'title' => System::config('general/site_name'), 'icon' => 'images/globe.png', 'func' => $func, 'isnode' => true, 'opened' => true, 'childs' => array());
    }
    foreach ($pages_tree->Cats[$parent] as $page) {
        $id = SafeDB($page['id'], 11, int);
        if ($page['type'] == 'page') {
            $link = Ufu('index.php?name=pages&file=' . SafeDB($page['link'], 255, str), 'pages:page');
            $icon = 'images/page.png';
            $type = 'Страница';
            $counter = SafeDB($page['hits'], 11, int);
            $edit_link = ADMIN_FILE . '?exe=pages&a=editor&id=' . $id;
        } elseif ($page['type'] == 'link') {
            $link = SafeDB($page['text'], 255, str);
            if (substr($link, 0, 6) == 'mod://') {
                $link = Ufu('index.php?name=' . substr($link, 6), '{name}/');
            }
            $icon = 'images/link.png';
            $type = 'Ссылка';
            $counter = '-&nbsp;';
            $edit_link = ADMIN_FILE . '?exe=pages&a=link&id=' . $id;
        } else {
            $link = Ufu('index.php?name=pages&file=' . SafeDB($page['link'], 255, str), 'pages:page');
            $icon = 'images/folder.png';
            $type = 'Категория';
            $counter = '-&nbsp;';
            $edit_link = ADMIN_FILE . '?exe=pages&a=cat&id=' . $id;
        }
        $func = '';
        $func .= System::admin()->SpeedButton('Добавить дочернюю страницу', ADMIN_FILE . '?exe=pages&a=editor&parent=' . $id, 'images/admin/page_add.png');
        $func .= System::admin()->SpeedButton('Добавить дочернюю ссылку', ADMIN_FILE . '?exe=pages&a=link&parent=' . $id, 'images/admin/link_add.png');
        $func .= System::admin()->SpeedButton('Добавить дочернюю категорию', ADMIN_FILE . '?exe=pages&a=cat&parent=' . $id, 'images/admin/folder_add.png');
        $func .= '&nbsp;';
        $func .= System::admin()->SpeedStatus('Скрыть из меню', 'Показать в меню', ADMIN_FILE . '?exe=pages&a=changemenu&id=' . $id, $page['showinmenu'] == '1', 'images/menu_enabled.png', 'images/menu_disabled.png');
        $func .= System::admin()->SpeedStatus('Выключить', 'Включить', ADMIN_FILE . '?exe=pages&a=changestatus&id=' . $id, $page['enabled'] == '1', 'images/bullet_green.png', 'images/bullet_red.png');
        $func .= '&nbsp;';
        $func .= System::admin()->SpeedButton('Редактировать', $edit_link, 'images/admin/edit.png');
        $func .= System::admin()->SpeedConfirmJs('Удалить', '$(\'#tree_container\').treeview(\'deleteNode\', ' . $id . ');', 'images/admin/delete.png', 'Уверены что хотите удалить? Все дочерние страницы и ссылки так-же будут удалены.');
        $view = ViewLevelToStr(SafeDB($page['view'], 1, int));
        $info = Indent("\n\t\t\t<b>Тип</b>: {$type}<br />\n\t\t\t" . ($page['type'] == 'page' ? "<b>Просмотров</b>: {$counter}<br />" : '') . "\n\t\t\t<b>Видят</b>: {$view}<br />\n\t\t\t<b>Адрес</b>: <a href=\"{$link}\" target=\"_blank\">/" . Utf8ToCp1251(rawurldecode($link)) . "</a>\n\t\t");
        $elements[] = array('id' => $id, 'icon' => $icon, 'title' => '<b>' . System::admin()->Link(SafeDB($page['title'], 255, str), $edit_link) . '</a></b>', 'info' => $info, 'func' => $func, 'isnode' => isset($pages_tree->Cats[$id]), 'child_url' => 'admin.php?exe=pages&a=ajaxtree&parent=' . $id);
    }
    if ($parent == 0) {
        $site_node['childs'] =& $elements;
        $tree = array(&$site_node);
    } else {
        $tree =& $elements;
    }
    if ($parent == 0) {
        System::admin()->AddOnLoadJS('$("#tree_container").treeview({move: \'' . ADMIN_FILE . '?exe=pages&a=ajaxmove\', del: \'' . ADMIN_FILE . '?exe=pages&a=delete\', tree: ' . JsonEncode($tree) . '});');
        AddTextBox('Страницы', '<div id="tree_container"></div>');
    } else {
        echo JsonEncode($tree);
        exit;
    }
}
function AdminDownloadsSaveFile($action)
{
    if ($_POST == array()) {
        AddTextBox('Ошибка', '<b>Внимание! Превышен максимальный размер POST данных. Изменения не сохранены.</b>');
        return;
    }
    $Error = '';
    if (!System::user()->CheckAccess2('downloads', 'edit_files')) {
        System::admin()->AccessDenied();
    }
    $category = SafeEnv($_POST['category'], 11, int);
    if (in_array($category, AdminDownloadsGetTree()->GetAllChildId(0)) === false || $category == 0) {
        GO(ADMIN_FILE . '?exe=downloads');
    }
    $title = SafeEnv($_POST['title'], 250, str);
    // Обрабатываем upload_file если загрузился файл
    $exts = explode(',', System::config('downloads/file_exts'));
    $exts2 = array();
    foreach ($exts as $ext) {
        $exts2[trim($ext)] = true;
    }
    $UploadErrors = array(0 => '', 1 => 'Размер файла превышен', 2 => 'Размер файла превышен', 3 => 'Файл загружен только частично', 4 => 'Файл не был загружен.', 6 => 'Не найдена папка для временных файлов на сервере', 7 => 'Ошибка во время записи на диск', 8 => 'Загрузка файла была прервана расширением PHP', 9 => 'Ошибка во время записи на диск');
    if ($_FILES['upload_file']['error'] == UPLOAD_ERR_OK) {
        if (isset($exts2[strtolower(GetFileExt($_FILES['upload_file']['name']))])) {
            // Загружаем файл
            $Dir = System::config('downloads/files_dir');
            $file_name = Translit($_FILES['upload_file']['name'], true);
            $ext = GetFileExt($file_name);
            $name = GetFileName($file_name, true);
            $i = 1;
            while (is_file($Dir . $file_name)) {
                $i++;
                $file_name = $name . '_' . $i . $ext;
            }
            $FileName = $Dir . $file_name;
            copy($_FILES['upload_file']['tmp_name'], $FileName);
            $url = SafeEnv($FileName, 255, str);
        } else {
            $url = SafeEnv($_POST['url'], 255, str);
        }
    } else {
        if ($_FILES['upload_file']['error'] != 4) {
            $Error = $UploadErrors[$_FILES['upload_file']['error']];
        }
        $url = SafeEnv($_POST['url'], 255, str);
    }
    if ($_POST['size'] > 0) {
        $file_size = SafeEnv($_POST['size'], 11, real);
        // Дробное число
        $size_type = SafeEnv($_POST['filesize_type'], 1, str);
    } elseif (file_exists($url)) {
        $file_size = filesize($url);
        $size_type = 'b';
    } elseif (file_exists(System::config('general/site_url') . $url)) {
        $file_size = filesize(System::config('general/site_url') . $url);
        $size_type = 'b';
    } else {
        $file_size = SafeEnv($_POST['size'], 11, int);
        $size_type = 'b';
    }
    $shortdesc = SafeEnv($_POST['shortdesc'], 0, str);
    $description = SafeEnv($_POST['description'], 0, str);
    // Загружаем изображение
    $ImageUploadError = false;
    $image = LoadImage('up_image', System::config('downloads/images_dir'), System::config('downloads/images_dir') . 'thumbs/', System::config('downloads/thumb_max_width'), System::config('downloads/thumb_max_height'), $_POST['image'], $ImageUploadError);
    $author = SafeEnv($_POST['author'], 50, str);
    $author_site = SafeEnv(Url($_POST['author_site']), 250, str);
    $author_email = SafeEnv($_POST['author_email'], 50, str);
    $file_ver = SafeEnv($_POST['version'], 250, str);
    $allow_comments = EnToInt($_POST['allow_comments']);
    $allow_votes = EnToInt($_POST['allow_votes']);
    $view = ViewLevelToInt($_POST['view']);
    $active = EnToInt($_POST['active']);
    if ('editfilesave' == $action) {
        //Здесь генерируем Set запрос
        $set = "title='{$title}',category='{$category}',size='{$file_size}',size_type='{$size_type}',url='{$url}',shortdesc='{$shortdesc}',description='{$description}',image='{$image}',author='{$author}',author_site='{$author_site}',author_email='{$author_email}',file_version='{$file_ver}',allow_comments='{$allow_comments}',allow_votes='{$allow_votes}',view='{$view}',active='{$active}'";
        $id = SafeEnv($_GET['id'], 11, int);
        $r = System::database()->Select('downloads', "`id`='{$id}'");
        if ($r[0]['category'] != $category && $r[0]['active'] == '1') {
            AdminDownloadsGetTree()->CalcFileCounter($r[0]['category'], false);
            AdminDownloadsGetTree()->CalcFileCounter($category, true);
        }
        if ($r[0]['active'] != $active) {
            // Выключили / Включили
            if ($active == 0) {
                AdminDownloadsGetTree()->CalcFileCounter($category, false);
            } else {
                AdminDownloadsGetTree()->CalcFileCounter($category, true);
            }
        }
        System::database()->Update('downloads', $set, "`id`='{$id}'");
        Audit('Архив файлов: Редактирование файла "' . $title . '"');
    } elseif ('addfilesave' == $action) {
        $values = Values('', $category, time(), $file_size, $size_type, $title, $url, $shortdesc, $description, $image, $author, $author_site, $author_email, $file_ver, $allow_comments, 0, $allow_votes, 0, 0, 0, $view, $active);
        System::database()->Insert('downloads', $values);
        Audit('Архив файлов: Добавление файла "' . $title . '"');
        if ($active) {
            AdminDownloadsGetTree()->CalcFileCounter($category, true);
        }
    }
    if ($ImageUploadError) {
        AddTextBox('Ошибка', '<p align="center">Неправильный формат файла. Можно загружать только изображения формата GIF, JPEG или PNG. Остальные изменения сохранены.</p><br><a href="' . GetRefererUrl($_REQUEST['back']) . '" class="button">Далее</a>');
        return;
    }
    if ($Error != '') {
        AddTextBox('Ошибка', '<p align="center">Не удалось загрузить файл, изменения сохранены. Ошибка: ' . $Error . '.</p><br><a href="' . GetRefererUrl($_REQUEST['back']) . '" class="button">Далее</a>');
        return;
    }
    GoRefererUrl($_REQUEST['back']);
}
<?php

/*
 * LinkorCMS 1.4
 * © 2012 LinkorCMS Development Group
 */
if (!defined('VALID_RUN')) {
    header("HTTP/1.1 404 Not Found");
    exit;
}
TAddSubTitle('√лавна¤');
global $adminpanel_content;
$adminpanel_content = '';
IncludePluginsGroup('adminpanel');
AddTextBox('јдмин-панель', $adminpanel_content);
<?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);
/**
 * Сохраняет данные формы сгенерированной фукцией 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('Ваш профиль сохранён, обновите страницу.');
        }
    }
}
/**
 * Создает страницу конфигурации в админ панели
 * @param $Exe Значение параметра URL exe
 * @param string $Group Либо 0, либо имя группы
 * @param bool $ShowHiddenGroups Отображать скрытые группы
 * @param bool $ShowTitles Отображать заголовки у групп
 * @param string $ModuleName Заголовок текстового блока
 * @param string $SavePageParam Параметр ссылки на функию сохранения настроек
 * @return void
 */
function AdminConfigurationEdit($Exe, $Group = '', $ShowHiddenGroups = false, $ShowTitles = true, $ModuleName = '', $SavePageParam = 'a=configsave')
{
    global $config, $conf_config_table, $conf_config_groups_table;
    // Вытаскиваем настройки и отсортировываем по группам
    $temp = System::database()->Select($conf_config_table, '');
    $configs = array();
    for ($i = 0, $cnt = count($temp); $i < $cnt; $i++) {
        $configs[$temp[$i]['group_id']][] = $temp[$i];
    }
    unset($temp);
    // Вытаскиваем группы настроек
    if ($Group == '') {
        $q = '';
    } else {
        $q = "`name`='{$Group}'";
    }
    $cfg_grps = System::database()->Select($conf_config_groups_table, $q);
    // Добавляем форму и начинаем генерировать текст
    $text = '<form action="' . ADMIN_FILE . '?exe=' . $Exe . '&' . $SavePageParam . '" method="post">';
    for ($i = 0, $cnt = count($cfg_grps); $i < $cnt; $i++) {
        // Если эта группа невидима то пропускаем её
        if ($Group === 0) {
            if ($cfg_grps[$i]['visible'] == 0) {
                continue;
            }
        }
        // Или если в ней нет настроек
        if (!isset($configs[$cfg_grps[$i]['id']])) {
            $jcnt = 0;
        } else {
            $jcnt = count($configs[$cfg_grps[$i]['id']]);
        }
        // Добавляем таблицу и заголовок группы настроек
        $text .= '<table cellspacing="1" cellpadding="0" class="configtable">';
        if ($ShowTitles) {
            $text .= '<tr><th colspan="2" class="configtable-th">' . SafeDB($cfg_grps[$i]['hname'], 255, str) . '</th></tr>';
        }
        // Добавляем настройки группы
        if ($jcnt > 0) {
            for ($j = 0; $j < $jcnt; $j++) {
                // Если настройка невидима то пропускаем её
                if ($configs[$cfg_grps[$i]['id']][$j]['visible'] == '0' && !$ShowHiddenGroups) {
                    continue;
                }
                $name = SafeDB($configs[$cfg_grps[$i]['id']][$j]['name'], 255, str, false, false);
                $desc = SafeDB($configs[$cfg_grps[$i]['id']][$j]['description'], 255, str, false, false);
                $type = $configs[$cfg_grps[$i]['id']][$j]['type'];
                $value = $configs[$cfg_grps[$i]['id']][$j]['value'];
                $kind = $configs[$cfg_grps[$i]['id']][$j]['kind'];
                $hname = SafeDB($configs[$cfg_grps[$i]['id']][$j]['hname'], 255, str, false, false);
                $values = $configs[$cfg_grps[$i]['id']][$j]['values'];
                $text .= '<tr>' . '<td class="configtable-left">' . $hname . ($desc != '' ? '<br /><span class="configtable-desc">' . $desc . '</span>' : '') . '</td>' . '<td class="configtable-right">' . FormsGetControl($name, $value, $kind, $type, $values) . '</td>' . '</tr>';
            }
        } else {
            $text .= '<tr><td class="configtable-left" align="center"> В этой группе пока нет настроек. </td></tr>';
        }
        //Закрываем таблицу группы
        $text .= '</table>';
    }
    $text .= '<table class="configtable-submit"><tr><td>' . System::site()->Submit('Сохранить') . '</td></tr></table>';
    $text .= '</form>';
    if ($ModuleName == '') {
        $ModuleName = 'Конфигурация';
    }
    AddTextBox($ModuleName, $text);
}
function AdminExtensionsUninstall()
{
    global $db, $config, $user;
    // Для старых модулей
    $ext_type = $_GET['type'];
    $folder = $_GET['name'];
    if (isset($_GET['group'])) {
        $group = $_GET['group'];
    }
    switch ($ext_type) {
        case EXT_MODULE:
            $mod_path = RealPath2(System::config('mod_dir') . $folder);
            $info = ExtLoadInfo($mod_path);
            if (isset($_POST['ok']) || isset($info['1.3'])) {
                $uninstall = $mod_path . '/uninstall.php';
                if (file_exists($uninstall)) {
                    $delete_tables = isset($_POST['delete_tables']);
                    // Могут быть использованы в uninstall.php
                    $delete_files = isset($_POST['delete_files']);
                    include $uninstall;
                    System::cache()->Clear('config');
                    if (isset($info['1.3'])) {
                        // Удаляем пункт меню
                        $folder = SafeEnv($folder, 255, str);
                        AdminMenuDeleteModule($folder);
                    }
                }
                Audit('Расширения: Удаление модуля "' . $folder . '"');
                GO(ADMIN_FILE . '?exe=extensions#tabs-1');
            } else {
                $folder = SafeEnv($folder, 255, str);
                System::database()->Select('modules', "`folder`='{$folder}'");
                if (System::database()->NumRows() == 0) {
                    AddTextBox('Ошибка', 'Модуль не установлен.');
                    return;
                }
                $mod = System::database()->FetchRow();
                $name = SafeDB($mod['name'], 255, str);
                $text = '';
                $text .= '<form method="post">';
                $text .= '<div style="padding: 10px 0 10px 25px;">';
                $text .= '<div style="padding-bottom: 10px">';
                $text .= '<label><input type="checkbox" name="delete_tables">&nbsp;Удалить таблицы БД</label><br>';
                $text .= '<label><input type="checkbox" name="delete_files">&nbsp;Удалить файлы модуля</label>';
                $text .= '</div>';
                $text .= System::admin()->Hidden('ok', '1');
                $text .= '<div>' . System::admin()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Submit('Удалить') . '</div>';
                $text .= '</div></form>';
                AddTextBox('Удаление модуля "' . $name . '"', $text);
            }
            break;
        case EXT_BLOCK:
            $mod_path = RealPath2(System::config('blocks_dir') . $folder);
            if (isset($_POST['ok'])) {
                $uninstall = $mod_path . '/uninstall.php';
                if (file_exists($uninstall)) {
                    $delete_tables = isset($_POST['delete_tables']);
                    $delete_files = isset($_POST['delete_files']);
                    include $uninstall;
                    System::cache()->Clear('config');
                }
                Audit('Удаление блока "' . $folder . '"');
                GO(ADMIN_FILE . '?exe=extensions#tabs-2');
            } else {
                $folder = SafeEnv($folder, 255, str);
                System::database()->Select('block_types', "`folder`='{$folder}'");
                if (System::database()->NumRows() == 0) {
                    AddTextBox('Ошибка', 'Блок не установлен.');
                    return;
                }
                $mod = System::database()->FetchRow();
                $name = SafeDB($mod['name'], 255, str);
                $text = '';
                $text .= '<form method="post">';
                $text .= '<div style="padding: 10px 0 10px 25px;">';
                $text .= '<div style="padding-bottom: 10px">';
                $text .= '<label><input type="checkbox" name="delete_tables">&nbsp;Удалить таблицы БД</label><br>';
                $text .= '<label><input type="checkbox" name="delete_files">&nbsp;Удалить файлы</label>';
                $text .= '</div>';
                $text .= System::admin()->Hidden('ok', '1');
                $text .= '<div>' . System::admin()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Submit('Удалить') . '</div>';
                $text .= '</div></form>';
                AddTextBox('Удаление блока "' . $name . '"', $text);
            }
            break;
        case EXT_PLUGIN:
            if (isset($_GET['group'])) {
                $group = $_GET['group'] . '/';
                $groupenv = SafeEnv($_GET['group'], 255, str);
            } else {
                $group = '';
                $groupenv = '';
            }
            $mod_path = RealPath2(System::config('plug_dir') . $group . $folder);
            $info = ExtLoadInfo($mod_path);
            if (isset($_POST['ok']) || isset($info['1.3'])) {
                $uninstall = $mod_path . '/uninstall.php';
                if (file_exists($uninstall)) {
                    $delete_tables = isset($_POST['delete_tables']);
                    $delete_files = isset($_POST['delete_files']);
                    include $uninstall;
                    System::cache()->Clear('config');
                    // FIXME: plugin config
                }
                if (isset($info['1.3'])) {
                    $folder = SafeEnv($folder, 255, str);
                    System::database()->Delete('plugins', "`name`='{$folder}' and `group`='{$groupenv}'");
                }
                PluginsClearCache();
                Audit('Расширения: Удаление плагина "' . $folder . '"');
                GO(ADMIN_FILE . '?exe=extensions#tabs-3');
            } else {
                $folder = SafeEnv($folder, 255, str);
                System::database()->Select('plugins', "`name`='{$folder}' and `group`='{$groupenv}'");
                if (System::database()->NumRows() == 0) {
                    AddTextBox('Ошибка', 'Плагин не установлен.');
                    return;
                }
                $mod = System::database()->FetchRow();
                $name = SafeDB($info['name'], 255, str);
                $text = '';
                $text .= '<form method="post">';
                $text .= '<div style="padding: 10px 0 10px 25px;">';
                $text .= '<div style="padding-bottom: 10px">';
                $text .= '<label><input type="checkbox" name="delete_tables">&nbsp;Удалить таблицы БД</label><br>';
                $text .= '<label><input type="checkbox" name="delete_files">&nbsp;Удалить файлы</label>';
                $text .= '</div>';
                $text .= System::admin()->Hidden('ok', '1');
                $text .= '<div>' . System::admin()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Submit('Удалить') . '</div>';
                $text .= '</div></form>';
                AddTextBox('Удаление плагина "' . $name . '"', $text);
            }
            break;
        case EXT_TEMPLATE:
            $mod_path = RealPath2(System::config('tpl_dir') . $folder);
            if (isset($_POST['ok'])) {
                ExtRemoveTemplate($folder, isset($_POST['delete_files']));
                Audit('Расширения: Удаление шаблона "' . $folder . '"');
                GO(ADMIN_FILE . '?exe=extensions#tabs-4');
            } else {
                $info = ExtLoadInfo($mod_path);
                if ($info === false) {
                    $info = array('name' => $folder, 'description' => '', 'author' => '', 'site' => '', 'version' => '1.0', 'admin' => false);
                }
                $name = SafeDB($info['name'], 255, str);
                $text = '';
                $text .= '<form method="post">';
                $text .= '<div style="padding: 10px 0 10px 25px;">';
                $text .= '<div style="padding-bottom: 10px">';
                $text .= '<label><input type="checkbox" name="delete_files">&nbsp;Удалить файлы</label>';
                $text .= '</div>';
                $text .= System::admin()->Hidden('ok', '1');
                $text .= '<div>' . System::admin()->Button('Отмена', 'onclick="history.go(-1)"') . System::admin()->Submit('Удалить') . '</div>';
                $text .= '</div></form>';
                AddTextBox('Удаление шаблона "' . $name . '"', $text);
            }
            break;
    }
}
function AdminPollsMainFunc()
{
    global $editpolls;
    $polls = System::database()->Select('polls');
    $text = '<table cellspacing="0" cellpadding="0" class="cfgtable"><tr>';
    $text .= '<th>Опрос</th><th>Всего проголосовало</th><th>Комментарии</th><th>Доступ</th><th>Статус</th><th>Функции</th></tr>';
    foreach ($polls as $poll) {
        $pid = SafeDB($poll['id'], 11, int);
        if ($poll['active'] == '1') {
            $active = '<font color="#008000">Вкл.</font></a>';
        } else {
            $active = '<font color="#FF0000">Выкл.</font>';
        }
        if ($editpolls) {
            $active = System::admin()->SpeedStatus('Вкл.', 'Выкл.', ADMIN_FILE . '?exe=polls&a=changestatus&id=' . $pid, $poll['active'] == '1');
        }
        $answers = unserialize($poll['answers']);
        $c = count($answers);
        $num_voices = 0;
        for ($i = 0; $i < $c; $i++) {
            $num_voices += SafeDB($answers[$i][2], 11, int);
        }
        $link_go = Ufu('index.php?name=polls&op=viewpoll&poll_id=' . $pid, 'polls/{poll_id}/');
        $func = '';
        $func .= System::admin()->SpeedButton('Перейти к странице на сайте', $link_go, 'images/link_go.png', false, false, 'target="_blank"');
        if ($editpolls) {
            $func .= System::admin()->SpeedButton('Редактировать', ADMIN_FILE . '?exe=polls&a=editor&id=' . $pid, 'images/admin/edit.png');
            $func .= System::admin()->SpeedConfirm('Удалить', ADMIN_FILE . '?exe=polls&a=delete&id=' . $pid, 'images/admin/delete.png', 'Удалить опрос?');
        }
        $text .= Indent('
		<tr>
			<td>
				<b>' . System::admin()->Link(SafeDB($poll['question'], 255, str), ADMIN_FILE . '?exe=polls&a=editor&id=' . $pid) . '</b></td>
			<td>' . $num_voices . '</td>
			<td>' . SafeDB($poll['com_counter'], 11, int) . '</td>
			<td>' . ViewLevelToStr($poll['view']) . '</td>
			<td>' . $active . '</td>
			<td>' . $func . '</td>
		</tr>
		');
    }
    $text .= '</table>';
    AddTextBox('Опросы', $text);
}