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 & Submit'
) );