spivurno
4/29/2016 - 9:29 PM

Gravity Wiz // Gravity Forms // Advanced Conditional Shortcodes

Gravity Wiz // Gravity Forms // Advanced Conditional Shortcodes

<?php
/**
 * Gravity Wiz // Gravity Forms // Advanced Conditional Shortcodes
 *
 * [gravityforms action="conditional" relation="any"
value="{:2}" operator="is" compare="First Choice"
value2="{:1}" operator2="isnot" compare2="Second Choice"]
Content you would like to conditionally display.
[/gravityforms]
 *
 */
add_filter( 'gform_shortcode_conditional', function( $result, $atts, $content ) {

	if( ! isset( $atts['value'] ) || isset( $atts['merge_tag'] ) ) {
		return $result;
	}

	$relation   = strtolower( rgar( $atts, 'relation', 'all' ) ); // or 'any'
	$conditions = array();

	foreach( $atts as $key => $prop ) {

		preg_match( '|value(\d*)$|', $key, $match );
		if( ! empty( $match ) ) {
			list( , $index ) = $match;
			$conditions[] = array(
				'value'    => rgar( $atts, sprintf( 'value%s', $index ) ),
				'operator' => rgar( $atts, sprintf( 'operator%s', $index ) ),
				'compare'  => rgar( $atts, sprintf( 'compare%s', $index ) ),
			);
		}

	}

	$conditional_met = $relation == 'all';

	foreach( $conditions as $condition ) {
		$is_match = GFFormsModel::matches_operation( $condition['value'], $condition['compare'], $condition['operator'] );
		if( $relation == 'any' && $is_match ) {
			$conditional_met = true;
			break;
		} else if( $relation == 'all' && ! $is_match ) {
			$conditional_met = false;
		}
	}

	if( ! $conditional_met ) {
		return '';
	}

	// find and remove any starting/closing <br> tags
	if( rgar( $atts, 'format' ) != 'raw' ) {
		$content = preg_replace( '/^<br(?: *\/)?>|<br(?: *\/)?>$/', '', $content );
	}

	return do_shortcode( $content );
}, 10, 3 );