## History
### 1.21.0
* [Refactor] Ссылки для активации и проверки аккаунтов можно задавать текстом (для роутов в Evo 3).

### 1.20.0
* [Enhancement] Проверка CSRF-токена (Core).

### 1.19.10
* [Fix] Исправление ошибок.

### 1.19.8
* [Enhancement] Yandex SmartCaptcha (YandexCaptcha).

### 1.19.6
* [Fix] Ошибка при выводе сообщений (Core).

### 1.19.5
* [Fix] Ошибка в PHP 8.1 (Form).

### 1.19.4
* [Fix] Ошибка при формировании ссылки для активации аккаунта (Activate).

### 1.19.3
* [Fix] Работа автологина при редактировании профиля (UserHelper)

### 1.19.2
* [Fix] Ошибка в PHP 8.1 (modxCaptcha).
* [Enhancement] Recaptcha v.3 (ReCaptcha).

### 1.19.1
* [Enhancement] Внешний источник $_GET (Core).

### 1.19.0
* [Fix] Не работал параметр redirectTo, если значение - ссылка (Core).
* [Fix] Не работал редирект для авторизованных пользователей (Login).
* [Enhancement] Списки разрешенных и запрещенных полей для вывода в режиме api (Core).

### 1.18.5
* [Fix] Исправлены выражения для правил numeric и phone (Validator).
* [Fix] Некорректный подсчет аргументов у функций валидации (Core).

### 1.18.4
* [Fix] Загрузка данных из внешних источников (Core).

### 1.18.3
* [Fix] Валидация массива с файлами (FileValidator).
* [Fix] Неверное имя правила валидации в массиве ошибок (Core).

### 1.18.1
* [Enhancement] Поддержка сниппетов для валидации (Core).

### 1.17.0
* [Refactor] Добавление пользователей в группы перенесено в modUsers (Register).
* [Enhancement] Возможность использовать для правил валидации значения полей (Core).

### 1.16.2
* [Refactor] Ошибка при вызове методов валидатора, если задано недостаточно параметров (Core).

### 1.16.1
* [Fix] Исправления для 3.x.

### 1.15.1
* [Enhancement] Возможность задавать модель для работы с пользователями в плагине UserHelper.
* [Refactor] Возможность задавать контроллеры с неймспейсом отличным от \FormLister.

### 1.15.0
* [Refactor] Классы для работы с лексиконами перемещены в DocLister.

### 1.14.0
* [Refactor] Загрузка данных из источников session, cookie, plh происходит с учетом того, что значение может быть массивом. Для cookie массив можно задать в виде json (Core). Вместо источника aplh теперь следует использовать plh.
* [Fix] Отправка письма при успешном восстановлении пароля (Reminder).
* [Fix] Отправка письма при активации учетной записи (Activate).

### 1.13.0
* [Fix] Загрузка правил валидации (Core).
* [Refactor] Проверка protectSubmit (SubmitProtection).
* [Refactor] Проверка параметра handler (Lexicon).

### 1.12.0
* [Enhancement] Параметр fieldAliases - псевдонимы полей (Core).
* [Refactor] В функции between, minLength, maxLength, lengthBetween, minCount, maxCount, countBetween добавлен параметр определяющий строгость сравнения (по умолчанию - нестрогое) (Validator).
* [Refactor] В функции maxSize, minSize, sizeBetween, minCount, maxCount, countBetween добавлен параметр определяющий строгость сравнения (по умолчанию - нестрогое, совместимость нарушена) (FileValidator).

### 1.11.3
* [Fix] Некорректная обработка параметра uidName (Reminder).
* [Refactor] Правило валидации файлов "optional" объявлено устаревшим. Необязательные файловые поля следует задавать по общему правилу (Core).
* [Refactor] Удалены свойства rules и fileRules из Core.
* [Refactor] Из валидатора файлов убрана проверка ошибки 4 (FileValidator).

### 1.11.2
* [Fix] Обработка пустого параметра reportTpl (Form).

### 1.11.1
* [Fix] Ошибка "INTL_IDNA_VARIANT_2003 is deprecated" в PHP 7.3 (Validator).

### 1.11.0
* [Refactor] Метод filesToArray теперь игнорирует неотправленные файлы (с ошибкой 4) (Core).

### 1.10.3
* [Fix] Обработка параметра attachments (Form).
* [Enhancement] Добавлен prepareAfterProcess там, где его не было.
* [Enhancement] Редирект сохраняется отдельным полем в formData (Core).

### 1.10.2
* [Fix] Исправление ошибок.

### 1.10.1
* [Fix] Неверное имя параметра (Content).

### 1.10.0
* [Refactor] Обработка правил fileRules перемещена в Core и работает во всех контроллерах.
* [Refactor] Результат валидации файлов не зависит от параметра attachments (Form).
* [Refactor] Выход при изменении профиля пользователя, если включена проверка активации пользователя. Убран выход при изменении пароля (Profile).
* [Fix] Некорректное задание параметров для пользовательской функции в списке правил валидации (Core).
* [Refactor] Валидация email с помощью filter_var вместо регулярного выражения (Validator).
* [Refactor] Фильтрация email с помощью регулярного выражения (Validator).

### 1.9.2
* [Enhancement] Активация пользователя сбрасывается при изменении определенного поля (по умолчанию email) (Profile).
* [Refactor] Активация пользователей переделана, теперь для определения активации используется поле verified (Register, Activate).
* [Refactor] Заполнения массива formData['files'] перемещено из контроллера Form в Core.

### 1.9.1
* [Refactor] Некорретная инициализация переменной при некоторых условиях в методе validate (Core).
* [Fix] Отсутствовала проверка при установке полей запроса (Core).

### 1.9.0
* [Fix] Загрузка внешних данных из массива (Core).
* [Add] Параметр dateFormat для преобразования даты dob в контроллерах Login, Register, Profile.
* [Refactor] Отключена дополнительная обработка шаблонов, если шаблон обрабатывается шаблонизатором (Core).
* [Add] Параметр prerenderErrors для возможности вывода оформленных сообщений об ошибках при использовании шаблонизаторов (Core).
* [Fix] Игнорирование параметра langDir при загрузке пользовательских лексиконов (Core).
* [Refactor] Фильтры применяются только к существующим полям (Core).
* [Enhancement] Вместо названия языка можно указывать его ISO 639-1 код, который преобразуется в название для поддерживаемых в админке языков (Lexicon).
* [Refactor] Из отладочных записей удаляются дампы объектов (Debug).
* [Enhancement] Подключение сторонних обработчиков для лексиконов (Lexicon).
* [Refactor] Работа с настройками через Helpers\Config (Lexicon).
* [Refactor] Методы loadLang, getMsg, parseLang объявлены устаревшими, вместо него следует использовать fromFile, get, parse (Lexicon).
* [Enhancement] Методы setLexicon и getLexicon (Lexicon).
* [Enhancement] Метод getErrorType для получения нарушенных правил валидации для поля (Core).
* [Enhancement] Плейсхолдер капчи доступен в api-режимах, через ключ captcha (Core).
* [Refactor] Получение строк из лексикона заменено на вызов метода translate.
* [Refactor] Загрузка основных правил валидации перенесена в метод initForm, после выполнения prepare.
* [Refactor] Обход Gpc вынесен в отдельный класс Helpers\Gpc.
* [Refactor] Защита формы от повторных отправок вынесена в трейт FormLister\SubmitProtection (Form).
* [Enhancement] Возможность использования функций для получения данных запроса (Core).
* [Refactor] Проверки protectSubmit и submitLimit выполняются до обработки формы (Form).
* [Refactor] В api-режимах обрабатываются языковые плейсхолдеры в сообщениях об ошибках валидации (Core).

### 1.8.5
* [Fix] Неправильная установка префика внешних полей.

### 1.8.4
* [Enhancement] Метод translate для получения записи из лексикона (Core).
* [Enhancement] Возможность использовать подчеркивание вместо точки при загрузке внешних полей (параметр defaultsSources) с префиксом (Core).

### 1.8.3
* [Enhancement] Новый фильтр compressText (Filters).
* [Fix] Ошибка в фильтре phone (Filters).
* [Refactor] Разбор параметров редиректа (Core).
* [Fix] Проверка существования параметров *SubjectTpl (Form).
* [Enhancement] Дополнительный режим api, в котором возвращается объект контроллера (Core).

### 1.8.2
* [Enhancement] Учет настройки server_offset_time (Form).

### 1.8.1
* [Refactor] Убраны прямые обращения к $modx->config.

### 1.8.0
* [Enhancement] Поддержка фильтров для предварительной обработки значений в форме (Core, Filters).

### 1.7.22
* [Enhancement] Метод fieldExists для проверки существования поля (Core).
* [Fix] Исправлена ошибка в классе FileValidator (FileValidator).
* [Refactor] Дополнительная проверка в плагине userHelper.
* [Enhancement] Параметр disableSubmit (Core).

### 1.7.21
* [Fix] Не сохранялся лог при заданном редиректе.
* [Refactor] Переделана отправка писем для удобства отладки при пустом параметре &to и аналогичных.
* [Refactor] При незаданных шаблонах ccSenderTpl и automessageTpl используется шаблон reportTpl.

### 1.7.20
* [Refactor] modxCaptcha больше не зависит от папки manager (modxCaptcha).
* [Fix] Исправлена проверка уникальности имени пользователя и email (Register, Profile).

### 1.7.19
* [Refactor] Имя пользователя и E-mail не приводятся в нижний регистр (Login, Register, Profile).
* [Refactor] Не выводятся пустые обертки для сообщений формы (Core).
* [Enhancement] Вывод логов моделей MODxAPI при отладке (Content, Register, Profile).
* [Enhancement] Spanish, Italian lexicons.
* [Fix] Опечатка в методе renderMessages() (Core).
* [Fix] Неправильно задавался параметр size для ReCaptcha.

### 1.7.18
* [Enhancement] Dutch, Polish, English-Britain, German lexicons.
* [Refactor] Экранирование значений массива до преобразования массива в строку в методе fieldsToPlaceholders

### 1.7.17
* [Refactor] Мультибайтовые функции.

### 1.7.16
* [Fix] Ошибка с полями username и email при их отсутствии (Profile).
* [Enhancement] В метод getField можно передать значение по умолчанию (Core).
* [Refactor] Оптимизация обработки чанков (Core).

### 1.7.15
* [Enhancement] Отдельные настройки почты для писем ccSender и automessage в параметрах ccMailConfig и autoMailConfig (Form).
* [Refactor] Проверка типа входящих данных (Validator).
* [Refactor] Изменен метод renderForm (Core).
* [Enhancement] Параметр apiFormat для формата вывода данных (json или просто массив) (Core).
* [Fix] В валидаторе файлов неправильно обрабатывалась ситуация, когда файлы отправляются одним массивом из нескольких полей (Form).
* [Enhancement] Разлогинивание удаленных и заблокированных пользователей (userHelper).

### 1.7.14
* [Refactor] Упрощение параметра parseMailerParams.

### 1.7.13
* [Enhancement] Параметр parseMailerParams для обработки плейсхолдеров в параметрах отправки почты, по умолчанию отключен (Form).
* [Fix] Некорректная загрузка пользовательских лексиконов из файлов (Core, Lexicon).
* [Fix] Параметр debug со значением 0 не отключал отладку (Core).

### 1.7.12
* [Enhancement] Возможность указывать имя параметра с id пользователя в ссылках (Reminder, Activate).
* [Refactor] Имя пользователя и E-mail принудительно приводятся в нижний регистр (Login, Register, Profile).
* [Fix] Неверное значение по умолчанию параметра resetTo (Reminder).
* [Fix] Неверное значение по умолчанию параметра activateTo (Activate).
* [Fix] Ошибка при расчете хэша для активации учетной записи (Register, Activate).

### 1.7.11
* [Fix] Предупреждения в PHP 7 (Core).
* [Enhancement] Вывод сообщений в лог при проблемах с параметрами rules, fileRules и contentFields (Core, Content).
* [Refactor] Обработка языковых плейсхолдеров в сообщениях (Core).
* [Enhancement] Из prepare-сниппетов можно возвращать массив значений полей, который будет передан в метод setFields (Core).

### 1.7.10
* [Enhancement] Возможность использовать плейсхолдеры с данными пользователя в шаблоне skipTpl (Login, Activate, Register, Reminder).
* [Fix] Неверное определение страницы для редиректа (Login).

### 1.7.9
* [Fix] Исправления ошибок.

### 1.7.8
* [Refactor] Переименованы файлы документации.
* [Refactor] Параметр removeEmptyPlaceholders по умолчанию включен (Core).
* [Refactor] Параметр rewriteUrls по умолчанию включен (Core).
* [Refactor] Плейсхолдеры ошибок [+field.error+] не устанавливаются, если нет сообщения об ошибке (Core).
* [Enhancement] Плейсхолдеры [+field.class+] (включает class="") и [+field.classname+] (не включает class="") (Core).
* [Refactor] Параметр lexicon может содержать или имена файлов (без расширения) через запятую или массив с языковыми строками (Lexicon).

### 1.7.7
* [Enhancement] Возможность указывать разный subject для разных типов писем (Form).

### 1.7.6
* [Fix] Исправления ошибок.

### 1.7.5
* [Fix] $this->modx вместо $modx в сниппете.

### 1.7.4
* [Fix] Ошибка в лексиконе (Form).
* [Refactor] Версии PHP ниже 5.6 не поддерживаются (Core).

### 1.7.3
* [Refactor] Подключать __autoload.php, если не задан другой загрузчик.
* [Fix] Ошибка в обработке параметра редиректа (Core).

### 1.7.2
* [Enhancement] Параметр &context в контроллере Login для поддержки модели modManagers (Login).
* [Fix] Ошибка в обработке параметра редиректа (Core).

### 1.7.1
* [Enhancement] Сниппет записывает в лог, если не задан параметр formid или не удалось загрузить класс контроллера.
* [Refactor] Плагин userHelper по умолчанию отключен.
* [Refactor] По умолчанию загружается лексикон english.
* [Fix] Ошибка в формате даты для лексикона english/form.

### 1.7.0
* [Refactor] Изменен метод loadModel, добавлена возможность указывать параметры, передаваемые в конструктор модели (Core).
* [Fix] Ошибка в лексиконе контроллера DeleteContent.
* [Fix] Создание записей анонимными пользователями если &onlyUsers=`0` (Content).
* [Refactor] Убраны include/require, для загрузки классов подключается файл  assets/snippets/FormLister/__autoload.php. Модели MODxAPI загружаются этим же загрузчиком.
* [Refactor] Создание записи в логе, если не удалось сохранить данные (Content).
* [Refactor] Изменена обработка поля для запоминания авторизации: теперь время для автологина задается в параметре cookieLifetime (по умолчанию 5 лет, в секундах), а не значением поля (Login).
* [Refactor] Имя куки для автологина можно задать с помощью параметра cookieName, по умолчанию WebLoginPE (Login).
* [Refactor] В контроллере Login сначала проверяется, активирована ли учетная запись, а потом уже возможность авторизации (Login).
* [Enhancement] Блокировка пользователей после определенного числа неудачных попыток авторизации в плагине userHelper.

### 1.6.2
* [Fix] Неверное объявление метода в классах капчи.

### 1.6.1
* [Refactor] Переделан автологин в плагине userHelper.

### 1.6.0
* [Enhancement] Параметр rewriteUrls для обработки ссылок в шаблонах. Игнорируется, если задан параметр parseDocumentSource (Core).
* [Enhancement] Если страница с вызовом контроллера Login указана в конфигурации, как страница "Доступ запрещен", то после успешной авторизации будет произведен редирект на запрашиваемую страницу (Login).
* [Enhancement] Новый параметр ignoreMailerResult (Form).
* [Fix] Неправильная проверка уникальности username в контроллере Profile.
* [Refactor] Для добавления пользователей в группы используется метод из modUsers (Register).
* [Refactor] Введенный пользователем пароль сохраняется в поле user.password (Register).
* [Refactor] Контроллеры Register, Profile и Content загружают данные из моделей после успешного выполнения; после этого можно выполнить сниппеты из параметра preparePostProcess. Сделано это потому что плагины на сохранение или сами модели могут менять данные.
* [Enhancement] Восстановление данных, испорченных в protect.inc.php. Если параметр removeGpc равен 1, то очищены будут все входящие поля. Можно указать в параметре имена полей через запятую. При выводе обработанных полей будут экранироваться тэги MODX (Core).
* [Refactor] В prepare-сниппеты передается переменная name с названием параметра в котором задан сниппет. Можно использовать один сниппет для всех случаев (Core).
* [Enhancement] Контроллер DeleteUser для удаления пользователей c запросом пароля.
* [Enhancement] Контроллер DeleteContent для удаления записей MODxAPI.
* [Enhancement] Контроллер Activate для активации учетных записей.
* [Enhancement] Контроллеры Register и Login могут работать с активацией учетных записей.
* [Enhancement] Вывод параметров data-badge и data-callback для рекапчи (ReCaptchaWrapper).
* [Enhancement] Параметр deleteAttachments для удаления файлов после отправки письма (Form).
* [Enhancement] Сохранение имен файлов в поля формы (Form).
* [Enhancement] Отправка файлов не из формы. Список файлов задается массивом в параметре attachFiles: {"field":{"filepath":"assets/images/logo.png","filename":"logo.png"}} (Form).
* [Refactor] Можно не задавать параметр contentFields, в этом случае в модель будут переданы поля формы (Content).
* [Refactor] Корректная обработка полей lastlogin и thislogin в плагине userHelper.
* [Fix] Неверно выбирался шаблон при восстановлении паролей (Reminder).
* [Enhancement] Дополнительная обработка чанков парсером MODX c помощью параметра parseDocumentSource (Core).
* [Enhancement] Возможность вырезать необработанные плейсхолдеры из чанков с помощью параметра removeEmptyPlaceholders (Core).
* [Enhancement] Параметр removeEmptyPlaceholders для удаления необработанных плейсхолдеров из чанков (возможные значения 0,1; по умолчанию - 0) (Core).
* [Fix] Из-за неправильной обработки параметра defaultsSources не загружались поля в контроллере Profile (Core).
* [Fix] Метод filterFields не учитывал значение параметра allowEmptyFields (Core).

### 1.5.1
Исправления ошибок.

###1.5.0
* [Refactor] Переделана загрузка внешних параметров с учетом того, что не все источники могут содержать массив: добавлен источник aplh для загрузки массива значений из плейсхолдера MODX, в источнике cookie можно указать несколько имен кук через запятую. Добавлен источник user для загрузки данных авторизованного веб-пользователя (user:web) или менеджера (user:mgr) (Core). Добавлен источник document для загрузки данных текущего или указанного документа.
* [Refactor] Валидация капчи вынесена в класс капчи (Core).
* [Refactor] Параметры капчи задаются массивом, там же указываются сообщения об ошибках (Core).
* [Refactor] Валидация капчи происходит в классе капчи. (Core).
* [Enhancement] reCaptcha2.
* [Enhancement] smsCaptcha.
* [Enhancement] Поддержка Twig: в шаблон передаются переменные FormLister, data, errors, messages. Добавлен метод getErrorMessage для получения в шаблоне сообщений об ошибках для указанного поля (Core).
* [Enhancement] Параметры редиректа можно задавать в виде массива с ключами page (id страницы), query (массив параметров запроса) и header (заголовок) (Core).
* [Enhancement] Если задан параметр redirectTo и параметр editAfterCreate равен 1, то в параметры редиректа будет добавлен идентификатор созданного документа (Core, Content).
* [Fix] Плагин userHelper теперь перенаправляет пользователя на текущую страницу без ?logout в ссылке.
* [Fix] Сопоставление имен полей формы и модели в параметре contentFields неправильно работало в режиме редактирования, если имена различались (Content).
* [Refactor] Пользовательские функции валидации могут вместо false возвращать сообщение об ошибке (Core).

### 1.4.1
* [Refactor] Больше рандома в modxCaptcha.

### 1.4.0
* [Refactor] Класс modxCaptchaWrapper больше не привязан к FormLister (Core, modxCaptchaWrapper).
* [Enhancement] Убрано принудительное отключение параметров submitLimit и protectSubmit (Content).
* [Refactor] Изменен алгоритм загрузки пользовательских лексиконов. Теперь в параметре lexicon можно указывать как имя файла, так и сразу массив c языковыми записями (Core, Lexicon).
* [Refactor] Загрузка полей отправленной формы происходит не из $_REQUEST, а согласно параметру formMethod (значение по умолчанию - 'post') (Core).
* [Enhancement] Метод loadArray можно использовать для обработки строк с разделителем (по умолчанию - ',')  (Config).
* [Enhancement] Если значение параметра submitLimit меньше 60, то оно не пересчитывается в минуты (Form).

### 1.3.0
* [Enhancement] Поддержка события OnBeforeWebLogin. В плагине можно реализовать процедуру авторизации независимую от модели; установку полей и шаблона сообщения об успешной авторизации нужно также производить в плагине. Плагин должен вернуть true в случае успешной авторизации, иначе будет выполнена авторизация методами модели (Login).

### 1.2.1
* [Refactor] Метод isArray теперь protected (FileValidator).

### 1.2.0
* [Refactor] Переделан пропуск полей при преобразовании в плейсхолдеры. Теперь плейсхолдеры отделены от полей формы, для работы с ними следует использовать методы setPlaceholder и getPlaceholder. Выводятся через [+placeholder+].
* [Bug] Сниппеты, указанные в prepareProcess, выполнялись независимо от результатов валидации.
* [Refactor] Изменена логика обработки правил валидации. Теперь все правила, которых нет в валидаторе, обрабатываются как custom. Это позволяет применять сразу несколько таких правил.
* [Enhancement] Возможность применять правила валидации только для заполненных полей.
* [Refactor] Информация о файлах размещается в массиве formData c помощью метода setFiles (Core, Form).
* [Refactor] Объект FS теперь публичный.
* [Refactor] Контроллер Profile наследуется от Form, а не от Core.

### 1.1.0
* [Refactor] Метод filesToArray перемещен в Core.
* [Enhancement] Возможность загрузки произвольных моделей в контроллерах, которые используют MODxAPI. Новые параметры - model и modelPath.
* [Refactor] Метод для загрузки моделей MODxAPI.
* [Enhancement] Возможность загружать произвольные модели MODxAPI в контроллерах.
* [Enhancement] Новое правило валидации - date, проверяет является ли значение поля датой в указанном формате (Validator).
* [Enhancement] Возможность пропускать поля при преобразовании в плейсхолдеры (Core).

### 1.0.2
* [Enhancement] Убрано значение по умолчанию свойства allowedFields в контроллерах Register и Profile.

### 1.0.1
* [Enhancement] Новое правило валидации файлов - optional, аналог правила required но выполняется также, если файл не загружен пользователем (FileValidator).
* [Enhancement] Правила валидации файлов allowed, minSize, sizeBetween считаются выполненными, если файл не загружен пользователем (код ошибки 4). Решает проблему с файловыми полями, для которых не задано правило required (FileValidator).
* [Bug] К письму прикреплялись не загруженные пользователем файлы, теперь прикрепляются только успешно загруженные (код ошибки 0) (Form).
* [Fix] Параметры из файлов перезаписывали параметры сниппета (Core).
* [Bug] Конфиг из файла не добавлялся в общий массив настроек (Helpers/Config).

### 1.0.0
Public release.
