PluginProbe
WANotifier for Forms and Actions / 2.6.1
WANotifier for Forms and Actions v2.6.1
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 +53 -195 trunk2.6.1 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,14 @@
26 22 /**
27 23 * Define Constants.
28 24 */
29 25 private function define_constants() {
30 - $this->define( 'NOTIFIER_VERSION', '3.1.0' );
26 + $this->define( 'NOTIFIER_VERSION', '2.6.1' );
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' );
30 + $this->define( 'NOTIFIER_APP_API_URL', 'https://app.wanotifier.com/api/v1/' );
36 31 $this->define( 'NOTIFIER_ACTIVITY_TABLE_NAME', 'notifier_activity_log' );
37 - $this->define( 'NOTIFIER_CART_ABANDONMENT_TABLE', 'notifier_cart_abandonment' );
38 32 }
39 33
40 34 /**
41 35 * Define constant if not already set.
@@ -66,18 +60,19 @@
66 60 */
67 61 private function includes() {
68 62 // Functions
69 63 require_once NOTIFIER_PATH . 'includes/functions/functions-notifier-helpers.php';
64 + require_once NOTIFIER_PATH . 'includes/functions/functions-notifier-meta-box-fields.php';
70 65 require_once NOTIFIER_PATH . 'libraries/action-scheduler/action-scheduler.php';
71 66
72 67 // Classes
73 68 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';
69 + require_once NOTIFIER_PATH . 'includes/classes/class-notifier-dashboard.php';
77 70 require_once NOTIFIER_PATH . 'includes/classes/class-notifier-notification-merge-tags.php';
78 71 require_once NOTIFIER_PATH . 'includes/classes/class-notifier-notification-triggers.php';
72 + require_once NOTIFIER_PATH . 'includes/classes/class-notifier-settings.php';
79 73 require_once NOTIFIER_PATH . 'includes/classes/class-notifier-frontend.php';
74 + require_once NOTIFIER_PATH . 'includes/classes/class-notifier-tools.php';
80 75 }
81 76
82 77 /**
83 78 * Hook into actions and filters.
@@ -86,13 +81,12 @@
86 81 register_activation_hook ( NOTIFIER_FILE, array( $this, 'activate') );
87 82 register_deactivation_hook ( NOTIFIER_FILE, array( $this, 'deactivate') );
88 83
89 84 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' ) );
85 + add_action( 'after_setup_theme', array( 'Notifier_Dashboard', 'init' ) );
93 86 add_action( 'after_setup_theme', array( 'Notifier_Notification_Merge_Tags', 'init' ) );
94 87 add_action( 'after_setup_theme', array( 'Notifier_Notification_Triggers', 'init' ) );
88 + add_action( 'after_setup_theme', array( 'Notifier_Settings', 'init' ) );
95 89 add_action( 'after_setup_theme', array( 'Notifier_Frontend', 'init' ) );
96 90 add_action( 'admin_enqueue_scripts', array( $this , 'admin_scripts') );
97 91 add_action( 'wp_enqueue_scripts', array( $this , 'frontend_scripts') );
98 92 add_action( 'in_admin_header', array( $this , 'embed_page_header' ) );
@@ -97,24 +91,15 @@
97 91 add_action( 'wp_enqueue_scripts', array( $this , 'frontend_scripts') );
98 92 add_action( 'in_admin_header', array( $this , 'embed_page_header' ) );
99 93
100 94 add_action( 'after_setup_theme', array( $this, 'maybe_include_integrations' ) );
95 + add_action( 'after_setup_theme', array( 'Notifier_Tools', 'init' ) );
101 96
102 - add_action( 'init', array( $this, 'load_textdomain' ) );
103 97 add_action( 'wp_loaded', array( $this, 'setup_activity_log' ) );
104 98 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 99 }
108 100
109 101 /**
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 102 * Setup during plugin activation
118 103 */
119 104 public function activate() {
120 105 $notifier_plugin_data = get_option('notifier_meta', array());
@@ -127,9 +112,8 @@
127 112 /**
128 113 * Setup during plugin deactivation
129 114 */
130 115 public function deactivate() {
131 - as_unschedule_action('notifier_check_cart_abandonment');
132 116 as_unschedule_action('notifier_clean_old_logs');
133 117 $notifier_plugin_data = get_option('notifier_meta', array());
134 118 $notifier_plugin_data['as_clear_log'] = 'yes';
135 119 update_option('notifier_meta', $notifier_plugin_data);
@@ -139,9 +123,9 @@
139 123 * Check if the plugin was updated and run the upgrade routine if necessary.
140 124 */
141 125 public function setup_activity_log() {
142 126 $notifier_plugin_data = get_option('notifier_meta', array());
143 - if ( ! isset( $notifier_plugin_data['activity_log_table'] ) || $notifier_plugin_data['activity_log_table'] !== 'yes' ) {
127 + if (!isset($notifier_plugin_data['activity_log_table']) && $notifier_plugin_data['activity_log_table'] !== 'yes') {
144 128 self::create_notifier_activity_log_table();
145 129 }
146 130
147 131 $args = array();
@@ -157,11 +141,9 @@
157 141 * Check if plugin's page
158 142 */
159 143 public static function is_notifier_page() {
160 144 $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 - ) {
145 + if ( strpos($current_screen->id, NOTIFIER_NAME) !== false) {
164 146 return true;
165 147 }
166 148
167 149 return false;
@@ -170,40 +152,42 @@
170 152 /**
171 153 * Add admin scripts and styles
172 154 */
173 155 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 156 if (!self::is_notifier_page()) {
189 157 return;
190 158 }
191 159
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 - );
160 + // Select2
161 + wp_enqueue_script(
162 + NOTIFIER_NAME . '-select2-js',
163 + NOTIFIER_URL . 'assets/js/select2.min.js',
164 + array('jquery'),
165 + NOTIFIER_VERSION,
166 + true
167 + );
199 168
200 - wp_enqueue_style(
201 - NOTIFIER_NAME . '-admin-css',
202 - NOTIFIER_URL . 'assets/css/admin.css',
203 - null,
204 - NOTIFIER_VERSION
205 - );
169 + // Admin JS file
170 + wp_enqueue_script(
171 + NOTIFIER_NAME . '-admin-js',
172 + NOTIFIER_URL . 'assets/js/admin.js',
173 + array('jquery'),
174 + NOTIFIER_VERSION,
175 + true
176 + );
177 + wp_localize_script(
178 + NOTIFIER_NAME . '-admin-js',
179 + 'notifierObj',
180 + apply_filters( 'notifier_js_variables', array('ajaxurl' => admin_url( 'admin-ajax.php' ) ) )
181 + );
182 +
183 + // Styles
184 + wp_enqueue_style(
185 + NOTIFIER_NAME . '-admin-css',
186 + NOTIFIER_URL . 'assets/css/admin.css',
187 + null,
188 + NOTIFIER_VERSION
189 + );
206 190 }
207 191
208 192 /**
209 193 * Add frontend scripts and styles
@@ -217,59 +201,27 @@
217 201 null,
218 202 NOTIFIER_VERSION
219 203 );
220 204 }
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 205 }
241 206
242 207 /**
243 208 * 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.
209 + * The initial contents here are meant as a place loader for when the PHP page initialy loads.
246 210 */
247 211 public static function embed_page_header() {
248 212 if (!self::is_notifier_page()) {
249 213 return;
250 214 }
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 : '';
215 + $current_screen = get_current_screen();
216 + $cpt = ( '' !== $current_screen->post_type) ? $current_screen->post_type : '';
217 + $tax = ( '' !== $current_screen->taxonomy) ? $current_screen->taxonomy : '';
266 218 ?>
267 219 <div id="notifier-admin-header" data-post-type="<?php echo esc_attr($cpt); ?>">
268 220 <div class="notifier-admin-header-content">
269 221 <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>
222 + <a class="header-logo" href="admin.php?page=notifier"><img src="<?php echo NOTIFIER_URL; ?>assets/images/favicon.svg"></a>
223 + <h2><?php echo esc_attr(get_admin_page_title()); ?></h2>
272 224 </div>
273 225 <div class="header-action-links w-30 d-flex justify-content-end">
274 226 <span class="review-us-link">Review us: <a href="https://wordpress.org/support/plugin/notifier/reviews/#new-post" target="_blank">⭐⭐⭐⭐⭐</a></span>
275 227 <span class="header-version">Version: <?php echo esc_html(NOTIFIER_VERSION); ?></span>
@@ -295,15 +247,15 @@
295 247 'Content-Type' => 'application/json; charset=utf-8'
296 248 );
297 249 }
298 250
299 - $request_url = NOTIFIER_APP_BASE_URL . '/' . NOTIFIER_APP_API_PATH . '/' . $endpoint . '?key=' . esc_attr($api_key);
251 + $request_url = NOTIFIER_APP_API_URL . $endpoint . '?key=' . esc_attr($api_key);
300 252 $request_args = array(
301 253 'method' => $method,
302 254 'headers' => $headers,
303 255 'timeout' => 120,
304 256 'body' => json_encode($args),
305 - 'sslverify' => true
257 + 'sslverify' => false
306 258 );
307 259
308 260 $response = wp_remote_request( $request_url, $request_args );
309 261
@@ -318,60 +270,22 @@
318 270 }
319 271 }
320 272
321 273 /**
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 274 * Load Woocommerce class if it's present is activated
359 275 */
360 276 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' ) ) {
277 + // Woocommerce
278 + if ( class_exists( 'WooCommerce' ) ) {
365 279 require_once NOTIFIER_PATH . 'includes/classes/integrations/class-notifier-woocommerce.php';
366 280 Notifier_Woocommerce::init();
367 281 }
368 - if ( ! $woo_handled && ! class_exists( 'WC_Session' ) && class_exists( 'WooCommerce' ) ) {
282 + if ( ! class_exists( 'WC_Session' ) ) {
369 283 include_once( WP_PLUGIN_DIR . '/woocommerce/includes/abstracts/abstract-wc-session.php' );
370 284 }
371 285
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', '>=')) {
286 + // WooCommerce Cart Abandonment Recovery by CartFlows
287 + if ( class_exists( 'CARTFLOWS_CA_Loader' ) && defined('CARTFLOWS_CA_VER') && version_compare(CARTFLOWS_CA_VER, '1.2.25', '>=')) {
374 288 require_once NOTIFIER_PATH . 'includes/classes/integrations/class-notifier-wcar.php';
375 289 Notifier_WCAR::init();
376 290 }
377 291
@@ -409,26 +323,8 @@
409 323 if ( function_exists( 'fluentFormApi' ) ) {
410 324 require_once NOTIFIER_PATH . 'includes/classes/integrations/class-notifier-fluentforms.php';
411 325 Notifier_FluentForms::init();
412 326 }
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 327 }
432 328
433 329 /**
434 330 * Is connection to WANotifier.com active?
@@ -478,44 +374,6 @@
478 374 $table_name = $wpdb->prefix . NOTIFIER_ACTIVITY_TABLE_NAME;
479 375 $retention_time = apply_filters( 'notifier_logs_retention_time', 7 );
480 376 $retention_time = intval($retention_time);
481 377 $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 378 }
521 379 }