Skip to content

Commit 14a0559

Browse files
committed
gpr-randomize-fields-to-its-own-page.php: Added snippet to randomize fields to its own page.
1 parent ec6b24f commit 14a0559

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
<?php
2+
/**
3+
* Gravity Perks // Randomizer // Randomize Fields to Its Own Page
4+
* https://gravitywiz.com/documentation/gravity-forms-randomizer/
5+
*
6+
* Use this snippet to randomize fields within their respective pages.
7+
*
8+
* See video: https://www.loom.com/share/2dd4f3c6995349ae91d4b88f3990294b
9+
*/
10+
add_filter( 'gpr_filtered_fields', function( $filtered_fields, $form, $display_count ) {
11+
12+
if ( ! $display_count ) {
13+
$filtered_fields = randomize_fields_within_pages( $form['fields'] );
14+
} else {
15+
$filtered_fields = arrange_fields_by_page( $form['fields'], $filtered_fields );
16+
}
17+
return $filtered_fields;
18+
}, 10, 3 );
19+
20+
function arrange_fields_by_page( $fields_backup, $filtered_fields ) {
21+
$filtered_map = array();
22+
foreach ( $filtered_fields as $field ) {
23+
$filtered_map[ $field->id ] = $field;
24+
}
25+
26+
$result = array();
27+
$used_ids = array();
28+
29+
foreach ( $fields_backup as $field ) {
30+
if ( $field->type === 'page' ) {
31+
$result[] = $field;
32+
} elseif ( isset( $filtered_map[ $field->id ] ) ) {
33+
$result[] = $filtered_map[ $field->id ];
34+
35+
$used_ids[] = $field->id;
36+
}
37+
}
38+
39+
foreach ( $filtered_fields as $field ) {
40+
if ( ! in_array( $field->id, $used_ids, true ) && $field->type !== 'page' ) {
41+
$result[] = $field;
42+
}
43+
}
44+
45+
// Clean up redundant pages
46+
$cleaned_result = array();
47+
$prev_is_page = false;
48+
49+
foreach ( $result as $field ) {
50+
if ( $field->type === 'page' ) {
51+
if ( $prev_is_page ) {
52+
continue; // Skip consecutive page
53+
}
54+
$prev_is_page = true;
55+
} else {
56+
$prev_is_page = false;
57+
}
58+
$cleaned_result[] = $field;
59+
}
60+
61+
// Remove leading page
62+
if ( isset( $cleaned_result[0] ) && $cleaned_result[0]->type === 'page' ) {
63+
array_shift( $cleaned_result );
64+
}
65+
66+
// Remove trailing page
67+
if ( ! empty( $cleaned_result ) && end( $cleaned_result )->type === 'page' ) {
68+
array_pop( $cleaned_result );
69+
}
70+
71+
return $cleaned_result;
72+
}
73+
74+
function randomize_fields_within_pages( $fields ) {
75+
$result = array();
76+
$current_group = array();
77+
78+
foreach ( $fields as $field ) {
79+
if ( $field->type === 'page' ) {
80+
// Shuffle current group and add to result.
81+
shuffle( $current_group );
82+
$result = array_merge( $result, $current_group );
83+
$result[] = $field; // Add the page marker.
84+
$current_group = array(); // Start new group.
85+
} else {
86+
$current_group[] = $field;
87+
}
88+
}
89+
90+
// Add any remaining fields in the last group.
91+
if ( ! empty( $current_group ) ) {
92+
shuffle( $current_group );
93+
$result = array_merge( $result, $current_group );
94+
}
95+
96+
return $result;
97+
}

0 commit comments

Comments
 (0)