2017 © Pedro PelĂĄez
 

wordpress-plugin motiforms

Motiforms is a plugin provided for creating forms programmatically.

image

motivast/motiforms

Motiforms is a plugin provided for creating forms programmatically.

  • Friday, February 16, 2018
  • by kierzniak
  • Repository
  • 1 Watchers
  • 4 Stars
  • 1 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 2 Versions
  • 0 % Grown

The README.md

Motiforms Build Status

Motiforms is a WordPress plugin provided for creating forms programmatically using Symfony framework. If you do not need form builder and want to create advanced forms check out Motiforms., (*1)

Go to get started section to see a simple example., (*2)

WARNING

If you are not developer this plugin is not for you. Motiforms do not provide any WordPress admin interface to creating forms., (*3)

Features

  • Handle form logic
  • Field serialization
  • Field validation
  • Built in html rendering helpers
  • Flexibility
  • Based on advanced Symfony framework

Installation

  1. Download plugin from wordpres.org repository or release section.
  2. Upload the motiforms directory to your /wp-content/plugins/ directory
  3. Activate the plugin through the ‘Plugins’ menu in WordPress

Get started

To create simple contact form paste code bellow to your functions.php file. And paste [contact] shortcode to your contact page., (*4)

use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

class ContactForm {

    /**
     * Form instance
     *
     * FormType
     */
    private $form;

    /**
     * ContacForm constructor
     *
     * @return ContacForm
     */
    public function __construct() {

        $this->define_hooks();
    }

    /**
     * Create and process contact form
     *
     * This method is executed by wp action hook.
     * It will be executed only on page which has contact
     * shortcode.
     *
     * @return void
     */
    public function controller() {

        global $post;

        // Check if current view is page and page has content shortcode
        if ( is_page() && has_shortcode( $post->post_content, 'contact' ) ) {

            $factory = mf_get_factory();

            // Create form
            $this->form = $factory->create();

            // Add fields to form
            $this->form->add( 'full_name', TextType::class );
            $this->form->add( 'email', EmailType::class );
            $this->form->add( 'message', TextareaType::class );
            $this->form->add( 'submit', SubmitType::class );

            // Get request object
            $request = mf_get_request();

            // Handle request
            $this->form->handleRequest( $request );

            // Check if form is valid
            if ( $this->form->isSubmitted() && $this->form->isValid() ) {

                // Get data from the form
                $data = $this->form->getData();

                // Define filters
                $filters = array(
                    'full_name' => FILTER_SANITIZE_STRING,
                    'email' => FILTER_SANITIZE_STRING | FILTER_SANITIZE_EMAIL,
                    'message' => FILTER_SANITIZE_STRING,
                );

                // Fields sanitization
                $sanitized_data = filter_var_array( $data, $filters );

                // Perform action with form data e.g. send an e-mail

                // Redirect user with success parameter to prevent double submitting form
                wp_safe_redirect( $this->get_redirect_url() );
            }
        }
    }

    /**
     * Render contact form.
     *
     * This method is executed by contact shortcode.
     *
     * @return string
     */
    public function render() {

        $success =  filter_input( INPUT_GET, 'success', FILTER_SANITIZE_NUMBER_INT );

        if( '1' === $success ) {
            return sprintf('<h2>%s</h2>', __('Thank you for submitting the form. We will contact you shortly.') );
        }

        $form_view = $this->form->createView();

        $engine = mf_get_engine();

        return $engine['form']->form( $form_view, array('attr' => array('novalidate' => 'novalidate') ) );

    }

    /**
     * Method executed by constructor to define hooks and
     * create and render contact form.
     *
     * @return void
     */
    private function define_hooks() {

        add_action( 'wp', array( $this, 'controller' ) );

        add_shortcode( 'contact', array( $this, 'render' ) );
    }

    /**
     * Build url for form redirect
     *
     * @return string
     */
    private function get_redirect_url() {

        $url = get_permalink();

        $query = parse_url($url, PHP_URL_QUERY);

        // Returns a string if the URL has parameters or NULL if not
        if ($query) {
            $url .= '&success=1';
        } else {
            $url .= '?success=1';
        }

        return $url;
    }
}

// Initialize contact form
new ContactForm();

Documentation

Documentation for Motiforms can be found on github wiki pages., (*5)

Contribute

Please make sure to read the Contribution guide before making a pull request., (*6)

Thank you to all the people who already contributed to Motiforms!, (*7)

License

The project is licensed under the GNU GPLv2 (or later)., (*8)

Copyright (c) 2017-present, Motivast, (*9)

The Versions