PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.29
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.29
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
formidable / classes / controllers / FrmHooksController.php

FrmHooksController.php in Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More 6.29, at classes/controllers/FrmHooksController.php

368 lines 15.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if ( ! defined( 'ABSPATH' ) ) {
3 die( 'You are not allowed to call this page directly.' );
4 }
5
6 class FrmHooksController {
7
8 /**
9 * Trigger plugin-wide hook loading
10 *
11 * @param string $hooks
12 *
13 * @return void
14 */
15 public static function trigger_load_hook( $hooks = 'load_hooks' ) {
16 $controllers = apply_filters( 'frm_load_controllers', array( 'FrmHooksController' ) );
17 $trigger_hooks = $hooks;
18 $hooks = (array) $hooks;
19
20 if ( 'load_hooks' === $trigger_hooks ) {
21 if ( is_admin() ) {
22 $hooks[] = 'load_admin_hooks';
23
24 if ( defined( 'DOING_AJAX' ) ) {
25 $hooks[] = 'load_ajax_hooks';
26 $hooks[] = 'load_form_hooks';
27 }
28 }
29
30 if ( is_multisite() ) {
31 $hooks[] = 'load_multisite_hooks';
32 }
33 } else {
34 // Make sure the hooks are only triggered once.
35 add_filter( 'frm' . str_replace( 'load', '', $trigger_hooks ) . '_loaded', '__return_true' );
36 }
37 unset( $trigger_hooks );
38
39 // Instantiate Controllers.
40 foreach ( $controllers as $c ) {
41 foreach ( $hooks as $hook ) {
42 if ( is_callable( array( $c, $hook ) ) ) {
43 call_user_func( array( $c, $hook ) );
44 }
45 unset( $hook );
46 }
47 unset( $c );
48 }
49 }
50
51 /**
52 * @return void
53 */
54 public static function trigger_load_form_hooks() {
55 self::trigger_load_hook( 'load_form_hooks' );
56 }
57
58 /**
59 * @return void
60 */
61 public static function load_hooks() {
62 // Use 0 so this gets triggered before FrmFormActionsController::register_post_types.
63 add_action( 'init', 'FrmAppController::load_lang', 0 );
64
65 add_action( 'rest_api_init', 'FrmAppController::create_rest_routes', 0 );
66 add_filter( 'widget_text', 'do_shortcode' );
67
68 // Entries controller.
69 add_action( 'wp_loaded', 'FrmEntriesController::process_entry', 10, 0 );
70 add_action( 'frm_after_entry_processed', 'FrmEntriesController::delete_entry_after_save', 100 );
71
72 // Form Actions Controller.
73 add_action( 'init', 'FrmFormActionsController::register_post_types', 1 );
74 add_action( 'frm_after_create_entry', 'FrmFormActionsController::trigger_create_actions', 20, 3 );
75 add_filter( 'pre_wpml_is_translated_post_type', 'FrmFormActionsController::prevent_wpml_translations', 10, 2 );
76
77 // Forms Controller.
78 add_action( 'widgets_init', 'FrmFormsController::register_widgets' );
79 add_action( 'init', 'FrmFormsController::front_head' );
80 add_filter( 'frm_content', 'FrmFormsController::filter_content', 10, 3 );
81 add_filter( 'frm_replace_content_shortcodes', 'FrmFormsController::replace_content_shortcodes', 20, 3 );
82 add_action( 'admin_bar_init', 'FrmFormsController::admin_bar_css' );
83 add_action( 'wp_footer', 'FrmFormsController::footer_js', 1, 0 );
84 add_action( 'wp_footer', 'FrmHoneypot::maybe_print_honeypot_js', 99 );
85
86 add_action( 'wp_scheduled_delete', 'FrmForm::scheduled_delete' );
87
88 // Form Shortcodes.
89 add_shortcode( 'formidable', 'FrmFormsController::get_form_shortcode' );
90
91 // Styles Controller.
92 add_action( 'init', 'FrmStylesController::register_post_types', 0 );
93 add_filter( 'frm_get_style_opts', 'FrmStylesController::get_style_opts' );
94 add_filter( 'frm_add_form_style_class', 'FrmStylesController::get_form_style_class', 10, 2 );
95 add_filter( 'frm_show_entry_styles', 'FrmStylesController::show_entry_styles' );
96
97 // Simple Blocks Controller.
98 add_action( 'init', 'FrmSimpleBlocksController::register_simple_form_block' );
99
100 add_filter( 'cron_schedules', 'FrmUsageController::add_schedules' );
101 add_action( 'formidable_send_usage', 'FrmUsageController::send_snapshot' );
102
103 /**
104 * Make name field work with View.
105 * FrmProContent::replace_single_shortcode() applies this filter like 'frm_keep_' . $field->type . '_value_array'
106 */
107 add_filter( 'frm_keep_name_value_array', '__return_true' );
108
109 // Elementor.
110 add_action( 'elementor/widgets/register', 'FrmElementorController::register_elementor_hooks' );
111
112 // Summary emails.
113 add_action( 'frm_daily_event', 'FrmEmailSummaryController::maybe_send_emails' );
114
115 FrmTransLiteHooksController::load_hooks();
116 FrmStrpLiteHooksController::load_hooks();
117 FrmSquareLiteHooksController::load_hooks();
118
119 // GDPR
120 add_filter( 'frm_is_field_required', 'FrmFieldGdpr::force_required_field', 10, 2 );
121 }
122
123 /**
124 * @return void
125 */
126 public static function load_admin_hooks() {
127 add_action( 'admin_menu', 'FrmAppController::menu', 1 );
128 add_filter( 'admin_body_class', 'FrmAppController::add_admin_class', 999 );
129 add_action( 'admin_notices', 'FrmAppController::pro_get_started_headline' );
130 add_action( 'admin_init', 'FrmAppController::admin_init', 11 );
131 add_action( 'admin_enqueue_scripts', 'FrmAppController::admin_enqueue_scripts' );
132 add_filter( 'plugin_action_links_' . FrmAppHelper::plugin_folder() . '/formidable.php', 'FrmAppController::settings_link' );
133 add_filter( 'admin_footer_text', 'FrmAppController::set_footer_text' );
134 add_action( 'admin_footer', 'FrmAppController::add_admin_footer_links' );
135 add_action( 'current_screen', 'FrmAppController::handle_current_screen' );
136
137 // Entries Controller.
138 add_action( 'admin_menu', 'FrmEntriesController::menu', 12 );
139 add_filter( 'set-screen-option', 'FrmEntriesController::save_per_page', 10, 3 );
140 add_filter( 'update_user_metadata', 'FrmEntriesController::check_hidden_cols', 10, 5 );
141 add_action( 'updated_user_meta', 'FrmEntriesController::update_hidden_cols', 10, 4 );
142
143 // Form Actions Controller.
144 if ( FrmAppHelper::is_admin_page( 'formidable' ) ) {
145 add_action( 'frm_before_update_form_settings', 'FrmFormActionsController::update_settings' );
146 }
147
148 add_action( 'frm_after_duplicate_form', 'FrmFormActionsController::duplicate_form_actions', 20, 3 );
149
150 // Fields Model.
151 add_filter( 'frm_pro_available_fields', 'FrmField::show_update_for_pro_fields' );
152
153 // Forms Controller.
154 add_action( 'admin_menu', 'FrmFormsController::menu', 10 );
155 add_action( 'admin_head-toplevel_page_formidable', 'FrmFormsController::head' );
156 add_action( 'frm_after_field_options', 'FrmFormsController::logic_tip' );
157 add_filter( 'frm_fields_in_form_builder', 'FrmFormsController::update_form_builder_fields' );
158
159 add_filter( 'set-screen-option', 'FrmFormsController::save_per_page', 10, 3 );
160 add_action( 'admin_footer', 'FrmFormsController::insert_form_popup' );
161
162 // Elementor.
163 add_action( 'elementor/editor/footer', 'FrmElementorController::admin_init' );
164
165 add_action( 'media_buttons', 'FrmFormsController::insert_form_button' );
166 add_action( 'et_pb_admin_excluded_shortcodes', 'FrmFormsController::prevent_divi_conflict' );
167
168 // Forms Model.
169 add_action( 'frm_after_duplicate_form', 'FrmForm::after_duplicate', 10, 2 );
170
171 // Settings Controller.
172 add_action( 'admin_menu', 'FrmSettingsController::menu', 45 );
173 add_action( 'frm_before_settings', 'FrmSettingsController::license_box' );
174 add_action( 'frm_after_settings_tabs', 'FrmSettingsController::settings_cta' );
175
176 // Styles Controller.
177 add_action( 'admin_menu', 'FrmStylesController::menu', 14 );
178 add_action( 'plugins_loaded', 'FrmStylesController::plugins_loaded' );
179 add_action( 'admin_init', 'FrmStylesController::admin_init' );
180 // Use 11 so it happens after add_action( 'wp_default_styles', 'wp_default_styles' ); where edit.css is added.
181 add_action( 'wp_default_styles', 'FrmStylesController::disable_conflicting_wp_admin_css', 11 );
182
183 // XML Controller.
184 add_action( 'admin_menu', 'FrmXMLController::menu', 41 );
185
186 // Simple Blocks Controller.
187 add_action( 'enqueue_block_editor_assets', 'FrmSimpleBlocksController::block_editor_assets' );
188 add_action( 'enqueue_block_assets', 'FrmSimpleBlocksController::block_assets' );
189
190 add_action( 'admin_init', 'FrmUsageController::schedule_send' );
191
192 // Applications Controller.
193 // Use the same priority as styles so Applications appear directly under Styles.
194 add_action( 'admin_menu', 'FrmApplicationsController::menu', 14 );
195 add_action( 'admin_enqueue_scripts', 'FrmApplicationsController::dequeue_scripts', 15 );
196
197 // CAPTCHA
198 add_filter( 'frm_setup_edit_field_vars', 'FrmFieldCaptcha::update_field_name' );
199
200 // From Templates.
201 FrmFormTemplatesController::load_admin_hooks();
202
203 // Cronjob.
204 add_action( 'admin_init', 'FrmCronController::schedule_events' );
205
206 // Cross sell.
207 add_action( 'admin_menu', 'FrmSalesApi::menu', 1000 );
208
209 // Deactivation feedback.
210 add_action( 'admin_enqueue_scripts', 'FrmDeactivationFeedbackController::enqueue_assets' );
211 add_action( 'admin_footer', 'FrmDeactivationFeedbackController::footer_html' );
212 add_action( 'deactivated_plugin', 'FrmDeactivationFeedbackController::set_feedback_expired_date' );
213
214 add_action( 'frm_email_styles_extra_settings', 'FrmEmailStylesController::show_upsell_settings' );
215
216 add_action( 'admin_init', 'FrmWelcomeTourController::admin_init' );
217
218 FrmDashboardController::load_admin_hooks();
219 FrmTransLiteHooksController::load_admin_hooks();
220 FrmStrpLiteHooksController::load_admin_hooks();
221 FrmSquareLiteHooksController::load_admin_hooks();
222 FrmSMTPController::load_hooks();
223 FrmOnboardingWizardController::load_admin_hooks();
224 FrmAddonsController::load_admin_hooks();
225 new FrmPluginSearch();
226 }
227
228 /**
229 * @return void
230 */
231 public static function load_ajax_hooks() {
232 add_action( 'wp_ajax_frm_install', 'FrmAppController::ajax_install' );
233 add_action( 'wp_ajax_frm_uninstall', 'FrmAppController::uninstall' );
234 add_action( 'wp_ajax_frm_deauthorize', 'FrmAppController::deauthorize' );
235
236 // Onboarding Wizard Controller.
237 add_action( 'wp_ajax_frm_onboarding_consent_tracking', 'FrmOnboardingWizardController::ajax_consent_tracking' );
238 add_action( 'wp_ajax_frm_onboarding_setup_usage_data', 'FrmOnboardingWizardController::setup_usage_data' );
239
240 // Addons.
241 add_action( 'wp_ajax_frm_addon_activate', 'FrmAddon::activate' );
242 add_action( 'wp_ajax_frm_addon_deactivate', 'FrmAddon::deactivate' );
243 add_action( 'wp_ajax_frm_activate_addon', 'FrmAddonsController::ajax_activate_addon' );
244 add_action( 'wp_ajax_frm_deactivate_addon', 'FrmAddonsController::ajax_deactivate_addon' );
245 add_action( 'wp_ajax_frm_install_addon', 'FrmAddonsController::ajax_install_addon' );
246 add_action( 'wp_ajax_frm_uninstall_addon', 'FrmAddonsController::ajax_uninstall_addon' );
247 // Plugin.
248 add_action( 'wp_ajax_frm_install_plugin', 'FrmInstallPlugin::ajax_install_plugin' );
249 add_action( 'wp_ajax_frm_check_plugin_activation', 'FrmInstallPlugin::ajax_check_plugin_activation' );
250
251 // Fields Controller.
252 add_action( 'wp_ajax_frm_load_field', 'FrmFieldsController::load_field' );
253 add_action( 'wp_ajax_frm_insert_field', 'FrmFieldsController::create' );
254 add_action( 'wp_ajax_frm_duplicate_field', 'FrmFieldsController::duplicate' );
255 add_action( 'wp_ajax_frm_delete_field', 'FrmFieldsController::destroy' );
256 add_action( 'wp_ajax_frm_import_options', 'FrmFieldsController::import_options' );
257
258 // Form Actions Controller.
259 add_action( 'wp_ajax_frm_add_form_action', 'FrmFormActionsController::add_form_action' );
260 add_action( 'wp_ajax_frm_form_action_fill', 'FrmFormActionsController::fill_action' );
261
262 // Forms Controller.
263 add_action( 'wp_ajax_frm_save_form', 'FrmFormsController::route' );
264 add_action( 'wp_ajax_frm_rename_form', 'FrmFormsController::rename_form' );
265 add_action( 'wp_ajax_frm_get_default_html', 'FrmFormsController::get_email_html' );
266 add_action( 'wp_ajax_frm_get_shortcode_opts', 'FrmFormsController::get_shortcode_opts' );
267 add_action( 'wp_ajax_frm_forms_preview', 'FrmFormsController::preview' );
268 add_action( 'wp_ajax_nopriv_frm_forms_preview', 'FrmFormsController::preview' );
269 add_action( 'wp_ajax_frm_forms_trash', 'FrmFormsController::ajax_trash' );
270 add_action( 'wp_ajax_frm_install_form', 'FrmFormsController::build_new_form' );
271 add_action( 'wp_ajax_frm_create_page_with_shortcode', 'FrmFormsController::create_page_with_shortcode' );
272 add_action( 'wp_ajax_get_page_dropdown', 'FrmFormsController::get_page_dropdown' );
273
274 add_action( 'wp_ajax_frm_dismiss_migrator', 'FrmFormMigratorsHelper::dismiss_migrator' );
275
276 // Form Templates Controller.
277 add_action( 'wp_ajax_frm_add_or_remove_favorite_template', 'FrmFormTemplatesController::ajax_add_or_remove_favorite' );
278 add_action( 'wp_ajax_frm_create_template', 'FrmFormTemplatesController::ajax_create_template' );
279 add_action( 'wp_ajax_frm_get_free_templates', 'FrmFormTemplatesController::ajax_get_free_templates' );
280
281 // Inbox.
282 add_action( 'wp_ajax_frm_inbox_dismiss', 'FrmInboxController::dismiss_message' );
283
284 // Settings.
285 add_action( 'wp_ajax_frm_lite_settings_upgrade', 'FrmSettingsController::settings_cta_dismiss' );
286 add_action( 'wp_ajax_frm_settings_tab', 'FrmSettingsController::load_settings_tab' );
287 add_action( 'wp_ajax_frm_page_search', 'FrmSettingsController::page_search' );
288
289 // Styles Controller.
290 add_action( 'wp_ajax_frm_settings_reset', 'FrmStylesController::reset_styling' );
291 add_action( 'wp_ajax_frm_change_styling', 'FrmStylesController::change_styling' );
292 add_action( 'wp_ajax_frmpro_load_css', 'FrmStylesController::load_css' );
293 add_action( 'wp_ajax_nopriv_frmpro_load_css', 'FrmStylesController::load_css' );
294 add_action( 'wp_ajax_frmpro_css', 'FrmStylesController::load_saved_css' );
295 add_action( 'wp_ajax_nopriv_frmpro_css', 'FrmStylesController::load_saved_css' );
296 add_action( 'wp_ajax_frm_rename_style', 'FrmStylesController::rename_style' );
297
298 // XML Controller.
299 add_action( 'wp_ajax_frm_install_template', 'FrmXMLController::install_template' );
300 add_action( 'wp_ajax_frm_entries_csv', 'FrmXMLController::csv' );
301 add_action( 'wp_ajax_nopriv_frm_entries_csv', 'FrmXMLController::csv' );
302 add_action( 'wp_ajax_frm_export_xml', 'FrmXMLController::export_xml' );
303
304 // Dashboard Controller.
305 add_action( 'wp_ajax_dashboard_ajax_action', 'FrmDashboardController::ajax_requests' );
306
307 // Submit with AJAX.
308 // Trigger before process_entry.
309 add_action( 'wp_loaded', 'FrmEntriesAJAXSubmitController::ajax_create', 5 );
310
311 // Track the flows usage data.
312 add_action( 'wp_ajax_frm_track_flows', 'FrmUsageController::ajax_track_flows' );
313
314 // Applications.
315 add_action( 'wp_ajax_frm_get_applications_data', 'FrmApplicationsController::get_applications_data' );
316
317 // Reviews.
318 add_action( 'wp_ajax_frm_dismiss_review', 'FrmAppController::dismiss_review' );
319 add_action( 'wp_ajax_frm_small_screen_proceed', 'FrmAppController::small_screen_proceed' );
320 add_action( 'wp_ajax_frm_sale_banner_dismiss', 'FrmSalesApi::dismiss_banner' );
321
322 add_action( 'wp_ajax_frm_email_style_preview', 'FrmEmailStylesController::ajax_preview' );
323 add_action( 'wp_ajax_frm_send_test_email', 'FrmEmailStylesController::ajax_send_test_email' );
324
325 // Welcome Tour.
326 add_action( 'wp_ajax_frm_mark_checklist_step_as_completed', 'FrmWelcomeTourController::ajax_mark_checklist_step_as_completed' );
327 add_action( 'wp_ajax_frm_dismiss_welcome_tour', 'FrmWelcomeTourController::ajax_dismiss_welcome_tour' );
328 }
329
330 /**
331 * @return void
332 */
333 public static function load_form_hooks() {
334 // Fields Controller.
335 add_filter( 'frm_field_type', 'FrmFieldsController::change_type' );
336 add_action( 'frm_field_input_html', 'FrmFieldsController::input_html' );
337 add_filter( 'frm_field_value_saved', 'FrmFieldsController::check_value', 50, 3 );
338 add_filter( 'frm_field_label_seen', 'FrmFieldsController::check_label' );
339
340 // Forms Controller.
341 add_action( 'frm_form_classes', 'FrmFormsController::form_classes' );
342 add_filter( 'frm_submit_button_class', 'FrmFormsController::update_button_classes' );
343 add_filter( 'frm_back_button_class', 'FrmFormsController::update_button_classes' );
344
345 add_filter( 'frm_pre_display_form', 'FrmSubmitHelper::copy_submit_field_settings_to_form' );
346
347 // Styles Controller.
348 add_filter( 'frm_use_important_width', 'FrmStylesController::important_style', 10, 2 );
349 }
350
351 /**
352 * @return void
353 */
354 public static function load_view_hooks() {
355 // Hooks go here when a view is loaded.
356 }
357
358 /**
359 * @return void
360 */
361 public static function load_multisite_hooks() {
362 add_action( 'wpmu_upgrade_site', 'FrmAppController::network_upgrade_site' );
363
364 // Drop tables when mu site is deleted.
365 add_filter( 'wpmu_drop_tables', 'FrmAppController::drop_tables' );
366 }
367 }
368