Create easy (and almost magic) forms

Overview

Why Magic Forms?

Almost everyday we do forms for our clients, personal projects, etc

Sometimes we need to add or remove fields, change validations, store data and at some point, this can be boring and repetitive.

So, the objective was to find a way to just put the HTML elements on the page, skip the repetitive task of coding and (with some kind of magic) store this data on a database or send by mail.

Features

  • Create any type of form: contact, feedback, registration, uploads, etc
  • Write only HTML
  • Don't code forms logic
  • Laravel validation
  • Custom validation errors
  • Use multiple forms on same page
  • Store on database
  • Export data in CSV
  • Access database records from backend
  • Send mail notifications to multiple recipients
  • Auto-response email on form submit
  • reCAPTCHA validation
  • Support for Translate plugin
  • Inline errors with fields (read documentation for more info)
  • File uploads using Filepond

Documentation

Checkout our docs at:

https://magicforms.vercel.app/

Comments
  • Target class [Martin\Forms\Classes\FilePond\FilePondController] does not exist.

    Target class [Martin\Forms\Classes\FilePond\FilePondController] does not exist.

    Hi guys, first of all I want to thank you for creating this amazing plugin. Currently I am using this plugin to submit forms on my website and am getting the following error. I use the file upload form on localhost, no problem. But when I use it on my hosting, I get an error Target class [Martin\Forms\Classes\FilePond\FilePondController] does not exist. Can someone help me. tks all!

    opened by quangtrongonline 1
  • Convert jquery js code to vanilla js

    Convert jquery js code to vanilla js

    Winter 1.1.8 dropped its dependence on jQuery with the new snowboard framework.

    This PR updates the inline-error.js to use vanilla JS instead of jQuery.

    Note: needs testing.

    TODO: convert js code in components/partials/filepond.htm

    opened by mjauvin 0
  • convert recaptcha to vanilla js

    convert recaptcha to vanilla js

    Winter 1.1.8 dropped its dependence on jQuery with the new snowboard framework. (ref. https://wintercms.com/docs/snowboard/migration-guide#no-jquery)

    This PR updates the recaptcha.js to use vanilla JS instead of jQuery.

    opened by mjauvin 0
  • Fix error when using

    Fix error when using "ReplyTo Email Field" property

    This fixes the "Address in mailbox given [email] does not comply with RFC 2822, 3.6.2. on line 355 of \vendor\swiftmailer\swiftmailer\lib\classes\Swift\Mime\Headers\MailboxHeader.php" error when using the "ReplyTo Email Field" property.

    opened by guus-frenken 0
  • Installation error (Your requirements could not be resolved to an installable set of packages)

    Installation error (Your requirements could not be resolved to an installable set of packages)

    Winter CMS Build 1.2.1 PHP Version 8.1

    composer require martin/wn-forms-plugin
    Using version ^2.0 for martin/wn-forms-plugin
    ./composer.json has been updated
    Running composer update martin/wn-forms-plugin
    Loading composer repositories with package information
    Updating dependencies
    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - wintercms/winter is present at version 1.0.0+no-version-set and cannot be modified by Composer
        - Only one of these can be installed: winter/wn-builder-plugin[v2.0.6], wintercms/winter[1.0.0+no-version-set]. They both replace rainlab/builder-plugin and thus cannot coexist.
        - winter/wn-builder-plugin is locked to version v2.0.6 and an update of this package was not requested.
    
    You can also try re-running composer require with an explicit version constraint, e.g. "composer require martin/wn-forms-plugin:*" to figure out if any version is installable, or "composer require martin/wn-forms-plugin:^2.1" if you know which you need.
    
    Installation failed, reverting ./composer.json and ./composer.lock to their original content.
    
    opened by WebProviderNGO 0
  • Upload form bug

    Upload form bug

    After clicking on the send button I get:

    ErrorException: preg_replace(): Unknown modifier '-' in /home2/roosterc/public_html/plugins/martin/forms/classes/BackendHelpers.php:88

    Stack trace: #0 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/HandleExceptions.php(259): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError() #1 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->Illuminate\Foundation\Bootstrap{closure}() #2 /home2/roosterc/public_html/plugins/martin/forms/classes/BackendHelpers.php(88): preg_replace() #3 /home2/roosterc/public_html/plugins/martin/forms/classes/mails/Notification.php(122): Martin\Forms\Classes\BackendHelpers::replaceToken() #4 /home2/roosterc/public_html/plugins/martin/forms/classes/mails/Notification.php(57): Martin\Forms\Classes\Mails\Notification->prepareCustomSubject() #5 /home2/roosterc/public_html/plugins/martin/forms/classes/MagicForm.php(216): Martin\Forms\Classes\Mails\Notification->send() #6 /home2/roosterc/public_html/modules/cms/classes/ComponentBase.php(194): Martin\Forms\Classes\MagicForm->onFormSubmit() #7 /home2/roosterc/public_html/modules/cms/classes/Controller.php(823): Cms\Classes\ComponentBase->runAjaxHandler() #8 /home2/roosterc/public_html/modules/cms/classes/Controller.php(714): Cms\Classes\Controller->runAjaxHandler() #9 /home2/roosterc/public_html/modules/cms/classes/Controller.php(371): Cms\Classes\Controller->execAjaxHandlers() #10 /home2/roosterc/public_html/modules/cms/classes/Controller.php(217): Cms\Classes\Controller->runPage() #11 /home2/roosterc/public_html/modules/cms/classes/CmsController.php(50): Cms\Classes\Controller->run() #12 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): Cms\Classes\CmsController->run() #13 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\Routing\Controller->callAction() #14 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\Routing\ControllerDispatcher->dispatch() #15 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\Routing\Route->runController() #16 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(727): Illuminate\Routing\Route->run() #17 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing{closure}() #18 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #19 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle() #20 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #21 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\View\Middleware\ShareErrorsFromSession->handle() #22 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(121): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #23 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Session\Middleware\StartSession->handleStatefulRequest() #24 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Session\Middleware\StartSession->handle() #25 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #26 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle() #27 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #28 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Cookie\Middleware\EncryptCookies->handle() #29 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #30 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(728): Illuminate\Pipeline\Pipeline->then() #31 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(705): Illuminate\Routing\Router->runRouteWithinStack() #32 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Routing/Router.php(669): Illuminate\Routing\Router->runRoute() #33 /home2/roosterc/public_html/vendor/winter/storm/src/Router/CoreRouter.php(20): Illuminate\Routing\Router->dispatchToRoute() #34 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(190): Winter\Storm\Router\CoreRouter->dispatch() #35 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http{closure}() #36 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #37 /home2/roosterc/public_html/vendor/winter/storm/src/Foundation/Http/Middleware/CheckForMaintenanceMode.php(25): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle() #38 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Winter\Storm\Foundation\Http\Middleware\CheckForMaintenanceMode->handle() #39 /home2/roosterc/public_html/vendor/winter/storm/src/Foundation/Http/Middleware/CheckForTrustedProxies.php(56): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #40 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Winter\Storm\Foundation\Http\Middleware\CheckForTrustedProxies->handle() #41 /home2/roosterc/public_html/vendor/winter/storm/src/Http/Middleware/TrustHosts.php(46): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #42 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Winter\Storm\Http\Middleware\TrustHosts->handle() #43 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline{closure}() #44 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\Pipeline\Pipeline->then() #45 /home2/roosterc/public_html/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(134): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter() #46 /home2/roosterc/public_html/index.php(43): Illuminate\Foundation\Http\Kernel->handle() #47 {main}

    opened by pierzo 0
  • Using `mail_replyto` component property crash sending mail

    Using `mail_replyto` component property crash sending mail

    • wintercms 1.1.7
    • foms 2.0.0

    If mail_replyto component property is used to refer a form field, then the mail notification result in an error : Swift_RfcComplianceException: Address in mailbox given [email] does not comply with RFC 2822, 3.6.2.

    In this case I want to use the email field of my form.

    When I was looking for the cause of the problem, I realised that the line https://github.com/skydiver/wn-forms-plugin/blob/805f3aff2ba4ae768d61b5fedbae913e0cf1dcf6/classes/Mails/Notification.php#L74

    May be changed to $message->replyTo($this->post[$this->properties['mail_replyto']]); if we want the reply field of mail to be set.

    The only workaround currently found is to remove the reply_to property from the component.

    opened by damsfx 3
  • replyto mail not working

    replyto mail not working

    If replyto-field is set it gives error from swiftmailer "Address in mailbox given does not comply with RFC 2822". Tested on php7.3.17 / wn 1.1.7 and works fine with version 1.5.1 of october-plugin-forms but generates error with 2.0.0 of wn-forms-plugin.

    opened by cemik 2
Releases(2.0.0)
Owner
Martin M.
Dad & Developer (former skydiver)
Martin M.
PHP library to create and validate html forms

FormManager Note: this is the documentation of FormManager 6.x For v5.x version Click here Installation: This package requires PHP>=7.1 and is availab

Oscar Otero 145 Sep 20, 2022
PHP Magic Number Detector

PHP Magic Number Detector (PHPMND) phpmnd is a tool that aims to help you to detect magic numbers in your PHP code. By default 0 and 1 are not conside

Povilas Susinskas 514 Dec 14, 2022
Wordpress starting framework for magic websites

Wideo Wordpress starting framework for magic websites. Full documentation: https://github.com/ideonetwork/wideo/wiki Usage Installation for wordpress

Zeranta Digital 4 Dec 13, 2022
Formcreator is a plugin which allow creation of custom forms of easy access

Formcreator is a plugin which allow creation of custom forms of easy access. At the same time, the plugin allow the creation of one or more tickets when the form is filled.

GLPI plugins 135 Dec 22, 2022
A library of powerful code snippets to help you get the job done with Gravity Forms and Gravity Perks.

Gravity Wiz Snippet Library Gravity Wiz is creating the most comprehensive library of snippets for Gravity Forms ever. We'll be consistently moving ou

Gravity Wiz 151 Dec 27, 2022
A challenge to develop frontend-backend forms and account creating.

Symfony + Vue (Back/Front) Helped and assisted by Vanessa and Paulo. This project have two sides, the back-end(Symfony) and the front-end(Vue.js) for

Rickelme Dias 1 Feb 10, 2022
Fresns core library: Cross-platform general-purpose multiple content forms social network service software

About Fresns Fresns is a free and open source social network service software, a general-purpose community product designed for cross-platform, and su

Fresns 82 Dec 31, 2022
🔒 Built a recaptcha for Nifty that works with Wordpress's Gravity Forms

Recaptcha Fully Functioning spam filter that has 10 levels of security, but is slim and rpackaged to integrate with any Gravity Forms form WORKING EXA

Lisa Broadhead 1 May 17, 2022
Javascript-powered auto-completion functionality for your Symfony forms!

Symfony UX Autocomplete Javascript-powered auto-completion functionality for your Symfony forms! EXPERIMENTAL This component is currently experimental

Symfony 12 Dec 15, 2022
Ranting field for the Filament forms

Ranting field for the Filament forms

null 14 Dec 11, 2022
Greyhole uses Samba to create a storage pool of all your available hard drives, and allows you to create redundant copies of the files you store.

Greyhole Greyhole is an application that uses Samba to create a storage pool of all your available hard drives (whatever their size, however they're c

Guillaume Boudreau 245 Dec 18, 2022
A framework to create easy and fast scoreboards in PocketMine-MP

ScoreboardLib A framework to create easy and fast scoreboards in PocketMine-MP How to use the Scoreboard API? First declare the file as: use isrdxv\sc

Claudio T. 2 Sep 4, 2022
WPForms coding standards are based on the WordPress Coding Standards and the PHPCompatibility Coding Standards and help create strict and high-quality code.

WPForms coding standards are based on the WordPress Coding Standards and the PHPCompatibility Coding Standards and help create strict and high-quality code.

Awesome Motive, Inc. 7 Nov 29, 2022
Mage2click toolset to create and manage the Magento Docker development environment with mutagen.io file-sync for macOS and native filesystem mounts on Linux.

Mage2click - Magento Docker Toolset Mage2click toolset is a system-wide command-line tool for creating and managing simultaneously running Magento Doc

Mage2click 69 Nov 28, 2022
Project that aims to create a website for a gym, where the clients and employees can access their data, buy in the gym store and check the gym activities.

Gym_Management_Project Project that aims to create a website for a gym, where the clients and employees can access their data, buy in the gym store an

null 1 Jan 12, 2022
A plugin to make life easier for users who need to edit specific functions of a world and also create, rename and delete worlds quickly using commands or the world management menu.

A plugin to make life easier for users who need to edit specific functions of a world and also create, rename and delete worlds quickly using commands or the world management menu.

ImperaZim 0 Nov 6, 2022
MOP is a php query handling and manipulation library providing easy and reliable way to manipulate query and get result in a fastest way

Mysql Optimizer mysql optimizer also known as MOP is a php query handling and manipulation library providing easy and reliable way to manipulate query

null 2 Nov 20, 2021
A set of classes to create and manipulate HTML objects abstractions

HTMLObject HTMLObject is a set of classes to create and manipulate HTML objects abstractions. Static calls to the classes echo Element::p('text')->cla

Emma Fabre 128 Dec 22, 2022
Easily create and read Corona Warn App Check-In URLs

bauer-kirch/cwa-event-registration-url This PHP library allows generating Check-In URLs for the Corona Warn App which can then be used to generate a Q

Bauer + Kirch GmbH 9 Dec 30, 2021