PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / trunk
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More vtrunk
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 trunk, at classes/controllers/FrmHooksController.php

389 lines 17.3 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 // Clear embed posts transient when posts are updated.
89 add_action( 'wp_insert_post', 'FrmFormsListHelper::maybe_clear_embed_posts_transient', 10, 3 );
90 add_action( 'post_updated', 'FrmFormsListHelper::maybe_clear_embed_posts_transient_on_update', 10, 3 );
91 add_action( 'trashed_post', 'FrmFormsListHelper::clear_embed_posts_transient_for_post' );
92 add_action( 'untrashed_post', 'FrmFormsListHelper::clear_embed_posts_transient_for_post' );
93 add_action( 'deleted_post', 'FrmFormsListHelper::clear_embed_posts_transient_for_post', 10, 2 );
94
95 // Form Shortcodes.
96 add_shortcode( 'formidable', 'FrmFormsController::get_form_shortcode' );
97
98 // Styles Controller.
99 add_action( 'init', 'FrmStylesController::register_post_types', 0 );
100 add_filter( 'frm_get_style_opts', 'FrmStylesController::get_style_opts' );
101 add_filter( 'frm_add_form_style_class', 'FrmStylesController::get_form_style_class', 10, 2 );
102 add_filter( 'frm_show_entry_styles', 'FrmStylesController::show_entry_styles' );
103
104 // Simple Blocks Controller.
105 add_action( 'init', 'FrmSimpleBlocksController::register_simple_form_block' );
106
107 add_action( 'formidable_send_usage', 'FrmUsageController::send_snapshot' );
108
109 /**
110 * Make name field work with View.
111 * FrmProContent::replace_single_shortcode() applies this filter like 'frm_keep_' . $field->type . '_value_array'
112 */
113 add_filter( 'frm_keep_name_value_array', '__return_true' );
114
115 // Elementor.
116 add_action( 'elementor/widgets/register', 'FrmElementorController::register_elementor_hooks' );
117
118 // Summary emails.
119 add_action( 'frm_daily_event', 'FrmEmailSummaryController::maybe_send_emails' );
120
121 // Gated Content — daily cleanup of expired tokens.
122 add_action( 'frm_daily_event', 'FrmGatedTokenHelper::cleanup_expired' );
123
124 // Gated Content Controller.
125 add_action( 'frm_trigger_gated_content_action', 'FrmGatedContentController::trigger', 10, 4 );
126 // pre_get_posts: allows private posts into the query when a valid token is present.
127 add_action( 'pre_get_posts', 'FrmGatedContentController::maybe_include_private_posts' );
128 // 'wp' fires after WP::query_posts() so get_queried_object_id() is available.
129 add_action( 'wp', 'FrmGatedContentController::maybe_unlock_post' );
130 add_action( 'save_post_frm_form_actions', 'FrmGatedContentController::on_action_updated', 10, 3 );
131 add_action( 'before_delete_post', 'FrmGatedContentController::on_action_deleted', 10, 2 );
132 add_shortcode( 'frm_gated_content', 'FrmGatedContentShortcodeController::shortcode' );
133 add_filter( 'frm_helper_shortcodes', 'FrmGatedContentController::add_shortcode_helper', 10, 3 );
134
135 FrmTransLiteHooksController::load_hooks();
136 FrmStrpLiteHooksController::load_hooks();
137 FrmSquareLiteHooksController::load_hooks();
138 FrmPayPalLiteHooksController::load_hooks();
139
140 // GDPR
141 add_filter( 'frm_is_field_required', 'FrmFieldGdpr::force_required_field', 10, 2 );
142 }
143
144 /**
145 * @return void
146 */
147 public static function load_admin_hooks() {
148 add_action( 'admin_menu', 'FrmAppController::menu', 1 );
149 add_filter( 'admin_body_class', 'FrmAppController::add_admin_class', 999 );
150 add_action( 'admin_notices', 'FrmAppController::pro_get_started_headline' );
151 add_action( 'admin_init', 'FrmAppController::admin_init', 11 );
152 add_action( 'admin_enqueue_scripts', 'FrmAppController::admin_enqueue_scripts' );
153 add_filter( 'plugin_action_links_' . FrmAppHelper::plugin_folder() . '/formidable.php', 'FrmAppController::settings_link' );
154 add_filter( 'admin_footer_text', 'FrmAppController::set_footer_text' );
155 add_action( 'admin_footer', 'FrmAppController::add_admin_footer_links' );
156 add_action( 'current_screen', 'FrmAppController::handle_current_screen' );
157
158 // Entries Controller.
159 add_action( 'admin_menu', 'FrmEntriesController::menu', 12 );
160 add_filter( 'set-screen-option', 'FrmEntriesController::save_per_page', 10, 3 );
161 add_filter( 'update_user_metadata', 'FrmEntriesController::check_hidden_cols', 10, 5 );
162 add_action( 'updated_user_meta', 'FrmEntriesController::update_hidden_cols', 10, 4 );
163
164 // Form Actions Controller.
165 if ( FrmAppHelper::is_admin_page( 'formidable' ) ) {
166 add_action( 'frm_before_update_form_settings', 'FrmFormActionsController::update_settings' );
167 }
168
169 add_action( 'frm_after_duplicate_form', 'FrmFormActionsController::duplicate_form_actions', 20, 3 );
170
171 // Fields Model.
172 add_filter( 'frm_pro_available_fields', 'FrmField::show_update_for_pro_fields' );
173
174 // Forms Controller.
175 add_action( 'admin_menu', 'FrmFormsController::menu', 10 );
176 add_action( 'admin_head-toplevel_page_formidable', 'FrmFormsController::head' );
177 add_action( 'frm_after_field_options', 'FrmFormsController::logic_tip' );
178 add_action( 'frm_field_code_tab', 'FrmFormsController::field_part_shortcodes' );
179 add_filter( 'frm_fields_in_form_builder', 'FrmFormsController::update_form_builder_fields' );
180
181 add_filter( 'set-screen-option', 'FrmFormsController::save_per_page', 10, 3 );
182 add_action( 'admin_footer', 'FrmFormsController::insert_form_popup' );
183 add_action( 'admin_footer', 'FrmFormsController::print_forms_list_templates' );
184
185 // Elementor.
186 add_action( 'elementor/editor/footer', 'FrmElementorController::admin_init' );
187
188 add_action( 'media_buttons', 'FrmFormsController::insert_form_button' );
189 add_action( 'et_pb_admin_excluded_shortcodes', 'FrmFormsController::prevent_divi_conflict' );
190
191 // Forms Model.
192 add_action( 'frm_after_duplicate_form', 'FrmForm::after_duplicate', 10, 2 );
193
194 // Settings Controller.
195 add_action( 'admin_menu', 'FrmSettingsController::menu', 45 );
196 add_action( 'frm_before_settings', 'FrmSettingsController::license_box' );
197 add_action( 'frm_after_settings_tabs', 'FrmSettingsController::settings_cta' );
198
199 // Styles Controller.
200 add_action( 'admin_menu', 'FrmStylesController::menu', 14 );
201 add_action( 'plugins_loaded', 'FrmStylesController::plugins_loaded' );
202 add_action( 'admin_init', 'FrmStylesController::admin_init' );
203 // Use 11 so it happens after add_action( 'wp_default_styles', 'wp_default_styles' ); where edit.css is added.
204 add_action( 'wp_default_styles', 'FrmStylesController::disable_conflicting_wp_admin_css', 11 );
205
206 // XML Controller.
207 add_action( 'admin_menu', 'FrmXMLController::menu', 41 );
208
209 // Simple Blocks Controller.
210 add_action( 'enqueue_block_editor_assets', 'FrmSimpleBlocksController::block_editor_assets' );
211 add_action( 'enqueue_block_assets', 'FrmSimpleBlocksController::block_assets' );
212
213 add_action( 'admin_init', 'FrmUsageController::schedule_send' );
214
215 // Applications Controller.
216 // Use the same priority as styles so Applications appear directly under Styles.
217 add_action( 'admin_menu', 'FrmApplicationsController::menu', 14 );
218 add_action( 'admin_enqueue_scripts', 'FrmApplicationsController::dequeue_scripts', 15 );
219
220 // CAPTCHA
221 add_filter( 'frm_setup_edit_field_vars', 'FrmFieldCaptcha::update_field_name' );
222
223 // From Templates.
224 FrmFormTemplatesController::load_admin_hooks();
225
226 // Cronjob.
227 add_action( 'admin_init', 'FrmCronController::schedule_events' );
228
229 // Deactivation feedback.
230 add_action( 'admin_enqueue_scripts', 'FrmDeactivationFeedbackController::enqueue_assets' );
231 add_action( 'admin_footer', 'FrmDeactivationFeedbackController::footer_html' );
232 add_action( 'deactivated_plugin', 'FrmDeactivationFeedbackController::set_feedback_expired_date' );
233
234 add_action( 'frm_email_styles_extra_settings', 'FrmEmailStylesController::show_upsell_settings' );
235
236 add_action( 'admin_init', 'FrmWelcomeTourController::admin_init' );
237
238 FrmDashboardController::load_admin_hooks();
239 FrmTransLiteHooksController::load_admin_hooks();
240 FrmStrpLiteHooksController::load_admin_hooks();
241 FrmSquareLiteHooksController::load_admin_hooks();
242 FrmPayPalLiteHooksController::load_admin_hooks();
243 FrmSMTPController::load_hooks();
244 FrmOnboardingWizardController::load_admin_hooks();
245 FrmAddonsController::load_admin_hooks();
246 new FrmPluginSearch();
247 }
248
249 /**
250 * @return void
251 */
252 public static function load_ajax_hooks() {
253 add_action( 'wp_ajax_frm_install', 'FrmAppController::ajax_install' );
254 add_action( 'wp_ajax_frm_uninstall', 'FrmAppController::uninstall' );
255 add_action( 'wp_ajax_frm_deauthorize', 'FrmAppController::deauthorize' );
256
257 // Onboarding Wizard Controller.
258 add_action( 'wp_ajax_frm_onboarding_consent_tracking', 'FrmOnboardingWizardController::ajax_consent_tracking' );
259 add_action( 'wp_ajax_frm_onboarding_setup_usage_data', 'FrmOnboardingWizardController::setup_usage_data' );
260
261 // Addons.
262 add_action( 'wp_ajax_frm_addon_activate', 'FrmAddon::activate' );
263 add_action( 'wp_ajax_frm_addon_deactivate', 'FrmAddon::deactivate' );
264 add_action( 'wp_ajax_frm_activate_addon', 'FrmAddonsController::ajax_activate_addon' );
265 add_action( 'wp_ajax_frm_deactivate_addon', 'FrmAddonsController::ajax_deactivate_addon' );
266 add_action( 'wp_ajax_frm_install_addon', 'FrmAddonsController::ajax_install_addon' );
267 add_action( 'wp_ajax_frm_uninstall_addon', 'FrmAddonsController::ajax_uninstall_addon' );
268 // Plugin.
269 add_action( 'wp_ajax_frm_install_plugin', 'FrmInstallPlugin::ajax_install_plugin' );
270 add_action( 'wp_ajax_frm_check_plugin_activation', 'FrmInstallPlugin::ajax_check_plugin_activation' );
271
272 // Fields Controller.
273 add_action( 'wp_ajax_frm_load_field', 'FrmFieldsController::load_field' );
274 add_action( 'wp_ajax_frm_insert_field', 'FrmFieldsController::create' );
275 add_action( 'wp_ajax_frm_duplicate_field', 'FrmFieldsController::duplicate' );
276 add_action( 'wp_ajax_frm_delete_field', 'FrmFieldsController::destroy' );
277 add_action( 'wp_ajax_frm_import_options', 'FrmFieldsController::import_options' );
278
279 // Form Actions Controller.
280 add_action( 'wp_ajax_frm_add_form_action', 'FrmFormActionsController::add_form_action' );
281 add_action( 'wp_ajax_frm_form_action_fill', 'FrmFormActionsController::fill_action' );
282
283 // Forms Controller.
284 add_action( 'wp_ajax_frm_save_form', 'FrmFormsController::route' );
285 add_action( 'wp_ajax_frm_rename_form', 'FrmFormsController::rename_form' );
286 add_action( 'wp_ajax_frm_get_default_html', 'FrmFormsController::get_email_html' );
287 add_action( 'wp_ajax_frm_get_shortcode_opts', 'FrmFormsController::get_shortcode_opts' );
288 add_action( 'wp_ajax_frm_forms_preview', 'FrmFormsController::preview' );
289 add_action( 'wp_ajax_nopriv_frm_forms_preview', 'FrmFormsController::preview' );
290 add_action( 'wp_ajax_frm_forms_trash', 'FrmFormsController::ajax_trash' );
291 add_action( 'wp_ajax_frm_install_form', 'FrmFormsController::build_new_form' );
292 add_action( 'wp_ajax_frm_create_page_with_shortcode', 'FrmFormsController::create_page_with_shortcode' );
293 add_action( 'wp_ajax_get_page_dropdown', 'FrmFormsController::get_page_dropdown' );
294
295 add_action( 'wp_ajax_frm_dismiss_migrator', 'FrmFormMigratorsHelper::dismiss_migrator' );
296
297 // Form Templates Controller.
298 add_action( 'wp_ajax_frm_add_or_remove_favorite_template', 'FrmFormTemplatesController::ajax_add_or_remove_favorite' );
299 add_action( 'wp_ajax_frm_create_template', 'FrmFormTemplatesController::ajax_create_template' );
300 add_action( 'wp_ajax_frm_get_free_templates', 'FrmFormTemplatesController::ajax_get_free_templates' );
301
302 // Inbox.
303 add_action( 'wp_ajax_frm_inbox_dismiss', 'FrmInboxController::dismiss_message' );
304
305 // Settings.
306 add_action( 'wp_ajax_frm_lite_settings_upgrade', 'FrmSettingsController::settings_cta_dismiss' );
307 add_action( 'wp_ajax_frm_settings_tab', 'FrmSettingsController::load_settings_tab' );
308 add_action( 'wp_ajax_frm_page_search', 'FrmSettingsController::page_search' );
309
310 // Styles Controller.
311 add_action( 'wp_ajax_frm_settings_reset', 'FrmStylesController::reset_styling' );
312 add_action( 'wp_ajax_frm_change_styling', 'FrmStylesController::change_styling' );
313 add_action( 'wp_ajax_frmpro_load_css', 'FrmStylesController::load_css' );
314 add_action( 'wp_ajax_nopriv_frmpro_load_css', 'FrmStylesController::load_css' );
315 add_action( 'wp_ajax_frmpro_css', 'FrmStylesController::load_saved_css' );
316 add_action( 'wp_ajax_nopriv_frmpro_css', 'FrmStylesController::load_saved_css' );
317 add_action( 'wp_ajax_frm_rename_style', 'FrmStylesController::rename_style' );
318
319 // XML Controller.
320 add_action( 'wp_ajax_frm_install_template', 'FrmXMLController::install_template' );
321 add_action( 'wp_ajax_frm_entries_csv', 'FrmXMLController::csv' );
322 add_action( 'wp_ajax_nopriv_frm_entries_csv', 'FrmXMLController::csv' );
323 add_action( 'wp_ajax_frm_export_xml', 'FrmXMLController::export_xml' );
324
325 // Dashboard Controller.
326 add_action( 'wp_ajax_dashboard_ajax_action', 'FrmDashboardController::ajax_requests' );
327
328 // Submit with AJAX.
329 // Trigger before process_entry.
330 add_action( 'wp_loaded', 'FrmEntriesAJAXSubmitController::ajax_create', 5 );
331
332 // Track the flows usage data.
333 add_action( 'wp_ajax_frm_track_flows', 'FrmUsageController::ajax_track_flows' );
334
335 // Applications.
336 add_action( 'wp_ajax_frm_get_applications_data', 'FrmApplicationsController::get_applications_data' );
337
338 // Reviews.
339 add_action( 'wp_ajax_frm_dismiss_review', 'FrmAppController::dismiss_review' );
340 add_action( 'wp_ajax_frm_small_screen_proceed', 'FrmAppController::small_screen_proceed' );
341 add_action( 'wp_ajax_frm_sale_banner_dismiss', 'FrmSalesApi::dismiss_banner' );
342
343 add_action( 'wp_ajax_frm_email_style_preview', 'FrmEmailStylesController::ajax_preview' );
344 add_action( 'wp_ajax_frm_send_test_email', 'FrmEmailStylesController::ajax_send_test_email' );
345
346 // Welcome Tour.
347 add_action( 'wp_ajax_frm_mark_checklist_step_as_completed', 'FrmWelcomeTourController::ajax_mark_checklist_step_as_completed' );
348 add_action( 'wp_ajax_frm_dismiss_welcome_tour', 'FrmWelcomeTourController::ajax_dismiss_welcome_tour' );
349 }
350
351 /**
352 * @return void
353 */
354 public static function load_form_hooks() {
355 // Fields Controller.
356 add_filter( 'frm_field_type', 'FrmFieldsController::change_type' );
357 add_action( 'frm_field_input_html', 'FrmFieldsController::input_html' );
358 add_filter( 'frm_field_value_saved', 'FrmFieldsController::check_value', 50, 3 );
359 add_filter( 'frm_field_label_seen', 'FrmFieldsController::check_label' );
360
361 // Forms Controller.
362 add_action( 'frm_form_classes', 'FrmFormsController::form_classes' );
363 add_filter( 'frm_submit_button_class', 'FrmFormsController::update_button_classes' );
364 add_filter( 'frm_back_button_class', 'FrmFormsController::update_button_classes' );
365
366 add_filter( 'frm_pre_display_form', 'FrmSubmitHelper::copy_submit_field_settings_to_form' );
367
368 // Styles Controller.
369 add_filter( 'frm_use_important_width', 'FrmStylesController::important_style', 10, 2 );
370 }
371
372 /**
373 * @return void
374 */
375 public static function load_view_hooks() {
376 // Hooks go here when a view is loaded.
377 }
378
379 /**
380 * @return void
381 */
382 public static function load_multisite_hooks() {
383 add_action( 'wpmu_upgrade_site', 'FrmAppController::network_upgrade_site' );
384
385 // Drop tables when mu site is deleted.
386 add_filter( 'wpmu_drop_tables', 'FrmAppController::drop_tables' );
387 }
388 }
389