function AdminBlocksSave($a)
{
    $block_config = '';
    $editsave = System::config('blocks_dir') . SafeEnv($_POST['type'], 255, str) . '/editsave.php';
    if (file_exists($editsave)) {
        include_once $editsave;
        // Что-то записывает в $block_config
    }
    VisibilityConditionsAdminSave($showin, $extra_uri);
    $b_v = ViewLevelToInt($_POST['view']);
    $b_en = EnToInt($_POST['enabled']);
    if (isset($_GET['id'])) {
        $id = SafeEnv($_GET['id'], 11, int);
    } else {
        $id = 0;
    }
    $place = GetPlace(SafeEnv($_POST['position'][0], 1, str), $id);
    // FIXME: Ниже блок вытаскивается, тогда можно узнать его place без лишнего запроса
    if ($id != 0) {
        $block = System::database()->Select('blocks', "`id`='{$id}'");
        $block_pos = SafeEnv($block[0]['position'], 1, str);
    }
    $vals = Values('', SafeEnv($_POST['title'], 255, str), SafeEnv($_POST['type'], 255, str), $place, '', '1', $block_config, SafeEnv($_POST['template'], 255, str), SafeEnv($_POST['position'][0], 1, str), $b_v, $b_en, $showin, $extra_uri);
    if ($a == 'newsave') {
        System::database()->Insert('blocks', $vals);
        Audit('Блока: Добавление блока "' . $_POST['title'] . '"');
    } elseif ($a == 'update') {
        System::database()->Update('blocks', $vals, "`id`='" . $id . "'", true);
        Audit('Блока: Изменение блока "' . $_POST['title'] . '"');
        if ($block_pos != $_POST['position'][0]) {
            // Пересчитываем все place в предыдущем position
            $blocks = System::database()->Select('blocks', "`position`='" . $block_pos . "'");
            if (count($blocks) > 0) {
                usort($blocks, 'AdminBlocksSort');
                foreach ($blocks as $i => $b) {
                    System::database()->Update('blocks', "`place`='{$i}'", "`id`='" . SafeEnv($b['id'], 11, int) . "'");
                }
            }
        }
    }
    GO(ADMIN_FILE . '?exe=blocks');
}
function AdminSiteMessagesSave()
{
    $title = SafeEnv($_POST['title'], 250, str);
    $view_title = EnToInt($_POST['vtitle']);
    $text = SafeEnv($_POST['text'], 0, str);
    $time = SafeEnv($_POST['time'], 3, int);
    $date = time();
    $view = ViewLevelToInt($_POST['view']);
    $active = EnToInt($_POST['enabled']);
    switch ($_POST['position']) {
        case 'top':
            $pos = '1';
            break;
        case 'bottom':
            $pos = '0';
            break;
        default:
            $pos = '1';
    }
    VisibilityConditionsAdminSave($showin, $extra_uri);
    //Записываем или обновляем данные в базе данных
    if (!isset($_GET['id'])) {
        $vals = "'','{$title}','{$text}','{$date}','{$time}','{$showin}','{$extra_uri}','{$pos}','{$view_title}','{$view}','{$active}'";
        System::database()->Insert('messages', $vals);
        Audit('Сообщения: Добавление нового сообщения "' . $title . '"');
    } else {
        $id = SafeEnv($_GET['id'], 11, int);
        if (!isset($_POST['resettime'])) {
            System::database()->Select('messages', "`id`='{$id}'");
            if (System::database()->NumRows() > 0) {
                $msg = System::database()->FetchRow();
                $date = $msg['date'];
            } else {
                $date = time();
            }
        }
        $vals = "'','{$title}','{$text}','{$date}','{$time}','{$showin}','{$extra_uri}','{$pos}','{$view_title}','{$view}','{$active}'";
        System::database()->Update('messages', $vals, "`id`='{$id}'", true);
        Audit('Сообщения: Изменение сообщения "' . $title . '"');
    }
    GO(ADMIN_FILE . '?exe=messages');
}