PluginProbe
AutomatorWP – No-Code Workflow Automation, Integration & Webhooks Plugin, now with AI / 6.0.2
AutomatorWP – No-Code Workflow Automation, Integration & Webhooks Plugin, now with AI v6.0.2
6.0.2 6.0.1 6.0.0 5.8.6 5.8.5 5.8.4 5.8.3 5.8.2 5.8.1 5.8.0 5.7.9.2 5.7.9.1 5.7.8 5.7.9 5.7.6 5.7.7 5.7.5 5.7.4 5.7.3 5.7.2 5.7.1 trunk 5.6.0 5.6.1 5.6.2 All 33 releases
automatorwp / integrations / gravity-forms / includes / functions.php

functions.php in AutomatorWP – No-Code Workflow Automation, Integration & Webhooks Plugin, now with AI 6.0.2, at integrations/gravity-forms/includes/functions.php

257 lines 7.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Functions
4 *
5 * @package AutomatorWP\Gravity_Forms\Functions
6 * @since 1.0.0
7 */
8 // Exit if accessed directly
9 if( !defined( 'ABSPATH' ) ) exit;
10
11 /**
12 * Options callback for select2 fields assigned to forms
13 *
14 * @since 1.0.0
15 *
16 * @param stdClass $field
17 *
18 * @return array
19 */
20 function automatorwp_gravity_forms_options_cb_form( $field ) {
21
22 // Setup vars
23 $value = $field->escaped_value;
24 $none_value = 'any';
25 $none_label = __( 'any form', 'automatorwp' );
26 $options = automatorwp_options_cb_none_option( $field, $none_value, $none_label );
27
28 if( ! empty( $value ) ) {
29 if( ! is_array( $value ) ) {
30 $value = array( $value );
31 }
32
33 foreach( $value as $form_id ) {
34
35 // Skip option none
36 if( $form_id === $none_value ) {
37 continue;
38 }
39
40 $options[$form_id] = automatorwp_gravity_forms_get_form_title( $form_id );
41 }
42 }
43
44 return $options;
45
46 }
47
48 /**
49 * Get the form title
50 *
51 * @since 1.0.0
52 *
53 * @param int $form_id
54 *
55 * @return string|null
56 */
57 function automatorwp_gravity_forms_get_form_title( $form_id ) {
58
59 // Empty title if no ID provided
60 if( absint( $form_id ) === 0 ) {
61 return '';
62 }
63
64 $form = RGFormsModel::get_form( $form_id );
65
66 return $form->title;
67
68 }
69
70 /**
71 * Get form fields values
72 *
73 * @since 1.0.0
74 *
75 * @param array $lead
76 * @param array $form
77 *
78 * @return array
79 */
80 function automatorwp_gravity_forms_get_form_fields_values( $lead, $form ) {
81
82 $form_fields = array();
83
84 $fields = $form['fields'];
85
86 // Loop all fields to trigger events per field value
87 foreach ( $fields as $field ) {
88
89 // Excluded fields
90 if( in_array( $field->type, array( 'captcha', 'section' ) ) ) {
91 continue;
92 }
93
94 $field_name = $field->id;
95 $field_value = GFFormsModel::get_lead_field_value( $lead, $field );
96
97 // Turn serialized values into array
98 if ( $field->type === 'list' ) {
99
100 // On list fields is required to unserialize
101 $field_value = maybe_unserialize( $field_value );
102
103 } else if ( $field->type === 'name' ) {
104
105 $new_value = array();
106
107 foreach( $field_value as $value ) {
108 if( ! empty( $value ) ) {
109 $new_value[] = $value;
110 }
111 }
112
113 $field_value = $new_value;
114
115 } else if ( $field->type === 'multiselect' ) {
116
117 // Multiselect value is a json
118 $field_value = json_decode( $field_value, true );
119
120 } else if ( $field->type === 'checkbox' ) {
121
122 // On checkboxes, values are stored on {field_id}.{choice_number}
123 $field_value = array();
124 $choice_number = 1;
125
126 foreach ( $field->choices as $choice ) {
127 $value = ( isset( $lead[$field->id . '.' . $choice_number] ) ? $lead[$field->id . '.' . $choice_number] : '' );
128
129 // Not checked options are empty
130 if( ! empty( $value ) )
131 $field_value[] = $value;
132
133 $choice_number++;
134 }
135
136 }
137
138 // Turn indexes like 4.1, into 1
139 if( is_array( $field_value ) ) {
140 $new_value = array();
141
142 // Remove the main keys
143 foreach( $field_value as $key => $value ) {
144 if( strpos( $key, '.' ) !== false ) {
145 $keys = explode( '.', $key );
146 unset( $keys[0] );
147
148 $new_value[implode('/', $keys)] = $value;
149 } else {
150 $new_value[$key] = $value;
151 }
152 }
153
154 $field_value = $new_value;
155 }
156
157 $form_fields[$field_name] = $field_value;
158
159 }
160
161 // Check for AutomatorWP 1.4.4
162 if( function_exists( 'automatorwp_utilities_pull_array_values' ) ) {
163 $form_fields = automatorwp_utilities_pull_array_values( $form_fields );
164 }
165
166 return $form_fields;
167
168 }
169
170 /**
171 * Custom tags replacements
172 *
173 * @since 1.0.0
174 *
175 * @param string $parsed_content Content parsed
176 * @param array $replacements Automation replacements
177 * @param int $automation_id The automation ID
178 * @param int $user_id The user ID
179 * @param string $content The content to parse
180 *
181 * @return string
182 */
183 function automatorwp_gravity_forms_parse_automation_tags( $parsed_content, $replacements, $automation_id, $user_id, $content ) {
184
185 $new_replacements = array();
186
187 // Get automation triggers to pass their tags
188 $triggers = automatorwp_get_automation_triggers( $automation_id );
189
190 foreach( $triggers as $trigger ) {
191
192 $trigger_args = automatorwp_get_trigger( $trigger->type );
193
194 // Skip if trigger is not from this integration
195 if( $trigger_args['integration'] !== 'gravity_forms' ) {
196 continue;
197 }
198
199 // Get the last trigger log (where data for tags replacement will be get
200 $log = automatorwp_get_user_last_completion( $trigger->id, $user_id, 'trigger' );
201
202 if( ! $log ) {
203 continue;
204 }
205
206 ct_setup_table( 'automatorwp_logs' );
207 $form_fields = ct_get_object_meta( $log->id, 'form_fields', true );
208 ct_reset_setup_table();
209
210 // Skip if not form fields
211 if( ! is_array( $form_fields ) ) {
212 continue;
213 }
214
215 // Look for form field tags
216 preg_match_all( "/\{t:" . $trigger->id . ":form_field:\s*(.*?)\s*\}/", $parsed_content, $matches );
217
218 if( is_array( $matches ) && isset( $matches[1] ) ) {
219
220 foreach( $matches[1] as $field_name ) {
221 // Replace {t:ID:form_field:NAME} by the field value
222 if( isset( $form_fields[$field_name] ) ) {
223 $new_replacements['{t:' . $trigger->id . ':form_field:' . $field_name . '}'] = $form_fields[$field_name];
224 }
225 }
226
227 }
228
229 // Look for form field tags
230 preg_match_all( "/\{" . $trigger->id . ":form_field:\s*(.*?)\s*\}/", $parsed_content, $matches );
231
232 if( is_array( $matches ) && isset( $matches[1] ) ) {
233
234 foreach( $matches[1] as $field_name ) {
235 // Replace {ID:form_field:NAME} by the field value
236 if( isset( $form_fields[$field_name] ) ) {
237 $new_replacements['{' . $trigger->id . ':form_field:' . $field_name . '}'] = $form_fields[$field_name];
238 }
239 }
240
241 }
242
243 }
244
245 if( count( $new_replacements ) ) {
246
247 $tags = array_keys( $new_replacements );
248
249 // Replace all tags by their replacements
250 $parsed_content = str_replace( $tags, $new_replacements, $parsed_content );
251
252 }
253
254 return $parsed_content;
255
256 }
257 add_filter( 'automatorwp_parse_automation_tags', 'automatorwp_gravity_forms_parse_automation_tags', 10, 5 );