Last active
November 26, 2020 13:10
-
-
Save spivurno/3708723 to your computer and use it in GitHub Desktop.
Gravity Wiz // Gravity Forms // Random Field Order
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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-random-fields.php | |
*/ | |
/** | |
* Gravity Wiz // Gravity Forms // Random Fields | |
* | |
* Randomly display a specified number of fields on your form. | |
* | |
* @version 1.1 | |
* @author David Smith <[email protected]> | |
* @license GPL-2.0+ | |
* @link https://gravitywiz.com/random-fields-with-gravity-forms/ | |
* | |
* Plugin Name: Gravity Forms Random Fields | |
* Plugin URI: https://gravitywiz.com/random-fields-with-gravity-forms/ | |
* Description: Randomly display a specified number of fields on your form. | |
* Author: Gravity Wiz | |
* Version: 1.1 | |
* Author URI: http://gravitywiz.com | |
*/ | |
class GFRandomFields { | |
public $all_random_field_ids; | |
public $display_count; | |
public $selected_field_ids = array(); | |
public function __construct( $form_id, $display_count = 5, $random_field_ids = false ) { | |
$this->_form_id = $form_id; | |
$this->all_random_field_ids = (array) $random_field_ids; | |
$this->display_count = $display_count; | |
add_filter( "gform_pre_render_$form_id", array( $this, 'pre_render' ) ); | |
add_filter( "gform_form_tag_$form_id", array( $this, 'store_selected_field_ids' ) ); | |
add_filter( "gform_validation_$form_id", array( $this, 'validate' ) ); | |
add_filter( "gform_pre_submission_filter_$form_id", array( $this, 'pre_render' ) ); | |
//add_filter( "gform_admin_pre_render_$form_id", array( $this, 'admin_pre_render' ) ); | |
//add_action( 'gform_entry_created', array( $this, 'save_selected_field_ids_meta' ), 10, 2 ); | |
} | |
public function pre_render( $form ) { | |
return $this->filter_form_fields( $form, $this->get_selected_field_ids() ); | |
} | |
public function admin_pre_render( $form ) { | |
if ( $form['id'] != $this->_form_id ) { | |
return $form; | |
} | |
return $form; | |
} | |
public function store_selected_field_ids( $form_tag ) { | |
$hash = $this->get_selected_field_ids_hash(); | |
$value = implode( ',', $this->get_selected_field_ids() ); | |
$input = sprintf( '<input type="hidden" value="%s" name="gfrf_field_ids_%s">', $value, $hash ); | |
return $form_tag . $input; | |
} | |
public function validate( $validation_result ) { | |
$validation_result['form'] = $this->filter_form_fields( $validation_result['form'], $this->get_selected_field_ids() ); | |
$validation_result['is_valid'] = true; | |
foreach ( $validation_result['form']['fields'] as $field ) { | |
if ( $field['failed_validation'] ) { | |
$validation_result['is_valid'] = false; | |
} | |
} | |
return $validation_result; | |
} | |
public function filter_form_fields( $form, $selected_fields ) { | |
$filtered_fields = array(); | |
foreach ( $form['fields'] as $field ) { | |
if ( in_array( $field['id'], $this->all_random_field_ids ) ) { | |
if ( in_array( $field['id'], $selected_fields ) ) { | |
$filtered_fields[] = $field; | |
} | |
} else { | |
$filtered_fields[] = $field; | |
} | |
} | |
$form['fields'] = $filtered_fields; | |
return $form; | |
} | |
public function get_selected_field_ids( $entry_id = false ) { | |
// check if class has already init fields | |
if ( !empty( $this->selected_field_ids ) ) { | |
return $this->selected_field_ids; | |
} | |
$hash = $this->get_selected_field_ids_hash(); | |
// If entry ID is passed, retrieve selected fields IDs from entry meta. | |
if ( $entry_id ) { | |
$field_ids = gform_get_meta( $entry_id, "_gfrf_field_ids_{$hash}" ); | |
return is_array( $field_ids ) ? $field_ids : array(); | |
} | |
// Check if fields have been submitted. | |
$field_ids = rgpost( "gfrf_field_ids_{$hash}" ); | |
if ( !empty( $field_ids ) ) { | |
return explode( ',', $field_ids ); | |
} | |
$field_ids = array(); | |
$keys = array_rand( $this->all_random_field_ids, $this->display_count ); | |
if ( !is_array( $keys ) ) { | |
$keys = array( $keys ); | |
} | |
foreach ( $keys as $key ) { | |
$field_ids[] = $this->all_random_field_ids[$key]; | |
} | |
$this->selected_field_ids = $field_ids; | |
return $field_ids; | |
} | |
public function get_selected_field_ids_hash() { | |
return wp_hash( implode( '_', $this->all_random_field_ids ) ); | |
} | |
public function save_selected_field_ids_meta( $entry, $form ) { | |
if ( $form['id'] == $this->_form_id ) { | |
$hash = $this->get_selected_field_ids_hash(); | |
gform_add_meta( $entry['id'], "_gfrf_field_ids_{$hash}", $this->get_selected_field_ids() ); | |
} | |
} | |
} | |
new GFRandomFields( 167, 2, array( 1, 2, 3, 4, 5 ) ); | |
new GFRandomFields( 167, 2, array( 8, 9, 10 ) ); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{"0":{"id":167,"title":"Random Fields","description":"We would love to hear from you! Please fill out this form and we will get in touch with you shortly.","labelPlacement":"top_label","maxEntriesMessage":"","button":{"type":"text","text":"Submit","imageUrl":""},"fields":[{"type":"text","adminLabel":"","allowsPrepopulate":false,"defaultValue":"","description":"","content":"","cssClass":"","errorMessage":"","id":1,"inputName":"","isRequired":true,"label":"Question #1","noDuplicates":"","size":"medium","postCustomFieldName":"","displayAllCategories":false,"displayCaption":"","displayDescription":"","displayTitle":"","inputType":"","rangeMin":"","rangeMax":"","calendarIconUrl":"","dateFormat":"","phoneFormat":"","defaultCountry":"","defaultProvince":"","defaultState":"","hideAddress2":"","hideCountry":"","hideState":"","inputs":null,"nameFormat":"","allowedExtensions":"","captchaType":"","page_number":"","captchaTheme":"","simpleCaptchaSize":"","simpleCaptchaFontColor":"","simpleCaptchaBackgroundColor":"","productField":"","enablePasswordInput":"","maxLength":"","enablePrice":"","basePrice":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"inputMask":false,"inputMaskValue":"","formId":167,"descriptionPlacement":"below","visibility":"visible","displayOnly":"","labelPlacement":"","subLabelPlacement":"","placeholder":"","multipleFiles":false,"maxFiles":"","useRichTextEditor":false,"gp-unique-id_starting_number":"","choices":"","conditionalLogic":""},{"type":"text","adminLabel":"","allowsPrepopulate":false,"defaultValue":"","description":"","content":"","cssClass":"","errorMessage":"","id":2,"inputName":"","isRequired":true,"label":"Question #2","noDuplicates":"","size":"medium","postCustomFieldName":"","displayAllCategories":false,"displayCaption":"","displayDescription":"","displayTitle":"","inputType":"","rangeMin":"","rangeMax":"","calendarIconUrl":"","dateFormat":"","phoneFormat":"","defaultCountry":"","defaultProvince":"","defaultState":"","hideAddress2":"","hideCountry":"","hideState":"","inputs":null,"nameFormat":"","allowedExtensions":"","captchaType":"","page_number":"","captchaTheme":"","simpleCaptchaSize":"","simpleCaptchaFontColor":"","simpleCaptchaBackgroundColor":"","productField":"","enablePasswordInput":"","maxLength":"","enablePrice":"","basePrice":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"inputMask":false,"inputMaskValue":"","formId":167,"descriptionPlacement":"below","visibility":"visible","displayOnly":"","choices":"","conditionalLogic":""},{"type":"text","adminLabel":"","allowsPrepopulate":false,"defaultValue":"","description":"","content":"","cssClass":"","errorMessage":"","id":3,"inputName":"","isRequired":true,"label":"Question #3","noDuplicates":"","size":"medium","postCustomFieldName":"","displayAllCategories":false,"displayCaption":"","displayDescription":"","displayTitle":"","inputType":"","rangeMin":"","rangeMax":"","calendarIconUrl":"","dateFormat":"","phoneFormat":"","defaultCountry":"","defaultProvince":"","defaultState":"","hideAddress2":"","hideCountry":"","hideState":"","inputs":null,"nameFormat":"","allowedExtensions":"","captchaType":"","page_number":"","captchaTheme":"","simpleCaptchaSize":"","simpleCaptchaFontColor":"","simpleCaptchaBackgroundColor":"","productField":"","enablePasswordInput":"","maxLength":"","enablePrice":"","basePrice":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"inputMask":false,"inputMaskValue":"","formId":167,"descriptionPlacement":"below","visibility":"visible","displayOnly":"","labelPlacement":"","subLabelPlacement":"","placeholder":"","multipleFiles":false,"maxFiles":"","useRichTextEditor":false,"gp-unique-id_starting_number":"","choices":"","conditionalLogic":""},{"type":"text","adminLabel":"","allowsPrepopulate":false,"defaultValue":"","description":"","content":"","cssClass":"","errorMessage":"","id":4,"inputName":"","isRequired":true,"label":"Question #4","noDuplicates":"","size":"medium","postCustomFieldName":"","displayAllCategories":false,"displayCaption":"","displayDescription":"","displayTitle":"","inputType":"","rangeMin":"","rangeMax":"","calendarIconUrl":"","dateFormat":"","phoneFormat":"","defaultCountry":"","defaultProvince":"","defaultState":"","hideAddress2":"","hideCountry":"","hideState":"","inputs":null,"nameFormat":"","allowedExtensions":"","captchaType":"","page_number":"","captchaTheme":"","simpleCaptchaSize":"","simpleCaptchaFontColor":"","simpleCaptchaBackgroundColor":"","productField":"","enablePasswordInput":"","maxLength":"","enablePrice":"","basePrice":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"inputMask":false,"inputMaskValue":"","formId":167,"descriptionPlacement":"below","visibility":"visible","displayOnly":"","choices":"","conditionalLogic":""},{"type":"text","adminLabel":"","allowsPrepopulate":false,"defaultValue":"","description":"","content":"","cssClass":"","errorMessage":"","id":5,"inputName":"","isRequired":true,"label":"Question #5","noDuplicates":"","size":"medium","postCustomFieldName":"","displayAllCategories":false,"displayCaption":"","displayDescription":"","displayTitle":"","inputType":"","rangeMin":"","rangeMax":"","calendarIconUrl":"","dateFormat":"","phoneFormat":"","defaultCountry":"","defaultProvince":"","defaultState":"","hideAddress2":"","hideCountry":"","hideState":"","inputs":null,"nameFormat":"","allowedExtensions":"","captchaType":"","page_number":"","captchaTheme":"","simpleCaptchaSize":"","simpleCaptchaFontColor":"","simpleCaptchaBackgroundColor":"","productField":"","enablePasswordInput":"","maxLength":"","enablePrice":"","basePrice":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"inputMask":false,"inputMaskValue":"","formId":167,"descriptionPlacement":"below","visibility":"visible","displayOnly":"","choices":"","conditionalLogic":""},{"type":"select","adminLabel":"","allowsPrepopulate":false,"defaultValue":"","description":"","content":"","cssClass":"","errorMessage":"","id":6,"inputName":"","isRequired":false,"label":"Who are you?","noDuplicates":"","size":"medium","postCustomFieldName":"","displayAllCategories":false,"displayCaption":"","displayDescription":"","displayTitle":"","inputType":"","rangeMin":"","rangeMax":"","calendarIconUrl":"","dateFormat":"","phoneFormat":"","defaultCountry":"","defaultProvince":"","defaultState":"","hideAddress2":"","hideCountry":"","hideState":"","inputs":null,"nameFormat":"","allowedExtensions":"","captchaType":"","page_number":"","captchaTheme":"","simpleCaptchaSize":"","simpleCaptchaFontColor":"","simpleCaptchaBackgroundColor":"","productField":"","enablePasswordInput":"","maxLength":"","enablePrice":"","basePrice":"","choices":[{"text":"First Choice","value":"First Choice","isSelected":false,"price":""},{"text":"Second Choice","value":"Second Choice","isSelected":false,"price":""},{"text":"Third Choice","value":"Third Choice","isSelected":false,"price":""}],"calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"inputMask":false,"inputMaskValue":"","formId":167,"descriptionPlacement":"below","visibility":"visible","displayOnly":"","conditionalLogic":""},{"type":"page","id":7,"label":"","adminLabel":"","isRequired":false,"size":"medium","errorMessage":"","inputs":null,"displayOnly":true,"nextButton":{"type":"text","text":"Next","imageUrl":""},"previousButton":{"type":"text","text":"Previous","imageUrl":""},"formId":167,"description":"","allowsPrepopulate":false,"inputMask":false,"inputMaskValue":"","inputType":"","labelPlacement":"","descriptionPlacement":"","subLabelPlacement":"","placeholder":"","cssClass":"","inputName":"","visibility":"","noDuplicates":false,"defaultValue":"","choices":"","conditionalLogic":"","productField":""},{"type":"text","id":8,"label":"Alt Question #1","adminLabel":"","isRequired":false,"size":"medium","errorMessage":"","inputs":null,"formId":167,"description":"","allowsPrepopulate":false,"inputMask":false,"inputMaskValue":"","inputType":"","labelPlacement":"","descriptionPlacement":"","subLabelPlacement":"","placeholder":"","cssClass":"","inputName":"","visibility":"visible","noDuplicates":false,"defaultValue":"","choices":"","conditionalLogic":"","productField":"","enablePasswordInput":"","maxLength":"","multipleFiles":false,"maxFiles":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"displayAllCategories":false,"useRichTextEditor":false,"gp-unique-id_starting_number":""},{"type":"text","id":9,"label":"Alt Question #2","adminLabel":"","isRequired":false,"size":"medium","errorMessage":"","inputs":null,"formId":167,"description":"","allowsPrepopulate":false,"inputMask":false,"inputMaskValue":"","inputType":"","labelPlacement":"","descriptionPlacement":"","subLabelPlacement":"","placeholder":"","cssClass":"","inputName":"","visibility":"visible","noDuplicates":false,"defaultValue":"","choices":"","conditionalLogic":"","productField":"","enablePasswordInput":"","maxLength":"","multipleFiles":false,"maxFiles":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"displayAllCategories":false,"useRichTextEditor":false,"gp-unique-id_starting_number":""},{"type":"text","id":10,"label":"Alt Question #3","adminLabel":"","isRequired":false,"size":"medium","errorMessage":"","inputs":null,"formId":167,"description":"","allowsPrepopulate":false,"inputMask":false,"inputMaskValue":"","inputType":"","labelPlacement":"","descriptionPlacement":"","subLabelPlacement":"","placeholder":"","cssClass":"","inputName":"","visibility":"visible","noDuplicates":false,"defaultValue":"","choices":"","conditionalLogic":"","productField":"","enablePasswordInput":"","maxLength":"","multipleFiles":false,"maxFiles":"","calculationFormula":"","calculationRounding":"","enableCalculation":"","disableQuantity":false,"displayAllCategories":false,"useRichTextEditor":false,"gp-unique-id_starting_number":""}],"useCurrentUserAsAuthor":true,"descriptionPlacement":"below","cssClass":"","enableHoneypot":false,"enableAnimation":false,"postContentTemplateEnabled":false,"postTitleTemplateEnabled":false,"postTitleTemplate":"","postContentTemplate":"","lastPageButton":{"type":"text","text":"Previous","imageUrl":""},"pagination":{"type":"percentage","pages":[""],"style":"blue","backgroundColor":null,"color":null,"display_progressbar_on_confirmation":false,"progressbar_completion_text":null},"firstPageCssClass":"","limitEntries":false,"limitEntriesCount":"","limitEntriesMessage":"","limitEntriesPeriod":"","requireLogin":false,"requireLoginMessage":"","scheduleForm":false,"scheduleStart":"","scheduleStartHour":"","scheduleStartMinute":"","scheduleStartAmpm":"","scheduleEnd":"","scheduleEndHour":"","scheduleEndMinute":"","scheduleEndAmpm":"","scheduleMessage":"","confirmations":[{"type":"message","message":"Thanks for contacting us! We will get in touch with you shortly.","url":"","pageId":"","queryString":"","disableAutoformat":false,"id":"5179a76e802a2","name":"Default Confirmation","isDefault":true}],"notifications":[{"to":"{admin_email}","subject":"New submission from {form_title}","message":"{all_fields}","toType":"email","event":"form_submission","name":"Admin Notification","type":"admin","id":"5179a76e80754"}]},"version":"2.2.2"} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
👉 This Gist has been migrated to the Gravity Wiz Snippet Library:
https://github.com/gravitywiz/snippet-library/blob/master/gravity-forms/gw-random-fields.php