function IndexFormsViewForm($form)
{
    $form_id = SafeEnv($form['id'], 11, int);
    System::site()->AddBlock('forms', true, false, 'form');
    System::site()->AddBlock('form_fields', true, true, 'field');
    System::site()->AddTemplatedBox('', 'module/forms.html');
    $vars['title'] = SafeDB($form['hname'], 255, str);
    System::site()->SetTitle($vars['title']);
    System::site()->BreadCrumbAdd($vars['title']);
    $vars['desc'] = SafeDB($form['desc'], 0, str, false, false);
    $controls = unserialize($form['form_data']);
    if (trim($form['action']) != '') {
        $action = SafeDB($form['action'], 250, str);
    } else {
        $action = Ufu("index.php?name=forms&form={$form_id}&op=save", 'forms/save/{form}/');
    }
    $enctype = '';
    foreach ($controls as $control) {
        $kind = FormsParseParams($control['kind']);
        $type = trim($control['type']);
        $value = '';
        $name = $control['name'];
        if (isset($_GET['f_' . $name])) {
            $value = SafeDB($_GET['f_' . $name], 255, str);
        }
        if ($type != '') {
            $type = explode(',', $type);
        } else {
            $type = array(255, str, false);
        }
        if ($type[1] == 'file') {
            if ($type[0] == 0) {
                $max_size = intval(ini_get('upload_max_filesize'));
                $s_option = strtolower(substr(ini_get('upload_max_filesize'), -1));
            } else {
                $max_size = $type[0] * 1024;
                $s_option = 'b';
            }
            $max_size = FormatFileSize($max_size, $s_option);
            $max_length = false;
        } else {
            $max_size = false;
            $max_length = SafeDB($type[0], 11, int);
        }
        if ($kind['control'] == 'file') {
            $enctype = 'multipart/form-data';
        }
        $control_vars = array();
        $control_vars['hname'] = SafeDB($control['hname'] . ($kind['required'] ? ' *' : ''), 255, str);
        $control_vars['title'] = SafeDB($control['hname'], 255, str);
        $control_vars['control'] = FormsGetControl(SafeDB($name, 255, str), $value, $control['kind'], $control['type'], $control['values'], $value != '' ? 'disabled' : '');
        $control_vars['required'] = $kind['required'];
        $control_vars['max_size'] = $max_size;
        $control_vars['max_length'] = $max_length;
        System::site()->AddSubBlock('form_fields', true, $control_vars);
    }
    $vars['open'] = System::site()->FormOpen($action, 'post', $enctype == 'multipart/form-data');
    $vars['close'] = System::site()->FormClose();
    $vars['submit'] = System::site()->Submit('Отправить форму');
    // Капча
    $vars['show_kaptcha'] = !System::user()->Auth || System::config('forms/show_captcha') && !System::user()->isAdmin();
    $vars['kaptcha_url'] = 'index.php?name=plugins&p=antibot';
    $vars['kaptcha_width'] = '120';
    $vars['kaptcha_height'] = '40';
    System::site()->Blocks['forms']['vars'] = $vars;
}
/**
 * Создает страницу конфигурации в админ панели
 * @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 AdminFormsFields()
{
    if (!isset($_GET['id'])) {
        GO(ADMIN_FILE . '?exe=forms');
    }
    $id = SafeEnv($_GET['id'], 11, int);
    System::database()->Select('forms', "`id`='{$id}'");
    $form = System::database()->FetchRow();
    $fields = unserialize($form['form_data']);
    $cnt = count($fields);
    AddCenterBox('Поля формы "' . $form['hname'] . '"');
    $text = '';
    $text .= '<table cellspacing="0" cellpadding="0" class="cfgtable">';
    $text .= '<tr><th>Название</th><th>Имя HTML</th><th>Предпросмотр</th><th>Тип</th><th>Максимальная длина</th><th>Вид</th><th>Функции</th></tr>';
    if ($cnt > 0) {
        for ($i = 0; $i < $cnt; $i++) {
            $func = '';
            $func .= System::admin()->SpeedButton('Редактировать', ADMIN_FILE . '?exe=forms&a=editfield&id=' . SafeDB($form['id'], 11, int) . '&index=' . $i, 'images/admin/edit.png');
            $func .= System::admin()->SpeedConfirm('Удалить', ADMIN_FILE . '?exe=forms&a=delfield&id=' . SafeDB($form['id'], 11, int) . '&index=' . $i, 'images/admin/delete.png', 'Удалить?');
            $type = explode(',', $fields[$i]['type']);
            $text .= '<tr><td>' . SafeDB($fields[$i]['hname'], 255, str) . '</td><td>' . SafeDB($fields[$i]['name'], 255, str) . '</td><td>' . FormsGetControl($fields[$i]['name'], '', $fields[$i]['kind'], $fields[$i]['type'], $fields[$i]['values']) . '</td><td>' . SafeDB($type[1], 50, str) . '</td><td>' . SafeDB($type[0], 11, int) . '</td><td>' . $fields[$i]['kind'] . '</td><td>' . $func . '</td></tr>';
        }
    } else {
        $text .= '<tr><td colspan="7" style="text-align: left;">В этой форме нет полей.</td></tr>';
    }
    $text .= '</table>';
    AddText($text);
    AdminFormsFieldEditor('add');
}