PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.0.11
OttoKit: All-in-One Automation Platform v1.0.11
1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Loader.php
suretriggers / src Last commit date
Controllers 3 years ago Integrations 3 years ago Models 3 years ago Traits 3 years ago Loader.php 3 years ago
Loader.php
417 lines
1 <?php
2 /**
3 * Loader.
4 * php version 5.6
5 *
6 * @category Loader
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers;
15
16 use DirectoryIterator;
17 use SureTriggers\Controllers\AuthController;
18 use SureTriggers\Controllers\AutomationController;
19 use SureTriggers\Controllers\EventController;
20 use SureTriggers\Controllers\EventHelperController;
21 use SureTriggers\Controllers\GlobalSearchController;
22 use SureTriggers\Controllers\IntegrationsController;
23 use SureTriggers\Controllers\OptionController;
24 use SureTriggers\Controllers\RestController;
25 use SureTriggers\Controllers\RoutesController;
26 use SureTriggers\Controllers\SettingsController;
27 use SureTriggers\Traits\SingletonLoader;
28 use function add_menu_page;
29 use function add_submenu_page;
30
31 /**
32 * Loader
33 *
34 * @category Loader
35 * @package SureTriggers
36 * @author BSF <username@example.com>
37 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
38 * @link https://www.brainstormforce.com/
39 * @since 1.0.0
40 */
41 class Loader {
42
43 use SingletonLoader;
44
45 /**
46 * Constructor
47 *
48 * @since 1.0.0
49 */
50 public function __construct() {
51 register_activation_hook( SURE_TRIGGERS_FILE, [ $this, 'st_activate' ] );
52
53 $this->define_constants();
54 add_action( 'plugins_loaded', [ $this, 'initialize_core' ] );
55 // Admin Menu.
56 add_action( 'admin_menu', [ $this, 'admin_menu' ] );
57 add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_scripts' ] );
58 add_action( 'admin_init', [ $this, 'detect_saas_env' ] );
59 add_action( 'admin_init', [ $this, 'reset_plugin' ] );
60
61 add_filter( 'plugin_action_links_' . plugin_basename( SURE_TRIGGERS_FILE ), [ $this, 'add_settings_link' ] );
62 add_action( 'admin_init', [ $this, 'redirect_after_activation' ] );
63
64 add_action( 'admin_notices', [ $this, 'display_notice' ] );
65
66 add_action( 'wp_dashboard_setup', [ $this, 'add_dashboard_widgets' ] );
67 }
68
69 /**
70 * Adding dashboard widget.
71 *
72 * @return void
73 */
74 public function add_dashboard_widgets() {
75 if ( isset( OptionController::$options['secret_key'] ) ) {
76 return;
77 }
78
79 wp_add_dashboard_widget(
80 'suretriggers_dashboard_widget',
81 'Please Connect SureTriggers',
82 [ $this, 'dashboard_widget_display' ],
83 '',
84 '',
85 'side',
86 'high'
87 );
88 }
89
90 /**
91 * Dashboard widget callback.
92 *
93 * @return void
94 */
95 public function dashboard_widget_display() {
96 ?>
97 <div>
98 <p> <?php esc_html_e( 'Please connect to or create your SureTriggers account.', 'suretriggers' ); ?></p>
99 <p> <?php esc_html_e( 'This will enable you to connect your various plugins, and apps together and automate repetitive tasks.', 'suretriggers' ); ?> </p>
100 <a href="<?php echo esc_url( admin_url( 'options-general.php?page=suretriggers' ) ); ?>" class="button button-primary"> <?php esc_html_e( 'Get Started', 'suretriggers' ); ?> </a>
101 </div>
102 <?php
103 }
104
105 /**
106 * Display notice.
107 *
108 * @return void
109 */
110 public function display_notice() {
111 if ( isset( OptionController::$options['secret_key'] ) ) {
112 return;
113 }
114 ?>
115 <div class="notice notice-success" style="padding-bottom: 15px;">
116 <p>
117 <strong>
118 <?php esc_html_e( 'Connect your plugins and apps together with SureTriggers', 'suretriggers' ); ?>
119 <span style="transform: rotate(-90deg); font-size: 15px;" class="dashicons dashicons-admin-plugins"></span>
120 </strong>
121 </p>
122 <p> <?php esc_html_e( 'Please connect to or create your SureTriggers account. This will enable you to connect your various plugins and apps together and automate repetitive tasks.', 'suretriggers' ); ?> </p>
123
124 <a href="<?php echo esc_url( admin_url( 'options-general.php?page=suretriggers' ) ); ?>" class="button button-primary"> <?php esc_html_e( 'Get Started With SureTriggers', 'suretriggers' ); ?> </a>
125 <a href="https://suretriggers.com/" class="button button-secondary"> <?php esc_html_e( 'Learn More', 'suretriggers' ); ?> </a>
126 </div>
127 <?php
128 }
129
130 /**
131 * Redirect user after plugin activation.
132 *
133 * @return void
134 */
135 public function redirect_after_activation() {
136 $is_redirect = get_transient( 'st-redirect-after-activation' );
137 if ( $is_redirect ) {
138 delete_transient( 'st-redirect-after-activation' );
139 $url = get_admin_url() . 'admin.php?page=suretriggers';
140 wp_safe_redirect( $url );
141 die;
142 }
143 }
144
145 /**
146 * Adding setting link.
147 *
148 * @param array $links links.
149 * @return array
150 */
151 public function add_settings_link( array $links ) {
152 $url = get_admin_url() . 'admin.php?page=suretriggers';
153 $settings_link = '<a href="' . $url . '">' . __( 'Settings', 'suretriggers' ) . '</a>';
154 $links[] = $settings_link;
155 return $links;
156 }
157
158 /**
159 * Define constants
160 *
161 * @return void
162 * @since 1.0.0
163 */
164 public function define_constants() {
165 $sass_url = 'https://app.suretriggers.com';
166 $api_url = 'https://api.suretriggers.com';
167 $webhook_url = 'https://webhook.suretriggers.com';
168
169 $saas_env = OptionController::get_option( 'saas_env' );
170 if ( ! empty( $saas_env ) ) {
171 $sass_url = "https://{$saas_env}.suretriggers.com";
172 $api_url = "https://api-{$saas_env}.suretriggers.com";
173 $webhook_url = "https://webhook-{$saas_env}.suretriggers.com";
174 }
175
176 define( 'SURE_TRIGGERS_BASE', plugin_basename( SURE_TRIGGERS_FILE ) );
177 define( 'SURE_TRIGGERS_DIR', plugin_dir_path( SURE_TRIGGERS_FILE ) );
178 define( 'SURE_TRIGGERS_URL', plugins_url( '/', SURE_TRIGGERS_FILE ) );
179 define( 'SURE_TRIGGERS_VER', '1.0.11' );
180 define( 'SURE_TRIGGERS_DB_VER', '1.0.11' );
181 define( 'SURE_TRIGGERS_REST_NAMESPACE', 'sure-triggers/v1' );
182 define( 'SURE_TRIGGERS_SASS_URL', $sass_url . '/wp-json/wp-plugs/v1/' );
183 define( 'SURE_TRIGGERS_SITE_URL', $sass_url );
184 define( 'API_SERVER_URL', $api_url );
185 define( 'WEBHOOK_SERVER_URL', $webhook_url );
186
187 define( 'SURE_TRIGGERS_PAGE', 'SureTrigger' );
188 define( 'SURE_TRIGGERS_AS_GROUP', 'SureTrigger' );
189
190 define( 'SURE_TRIGGERS_ACTION_ERROR_MESSAGE', 'An unexpected error occurred. Something went wrong with the action.' );
191 }
192
193 /**
194 * Flush permalink rules while plugin activation.
195 *
196 * @return void
197 */
198 public function st_activate() {
199 global $wp_rewrite;
200 $wp_rewrite->set_permalink_structure( '/%postname%/' );
201 flush_rewrite_rules(); //phpcs:ignore
202
203 set_transient( 'st-redirect-after-activation', true, 120 );
204 }
205
206 /**
207 * Add main menu
208 *
209 * @since x.x.x
210 *
211 * @return void
212 */
213 public function admin_menu() {
214 $page_title = apply_filters( 'st_menu_page_title', esc_html__( 'SureTriggers', 'suretriggers' ) );
215 $logo = file_get_contents( plugin_dir_path( SURE_TRIGGERS_FILE ) . 'assets/images/STLogo.svg' );
216
217 add_menu_page(
218 $page_title,
219 $page_title,
220 'manage_options',
221 'suretriggers',
222 [ $this, 'menu_callback' ],
223 'data:image/svg+xml;base64,' . base64_encode( $logo ),
224 30.6000
225 );
226 }
227
228 /**
229 * Enqueue the admin scripts
230 *
231 * @param string $hook hook.
232 * @since x.x.x
233 *
234 * @return void
235 */
236 public function enqueue_scripts( $hook = '' ) {
237 if ( ! in_array( $hook, [ 'toplevel_page_suretriggers' ], true ) ) {
238 return;
239 }
240
241 remove_all_actions( 'admin_notices' );
242
243 $file = SURE_TRIGGERS_DIR . 'app/build/main.asset.php';
244 if ( ! file_exists( $file ) ) {
245 return;
246 }
247
248 $asset = require_once $file;
249
250 if ( ! isset( $asset ) ) {
251 return;
252 }
253
254 wp_register_script(
255 'sure-trigger-admin',
256 SURE_TRIGGERS_URL . 'app/build/main.js',
257 array_merge( $asset['dependencies'] ),
258 $asset['version'],
259 true
260 );
261
262 wp_localize_script(
263 'sure-trigger-admin',
264 'sureTriggerData',
265 $this->get_localized_array()
266 );
267 wp_enqueue_script( 'sure-trigger-admin' );
268 wp_enqueue_style( 'sure-trigger-components', SURE_TRIGGERS_URL . 'app/build/style-main.css', [], SURE_TRIGGERS_VER );
269 wp_enqueue_style( 'sure-trigger-css', SURE_TRIGGERS_URL . 'app/build/main.css', [], SURE_TRIGGERS_VER );
270 }
271
272 /**
273 * Get localized array for sure triggers.
274 *
275 * @return array
276 */
277 private function get_localized_array() {
278 $current_user = wp_get_current_user();
279
280 $data = [
281 'siteContent' => [
282 'siteUrl' => str_replace( '/wp-json/', '', get_rest_url() ),
283 'redirectUrl' => get_site_url() . '/wp-admin/themes.php?page=suretriggers',
284 'connectNonce' => wp_create_nonce( 'sure-trigger-connect' ),
285 'connectUrl' => SURE_TRIGGERS_SITE_URL . '/connect-st/connect',
286 'siteTitle' => get_bloginfo( 'name' ),
287 'resetUrl' => base64_encode( wp_nonce_url( admin_url( 'options-general.php?st-reset=true' ), 'st-reset-action' ) ),
288 ],
289 'user' => [
290 'name' => $current_user->display_name,
291 'email' => $current_user->user_email,
292 ],
293 'stSaasURL' => trailingslashit( SURE_TRIGGERS_SITE_URL ),
294 'stPluginURL' => plugin_dir_url( SURE_TRIGGERS_FILE ),
295 'integrations' => IntegrationsController::get_activated_integrations(),
296 'enabledIntegrations' => OptionController::get_option( 'enabled_integrations' ),
297 'settingsPageURL' => admin_url( 'themes.php?page=suretriggers' ),
298 'verification_status' => false,
299 'projects' => [],
300 'apiSlug' => SURE_TRIGGERS_REST_NAMESPACE,
301 'isElementorEditor' => ( did_action( 'elementorpro/loaded' ) ) ? Elementor\Plugin::instance()->editor->is_edit_mode() : false,
302 'reConnectSorryMsg' => (bool) OptionController::get_option( 'st_connect_notice_deprecated' ),
303 ];
304
305 if ( current_user_can( 'manage_options' ) ) {
306 $data['siteContent']['accessKey'] = OptionController::get_option( 'secret_key' );
307 $data['siteContent']['connected_email'] = OptionController::get_option( 'connected_email_key' );
308 }
309
310 $settings = OptionController::get_option( 'st_settings' );
311 if ( empty( $settings ) ) {
312 $settings = (object) [];
313 }
314
315 $data['settingsForm'] = SettingsController::get_fields();
316 $data['settings'] = wp_json_encode( $settings );
317 $data['nonce'] = wp_create_nonce( 'st-nonce' );
318 $data['ajaxurl'] = esc_url( admin_url( 'admin-ajax.php', 'relative' ) );
319
320 return apply_filters( 'sure_trigger_control_localize_vars', $data );
321 }
322
323 /**
324 * Menu callback
325 *
326 * @since x.x.x
327 *
328 * @return void
329 */
330 public function menu_callback() {
331 ?>
332 <div id="sure-triggger-entry" class="st-base"></div>
333 <?php
334 }
335
336 /**
337 * Include all files from the folder.
338 *
339 * @param string $folder folder path.
340 * @return void
341 */
342 public function include_all_files( $folder ) {
343 $dir = new DirectoryIterator( $folder );
344 foreach ( $dir as $file ) {
345 if ( ! $file->isDot() ) {
346 if ( $file->isDir() ) {
347 $this->include_all_files( $file->getPathname() );
348 } else {
349 require_once $file->getPathname();
350 }
351 }
352 }
353 }
354
355 /**
356 * Initialize core trigger and actions.
357 *
358 * @return void
359 */
360 public function initialize_core() {
361 /**
362 * Include only integrations root files
363 */
364
365 $this->include_all_files( SURE_TRIGGERS_DIR . 'src/Integrations/' );
366
367 IntegrationsController::load_event_files();
368
369 EventController::get_instance();
370 EventHelperController::get_instance();
371 IntegrationsController::get_instance();
372 GlobalSearchController::get_instance();
373 RestController::get_instance();
374 OptionController::get_instance();
375 AutomationController::get_instance();
376 AuthController::get_instance();
377 RoutesController::get_instance();
378 SettingsController::get_instance();
379 }
380
381 /**
382 * Added option to reset plugin in case of testing.
383 *
384 * @return void
385 */
386 public function reset_plugin() {
387
388 $is_reset = sanitize_text_field( wp_unslash( isset( $_GET['st-reset'] ) ? $_GET['st-reset'] : false ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
389 $nonce = sanitize_text_field( wp_unslash( isset( $_GET['_wpnonce'] ) ? $_GET['_wpnonce'] : false ) );
390
391 if ( $nonce && $is_reset && current_user_can( 'manage_options' ) && wp_verify_nonce( $nonce, 'st-reset-action' ) ) {
392 delete_option( 'suretrigger_options' );
393 wp_safe_redirect( admin_url( 'options-general.php?page=suretriggers' ) );
394 exit();
395 }
396 }
397
398 /**
399 * Switch saas env from URL
400 *
401 * @return void
402 */
403 public function detect_saas_env() {
404 $saas_env = [ 'app', 'stage', 'dev', 'qaing', 'release' ];
405
406 $env = sanitize_text_field( wp_unslash( isset( $_GET['env'] ) ? $_GET['env'] : '' ) ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
407
408 if ( ! current_user_can( 'manage_options' ) || ( empty( $env ) || ! in_array( $env, $saas_env, true ) ) ) {
409 return;
410 }
411
412 OptionController::set_option( 'saas_env', $env );
413 wp_safe_redirect( admin_url( 'admin.php?page=suretriggers' ) );
414 exit();
415 }
416 }
417