| @@ -12,16 +12,16 @@ | ||
| 12 | 12 | * |
| 13 | 13 | * @return void |
| 14 | 14 | */ |
| 15 | 15 | public static function trigger_load_hook( $hooks = 'load_hooks' ) { |
| 16 | - $controllers = apply_filters( 'frm_load_controllers', array( 'FrmHooksController' ) ); | |
| 17 | - | |
| 16 | + $controllers = apply_filters( 'frm_load_controllers', array( 'FrmHooksController' ) ); | |
| 18 | 17 | $trigger_hooks = $hooks; |
| 19 | 18 | $hooks = (array) $hooks; |
| 20 | 19 | |
| 21 | - if ( 'load_hooks' == $trigger_hooks ) { | |
| 20 | + if ( 'load_hooks' === $trigger_hooks ) { | |
| 22 | 21 | if ( is_admin() ) { |
| 23 | 22 | $hooks[] = 'load_admin_hooks'; |
| 23 | + | |
| 24 | 24 | if ( defined( 'DOING_AJAX' ) ) { |
| 25 | 25 | $hooks[] = 'load_ajax_hooks'; |
| 26 | 26 | $hooks[] = 'load_form_hooks'; |
| 27 | 27 | } |
| @@ -84,8 +84,15 @@ | ||
| 84 | 84 | add_action( 'wp_footer', 'FrmHoneypot::maybe_print_honeypot_js', 99 ); |
| 85 | 85 | |
| 86 | 86 | add_action( 'wp_scheduled_delete', 'FrmForm::scheduled_delete' ); |
| 87 | 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 | + | |
| 88 | 95 | // Form Shortcodes. |
| 89 | 96 | add_shortcode( 'formidable', 'FrmFormsController::get_form_shortcode' ); |
| 90 | 97 | |
| 91 | 98 | // Styles Controller. |
| @@ -96,9 +103,8 @@ | ||
| 96 | 103 | |
| 97 | 104 | // Simple Blocks Controller. |
| 98 | 105 | add_action( 'init', 'FrmSimpleBlocksController::register_simple_form_block' ); |
| 99 | 106 | |
| 100 | - add_filter( 'cron_schedules', 'FrmUsageController::add_schedules' ); | |
| 101 | 107 | add_action( 'formidable_send_usage', 'FrmUsageController::send_snapshot' ); |
| 102 | 108 | |
| 103 | 109 | /** |
| 104 | 110 | * Make name field work with View. |
| @@ -111,11 +117,26 @@ | ||
| 111 | 117 | |
| 112 | 118 | // Summary emails. |
| 113 | 119 | add_action( 'frm_daily_event', 'FrmEmailSummaryController::maybe_send_emails' ); |
| 114 | 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 | + | |
| 115 | 135 | FrmTransLiteHooksController::load_hooks(); |
| 116 | 136 | FrmStrpLiteHooksController::load_hooks(); |
| 117 | 137 | FrmSquareLiteHooksController::load_hooks(); |
| 138 | + FrmPayPalLiteHooksController::load_hooks(); | |
| 118 | 139 | |
| 119 | 140 | // GDPR |
| 120 | 141 | add_filter( 'frm_is_field_required', 'FrmFieldGdpr::force_required_field', 10, 2 ); |
| 121 | 142 | } |
| @@ -146,16 +167,21 @@ | ||
| 146 | 167 | } |
| 147 | 168 | |
| 148 | 169 | add_action( 'frm_after_duplicate_form', 'FrmFormActionsController::duplicate_form_actions', 20, 3 ); |
| 149 | 170 | |
| 171 | + // Fields Model. | |
| 172 | + add_filter( 'frm_pro_available_fields', 'FrmField::show_update_for_pro_fields' ); | |
| 173 | + | |
| 150 | 174 | // Forms Controller. |
| 151 | 175 | add_action( 'admin_menu', 'FrmFormsController::menu', 10 ); |
| 152 | 176 | add_action( 'admin_head-toplevel_page_formidable', 'FrmFormsController::head' ); |
| 153 | 177 | add_action( 'frm_after_field_options', 'FrmFormsController::logic_tip' ); |
| 154 | - add_filter( 'frm_fields_in_form_builder', 'FrmFormsController::update_form_builder_fields', 10, 2 ); | |
| 178 | + add_action( 'frm_field_code_tab', 'FrmFormsController::field_part_shortcodes' ); | |
| 179 | + add_filter( 'frm_fields_in_form_builder', 'FrmFormsController::update_form_builder_fields' ); | |
| 155 | 180 | |
| 156 | 181 | add_filter( 'set-screen-option', 'FrmFormsController::save_per_page', 10, 3 ); |
| 157 | 182 | add_action( 'admin_footer', 'FrmFormsController::insert_form_popup' ); |
| 183 | + add_action( 'admin_footer', 'FrmFormsController::print_forms_list_templates' ); | |
| 158 | 184 | |
| 159 | 185 | // Elementor. |
| 160 | 186 | add_action( 'elementor/editor/footer', 'FrmElementorController::admin_init' ); |
| 161 | 187 | |
| @@ -181,8 +207,9 @@ | ||
| 181 | 207 | add_action( 'admin_menu', 'FrmXMLController::menu', 41 ); |
| 182 | 208 | |
| 183 | 209 | // Simple Blocks Controller. |
| 184 | 210 | add_action( 'enqueue_block_editor_assets', 'FrmSimpleBlocksController::block_editor_assets' ); |
| 211 | + add_action( 'enqueue_block_assets', 'FrmSimpleBlocksController::block_assets' ); | |
| 185 | 212 | |
| 186 | 213 | add_action( 'admin_init', 'FrmUsageController::schedule_send' ); |
| 187 | 214 | |
| 188 | 215 | // Applications Controller. |
| @@ -205,12 +232,15 @@ | ||
| 205 | 232 | add_action( 'deactivated_plugin', 'FrmDeactivationFeedbackController::set_feedback_expired_date' ); |
| 206 | 233 | |
| 207 | 234 | add_action( 'frm_email_styles_extra_settings', 'FrmEmailStylesController::show_upsell_settings' ); |
| 208 | 235 | |
| 236 | + add_action( 'admin_init', 'FrmWelcomeTourController::admin_init' ); | |
| 237 | + | |
| 209 | 238 | FrmDashboardController::load_admin_hooks(); |
| 210 | 239 | FrmTransLiteHooksController::load_admin_hooks(); |
| 211 | 240 | FrmStrpLiteHooksController::load_admin_hooks(); |
| 212 | 241 | FrmSquareLiteHooksController::load_admin_hooks(); |
| 242 | + FrmPayPalLiteHooksController::load_admin_hooks(); | |
| 213 | 243 | FrmSMTPController::load_hooks(); |
| 214 | 244 | FrmOnboardingWizardController::load_admin_hooks(); |
| 215 | 245 | FrmAddonsController::load_admin_hooks(); |
| 216 | 246 | new FrmPluginSearch(); |
| @@ -306,15 +336,17 @@ | ||
| 306 | 336 | add_action( 'wp_ajax_frm_get_applications_data', 'FrmApplicationsController::get_applications_data' ); |
| 307 | 337 | |
| 308 | 338 | // Reviews. |
| 309 | 339 | add_action( 'wp_ajax_frm_dismiss_review', 'FrmAppController::dismiss_review' ); |
| 310 | - | |
| 311 | 340 | add_action( 'wp_ajax_frm_small_screen_proceed', 'FrmAppController::small_screen_proceed' ); |
| 312 | - | |
| 313 | 341 | add_action( 'wp_ajax_frm_sale_banner_dismiss', 'FrmSalesApi::dismiss_banner' ); |
| 314 | 342 | |
| 315 | 343 | add_action( 'wp_ajax_frm_email_style_preview', 'FrmEmailStylesController::ajax_preview' ); |
| 316 | 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' ); | |
| 317 | 349 | } |
| 318 | 350 | |
| 319 | 351 | /** |
| 320 | 352 | * @return void |