Перейти к содержимому

Новая версия RadicalForm 4.2.0

Опубликована версия плагина RadicalForm 4.2.0

08 мая 2026

RadicalForm 4.2.0 — важная веха в развитии сообщества, которое формируется вокруг плагина. Многие полагаются на гибкость RadicalForm и умение противостоять атакам ботов. Поэтому в этом выпуске особое внимание уделено разработчикам, которые создают собственные плагины и интеграции для RadicalForm.

Теперь плагины, написанные для RadicalForm, получают новые возможности — можно влиять на отправку сообщений и даже подсвечивать неверно заполненные по мнению плагина поля.

Это открывает новый уровень возможностей: серверная валидация в RadicalForm теперь стала реальностью.

Что еще сделано в этом релизе? Читайте в статье!

Как скачать? И как обновиться?

Обновление по-прежнему максимально простое: если RadicalForm уже установлен на вашем сайте, откройте раздел обновлений Joomla и установите последнюю версию плагина.

Если вы устанавливаете RadicalForm на новый сайт, скачайте актуальный пакет по прямой ссылке с GitHub или с нашего сайта.

Интеграция со старыми плагинами не должна поломаться. Если что-то не работает — напишите нам в чат Telegram или Макс.

Какие версии Joomla поддерживаются?

Поддерживаются Joomla 5 и 6. На Joomla 3 и 4 плагин работать не будет!

Плагин работает на Joomla 6 без включенного плагина обратной совместимости.

Что изменилось в RadicalForm 4.2.0

В новой версии RadicalForm мы улучшили историю отправок, разделили реальные сообщения и спам, добавили новый способ расширять обработку формы через PHP-плагины и исправили несколько важных ситуаций при загрузке файлов и отправке email.

Главная цель этих изменений — сделать RadicalForm удобнее для администратора: реальные сообщения должны быть на виду, ошибки должны быть понятными, а техническая информация должна помогать в диагностике, а не мешать читать данные формы.

Спам больше не смешивается с сообщениями формы

Раньше все события попадали в один общий лог. Если на сайте было много автоматических отправок, администратору приходилось искать настоящие сообщения среди записей антиспама.

Теперь история реальных отправок и история заблокированных сообщений разделены. В интерфейсе появились отдельные вкладки:

  • Сообщения — реальные отправки формы;
  • Спам — заблокированные отправки и некорректные попытки отправки.

Сообщения, заблокированные антиспамом, и отправки с неверным CSRF-токеном записываются в отдельный файл. Рабочая история сообщений остается чистой, а подозрительные отправки можно смотреть отдельно.

Как следствие — спам-сообщения больше не участвуют в нумерации обычных сообщений. Если последнее реальное сообщение имело номер 27, а после него было заблокировано несколько спам-отправок, следующее реальное сообщение получит номер 28.

Изменено поведение RadicalForm при достижении лимита размера лога

Поведение параметра «Очищать лог при достижении (байт)» также изменено. Раньше при достижении указанного размера текущий лог удалялся. Теперь RadicalForm ротирует лог в формате Joomla: текущий файл становится архивным, а новый лог создается заново.

История сообщений стала компактнее

Интерфейс истории отправленных форм стал компактнее и лучше использует ширину страницы.

Раньше поле истории отображалось как обычное поле настроек Joomla. Из-за этого слева оставалось лишнее пространство под колонку с подписью поля, а сама таблица истории начиналась не от края рабочей области. Теперь история RadicalForm выводится без этой лишней колонки.

Длинные ссылки в сообщениях и ссылках на загруженные файлы теперь отображаются компактно. Вместо того чтобы ломать ширину таблицы, они аккуратно сокращаются в пределах доступного места.

Информация о посетителе по-прежнему позволяет показывать техническую информацию об отправке: адрес страницы, referer, разрешение экрана, заголовок страницы, user agent, время на устройстве пользователя и сколько времени прошло с загрузки страницы до отправки формы.

Но теперь эта информация выводится не вперемешку с данными формы, а в отдельном столбце «Информация о посетителе». Благодаря этому отправленные поля формы остаются в своем столбце, а технический контекст находится рядом, но не мешает читать само сообщение.

В настройках видно включенные плагины RadicalForm

Если на сайте установлены и включены плагины группы radicalform, информация об этом отображается в истории. Это полезно при диагностике: администратор сразу видит, что обработка формы могла быть расширена дополнительными PHP-плагинами.

Так проще понять, почему форма могла быть изменена, заблокирована или обработана не только основным системным плагином RadicalForm.

Учитывайте, что если плагин системный, то он не попадет в список отображаемых. Но это не значит, что он не будет работать.

Email-ошибки теперь понятнее

RadicalForm улучшил логирование ошибок, связанных с отправкой email. Теперь в историю попадают не только ошибки самого вызова отправки письма, но и ошибки подготовки email: добавление получателя, копии, скрытой копии и Reply-To.

Например, если основной email-получатель не заполнен, Joomla может вернуть ошибку:

Invalid address: (to):

А если почтовая функция сервера недоступна, может появиться сообщение:

Could not instantiate mail function.

Такие ошибки теперь отображаются в истории RadicalForm как предупреждения.

Одна отправка — одна запись истории

Обычная запись истории теперь создается только после успешного завершения обработки формы. Если отправка остановилась на email-ошибке, RadicalForm не создает отдельную обычную строку с тем же номером.

Вместо этого появляется одна запись типа WARNING, в которой есть и текст ошибки, и данные отправленной формы.

В заголовке предупреждения сразу видно причину:

WARNING: Invalid address: (to):

Замечание: несовпавший rfTarget сам по себе не считается email-ошибкой

rfTarget может использоваться не только для email, но и для других каналов доставки: Telegram, MAX и других интеграций.

Если у формы задан rfTarget, но для него не найден альтернативный email-получатель, RadicalForm не считает это ошибкой само по себе. Такая форма может быть настроена на отправку через мессенджер или другой канал.

Ошибка фиксируется только тогда, когда email-отправка действительно была подготовлена или запущена и почтовая система Joomla вернула ошибку.

Расширение RadicalForm через PHP-плагины

RadicalForm поддерживает расширение логики отправки формы через плагины группы radicalform. Такие плагины можно использовать для интеграций, дополнительной серверной проверки данных, изменения входящих значений и блокировки отправки формы.

Начиная с новой версии, плагин может не только изменить данные формы, но и запретить отправку, вернув специальный результат.

Legacy-событие

Для совместимости сохранен старый формат события:

onBeforeSendRadicalForm($clearInput, &$input, $params)

$clearInput — очищенный массив данных формы. В нем нет служебных полей RadicalForm вроде url, resolution, uniq, token и т.п.

$input — полный массив входящих данных. Передается по ссылке, поэтому плагин может изменить данные перед дальнейшей обработкой RadicalForm.

$params — параметры плагина RadicalForm.

Пример legacy-плагина:

public function onBeforeSendRadicalForm(array $clearInput, array &$input, $params): ?array
{
    $phone = isset($clearInput['phone']) ? trim((string) $clearInput['phone']) : '';

    if ($phone === '' || !preg_match('/^\+?[0-9\s\-\(\)]{7,20}$/', $phone))
    {
        return [
            'send' => false,
            'message' => 'Телефон заполнен неверно.',
            'field' => 'phone',
        ];
    }

    return null;
}

Новый формат события

Для новых плагинов рекомендуется использовать событие:

onBeforeProcessRadicalForm

Обработчик принимает объект события:

use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\Event\SubscriberInterface;
use Joomla\Plugin\System\RadicalForm\Event\BeforeProcessRadicalFormEvent;

final class MyPlugin extends CMSPlugin implements SubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            'onBeforeProcessRadicalForm' => 'onBeforeProcessRadicalForm',
        ];
    }

    public function onBeforeProcessRadicalForm(BeforeProcessRadicalFormEvent $event): void
    {
        $clearInput = $event->getClearInput();
        $input      = &$event->getInput();
        $params     = $event->getParams();

        $name = isset($clearInput['imya']) ? trim((string) $clearInput['imya']) : '';

        if ($name !== '' && preg_match('/\d/u', $name))
        {
            $event->addResult([
                'send' => false,
                'message' => 'Имя не должно содержать цифры.',
                'field' => 'imya',
            ]);
        }
    }
}

Отказ в отправке и подсветка полей

Чтобы заблокировать отправку формы, плагин должен вернуть или добавить результат с ключом:

'send' => false

Минимальный вариант:

[
    'send' => false,
    'message' => 'Отправка формы запрещена.',
]

Если нужно подсветить конкретное поле формы, добавьте ключ field:

[
    'send' => false,
    'message' => 'Телефон заполнен неверно.',
    'field' => 'phone',
]

Для нескольких полей используйте fields:

[
    'send' => false,
    'message' => 'Проверьте поля формы.',
    'fields' => ['phone', 'email'],
]

На фронтенде RadicalForm найдет соответствующие поля по атрибуту name и добавит к ним CSS-классы ошибки из настройки CSS класс для невалидных полей.

Порядок выполнения событий

При отправке формы RadicalForm вызывает события в таком порядке:

  1. onBeforeSendRadicalForm — legacy-событие.
  2. onBeforeProcessRadicalForm — новый формат события.

Новые плагины видят данные уже после возможных изменений, сделанных legacy-плагинами через $input.

Важно о совместимости

RadicalForm считает отказом только явный результат:

'send' => false

Все остальные ответы плагинов игнорируются:

null
true
[]
['some' => 'data']

Штатная блокировка формы должна выполняться не через исключение, а через результат. Если внешний плагин вызывает исключение или содержит синтаксическую ошибку, RadicalForm записывает ошибку в лог plg_system_radicalform, а в истории такие записи отображаются как ERROR.

Примеры плагинов для тестирования новых событий

Для знакомства с новыми возможностями RadicalForm 4.2.0 мы подготовили два тестовых плагина. Один демонстрирует прежний формат обработки события, второй — новый подход к серверной валидации.

Плагин validatefield

Пример старого формата работы через событие onBeforeSendRadicalForm. Плагин проверяет значение выбранного поля формы по регулярному выражению.

Скачать плагин

Плагин validatename

Пример нового формата работы через событие onBeforeProcessRadicalForm. Плагин показывает, как вернуть ошибку для конкретного поля формы.

Скачать плагин

Тестовые плагины не являются обязательными для установки. Они нужны как демонстрационные примеры для разработчиков, которые хотят создавать собственные проверки и интеграции для RadicalForm.

Ошибки пользовательских PHP-layout больше не ломают отправку формы

Если пользовательский PHP layout RadicalForm случайно выводит текст через echo, print или содержит ошибку, это больше не ломает JSON-ответ формы и не мешает основной обработке отправки.

Такой вывод или ошибка записываются в историю RadicalForm как служебные записи WARNING или ERROR. Причина выводится сразу в заголовке записи, например:

WARNING: Custom layout produced unexpected output
ERROR: Custom RadicalForm layout error

Эти служебные записи не получают номер сообщения rfLatestNumber и не смешиваются с обычными данными формы. Благодаря этому нумерация реальных отправок остается корректной.

Безопаснее обработка имен загружаемых файлов

RadicalForm стал строже обрабатывать имена загружаемых файлов. Недопустимые символы заменяются безопасным символом, повторяющиеся точки нормализуются, а файлы с пустым именем после очистки больше не принимаются.

Это помогает избежать странных имен файлов и ситуаций, когда после очистки имени на сервере нечего сохранять.

Файлы больше не смешиваются между отправками

После успешной отправки формы RadicalForm обновляет внутренний идентификатор загрузки файлов. Благодаря этому следующая отправка той же формы получает новый каталог для файлов.

Также после успешной отправки очищается служебный маркер needToSendFiles. Новая отправка не будет ошибочно считать, что к ней относятся файлы из предыдущей отправки.

Сообщения формы показываются средствами Joomla

Стандартный обработчик сообщения после отправки формы по умолчанию теперь использует интерфейс сообщений Joomla вместо обычного alert(). Это делает вывод успешных и служебных сообщений более аккуратным и ближе к стилю сайта.

Для полей с ошибкой также добавлены Bootstrap-классы по умолчанию: это помогает формам выглядеть корректнее в современных шаблонах Joomla.

Совместимость с PHP 8.4

Обновлен установочный скрипт RadicalForm: сигнатуры методов приведены к более современному виду, чтобы избежать предупреждений совместимости в новых версиях PHP.