PluginProbe ʕ •ᴥ•ʔ
SureForms – Drag & Drop Contact Form & Form Builder, Payment Form, Survey, Quiz & Calculator / 2.12.0
SureForms – Drag & Drop Contact Form & Form Builder, Payment Form, Survey, Quiz & Calculator v2.12.0
2.12.0 2.11.1 2.11.0 2.10.1 2.10.0 2.9.1 2.9.0 2.8.2 2.8.1 2.7.0 2.7.1 2.8.0 trunk 0.0.10 0.0.11 0.0.12 0.0.13 0.0.2 0.0.3 0.0.4 0.0.5 0.0.6 0.0.7 0.0.8 0.0.9 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.1.0 1.1.1 1.1.2 1.10.0 1.10.1 1.11.0 1.12.0 1.12.1 1.12.2 1.12.3 1.13.0 1.13.1 1.13.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.5.0 1.5.1 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.8.0 1.9.0 1.9.1 2.0.0 2.0.1 2.0.2 2.1.0 2.1.1 2.2.0 2.2.1 2.2.2 2.3.0 2.4.0 2.5.0 2.5.2 2.6.0
sureforms / plugin-loader.php
sureforms Last commit date
admin 1 week ago assets 1 week ago images 2 weeks ago inc 1 week ago languages 1 week ago modules 1 week ago templates 1 week ago plugin-loader.php 1 week ago readme.txt 1 week ago sureforms.php 1 week ago wpml-config.xml 3 weeks ago
plugin-loader.php
363 lines
1 <?php
2 /**
3 * Plugin Loader.
4 *
5 * @package sureforms
6 * @since 0.0.1
7 */
8
9 namespace SRFM;
10
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit; // Exit if accessed directly.
13 }
14
15 use SRFM\Admin\Admin;
16 use SRFM\Admin\Analytics;
17 use SRFM\Admin\Notice_Manager;
18 use SRFM\Inc\Abilities\Abilities_Registrar;
19 use SRFM\Inc\Activator;
20 use SRFM\Inc\Admin\Editor_Nudge;
21 use SRFM\Inc\Admin\Html_Form_Detector;
22 use SRFM\Inc\Admin_Ajax;
23 use SRFM\Inc\AI_Form_Builder\AI_Auth;
24 use SRFM\Inc\AI_Form_Builder\AI_Form_Builder;
25 use SRFM\Inc\AI_Form_Builder\AI_Helper;
26 use SRFM\Inc\AI_Form_Builder\Field_Mapping;
27 use SRFM\Inc\Background_Process;
28 use SRFM\Inc\Blocks\Register;
29 use SRFM\Inc\Compatibility\Multilingual\Multilingual_Manager;
30 use SRFM\Inc\Compatibility\Multilingual\String_Collector;
31 use SRFM\Inc\Compatibility\Themes\Astra;
32 use SRFM\Inc\Create_New_Form;
33 use SRFM\Inc\Database\Register as DatabaseRegister;
34 use SRFM\Inc\Duplicate_Form;
35 use SRFM\Inc\Events_Scheduler;
36 use SRFM\Inc\Export;
37 use SRFM\Inc\Form_Restriction;
38 use SRFM\Inc\Form_Submit;
39 use SRFM\Inc\Forms_Data;
40 use SRFM\Inc\Frontend_Assets;
41 use SRFM\Inc\Generate_Form_Markup;
42 use SRFM\Inc\Global_Settings\Email_Summary;
43 use SRFM\Inc\Global_Settings\Global_Settings;
44 use SRFM\Inc\Global_Settings\Global_Settings_Defaults;
45 use SRFM\Inc\Gutenberg_Hooks;
46 use SRFM\Inc\Helper;
47 use SRFM\Inc\Learn;
48 // region: form-migration — Phase P1 foundation.
49 use SRFM\Inc\Migrator\Bootstrap as Migrator_Bootstrap;
50 // endregion: form-migration.
51 use SRFM\Inc\Onboarding;
52 use SRFM\Inc\Page_Builders\Page_Builders;
53 use SRFM\Inc\Payments\Payments;
54 use SRFM\Inc\Post_Types;
55 use SRFM\Inc\Rest_Api;
56 use SRFM\Inc\Single_Form_Settings\Compliance_Settings;
57 use SRFM\Inc\Single_Form_Settings\Form_Settings_Api;
58 use SRFM\Inc\Smart_Tags;
59 use SRFM\Inc\Updater;
60
61 /**
62 * Plugin_Loader
63 *
64 * @since 0.0.1
65 */
66 class Plugin_Loader {
67 /**
68 * Instance
69 *
70 * @access private
71 * @var object Class Instance.
72 * @since 0.0.1
73 */
74 private static $instance = null;
75
76 /**
77 * Constructor
78 *
79 * @since 0.0.1
80 */
81 public function __construct() {
82 if ( ! defined( 'SRFM_DIR' ) || ! defined( 'SRFM_FILE' ) ) {
83 return;
84 }
85 // Load the action scheduler before plugin loads.
86 require_once SRFM_DIR . 'inc/lib/action-scheduler/action-scheduler.php';
87
88 spl_autoload_register( [ $this, 'autoload' ] );
89
90 add_action( 'plugins_loaded', [ $this, 'load_textdomain' ] );
91 add_action( 'plugins_loaded', [ $this, 'load_plugin' ], 99 );
92 add_action( 'init', [ $this, 'load_classes' ] );
93 add_action( 'admin_init', [ $this, 'activation_redirect' ] );
94 Analytics::get_instance();
95 /**
96 * The code that runs during plugin activation
97 */
98 register_activation_hook(
99 SRFM_FILE,
100 static function () {
101 Activator::activate();
102 }
103 );
104
105 register_deactivation_hook(
106 SRFM_FILE,
107 static function () {
108 update_option( '__sureforms_do_redirect', false );
109 Events_Scheduler::unschedule_events( 'srfm_weekly_scheduled_events' );
110 Events_Scheduler::unschedule_events( 'srfm_daily_scheduled_action' );
111 }
112 );
113 }
114
115 /**
116 * Initiator
117 *
118 * @since 0.0.1
119 * @return object initialized object of class.
120 */
121 public static function get_instance() {
122 if ( null === self::$instance ) {
123 self::$instance = new self();
124
125 /**
126 * SureForms loaded.
127 *
128 * Fires when SureForms was fully loaded and instantiated.
129 *
130 * @since 0.0.1
131 */
132 do_action( 'srfm_core_loaded' );
133 }
134 return self::$instance;
135 }
136
137 /**
138 * Autoload classes.
139 *
140 * @param string $class class name.
141 * @return void
142 */
143 public function autoload( $class ) {
144 if ( 0 !== strpos( $class, __NAMESPACE__ ) ) {
145 return;
146 }
147
148 $filename = preg_replace(
149 [ '/^' . __NAMESPACE__ . '\\\/', '/([a-z])([A-Z])/', '/_/', '/\\\/' ],
150 [ '', '$1-$2', '-', DIRECTORY_SEPARATOR ],
151 $class
152 );
153
154 if ( ! is_string( $filename ) ) {
155 return;
156 }
157
158 // Check for directory traversal.
159 if ( strpos( $filename, '..' ) !== false ) {
160 return;
161 }
162
163 $filename = strtolower( $filename );
164
165 $file = SRFM_DIR . $filename . '.php';
166
167 // if the file is readable, include it.
168 if ( is_readable( $file ) ) {
169 require_once $file;
170 }
171 }
172
173 /**
174 * Activation Reset
175 *
176 * @return void
177 * @since 0.0.1
178 */
179 public function activation_redirect() {
180 // Avoid redirection in case of WP_CLI calls.
181 if ( defined( 'WP_CLI' ) && \WP_CLI ) {
182 return;
183 }
184
185 // Avoid redirection in case of ajax calls.
186 if ( wp_doing_ajax() ) {
187 return;
188 }
189
190 $do_redirect = apply_filters( 'srfm_enable_redirect_activation', get_option( '__srfm_do_redirect' ) );
191
192 if ( $do_redirect ) {
193
194 update_option( '__srfm_do_redirect', false );
195
196 if ( ! is_multisite() ) {
197 wp_safe_redirect(
198 add_query_arg(
199 [
200 'page' => 'sureforms_menu',
201 'srfm-activation-redirect' => true,
202 ],
203 admin_url( 'admin.php' )
204 )
205 );
206 exit;
207 }
208 }
209 }
210
211 /**
212 * Load Classes.
213 *
214 * @return void
215 * @since 0.0.1
216 */
217 public function load_classes() {
218
219 Register::get_instance();
220 if ( is_admin() ) {
221 Admin::get_instance();
222 // phpcs:ignore /** @phpstan-ignore-next-line */ -- Class is loaded dynamically in WordPress
223 Notice_Manager::get_instance();
224 Editor_Nudge::get_instance();
225 }
226 // Always instantiate — script enqueue is self-gated by `allow_load()`,
227 // while the REST endpoint for converting HTML forms must register
228 // outside the admin context (REST dispatch runs with `is_admin()` ===
229 // false, so admin-only instantiation would 404 the endpoint).
230 Html_Form_Detector::get_instance();
231 Payments::get_instance();
232 Duplicate_Form::get_instance();
233 Learn::get_instance();
234 }
235
236 /**
237 * Load Plugin Text Domain.
238 * This will load the translation textdomain depending on the file priorities.
239 * 1. Global Languages /wp-content/languages/sureforms/ folder
240 * 2. Local directory /wp-content/plugins/sureforms/languages/ folder
241 *
242 * @since 0.0.1
243 * @return void
244 */
245 public function load_textdomain() {
246 // Default languages directory.
247 $lang_dir = SRFM_DIR . 'languages/';
248
249 /**
250 * Filters the languages directory path to use for plugin.
251 *
252 * @param string $lang_dir The languages directory path.
253 */
254 $lang_dir = apply_filters( 'srfm_languages_directory', $lang_dir );
255
256 // Traditional WordPress plugin locale filter.
257 global $wp_version;
258
259 $get_locale = get_locale();
260
261 if ( $wp_version >= 4.7 ) {
262 $get_locale = get_user_locale();
263 }
264
265 /**
266 * Language Locale for plugin
267 *
268 * Uses get_user_locale()` in WordPress 4.7 or greater,
269 * otherwise uses `get_locale()`.
270 */
271 $locale = apply_filters( 'plugin_locale', $get_locale, 'sureforms' );//phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound -- wordpress hook
272 $mofile = sprintf( '%1$s-%2$s.mo', 'sureforms', $locale );
273
274 // Setup paths to current locale file.
275 $mofile_global = WP_LANG_DIR . '/plugins/' . $mofile;
276 $mofile_local = $lang_dir . $mofile;
277
278 if ( file_exists( $mofile_global ) ) {
279 // Look in global /wp-content/languages/sureforms/ folder.
280 load_textdomain( 'sureforms', $mofile_global );
281 } elseif ( file_exists( $mofile_local ) ) {
282 // Look in local /wp-content/plugins/sureforms/languages/ folder.
283 load_textdomain( 'sureforms', $mofile_local );
284 } else {
285 // Load the default language files.
286 // phpcs:ignore PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound -- Fallback when no global/local .mo override is present.
287 load_plugin_textdomain( 'sureforms', false, $lang_dir );
288 }
289 }
290
291 /**
292 * Loads plugin files.
293 *
294 * @since 0.0.1
295 *
296 * @return void
297 */
298 public function load_plugin() {
299 Post_Types::get_instance();
300 Form_Submit::get_instance();
301 Gutenberg_Hooks::get_instance();
302 Frontend_Assets::get_instance();
303 Helper::get_instance();
304 Activator::get_instance();
305 Admin_Ajax::get_instance();
306 Forms_Data::get_instance();
307 Export::get_instance();
308 Smart_Tags::get_instance();
309 Generate_Form_Markup::get_instance();
310 Create_New_Form::get_instance();
311 Global_Settings::get_instance();
312 Global_Settings_Defaults::get_instance();
313 Email_Summary::get_instance();
314 Compliance_Settings::get_instance();
315 Form_Settings_Api::get_instance();
316 Events_Scheduler::get_instance();
317 AI_Form_Builder::get_instance();
318 Field_Mapping::get_instance();
319 Background_Process::get_instance();
320 Page_Builders::get_instance();
321 Rest_Api::get_instance();
322 // region: form-migration — Phase P1 foundation.
323 Migrator_Bootstrap::get_instance();
324 // endregion: form-migration.
325 AI_Helper::get_instance();
326 AI_Auth::get_instance();
327 Updater::get_instance();
328 Onboarding::get_instance();
329 DatabaseRegister::init();
330 Form_Restriction::get_instance();
331 Abilities_Registrar::get_instance();
332 // Initializing Compatibilities.
333 Astra::get_instance();
334 Multilingual_Manager::get_instance();
335 String_Collector::get_instance();
336
337 /**
338 * Load core files necessary for the Spectra block.
339 * This method is called in the Spectra block loader to ensure core files are loaded during the 'plugins_loaded' action.
340 *
341 * Note: This code is added at the bottom to ensure the form block is loaded first,
342 * followed by the Spectra blocks such as heading, image, and icon blocks.
343 */
344 $this->load_core_files();
345 }
346
347 /**
348 * Load Core Files.
349 *
350 * @since 0.0.1
351 *
352 * @return void
353 */
354 public function load_core_files() {
355 include_once SRFM_DIR . 'modules/gutenberg/classes/class-spec-block-loader.php';
356 }
357 }
358
359 /**
360 * Kicking this off by calling 'get_instance()' method
361 */
362 Plugin_Loader::get_instance();
363