PluginProbe
WANotifier for Forms and Actions / 2.4.0
WANotifier for Forms and Actions v2.4.0
3.1.0 3.0.4 2.7.10 2.7.11 2.7.12 2.7.13 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 3.0.0 3.0.1 3.0.2 3.0.3 trunk 0.1.0 0.1.1 1.0.0 1.0.1 1.0.2 1.0.3 All 66 releases
← All changes | includes/class-notifier.php +52 -271 trunk2.4.0 View file →
@@ -1,9 +1,5 @@
1 1 <?php
2 -if ( ! defined( 'ABSPATH' ) ) {
3 - exit;
4 -}
5 -
6 2 /**
7 3 * The core plugin class.
8 4 *
9 5 * @package Notifier
@@ -26,16 +22,13 @@
26 22 /**
27 23 * Define Constants.
28 24 */
29 25 private function define_constants() {
30 - $this->define( 'NOTIFIER_VERSION', '3.1.1' );
26 + $this->define( 'NOTIFIER_VERSION', '2.4.0' );
31 27 $this->define( 'NOTIFIER_NAME', 'notifier' );
32 28 $this->define( 'NOTIFIER_PREFIX', 'notifier_' );
33 29 $this->define( 'NOTIFIER_URL', trailingslashit( plugins_url( '', dirname(__FILE__) ) ) );
34 - $this->define( 'NOTIFIER_APP_BASE_URL', 'https://app.wanotifier.com' );
35 - $this->define( 'NOTIFIER_APP_API_PATH', 'api/v1' );
36 - $this->define( 'NOTIFIER_ACTIVITY_TABLE_NAME', 'notifier_activity_log' );
37 - $this->define( 'NOTIFIER_CART_ABANDONMENT_TABLE', 'notifier_cart_abandonment' );
30 + $this->define( 'NOTIFIER_APP_API_URL', 'https://app.wanotifier.com/api/v1/' );
38 31 }
39 32
40 33 /**
41 34 * Define constant if not already set.
@@ -66,17 +59,17 @@
66 59 */
67 60 private function includes() {
68 61 // Functions
69 62 require_once NOTIFIER_PATH . 'includes/functions/functions-notifier-helpers.php';
63 + require_once NOTIFIER_PATH . 'includes/functions/functions-notifier-meta-box-fields.php';
70 64 require_once NOTIFIER_PATH . 'libraries/action-scheduler/action-scheduler.php';
71 65
72 66 // Classes
73 67 require_once NOTIFIER_PATH . 'includes/classes/class-notifier-admin-notices.php';
74 - require_once NOTIFIER_PATH . 'includes/classes/class-notifier-connection.php';
75 - require_once NOTIFIER_PATH . 'includes/classes/class-notifier-migration.php';
76 - require_once NOTIFIER_PATH . 'includes/classes/class-notifier-backend.php';
68 + require_once NOTIFIER_PATH . 'includes/classes/class-notifier-dashboard.php';
77 69 require_once NOTIFIER_PATH . 'includes/classes/class-notifier-notification-merge-tags.php';
78 70 require_once NOTIFIER_PATH . 'includes/classes/class-notifier-notification-triggers.php';
71 + require_once NOTIFIER_PATH . 'includes/classes/class-notifier-settings.php';
79 72 require_once NOTIFIER_PATH . 'includes/classes/class-notifier-frontend.php';
80 73 }
81 74
82 75 /**
@@ -82,17 +75,15 @@
82 75 /**
83 76 * Hook into actions and filters.
84 77 */
85 78 private function init_hooks() {
86 - register_activation_hook ( NOTIFIER_FILE, array( $this, 'activate') );
87 - register_deactivation_hook ( NOTIFIER_FILE, array( $this, 'deactivate') );
79 + register_activation_hook ( NOTIFIER_FILE, array( $this, 'install') );
88 80
89 81 add_action( 'after_setup_theme', array( 'Notifier_Admin_Notices', 'init' ) );
90 - add_action( 'after_setup_theme', array( 'Notifier_Connection', 'init' ) );
91 - add_action( 'after_setup_theme', array( 'Notifier_Migration', 'init' ) );
92 - add_action( 'after_setup_theme', array( 'Notifier_Backend', 'init' ) );
82 + add_action( 'after_setup_theme', array( 'Notifier_Dashboard', 'init' ) );
93 83 add_action( 'after_setup_theme', array( 'Notifier_Notification_Merge_Tags', 'init' ) );
94 84 add_action( 'after_setup_theme', array( 'Notifier_Notification_Triggers', 'init' ) );
85 + add_action( 'after_setup_theme', array( 'Notifier_Settings', 'init' ) );
95 86 add_action( 'after_setup_theme', array( 'Notifier_Frontend', 'init' ) );
96 87 add_action( 'admin_enqueue_scripts', array( $this , 'admin_scripts') );
97 88 add_action( 'wp_enqueue_scripts', array( $this , 'frontend_scripts') );
98 89 add_action( 'in_admin_header', array( $this , 'embed_page_header' ) );
@@ -97,71 +88,23 @@
97 88 add_action( 'wp_enqueue_scripts', array( $this , 'frontend_scripts') );
98 89 add_action( 'in_admin_header', array( $this , 'embed_page_header' ) );
99 90
100 91 add_action( 'after_setup_theme', array( $this, 'maybe_include_integrations' ) );
101 -
102 - add_action( 'init', array( $this, 'load_textdomain' ) );
103 - add_action( 'wp_loaded', array( $this, 'setup_activity_log' ) );
104 - add_action( 'notifier_clean_old_logs', array( $this, 'notifier_delete_old_activity_logs' ) );
105 -
106 - add_action( 'wp_loaded', array( $this, 'create_cart_abandonment_table' ) );
107 92 }
108 93
109 94 /**
110 - * Load plugin text domain for translations.
111 - */
112 - public function load_textdomain() {
113 - load_plugin_textdomain( 'notifier', false, dirname( plugin_basename( NOTIFIER_FILE ) ) . '/languages' );
114 - }
115 -
116 - /**
117 95 * Setup during plugin activation
118 96 */
119 - public function activate() {
120 - $notifier_plugin_data = get_option('notifier_meta', array());
121 - if (isset($notifier_plugin_data['as_clear_log']) && $notifier_plugin_data['as_clear_log'] === 'yes') {
122 - unset($notifier_plugin_data['as_clear_log']);
123 - update_option('notifier_meta', $notifier_plugin_data);
124 - }
125 - }
97 + public function install() {
126 98
127 - /**
128 - * Setup during plugin deactivation
129 - */
130 - public function deactivate() {
131 - as_unschedule_action('notifier_check_cart_abandonment');
132 - as_unschedule_action('notifier_clean_old_logs');
133 - $notifier_plugin_data = get_option('notifier_meta', array());
134 - $notifier_plugin_data['as_clear_log'] = 'yes';
135 - update_option('notifier_meta', $notifier_plugin_data);
136 99 }
137 100
138 - /**
139 - * Check if the plugin was updated and run the upgrade routine if necessary.
140 - */
141 - public function setup_activity_log() {
142 - $notifier_plugin_data = get_option('notifier_meta', array());
143 - if ( ! isset( $notifier_plugin_data['activity_log_table'] ) || $notifier_plugin_data['activity_log_table'] !== 'yes' ) {
144 - self::create_notifier_activity_log_table();
145 - }
146 -
147 - $args = array();
148 - $as_clear_log = isset($notifier_plugin_data['as_clear_log']) ? $notifier_plugin_data['as_clear_log'] : 'no';
149 - if ($as_clear_log !== 'yes') {
150 - if (false === as_next_scheduled_action('notifier_clean_old_logs')) {
151 - as_schedule_recurring_action(time(), DAY_IN_SECONDS, 'notifier_clean_old_logs', $args);
152 - }
153 - }
154 - }
155 -
156 101 /**
157 102 * Check if plugin's page
158 103 */
159 104 public static function is_notifier_page() {
160 105 $current_screen = get_current_screen();
161 - if ( strpos( $current_screen->id, NOTIFIER_NAME ) !== false
162 - && strpos( $current_screen->id, 'order-notifications-for-woocommerce' ) === false
163 - ) {
106 + if ( strpos($current_screen->id, NOTIFIER_NAME) !== false) {
164 107 return true;
165 108 }
166 109
167 110 return false;
@@ -170,40 +113,42 @@
170 113 /**
171 114 * Add admin scripts and styles
172 115 */
173 116 public function admin_scripts () {
174 - if ( ! Notifier_Migration::is_migration_complete() && 'dismissed' !== get_option( 'notifier_migration_notice_dismissed' ) ) {
175 - wp_enqueue_script(
176 - 'notifier-admin',
177 - NOTIFIER_URL . 'assets/js/admin.js',
178 - array( 'jquery' ),
179 - NOTIFIER_VERSION,
180 - true
181 - );
182 - wp_localize_script( 'notifier-admin', 'notifier_migration', array(
183 - 'ajax_url' => admin_url( 'admin-ajax.php' ),
184 - 'nonce' => wp_create_nonce( 'notifier_dismiss_migration' ),
185 - ) );
186 - }
187 -
188 117 if (!self::is_notifier_page()) {
189 118 return;
190 119 }
191 120
192 - wp_enqueue_script(
193 - NOTIFIER_NAME . '-admin-react',
194 - NOTIFIER_URL . 'assets/js/admin-react.js',
195 - array(),
196 - NOTIFIER_VERSION,
197 - true
198 - );
121 + // Select2
122 + wp_enqueue_script(
123 + NOTIFIER_NAME . '-select2-js',
124 + NOTIFIER_URL . 'assets/js/select2.min.js',
125 + array('jquery'),
126 + NOTIFIER_VERSION,
127 + true
128 + );
199 129
200 - wp_enqueue_style(
201 - NOTIFIER_NAME . '-admin-css',
202 - NOTIFIER_URL . 'assets/css/admin.css',
203 - null,
204 - NOTIFIER_VERSION
205 - );
130 + // Admin JS file
131 + wp_enqueue_script(
132 + NOTIFIER_NAME . '-admin-js',
133 + NOTIFIER_URL . 'assets/js/admin.js',
134 + array('jquery'),
135 + NOTIFIER_VERSION,
136 + true
137 + );
138 + wp_localize_script(
139 + NOTIFIER_NAME . '-admin-js',
140 + 'notifierObj',
141 + apply_filters( 'notifier_js_variables', array('ajaxurl' => admin_url( 'admin-ajax.php' ) ) )
142 + );
143 +
144 + // Styles
145 + wp_enqueue_style(
146 + NOTIFIER_NAME . '-admin-css',
147 + NOTIFIER_URL . 'assets/css/admin.css',
148 + null,
149 + NOTIFIER_VERSION
150 + );
206 151 }
207 152
208 153 /**
209 154 * Add frontend scripts and styles
@@ -217,62 +162,29 @@
217 162 null,
218 163 NOTIFIER_VERSION
219 164 );
220 165 }
221 -
222 - if ( ! self::is_woo_handled_by_standalone_plugin() && 'yes' === get_option('notifier_enable_abandonment_cart_tracking', 'no') && class_exists('WooCommerce') && is_checkout() ) {
223 - wp_enqueue_script(
224 - NOTIFIER_NAME . '-js',
225 - NOTIFIER_URL . 'assets/js/script.js',
226 - array('jquery'),
227 - NOTIFIER_VERSION,
228 - true
229 - );
230 -
231 - wp_localize_script(
232 - NOTIFIER_NAME . '-js',
233 - 'notifierFrontObj',
234 - array(
235 - 'ajaxurl' => admin_url( 'admin-ajax.php' ),
236 - 'security' => wp_create_nonce('notifier_save_cart_abandonment_data'),
237 - )
238 - );
239 - }
240 166 }
241 167
242 168 /**
243 169 * Set up a div for the header embed to render into.
244 - * Only renders for legacy (non-SPA) pages like the trigger CPT editor.
245 - * SPA pages render the header via the React app.
170 + * The initial contents here are meant as a place loader for when the PHP page initialy loads.
246 171 */
247 172 public static function embed_page_header() {
248 173 if (!self::is_notifier_page()) {
249 174 return;
250 175 }
251 -
252 - $screen = get_current_screen();
253 - $spa_pages = array(
254 - 'toplevel_page_notifier',
255 - 'wanotifier_page_notifier-chat-button',
256 - 'wanotifier_page_notifier-settings',
257 - 'wanotifier_page_notifier-logs',
258 - 'wanotifier_page_notifier-migration',
259 - );
260 -
261 - if ( in_array( $screen->id, $spa_pages, true ) ) {
262 - return;
263 - }
264 -
265 - $cpt = ( '' !== $screen->post_type ) ? $screen->post_type : '';
176 + $current_screen = get_current_screen();
177 + $cpt = ( '' !== $current_screen->post_type) ? $current_screen->post_type : '';
178 + $tax = ( '' !== $current_screen->taxonomy) ? $current_screen->taxonomy : '';
266 179 ?>
267 180 <div id="notifier-admin-header" data-post-type="<?php echo esc_attr($cpt); ?>">
268 181 <div class="notifier-admin-header-content">
269 182 <div class="header-page-title w-30 d-flex align-content-center">
270 - <a class="header-logo" href="admin.php?page=notifier"><img src="<?php echo esc_url( NOTIFIER_URL . 'assets/images/favicon.svg' ); ?>"></a>
271 - <h2>WANotifier</h2>
183 + <a class="header-logo" href="admin.php?page=notifier"><img src="<?php echo NOTIFIER_URL; ?>assets/images/favicon.svg"></a>
184 + <h2><?php echo esc_attr(get_admin_page_title()); ?></h2>
272 185 </div>
273 186 <div class="header-action-links w-30 d-flex justify-content-end">
274 - <span class="review-us-link">Review us: <a href="https://wordpress.org/support/plugin/notifier/reviews/#new-post" target="_blank">⭐⭐⭐⭐⭐</a></span>
275 187 <span class="header-version">Version: <?php echo esc_html(NOTIFIER_VERSION); ?></span>
276 188 <a href="https://wanotifier.com/support/" target="_blank">Help</a>
277 189 </div>
278 190 </div>
@@ -295,15 +207,15 @@
295 207 'Content-Type' => 'application/json; charset=utf-8'
296 208 );
297 209 }
298 210
299 - $request_url = NOTIFIER_APP_BASE_URL . '/' . NOTIFIER_APP_API_PATH . '/' . $endpoint . '?key=' . esc_attr($api_key);
211 + $request_url = NOTIFIER_APP_API_URL . $endpoint . '?key=' . $api_key;
300 212 $request_args = array(
301 213 'method' => $method,
302 214 'headers' => $headers,
303 215 'timeout' => 120,
304 216 'body' => json_encode($args),
305 - 'sslverify' => true
217 + 'sslverify' => false
306 218 );
307 219
308 220 $response = wp_remote_request( $request_url, $request_args );
309 221
@@ -318,60 +230,22 @@
318 230 }
319 231 }
320 232
321 233 /**
322 - * Whether the standalone WANotifier for WooCommerce plugin is active and
323 - * has completed its connection/migration, meaning this plugin should defer
324 - * all Woo/WCAR functionality to it.
325 - *
326 - * @return bool
327 - */
328 - public static function is_woo_handled_by_standalone_plugin() {
329 - static $result = null;
330 - if ( null !== $result ) {
331 - return $result;
332 - }
333 -
334 - if ( ! function_exists( 'is_plugin_active' ) ) {
335 - require_once ABSPATH . 'wp-admin/includes/plugin.php';
336 - }
337 -
338 - if ( ! is_plugin_active( 'order-notifications-for-woocommerce/order-notifications-for-woocommerce.php' ) ) {
339 - $result = false;
340 - return false;
341 - }
342 -
343 - if ( 'complete' === get_option( 'wanowc_migration_status' ) ) {
344 - $result = true;
345 - return true;
346 - }
347 -
348 - if ( get_option( 'wanowc_conn_woocommerce_auth_key' ) || get_option( 'wanowc_conn_wcar_auth_key' ) ) {
349 - $result = true;
350 - return true;
351 - }
352 -
353 - $result = false;
354 - return false;
355 - }
356 -
357 - /**
358 234 * Load Woocommerce class if it's present is activated
359 235 */
360 236 public static function maybe_include_integrations () {
361 - $woo_handled = self::is_woo_handled_by_standalone_plugin();
362 -
363 - // Woocommerce — skip when the standalone plugin handles it
364 - if ( ! $woo_handled && class_exists( 'WooCommerce' ) ) {
237 + // Woocommerce
238 + if ( class_exists( 'WooCommerce' ) ) {
365 239 require_once NOTIFIER_PATH . 'includes/classes/integrations/class-notifier-woocommerce.php';
366 240 Notifier_Woocommerce::init();
367 241 }
368 - if ( ! $woo_handled && ! class_exists( 'WC_Session' ) && class_exists( 'WooCommerce' ) ) {
242 + if ( ! class_exists( 'WC_Session' ) ) {
369 243 include_once( WP_PLUGIN_DIR . '/woocommerce/includes/abstracts/abstract-wc-session.php' );
370 244 }
371 245
372 - // WooCommerce Cart Abandonment Recovery — skip when the standalone plugin handles it
373 - if ( ! $woo_handled && class_exists( 'CARTFLOWS_CA_Loader' ) && defined('CARTFLOWS_CA_VER') && version_compare(CARTFLOWS_CA_VER, '1.2.25', '>=')) {
246 + // WooCommerce Cart Abandonment Recovery by CartFlows
247 + if ( class_exists( 'CARTFLOWS_CA_Loader' ) && defined('CARTFLOWS_CA_VER') && version_compare(CARTFLOWS_CA_VER, '1.2.25', '>=')) {
374 248 require_once NOTIFIER_PATH . 'includes/classes/integrations/class-notifier-wcar.php';
375 249 Notifier_WCAR::init();
376 250 }
377 251
@@ -409,26 +283,8 @@
409 283 if ( function_exists( 'fluentFormApi' ) ) {
410 284 require_once NOTIFIER_PATH . 'includes/classes/integrations/class-notifier-fluentforms.php';
411 285 Notifier_FluentForms::init();
412 286 }
413 -
414 - //Forminator
415 - if ( class_exists( 'Forminator' ) ) {
416 - require_once NOTIFIER_PATH . 'includes/classes/integrations/class-notifier-forminator.php';
417 - Notifier_Forminator::init();
418 - }
419 -
420 - //SureForms
421 - if ( class_exists( 'SRFM\Plugin_Loader' ) ) {
422 - require_once NOTIFIER_PATH . 'includes/classes/integrations/class-notifier-sureforms.php';
423 - Notifier_SureForms::init();
424 - }
425 -
426 - //WS Form
427 - if ( class_exists( 'WS_Form' ) ) {
428 - require_once NOTIFIER_PATH . 'includes/classes/integrations/class-notifier-wsform.php';
429 - Notifier_WSForm::init();
430 - }
431 287 }
432 288
433 289 /**
434 290 * Is connection to WANotifier.com active?
@@ -442,80 +298,5 @@
442 298 return false;
443 299 }
444 300 }
445 301
446 - /**
447 - * Create New db table-- wanotifier_activity_log
448 - */
449 - public static function create_notifier_activity_log_table() {
450 - global $wpdb;
451 - $table_name = $wpdb->prefix . NOTIFIER_ACTIVITY_TABLE_NAME;
452 -
453 - $charset_collate = $wpdb->get_charset_collate();
454 -
455 - // Include IF NOT EXISTS clause in the CREATE TABLE query
456 - $sql = "CREATE TABLE IF NOT EXISTS $table_name (
457 - log_id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
458 - timestamp timestamp NOT NULL,
459 - message text NOT NULL,
460 - type varchar(16) NOT NULL,
461 - PRIMARY KEY (log_id),
462 - INDEX idx_timestamp (timestamp)
463 - ) $charset_collate;";
464 -
465 - require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
466 - dbDelta( $sql );
467 -
468 - $notifier_plugin_data = get_option('notifier_meta', array());
469 - $notifier_plugin_data['activity_log_table'] = 'yes';
470 - update_option('notifier_meta', $notifier_plugin_data);
471 - }
472 -
473 - /**
474 - * Delete old log from activity table according to interval
475 - */
476 - public function notifier_delete_old_activity_logs() {
477 - global $wpdb;
478 - $table_name = $wpdb->prefix . NOTIFIER_ACTIVITY_TABLE_NAME;
479 - $retention_time = apply_filters( 'notifier_logs_retention_time', 7 );
480 - $retention_time = intval($retention_time);
481 - $wpdb->query( $wpdb->prepare( "DELETE FROM `$table_name` WHERE timestamp <= DATE_SUB(NOW(), INTERVAL %d DAY)", $retention_time ) );
482 - }
483 -
484 - /**
485 - * Create New db table-- notifier_cart_abandonment
486 - */
487 - public static function create_cart_abandonment_table() {
488 - if ( self::is_woo_handled_by_standalone_plugin() ) {
489 - return;
490 - }
491 -
492 - $notifier_plugin_data = get_option('notifier_meta', array());
493 - if ( ! isset( $notifier_plugin_data['cart_abandonment_table'] ) || $notifier_plugin_data['cart_abandonment_table'] !== 'yes' ) {
494 - global $wpdb;
495 - $table_name = $wpdb->prefix . NOTIFIER_CART_ABANDONMENT_TABLE;
496 - $charset_collate = $wpdb->get_charset_collate();
497 -
498 - // Updated CREATE TABLE query for notifier_cart_abandonment table
499 - $sql = "CREATE TABLE IF NOT EXISTS $table_name (
500 - session_id BIGINT(20) AUTO_INCREMENT PRIMARY KEY,
501 - session_key VARCHAR(16) NULL,
502 - phone_number VARCHAR(15) NULL,
503 - cart_data LONGTEXT NULL,
504 - cart_total DECIMAL(10,2) NULL,
505 - coupon_data LONGTEXT NULL,
506 - customer_data LONGTEXT NULL,
507 - order_id BIGINT(11) DEFAULT 0,
508 - triggered TINYINT(1) DEFAULT 0,
509 - created_time DATETIME NULL,
510 - updated_time DATETIME NULL,
511 - KEY session_key (session_key) -- Index for session_key
512 - ) $charset_collate;";
513 -
514 - require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
515 - dbDelta( $sql );
516 -
517 - $notifier_plugin_data['cart_abandonment_table'] = 'yes';
518 - update_option('notifier_meta', $notifier_plugin_data);
519 - }
520 - }
521 302 }