spivurno
1/9/2016 - 4:38 AM

Gravity Wiz // Gravity Forms // Any Page Submit

Gravity Wiz // Gravity Forms // Any Page Submit

<?php
/**
 * Gravity Wiz // Gravity Forms // Any Page Submit
 *
 * Adds a "Finish & Submit" button to allow the user to submit the form from any page.
 *
 * @version   1.0
 * @author    David Smith <david@gravitywiz.com>
 * @license   GPL-2.0+
 * @link      http://gravitywiz.com/...
 * @copyright 2015 Gravity Wiz
 */
class GW_Any_Page_Submit {

    public function __construct( $args = array() ) {

        // set our default arguments, parse against the provided arguments, and store for use throughout the class
        $this->_args = wp_parse_args( $args, array(
            'form_id' => false,
	        'label'   => __( 'Submit Now' )
        ) );

        add_action( 'init', array( $this, 'init' ) );

    }

    public function init() {

        add_filter( 'gform_next_button',    array( $this, 'add_submit_now_button' ), 10, 2 );
	    add_filter( 'gform_pre_validation', array( $this, 'unrequire_fields' ) );

    }

    public function add_submit_now_button( $button, $form ) {

	    if( ! $this->is_applicable_form( $form ) ) {
			return $button;
	    }

	    // set button label
	    $form['button']['text'] = $this->_args['label'];

	    // get submit button markup
	    $onclick = sprintf( 'jQuery( "#gform_target_page_number_%d" ).val( 0 );', $form['id'] );
	    $html_id = sprintf( 'gform_early_submit_button_%d', $form['id'] );

	    $button .= GFFormDisplay::get_form_button( $form['id'], $html_id, $form['button'], '', 'gform_button', __( 'Submit', 'gravityforms' ), 0, $onclick );
	    $search  = "id='$html_id'";
	    $button  = str_replace( $search, $search . " name='gform_early_submit_button'", $button );

        return $button;
    }

	function unrequire_fields( $form ) {

		if( ! $this->is_early_submission() ) {
			return $form;
		}

		$source_page = GFFormDisplay::get_source_page( $form['id'] );

		foreach( $form['fields'] as &$field ) {
			if( $field->pageNumber == $source_page ) {
				$field->isRequired = false;
			}
		}

		return $form;
	}

	function is_applicable_form( $form ) {
		$form_id = isset( $form['id'] ) ? $form['id'] : $form;
		return $form_id == $this->_args['form_id'];
	}

	function is_early_submission() {
		return rgpost( 'gform_early_submit_button' );
	}

}

# Configuration

new GW_Any_Page_Submit( array(
	'form_id' => 1149,
	'label'   => 'Finish &amp; Submit'
) );