Beispiel #1
0
    /**
     * Заканчивает обработку формы
     */
    function destroy() {

        $json = array();

        foreach ($this->fields as $name => $array) {

            if ($array[type] != AJAXFORM_TYPE_BUTTON && $array[type] != AJAXFORM_TYPE_RESET) {

                $json[$array[name]] = array(
                    "name" => $array[name],
                    "type" => $array[type],
                    "values" => @array_keys($array[values]),
                );
            }
        }

        $out = "<script> ajaxform.fields[\"{$this->name}\"] = " . multibyte::JSON_encode($json) . ";</script>\n";

        if (!$this->alert) {

            // Обновляем сессию, теперь в сессии должны быть только ошибки и сессия от backend при отключенном JS.
            // При включенном JS это все будет грохнуто в конце работы backend перед отдачей обратно.
            // Логика такая — если у юзера включен JS, то можно работать с формой не покидая страницы, и сессия не нужна.
            // Если JS выключен — то происходят постоянные релоады туда-сюда между frontend и backend, поэтому данные надо сохранять.
            $this->sessionSet();

            // Убиваем в сессии ошибки и сессию, т.о. если юзер нажмет F5 или уйдет со страницы — при следующем показе будет отображена реальная инфа,
            // а не та, которую он ввел и не смог сохранить (допустим)
            $this->sessionEnd(AJAXFORM_SESSION_PARTIAL);
        } else {

            // Если в сессии есть алерт — это значит, что мы находимся в режиме без скриптов
            $text = $this->alert;
            $text = addslashes($text);
            $text = str_replace("\n", '\n', $text);
            $text = str_replace("\r", "", $text);
            $out .= "\n<script> alert(\"{$text}\"); </script>";


            // После показа алерта надо сам алерт из сессии убить, иначе будет показываться постоянно
            // Т.к. остальная сессия без изменений, то после релоада, связанного с кликом по ОК,
            // мы увидим все то же самое, но без алерта
            $this->alert = array();

            $this->sessionSet();
        }
        return $out;
    }