{"id":77439,"date":"2017-11-10T14:49:15","date_gmt":"2017-11-10T14:49:15","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/motiforms\/"},"modified":"2017-11-10T14:49:15","modified_gmt":"2017-11-10T14:49:15","slug":"motiforms","status":"publish","type":"plugin","link":"https:\/\/lmo.wordpress.org\/plugins\/motiforms\/","author":6599048,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"0.1.0","stable_tag":"0.1.0","tested":"4.8.28","requires":"3.8","requires_php":"","requires_plugins":"","header_name":"Motiforms","header_author":"Motivast","header_description":"Motiforms is a plugin provided for creating forms programmatically using symfony framework.","assets_banners_color":"","last_updated":"2017-11-10 14:49:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/motivast\/motiforms","header_author_uri":"http:\/\/motivast.com","rating":0,"author_block_rating":0,"active_installs":10,"downloads":1371,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":[],"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":0},"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[358,5981,361,601,7899],"plugin_category":[42],"plugin_contributors":[149112],"plugin_business_model":[],"class_list":["post-77439","plugin","type-plugin","status-publish","hentry","plugin_tags-contact-form","plugin_tags-custom-form","plugin_tags-form","plugin_tags-forms","plugin_tags-symfony","plugin_category-contact-forms","plugin_contributors-kierzniak","plugin_committers-kierzniak"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/motiforms.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<h4>WARNING<\/h4>\n\n<p>If you are not developer this plugin is not for you. Motiforms do not provide any WordPress admin interface to creating forms.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Handle form logic<\/li>\n<li>Field sanitization<\/li>\n<li>Field validation<\/li>\n<li>Built in html rendering helpers<\/li>\n<li>Flexibility<\/li>\n<li>Based on advanced Symfony framework<\/li>\n<\/ul>\n\n<h4>Get started<\/h4>\n\n<p>To create simple contact form paste code bellow to your functions.php file. And paste <code>[contact]<\/code> shortcode to your contact page.<\/p>\n\n<pre><code>use Symfony\\Component\\Form\\Extension\\Core\\Type\\TextType;\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\EmailType;\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\TextareaType;\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\SubmitType;\n\nclass ContactForm {\n\n    \/**\n     * Form instance\n     *\n     * FormType\n     *\/\n    private $form;\n\n    \/**\n     * ContacForm constructor\n     *\n     * @return ContacForm\n     *\/\n    public function __construct() {\n\n        $this-&gt;define_hooks();\n    }\n\n    \/**\n     * Create and process contact form\n     *\n     * This method is executed by wp action hook.\n     * It will be executed only on page which has contact\n     * shortcode.\n     *\n     * @return void\n     *\/\n    public function controller() {\n\n        global $post;\n\n        \/\/ Check if current view is page and page has content shortcode\n        if ( is_page() &amp;&amp; has_shortcode( $post-&gt;post_content, 'contact' ) ) {\n\n            $factory = mf_get_factory();\n\n            \/\/ Create form\n            $this-&gt;form = $factory-&gt;create();\n\n            \/\/ Add fields to form\n            $this-&gt;form-&gt;add( 'full_name', TextType::class );\n            $this-&gt;form-&gt;add( 'email', EmailType::class );\n            $this-&gt;form-&gt;add( 'message', TextareaType::class );\n            $this-&gt;form-&gt;add( 'submit', SubmitType::class );\n\n            \/\/ Get request object\n            $request = mf_get_request();\n\n            \/\/ Handle request\n            $this-&gt;form-&gt;handleRequest( $request );\n\n            \/\/ Check if form is valid\n            if ( $this-&gt;form-&gt;isSubmitted() &amp;&amp; $this-&gt;form-&gt;isValid() ) {\n\n                \/\/ Get data from the form\n                $data = $this-&gt;form-&gt;getData();\n\n                \/\/ Define filters\n                $filters = array(\n                    'full_name' =&gt; FILTER_SANITIZE_STRING,\n                    'email' =&gt; FILTER_SANITIZE_STRING | FILTER_SANITIZE_EMAIL,\n                    'message' =&gt; FILTER_SANITIZE_STRING,\n                );\n\n                \/\/ Fields sanitization\n                $sanitized_data = filter_var_array( $data, $filters );\n\n                \/\/ Perform action with form data e.g. send an e-mail\n\n                \/\/ Redirect user with success parameter to prevent double submitting form\n                wp_safe_redirect( $this-&gt;get_redirect_url() );\n            }\n        }\n    }\n\n    \/**\n     * Render contact form.\n     *\n     * This method is executed by contact shortcode.\n     *\n     * @return string\n     *\/\n    public function render() {\n\n        $success =  filter_input( INPUT_GET, 'success', FILTER_SANITIZE_NUMBER_INT );\n\n        if( '1' === $success ) {\n            return sprintf('&lt;h2&gt;%s&lt;\/h2&gt;', __('Thank you for submitting the form. We will contact you shortly.') );\n        }\n\n        $form_view = $this-&gt;form-&gt;createView();\n\n        $engine = mf_get_engine();\n\n        return $engine['form']-&gt;form( $form_view, array('attr' =&gt; array('novalidate' =&gt; 'novalidate') ) );\n\n    }\n\n    \/**\n     * Method executed by constructor to define hooks and\n     * create and render contact form.\n     *\n     * @return void\n     *\/\n    private function define_hooks() {\n\n        add_action( 'wp', array( $this, 'controller' ) );\n\n        add_shortcode( 'contact', array( $this, 'render' ) );\n    }\n\n    \/**\n     * Build url for form redirect\n     *\n     * @return string\n     *\/\n    private function get_redirect_url() {\n\n        $url = get_permalink();\n\n        $query = parse_url($url, PHP_URL_QUERY);\n\n        \/\/ Returns a string if the URL has parameters or NULL if not\n        if ($query) {\n            $url .= '&amp;success=1';\n        } else {\n            $url .= '?success=1';\n        }\n\n        return $url;\n    }\n}\n\n\/\/ Initialize contact form\nnew ContactForm();\n<\/code><\/pre>\n\n<!--section=installation-->\n<ol>\n<li>Visit Plugins &gt; Add New<\/li>\n<li>Search for \u201cMotiforms\u201d<\/li>\n<li>Install and activate \u201cMotiforms\"<\/li>\n<li>Go to <a href=\"https:\/\/github.com\/motivast\/motiforms#user-content-get-started\">get started<\/a> section to see a simple example.<\/li>\n<\/ol>\n\n<p>or<\/p>\n\n<ol>\n<li>Download plugin from wordpres.org repository or <a href=\"https:\/\/github.com\/motivast\/motiforms\/releases\/latest\">release section<\/a>.<\/li>\n<li>Upload the motiforms directory to your \/wp-content\/plugins\/ directory<\/li>\n<li>Activate the plugin through the\"\u2018Plugins\" menu in WordPress<\/li>\n<li>Go to <a href=\"https:\/\/github.com\/motivast\/motiforms#user-content-get-started\">get started<\/a> section to see a simple example.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt>Installation Instructions<\/dt>\n<dd><ol>\n<li>Visit Plugins &gt; Add New<\/li>\n<li>Search for \u201cMotiforms\u201d<\/li>\n<li>Install and activate \u201cMotiforms\"<\/li>\n<li>Go to <a href=\"https:\/\/github.com\/motivast\/motiforms#user-content-get-started\">get started<\/a> section to see a simple example.<\/li>\n<\/ol>\n\n<p>or<\/p>\n\n<ol>\n<li>Download plugin from wordpres.org repository or <a href=\"https:\/\/github.com\/motivast\/motiforms\/releases\/latest\">release section<\/a>.<\/li>\n<li>Upload the motiforms directory to your \/wp-content\/plugins\/ directory<\/li>\n<li>Activate the plugin through the\"\u2018Plugins\" menu in WordPress<\/li>\n<li>Go to <a href=\"https:\/\/github.com\/motivast\/motiforms#user-content-get-started\">get started<\/a> section to see a simple example.<\/li>\n<\/ol><\/dd>\n<dt>Where I can find documentation?<\/dt>\n<dd><p>Documentation for Motiforms can be found on github <a href=\"https:\/\/github.com\/motivast\/motiforms\/wiki\">wiki pages<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Motiforms<\/li>\n<\/ul>","raw_excerpt":"Motiforms is a WordPress plugin provided for creating forms programmatically using Symfony framework.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/77439","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=77439"}],"author":[{"embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/kierzniak"}],"wp:attachment":[{"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=77439"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=77439"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=77439"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=77439"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=77439"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/lmo.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=77439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}