Form processor for MODX

Creator: Sterc Online Agency (sterc)

Need help installing this extra?

About FormIt

FormIt is a dynamic form processing Snippet for MODX Revolution. It handles form creation, submission, performing validation and followup actions like sending an email and auto replies.

Free Extra This is a free extra and the code is publicly available for you to change. The extra is being actively maintained and you're free to put in pull requests which match our roadmap. Please create an issue if the pull request differs from the roadmap so we can make sure we're on the same page.

Need help? [Approach our support desk for paid premium support](mailto:[email protected]).


April 19, 2019

Supported Database


Supported Versions
2.2 - Current



Install via Package Management.

Updating to 3.0?

We've released FormIt 3.0 in order to avoid issues with Mcrypt in the near future, since it will be deprecated in PHP 7.2. Mcrypt has therefore been replaced by OpenSSL encryption.

After updating to 3.0.0, you should refresh the page and notice a red bar on the top of your manager. From there, you can initiate the migration process, which will decrypt your saved forms using Mcrypt and immediately encrypt them using OpenSSL.

New in 4.2.3-pl

FormIt 4.2.3

  • FormIt 4.2.0 release bug form encryption migration

FormIt 4.2.2

  • FormIt 4.2.0 release bug (missing update resolver)(#207)

FormIt 4.2.1

  • FormIt 4.2.0 release bug (#202)

FormIt 4.2.0

  • Bug on hasHook() fixed (#182, #181, #170, #193)
  • ExtJS refactored for faster and better UI/UX
  • IP number added to the grid (#194)
  • Better form view with textfields and textareas (#136)
  • Remove multiple forms (#143)
  • Search by IP (and context menu option to view all forms from 1 IP)
  • New permissions added: formit_encryptions to encrypt/decrypt forms
  • Context awereness, an user can only see the forms with the contexts that the user has access to.
  • Swedish translation updated
  • All other language files checked and filled with English strings
  • Formit deprecation notice in 2.7.0dev bug fixed (#190)

FormIt 4.1.1

  • Added new hook "renderHooks", which triggers just before rendering the form

FormIt 4.1.0

  • This release is made possible thanks to Bert Kooij / Thanks!
  • Added new button in Manager page for manually removing forms.
  • Added new system setting for the default amount of days.
  • Added cronjob task for automatically deletion of old forms.

Formit 4.0.1

  • Add option to specify csv delimiter for form export
  • Add GDPR compliant attachment handling (#154) - Thanks to @wax100
  • Allow empty isDate validator (PR#164) - Thanks to JoshuaLuckers
  • Fix bug with multiple forms on one page (#160)
  • Fix modx->log calls in various classes (#161)
  • Fix setting redirectParams variable (#165)

Formit 4.0.0

  • Move formit base classes to /src/ folder and add namespace
  • Update existing classes to extend new classes
  • Update all snippets to use modx getService
  • Move FormItAutoResponder and FormItSaveForm logic to classes
  • Add helper functions for all FormIt properties
  • Set defaultEngine to InnoDB in mysql schema
  • Fix PHP7 error in default email output (PR#156)
  • Updated German lexicons (PR#150)
  • Add 'Form' column to form export (PR#149)

Formit 3.0.4

  • Fix checkbox values not showing in mail

Formit 3.0.3

  • Fix FormItSaveForm to allow multiple fields with same fieldName
  • Add 'saveTmpFiles' FormIt snippet property to enable/disable saving files to tmp directory
  • Remove list() function from formitsaveform snippet for better PHP version compatibility (#98)
  • Fix PHP7 by-reference errors (#98)
  • Replace ereg() functions with preg_match() for PHP compatibility (#98)
  • Increase precision for FormItForm 'ip' field to allow for IPV6 addresses (#135)
  • Fix issue where in some cases fields are not correctly saved in FormItForm (#92)
  • Optimize FormItForm export class for better performance (#120)
  • Add 'attachFilesToEmail' property to control if files are added as attachment to email (#122)

Formit 3.0.2

  • Fix encryption in formitsaveform snippet to save correct encryption_type
  • Fix bug in forms grid when decrypting encrypted forms fail
  • Fix migration to check if decrypted data is correct

FormIt 3.0.1

  • Store file uploads in tmp folder to prevent file uploads getting lost in multistep forms
  • Add checks for OpenSSL in classes and encryption CMP tab
  • Add method_exists check to plugin to prevent errors when method not exists
  • Update context-menu in forms-encryption grid to show only encrypt or decrypt
  • Set placeholders for file upload $_FILES array
  • Add option to FormItCountryOptions snippet to limit country list to selected countries only (PR#123) - thanks to gadgetto

New in 3.0.0

  • Mcrypt encryption/decryption has been replaced with openSSL due to mcrypt being deprecated in PHP 7.2
  • Added default file-based chunks as objects
  • Added support for pdoTools getChunk method
  • Added French countries for FormItCountryOptions
  • Added Dutch countries for FormItCountryOptions
  • Added ExtJs stateful parameters to CMP tabs

New in 2.2.11

  • Added storeLocation property to FormIt and FormItRetriever. (issue #95, PR #105#106#107)
  • Changed default behaviour of emailReplyTo parameter to fallback to email field in form (issue #101)
  • Changed math hook to store values in session, preventing easy bypass of math hook (issue #64)
  • Add GPM config
  • Fix bug with multiple file upload (PR #104)
  • Add 'hash' field to FormItSaveForm to allow updating of previously saved forms (PR #94)
  • Add FormItLoadSavedForm snippet to retrieve saved forms (PR #94)
  • Fix for export with datefilter (issue #96, PR #97)
  • Add fiarRequired property (PR#83)
  • Update resolver to check for current version to prevent errors on upgrade
  • Add system setting for form_encryptkey, to not rely on site_id (issue #68)
  • Fix saved forms export when using encrypted forms (issue #48)

New in 2.2.10

  • Merged PR#58: Added BOM for Excel to understand UTF-8 non-latin symbols properly. (thanks to govza)
  • Merged PR#73: JSON output options for errors and hooks (thans to sepiariver)
  • Merged PR#79: Create German lexicon for FormIt-CMP (thanks to sebastian-marinescu)
  • New in 2.2.9

  • Merging PR#74 from Jako which solves multiple issues.
  • Fix XSS vulnerabilities
  • Javascript code cleanup
  • Fix empty math operator after form submission #d782c29
  • New in 2.2.8

    • Fixed export limit and added form dropdown paging #60
    • Fixed typo property lexicons #57
    • Added templates path to config #63
    • Added loading lexicons in ficountryoptions class #21
    • Added ability to dynamically set formName by setting placeholder inside formName equal to an existing form field key #45

    New in 2.2.7

      • Optimised export

      New in 2.2.6

        • Fixed empty placeholder for file field in autoresponder

        New in 2.2.5

          • Fixed creating table on update
          • Added new tab inside CMP for managing encryption
          • Added missing br on auto emailTpl

          New in 2.2.4

            • Fixed bug inside FormItSaveForm and PR #43

            New in 2.2.3

            • Added encryption to saved forms
            • Added formname to grid
            • Saved form is now returned from the hook
            • Export unlimited items
            • Add RU translation
            • Fixed some bugs

            New in 2.2.2

              • Added CMP for the saved forms
              • Fixed whitespace PR on required checkboxes

              New in 2.2.1

                • Updated numbers generation for math captcha #5
                • German translation #10
                • Added missing formit.not_regexp lexicon #15
                • Specify explicitely return-path fixes #19 #20
                • fix addAttachment() typo #23
                • Fixed typo in adding of the attachments #24
                • Add the possibility of redirectTo=`formfield` #26
                • Added attachments for auto-reply and Added ability to use @CODE as tpl #29
                • Update snippet.formitisselected.php #12
                • Canadian options for FormitStateOptions

                New in 2.2.0

                • [#8382] Prevent issue with checkboxes/radios causing text-parsing problems with required validator
                • Fixed issue with custom error message for vTextPasswordConfirm not respected
                • [#9457] Fixed issue with commas in values causing errors with FormItIsChecked & FormItIsSelected
                • [#9576] Add ability to translate country options
                • Add check for preHook errors before processing postHooks
                • Add option, defaulting true, to trim spaces from sides of values before validation
                • [#8785] Fix E_STRICT error in fiDictionary

                New in 2.1.2

                • Various language updates
                • [#7250] Fix issue with 0 not passing :required filter

                New in 2.1.1

                • [#8204] Fix issue with FormItAutoResponder and processing of MODX tags

                New in 2.1.0

                • [#7620] Allow for MODX tags in email templates, as well as pass-through of snippet properties to tpl
                • [#7502] Add ability to find type of hook by using $hook->type
                • [#8151] More sanity checking for FormItAutoResponder and replyTo addresses
                • Fix useIsoCode issue in FormItCountryOptions
                • Update German translation
                • Enhance validation templating for validationErrorBulkTpl
                • Add &country option to FormItStateOptions to allow loading of non-US states (currently us/de)

                New in 2.0.3

                • Update Czech translation
                • Fix issue with French accents in translation
                • [#6021] Refactor Russian reCaptcha translations
                • [#6618] Standardize XHTML in reCaptcha usage

                New in 2.0.2

                • [#4864] Fix issue with isNumber not allowing blank fields
                • [#5404] Fix issues with checkboxes and array fields in FormItAutoResponder
                • [#5269] Fix issues with checkboxes in various forms in emails
                • [#5792] Update reCaptcha URLs

                New in 2.0.1

                • [#5525] Add &allowFiles property, that when set to 0, prevents file submissions on form
                • [#5484] Fix issue with double validation error spans
                • Fix issue where config was not passed to hooks
                • Update German translation

                New in 2.0.0

                • [#3514] Add ability to customize validator error messages per FormIt form and per field
                • [#4705] Add regexp validator
                • [#5454] Fix issue with customValidators property in 2.0.0-rc2
                • Fix issue with reCaptcha loading in 2.0.0-rc1
                • Major reworking of main FormIt script to be OOP
                • Add over 150 unit tests to prevent regression
                • [#5388], [#5240] Fix issue with FormItCountryOptions and &useIsoCode
                • Fix issue with FormItStateOptions and &useAbbr
                • [#5267] Fix issue with FormItRetriever and array fields

                New in 1.7.0

                • Add ability to have "Frequent Visitors" optgroup in FormItCountryOptions, moving specified countries to the top of the list in an optgroup
                • Add missing property translations for FormItStateOptions snippet
                • Fix small issue with stored values after validation of fields
                • Add FormItStateOptions snippet for easy U.S. state dropdowns
                • Add FormItCountryOptions snippet for easy country dropdowns
                • [#5101] Fix issue with emailMultiSeparator and emailMultiWrapper default values
                • Fix issue with bracketed field names being added as extra fields post-validation with . prefix

                New in 1.6.0

                • [#4708] Add support for bracketed fields, such as contact[name]
                • [#5038] Fix uninitialized variable warnings in reCaptcha service
                • [#4993] Add Italian translation and fix recaptcha links
                • Fix issue where fields could be removed via DOM from form and be bypassed
                • Add &emailMultiSeparator and &emailMultiWrapper properties for handling display of checkboxes/multi-selects in email hook

                New in 1.5.6

                • [#4564] Fix redirectTo with non-web contexts

                New in 1.5.5

                • [#4168] Add emailConvertNewlines property for handling newlines in HTML emails
                • [#4057] Prevent math hook from generating similar numbers
                • [#4302] Cleanups to FormItAutoResponder snippet
                • [#3991] Fix issue with checkbox values in emails

                New in 1.5.4

                • Fix issue with math hook where error placeholders were incorrect
                • Fix issue where emailHtml property was not respected in email hook
                • Fix issue where hooks were not passed customProperties array
                • [#51] Allow blank fields to be passed with :email validator
                • [#55] Allow all fields to be accessed in custom validators

                New in 1.5.3

                • [#40] Add ability to display all error messages in bulk at top, added validationErrorBulkTpl for templating each one
                • [#52] Add a general validation error message property, validationErrorMessage, that shows when validation fails
                • [#53] Fix bug that prevented recaptcha options from working
                • Add a generic validation error placeholder in FormIt to allow for general messages
                • [#50] Trim each hook specification in hooks calls
                • [#49] Ensure reCaptcha service instance is unique for each FormIt instance
                • [#47] Ensure email validator checks for empty string
                • [#42] Can now include field names in error strings via `field` placeholder
                • [#39] Fix issue with FormItIsChecked/Selected to prevent output from occurring if not checked
                • [#37] Fix allowTags validator to work, and work with parameters encapsulated by ^

                Current releases

                View | Download
                August 19, 2022
                3.0 - Current

                View | Download
                August 10, 2022
                3.0 - Current

                View | Download
                November 30, 2021
                2.0 - Current

                View | Download
                January 23, 2021
                2.2 - Current

                View | Download
                January 10, 2020
                2.2 - Current

                View | Download
                January 10, 2020
                2.2 - Current

                View | Download
                April 19, 2019
                2.2 - Current

                View | Download
                April 12, 2019
                2.2 - Current

                View | Download
                February 18, 2019
                2.2 - Current