Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save spivurno/0dbc279bed71d189eba164ea56db4205 to your computer and use it in GitHub Desktop.
Save spivurno/0dbc279bed71d189eba164ea56db4205 to your computer and use it in GitHub Desktop.
Gravity Wiz // Gravity Forms // Allow Update & Create Feeds on Same Form
<?php
/**
* WARNING! THIS SNIPPET MAY BE OUTDATED.
* The latest version of this snippet can be found in the Gravity Wiz Snippet Library:
* https://github.com/gravitywiz/snippet-library/blob/master/gravity-forms/gw-allow-create-and-update-feeds.php
*/
/**
* Gravity Wiz // Gravity Forms // User Registration // Update & Create Feeds on Same Form
*
* Allows the creation (and processing) of both "update" and "create" feeds on the same form with the Gravity Forms User Registration add-on.
* Requires feeds to be configured with conditional logic based on a User Logged In field on the form.
*
* USE WITH CAUTION! If you are not handling which feed should be used via custom code or conditional logic, you will receive errors.
*
* @version 0.2
* @author David Smith <david@gravitywiz.com>
* @license GPL-2.0+
* @link http://gravitywiz.com/
*
* Plugin Name: Gravity Forms User Registration - Update & Create Feeds on Same Form
* Plugin URI: http://gravitywiz.com/
* Description: Allows the creation (and processing) of both "update" and "create" feeds on the same form with the Gravity Forms User Registration add-on.
* Author: Gravity Wiz
* Version: 0.2
* Author URI: http://gravitywiz.com
*/
class GW_GFUR_Update_Create_Same_Form {
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_ids' => array(),
'exclude_form_ids' => array()
) );
// do version check in the init to make sure if GF is going to be loaded, it is already loaded
add_action( 'init', array( $this, 'init' ) );
}
public function init() {
// make sure we're running the required minimum version of Gravity Forms
if( ! property_exists( 'GFCommon', 'version' ) || ! version_compare( GFCommon::$version, '1.8', '>=' ) ) {
return;
}
// make sure User Registration is loaded
if( ! is_callable( 'gf_user_registration' ) || ! is_callable( array( gf_user_registration(), 'get_single_submission_feed' ) ) ) {
return;
}
add_filter( 'gform_userregistration_feed_settings_fields', array( $this, 'enable_both_feed_types' ) );
add_filter( 'gform_get_form_filter', array( $this, 'remove_hide_form_function' ), 10, 2 );
}
public function enable_both_feed_types( $fields ) {
foreach( $fields as &$group ) {
if( rgar( $group, 'title' ) == esc_html__( 'Feed Settings', 'gravityformsuserregistration' ) ) {
foreach( $group['fields'] as &$field ) {
if( rgar( $field, 'name' ) == 'feedType' ) {
unset( $field['choices']['create']['disabled'] );
unset( $field['choices']['update']['disabled'] );
}
}
}
}
return $fields;
}
public function remove_hide_form_function( $string, $form ) {
// if we have both feed types and the user is not logged in, make sure we don't hide the form
if( $this->is_applicable_form( $form ) && ! is_user_logged_in() && $this->has_both_feed_types( $form ) ) {
remove_action( 'gform_get_form_filter_' . $form['id'], array( gf_user_registration(), 'hide_form' ) );
}
return $string;
}
public function has_both_feed_types( $form ) {
$feeds = gf_user_registration()->get_feeds( $form['id'] );
$has_create_feed = false;
$has_update_feed = false;
foreach( $feeds as $feed ) {
if( ! $feed['is_active'] ) {
continue;
}
if( $feed['meta']['feedType'] == 'create' ) {
$has_create_feed = true;
} else if( $feed['meta']['feedType'] == 'update' ) {
$has_update_feed = true;
}
}
return $has_create_feed && $has_update_feed;
}
public function is_applicable_form( $form ) {
$form_id = isset( $form['id'] ) ? $form['id'] : $form;
if( ! empty( $this->_args['exclude_form_ids'] ) ) {
return ! in_array( $form_id, $this->_args['exclude_form_ids'] );
} else if( ! empty( $this->_args['form_ids'] ) ) {
return in_array( $form_id, $this->_args['form_ids'] );
}
return true;
}
}
# Configuration
new GW_GFUR_Update_Create_Same_Form( array(
'exclude_form_ids' => array( '1426' ),
) );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment