PluginProbe
NotificationX – FOMO, Live Sales Notification, WooCommerce Sales Popup, GDPR, Social Proof, Announcement Banner & Floating Notification Bar / 3.3.1
NotificationX – FOMO, Live Sales Notification, WooCommerce Sales Popup, GDPR, Social Proof, Announcement Banner & Floating Notification Bar v3.3.1
3.3.1 3.3.0 3.2.14 3.2.13 3.2.12 3.2.11 3.2.10 3.2.9 3.2.8 3.2.7 trunk 0.2.5.5 0.2.5.6 0.2.5.7 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 1.2.0 1.2.1 All 156 releases
notificationx / includes / Core / Migration.php

Migration.php in NotificationX – FOMO, Live Sales Notification, WooCommerce Sales Popup, GDPR, Social Proof, Announcement Banner & Floating Notification Bar 3.3.1, at includes/Core/Migration.php

1,285 lines 67.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Extension Factory
5 *
6 * @package NotificationX\Extensions
7 */
8
9 namespace NotificationX\Core;
10
11 use NotificationX\Admin\Cron;
12 use NotificationX\Admin\Settings;
13 use NotificationX\Extensions\ConvertKit\ConvertKit;
14 use NotificationX\Extensions\CustomNotification\CustomNotification;
15 use NotificationX\Extensions\CustomNotification\CustomNotificationConversions;
16 use NotificationX\Extensions\Envato\Envato;
17 use NotificationX\Extensions\ExtensionFactory;
18 use NotificationX\Extensions\Freemius\FreemiusConversions;
19 use NotificationX\Extensions\Freemius\FreemiusReviews;
20 use NotificationX\Extensions\Freemius\FreemiusStats;
21 use NotificationX\Extensions\Google_Analytics\Google_Analytics;
22 use NotificationX\Extensions\MailChimp\MailChimp;
23 use NotificationX\Extensions\WooCommerce\WooCommerce as WooCommerce;
24 use NotificationX\Extensions\WordPress\WPOrgReview;
25 use NotificationX\Extensions\WordPress\WPOrgStats;
26 use NotificationX\GetInstance;
27 use NotificationX\Types\Conversions;
28 use NotificationXPro\Feature\SalesFeatures;
29
30 /**
31 * Migration Class
32 * @method static Migration get_instance($args = null)
33 */
34 class Migration {
35 /**
36 * Instance of Migration
37 *
38 * @var Migration
39 */
40 use GetInstance;
41
42 private $stats = [];
43
44 /**
45 * Initially Invoked when initialized.
46 */
47 public function __construct() {
48 // Runs on `init`, not `plugins_loaded`: migrate_posts() re-arms each
49 // notification's cron through Cron::set_cron(), and wp_schedule_event()
50 // -> wp_get_schedules() fires the `cron_schedules` filter, whose
51 // callbacks (NX Free/Pro, WooCommerce, ...) translate their interval
52 // labels. Doing that before `init` triggers WordPress'
53 // _load_textdomain_just_in_time "called too early" notice (WP 6.7+).
54 add_action('init', [$this, 'plugins_loaded'], 1);
55 }
56
57 public function plugins_loaded() {
58 // @todo check version.
59 global $wpdb;
60 $wpdb->show_errors();
61 $this->migrate_options();
62 $posts = $this->migrate_posts();
63 $this->migrate_entries($posts);
64
65 // delete options
66 // @todo uncomment
67 // delete_option('notificationx_data');
68 // delete_option('notificationx_settings');
69 }
70
71 public function migrate_options() {
72 $settings = get_option('notificationx_settings', []);
73 if($settings){
74 if(!empty($settings['nx_modules'])){
75 $settings['modules'] = $settings['nx_modules'];
76 unset($settings['nx_modules']);
77 }
78 $settings['is_migrated'] = true;
79 Settings::get_instance()->set('settings', $settings);
80
81 $ga_option_key = Google_Analytics::get_instance()->option_key;
82 $pa_options = get_option($ga_option_key, []);
83 if($pa_options){
84 Settings::get_instance()->set("settings.{$ga_option_key}", $pa_options);
85 }
86 if(!empty($settings['ga_profile'])){
87 $ga_profile = $settings['ga_profile'];
88 Settings::get_instance()->set("settings.ga_profile", $ga_profile);
89 }
90
91
92 $convertkit_api_key = get_option( 'nxpro_convertkit_api_key', '' );
93 $convertkit_api_secret = get_option( 'nxpro_convertkit_api_secret', '' );
94 Settings::get_instance()->set('settings.convertkit_api_key', $convertkit_api_key);
95 Settings::get_instance()->set('settings.convertkit_api_secret', $convertkit_api_secret);
96
97 }
98
99 // @todo move to ReportEmail.php
100 $nx_daily = get_option("nx_daily_mail_sent", false);
101 $nx_weekly = get_option("nx_weekly_mail_sent", false);
102 $nx_monthly = get_option("nx_monthly_mail_sent", false);
103 Settings::get_instance()->set("reporting", [
104 'mail_sent' => [
105 'daily' => $nx_daily,
106 'weekly' => $nx_weekly,
107 'monthly' => $nx_monthly,
108 ]
109 ]);
110 }
111
112 public function migrate_posts() {
113 global $wpdb;
114 $posts = [];
115 $post_meta = [];
116 $query = "SELECT * FROM $wpdb->posts WHERE post_type = 'notificationx'"; // AND ID = $id
117 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching, WordPress.DB.PreparedSQL.NotPrepared -- False positive: the query is prepared via $this->wpdb->prepare(), which this sniff does not recognise, and only $wpdb->prefix table names are interpolated. Audited 2026-07-16.
118 $_posts = $wpdb->get_results($query, ARRAY_A);
119 // $nx_ids = array_column($_posts, 'ID');
120
121 if(empty($_posts)) return false;
122
123 // $nx_ids = implode(", ", $nx_ids);
124 // $main_query = "SELECT * FROM $wpdb->postmeta WHERE post_id IN ( $nx_ids )";
125 // $_post_meta = $wpdb->get_results($main_query, ARRAY_A);
126
127 // foreach ($_post_meta as $meta) {
128 // $pid = $meta['post_id'];
129 // $key = $meta['meta_key'];
130 // $_value = maybe_unserialize($meta['meta_value']);
131 // if ($key == '_nx_meta' && is_array($_value)) {
132 // foreach ($_value as $key => $value) {
133 // $post_meta[$pid]["_nx_meta_$key"] = $value;
134 // }
135 // } else {
136 // if( $key === "_nx_meta_impression_per_day" ) {
137 // $post_meta[$pid][$key][] = $_value;
138 // } else {
139 // $post_meta[$pid][$key] = $_value;
140 // }
141 // }
142 // }
143 // wp_send_json($post_meta);
144
145 foreach ($_posts as $key => $post) {
146 if ($post['post_type'] != 'notificationx' || $post['post_status'] == 'auto-draft' || $post['post_status'] == 'draft') { // && $post['post_status'] == 'trash'
147 continue;
148 }
149
150 $pid = $post['ID'];
151
152 $is_exist = PostType::get_instance()->get_col('nx_id', ['nx_id' => $pid]);
153
154 if (empty($is_exist)) {
155 try {
156 $post_meta = $this->get_normalize_meta( $pid );
157 if(!empty($post_meta)){
158 // we need to do create post first so that we can save entries.
159 $nx_id = PostType::get_instance()->insert_post([
160 'nx_id' => $post['ID'],
161 'title' => $post['post_title'],
162 ]);
163 $post = array_merge($post, $post_meta, ['nx_id' => $nx_id]);
164 $data = $this->migrate_post($post);
165 $posts[$pid] = [ 'source' => $data['source'] ];
166 $this->migrate_stats($post);
167 $post_date = (!empty($post['post_date_gmt']) && $post['post_date_gmt'] != '0000-00-00 00:00:00' ) ? $post['post_date_gmt'] : get_gmt_from_date($post['post_date']);
168 $post_modified = (!empty($post['post_modified_gmt']) && $post['post_modified_gmt'] != '0000-00-00 00:00:00' ) ? $post['post_modified_gmt'] : get_gmt_from_date($post['post_modified']);
169 $status = !empty($data['enabled']) ? $data['enabled'] : false;
170 if($post['post_status'] == 'trash'){
171 $status = false;
172 $data['trash'] = true;
173 // $post['post_title'] = "Trash > " . $post['post_title'];
174 }
175
176 PostType::get_instance()->update_post([
177 'nx_id' => $data['nx_id'],
178 'type' => $data['type'],
179 'source' => $data['source'],
180 'theme' => $data['themes'],
181 'global_queue' => !empty($data['global_queue']) ? $data['global_queue'] : false,
182 'enabled' => $status,
183 'title' => $post['post_title'],
184 'data' => $data,
185 'created_at' => $post_date,
186 'updated_at' => $post_modified,
187 ], $nx_id);
188 }
189
190 } catch (\Exception $e) {
191 //throw $th;
192 }
193 }
194 }
195
196 // delete post & meta;
197 // @todo uncomment
198 // $query = "DELETE FROM $wpdb->posts WHERE ID in ($nx_ids)"; // AND ID = $id
199 // $wpdb->query($query);
200 // $query = "DELETE FROM $wpdb->postmeta WHERE post_id in ($nx_ids)"; // AND ID = $id
201 // $wpdb->query($query);
202
203 return $posts;
204 }
205
206 public function get_normalize_meta( $id ){
207 $metas = get_post_meta( $id );
208 $_metas = [];
209 if( ! empty( $metas ) && is_array( $metas ) ) {
210 array_walk( $metas, function( $value, $key ) use ( &$_metas ) {
211 $_value = maybe_unserialize( $value[0] );
212 if ($key == '_nx_meta' && is_array($_value)) {
213 foreach ($_value as $_key => $value) {
214 $_metas["_nx_meta_$_key"] = $value;
215 }
216 } else {
217 if( $key === "_nx_meta_impression_per_day" ) {
218 $_metas[$key][] = $_value;
219 } else {
220 $_metas[$key] = $_value;
221 }
222 }
223 });
224 }
225
226 return $_metas;
227 }
228
229 public function migrate_post($_post) {
230 $post = [];
231 // get() function use $this->_post
232 $this->_post = $_post;
233 $nx_id = $this->get('ID');
234
235 $post['id'] = $this->get('ID');
236 $post['nx_id'] = $this->get('ID');
237 $post['title'] = $this->get('post_title');
238 $post['type'] = $this->get('_nx_meta_display_type');
239 $post['currentTab'] = $this->get('_nx_builder_current_tab');
240 $post['enabled'] = $this->get('_nx_meta_active_check');
241 $post['is_migrated'] = true;
242
243 $post['utm_campaign'] = $this->get("_nx_meta_utm_campaign");
244 $post['utm_medium'] = $this->get("_nx_meta_utm_medium");
245 $post['utm_source'] = $this->get("_nx_meta_utm_source");
246 $post['utm_source'] = $this->get("_nx_meta_utm_source");
247
248 // Display
249 $post['show_on'] = $this->get("_nx_meta_show_on");
250 $post['all_locations'] = $this->get("_nx_meta_all_locations");
251 $post['show_on_display'] = $this->get("_nx_meta_show_on_display");
252
253 $post['notification-template'] = [];
254
255 // Customize
256 $post['position'] = $this->get("_nx_meta_conversion_position");
257 $post['size'] = $this->get("_nx_meta_conversion_size");
258 $post['close_button'] = (bool) $this->get("_nx_meta_close_button");
259 $post['hide_on_mobile'] = (bool) $this->get("_nx_meta_hide_on_mobile");
260 $post['global_queue'] = (bool) $this->get("_nx_meta_global_queue_active");
261 $post['delay_before'] = $this->get("_nx_meta_delay_before");
262 $post['initial_delay'] = $this->get("_nx_meta_initial_delay");
263 $post['auto_hide'] = $this->get("_nx_meta_auto_hide");
264 $post['hide_after'] = $this->get("_nx_meta_hide_after");
265 $post['display_for'] = $this->get("_nx_meta_display_for");
266 $post['delay_between'] = $this->get("_nx_meta_delay_between");
267 $post['display_last'] = $this->get("_nx_meta_display_last");
268 $post['display_from'] = $this->get("_nx_meta_display_from");
269 $post['loop'] = (bool) $this->get("_nx_meta_loop");
270 $post['link_open'] = (bool) $this->get("_nx_meta_link_open");
271 $post['custom_ids'] = $this->get("_nx_meta_custom_ids");
272 if ($this->get("_nx_meta_sound_checkbox")) {
273 $post['volume'] = $this->get("_nx_meta_volume") * 100;
274 }
275
276 // Display Tab
277 $post['show_notification_image'] = $this->get("_nx_meta_show_notification_image");
278 $post['show_default_image'] = (bool) $this->get("_nx_meta_show_default_image");
279 $post['default_avatar'] = $this->get("_nx_meta_default_avatar");
280 $post['image_url'] = $this->get("_nx_meta_image_url");
281
282
283 switch ($post['type']) {
284 case 'conversions':
285 // Source Tab
286 $post['source'] = $this->get("_nx_meta_conversion_from");
287
288 // Theme Tab
289 $post['themes'] = $this->get("_nx_meta_theme");
290 $post['advance_edit'] = $this->get("_nx_meta_advance_edit");
291 $post['bg_color'] = $this->get("_nx_meta_bg_color");
292 $post['text_color'] = $this->get("_nx_meta_text_color");
293 $post['border'] = $this->get("_nx_meta_border");
294 $post['border_size'] = $this->get("_nx_meta_border_size");
295 $post['border_style'] = $this->get("_nx_meta_border_style");
296 $post['border_color'] = $this->get("_nx_meta_border_color");
297 $post['image_shape'] = $this->get("_nx_meta_image_shape");
298 $post['image_position'] = $this->get("_nx_meta_image_position");
299 $post['custom_image_shape'] = $this->get("_nx_meta_image_custom_shape");
300 $post['first_font_size'] = $this->get("_nx_meta_first_font_size");
301 $post['second_font_size'] = $this->get("_nx_meta_second_font_size");
302 $post['third_font_size'] = $this->get("_nx_meta_third_font_size");
303
304 // Content Tab
305 $post['notification-template'] = $this->get("_nx_meta_woo_template_new");
306 if($post['template_adv'] = $this->get("_nx_meta_woo_template_adv")){
307 $post['advanced_template'] = $this->get("_nx_meta_woo_template");
308 }
309
310 $post['combine_multiorder'] = $this->get("_nx_meta_combine_multiorder");
311 $post['combine_multiorder_text'] = $this->get("_nx_meta_combine_multiorder_text");
312 $post['random_order'] = $this->get("_nx_meta_random_order");
313
314 $post['link_type'] = $this->get("_nx_meta_conversion_url");
315 $post['custom_url'] = $this->get("_nx_meta_conversions_custom_url");
316
317 $post['sound'] = $this->get("_nx_meta_conversions_sound");
318
319
320 switch ($post['source']) {
321 case 'woocommerce':
322 $post['product_control'] = $this->get("_nx_meta_product_control");
323 $post['category_list'] = $this->get("_nx_meta_category_list");
324 $post['product_list'] = $this->get("_nx_meta_product_list");
325 $post['product_exclude_by'] = $this->get("_nx_meta_product_exclude_by");
326 $post['exclude_categories'] = $this->get("_nx_meta_exclude_categories");
327 $post['exclude_products'] = $this->get("_nx_meta_exclude_products");
328 break;
329 case 'edd':
330 $post['product_control'] = $this->get("_nx_meta_edd_product_control");
331 $post['category_list'] = $this->get("_nx_meta_edd_category_list");
332 $post['product_list'] = $this->get("_nx_meta_edd_product_list");
333 $post['product_exclude_by'] = $this->get("_nx_meta_edd_product_exclude_by");
334 $post['exclude_categories'] = $this->get("_nx_meta_edd_exclude_categories");
335 $post['exclude_products'] = $this->get("_nx_meta_edd_exclude_products");
336 break;
337 case 'surecart':
338 $post['product_control'] = $this->get("_nx_meta_surecart_product_control");
339 $post['category_list'] = $this->get("_nx_meta_surecart_category_list");
340 $post['product_list'] = $this->get("_nx_meta_surecart_product_list");
341 $post['product_exclude_by'] = $this->get("_nx_meta_surecart_product_exclude_by");
342 $post['exclude_categories'] = $this->get("_nx_meta_surecart_exclude_categories");
343 $post['exclude_products'] = $this->get("_nx_meta_surecart_exclude_products");
344 break;
345 case 'freemius':
346 if( boolval( $post['enabled'] ) ) {
347 Cron::get_instance()->set_cron($nx_id, 'nx_freemius_interval');
348 }
349 $post['source'] = 'freemius_conversions';
350 $post['freemius_item_type'] = $this->get("_nx_meta_freemius_item_type");
351 $post['freemius_themes'] = $this->get("_nx_meta_freemius_themes");
352 $post['freemius_plugins'] = $this->get("_nx_meta_freemius_plugins");
353
354 $sales = $this->get("_nx_meta_freemius_content");
355 $freemius = FreemiusConversions::get_instance();
356 if(is_array($sales)){
357 foreach ($sales as $key => $sale) {
358 $sales[$key] = [
359 'nx_id' => $_post['nx_id'],
360 'source' => $freemius->id,
361 'entry_key' => $sale['id'],
362 'data' => $sale,
363 ];
364 }
365 $freemius->update_notifications($sales);
366 }
367
368 break;
369 case 'zapier':
370 $post['source'] = 'zapier_conversions';
371 break;
372 case 'envato':
373 if( boolval( $post['enabled'] ) ) {
374 Cron::get_instance()->set_cron($nx_id, 'nx_envato_interval');
375 }
376 $sales = $this->get('_nx_meta_envato_content');
377 $envato = Envato::get_instance();
378 if(is_array($sales)){
379 foreach ($sales as $key => $sale) {
380 $sales[$key] = [
381 'nx_id' => $_post['nx_id'],
382 'source' => $envato->id,
383 'entry_key' => $sale['id'],
384 'data' => $sale,
385 ];
386 }
387 $envato->update_notifications($sales);
388 }
389
390 break;
391 case 'custom_notification':
392 // $post['themes'] = $this->get("_nx_meta_theme");
393 $post['sound'] = $this->get("_nx_meta_custom_sound");
394 $custom_notification = CustomNotificationConversions::get_instance();
395 $post['source'] = $custom_notification->id;
396 $post['custom_contents'] = $this->get('_nx_meta_custom_contents');
397 if(is_array($post['custom_contents'])){
398 foreach($post['custom_contents'] as &$entry){
399 if((empty($entry['name']) || $entry['name'] == __('Someone', 'notificationx')) && isset($entry['first_name']) || isset($entry['last_name'])){
400 $entry['name'] = Helper::name($entry['first_name'], $entry['last_name']);
401 }
402 if(!empty($entry['name']) && empty($entry['first_name']) && empty($entry['last_name'])){
403 $entry['first_name'] = $entry['name'];
404 }
405 }
406 }
407 break;
408 default:
409 # code...
410 break;
411 }
412
413 break;
414 case 'comments':
415 // Source Tab
416 $post['source'] = $this->get('_nx_meta_comments_source');
417 $post['themes'] = $this->get('_nx_meta_comment_theme');
418 $post['advance_edit'] = $this->get('_nx_meta_comment_advance_edit');
419
420
421 // Theme Tab
422 $post['bg_color'] = $this->get('_nx_meta_comment_bg_color');
423 $post['text_color'] = $this->get('_nx_meta_comment_text_color');
424 $post['border'] = $this->get('_nx_meta_comment_border');
425 $post['border_size'] = $this->get('_nx_meta_comment_border_size');
426 $post['border_style'] = $this->get('_nx_meta_comment_border_style');
427 $post['border_color'] = $this->get('_nx_meta_comment_border_color');
428 $post['image_shape'] = $this->get("_nx_meta_comment_image_shape");
429 $post['image_position'] = $this->get("_nx_meta_comment_image_position");
430 $post['custom_image_shape'] = $this->get("_nx_meta_comment_image_custom_shape");
431 $post['first_font_size'] = $this->get("_nx_meta_comment_first_font_size");
432 $post['second_font_size'] = $this->get("_nx_meta_comment_second_font_size");
433 $post['third_font_size'] = $this->get("_nx_meta_comment_third_font_size");
434
435 // Content Tab
436 $post['notification-template'] = $this->get("_nx_meta_comments_template_new");
437 if($post['template_adv'] = $this->get("_nx_meta_comments_template_adv")){
438 $post['advanced_template'] = $this->get("_nx_meta_comments_template");
439 }
440
441 $post['content_trim_length'] = $this->get('_nx_meta_content_trim_length');
442 $post['link_type'] = $this->get("_nx_meta_comments_url");
443 $post['custom_url'] = $this->get("_nx_meta_comments_custom_url");
444 $show_avatar = $this->get("_nx_meta_show_avatar");
445 if($show_avatar){
446 $post['show_notification_image'] = 'gravatar';
447 }
448
449 $post['sound'] = $this->get("_nx_meta_comments_sound");
450
451 switch ($post['source']) {
452 case 'wp_comments':
453 # code...
454 break;
455 default:
456 # code...
457 break;
458 }
459 break;
460 case 'reviews':
461 // Source Tab
462 $post['source'] = $this->get('_nx_meta_reviews_source');
463 $post['themes'] = $this->get('_nx_meta_wporg_theme');
464 $post['advance_edit'] = $this->get('_nx_meta_wporg_advance_edit');
465
466 // Theme Tab
467 $post['bg_color'] = $this->get('_nx_meta_wporg_bg_color');
468 $post['text_color'] = $this->get('_nx_meta_wporg_text_color');
469 $post['border'] = $this->get('_nx_meta_wporg_border');
470 $post['border_size'] = $this->get('_nx_meta_wporg_border_size');
471 $post['border_style'] = $this->get('_nx_meta_wporg_border_style');
472 $post['border_color'] = $this->get('_nx_meta_wporg_border_color');
473 $post['image_shape'] = $this->get("_nx_meta_wporg_image_shape");
474 $post['image_position'] = $this->get("_nx_meta_wporg_image_position");
475 $post['first_font_size'] = $this->get("_nx_meta_wporg_first_font_size");
476 $post['second_font_size'] = $this->get("_nx_meta_wporg_second_font_size");
477 $post['third_font_size'] = $this->get("_nx_meta_wporg_third_font_size");
478
479 // Content Tab
480 $post['wp_reviews_product_type'] = $this->get("_nx_meta_wp_reviews_product_type");
481 $post['wp_reviews_slug'] = $this->get("_nx_meta_wp_reviews_slug");
482 if ($post['themes'] == 'review_saying') {
483 $post['notification-template'] = $this->get("_nx_meta_review_saying_template_new");
484 } else {
485 $post['notification-template'] = $this->get("_nx_meta_wp_reviews_template_new");
486 }
487 if($post['template_adv'] = $this->get("_nx_meta_wp_reviews_template_adv")){
488 $post['advanced_template'] = $this->get("_nx_meta_wp_reviews_template");
489 }
490
491 $post['content_trim_length'] = $this->get('_nx_meta_content_trim_length');
492 $post['link_type'] = $this->get("_nx_meta_rs_url");
493 $post['custom_url'] = $this->get("_nx_meta_rs_custom_url");
494
495 $post['sound'] = $this->get("_nx_meta_reviews_sound");
496
497 switch ($post['source']) {
498 case 'wp_reviews':
499 if( boolval( $post['enabled'] ) ) {
500 Cron::get_instance()->set_cron($nx_id, 'nx_wp_review_interval');
501 }
502
503 $plugin_data = $this->get('_nx_meta_wporg_review_content');
504 if (!empty($plugin_data['reviews'])) {
505 $reviews = $plugin_data['reviews'];
506 unset($plugin_data['reviews']);
507 $WPR = WPOrgReview::get_instance();
508 if(is_array($reviews)){
509 foreach ($reviews as $key => $review) {
510 $reviews[$key] = [
511 'nx_id' => $_post['nx_id'],
512 'source' => $WPR->id,
513 'entry_key' => $review['username'],
514 'data' => array_merge($review, $plugin_data),
515 ];
516 }
517 $WPR->update_notifications($reviews);
518 }
519 }
520
521 break;
522 case 'woo_reviews':
523 if(!empty($post['notification-template']) && is_array($post['notification-template'])){
524 foreach ($post['notification-template'] as $key => &$value) {
525 if($key == 'third_param' && $value == 'tag_plugin_name'){
526 $value = 'tag_product_title';
527 }
528 }
529 }
530 if(!empty($post['advanced_template']) && is_array($post['advanced_template'])){
531 foreach ($post['advanced_template'] as $key => &$value) {
532 $value = str_replace('{{plugin_name}}', '{{product_title}} ', $value);
533 }
534 }
535 # code...
536 break;
537 case 'reviewx':
538 # code...
539 break;
540 case 'freemius':
541 if( boolval( $post['enabled'] ) ) {
542 Cron::get_instance()->set_cron($nx_id, 'nx_freemius_interval');
543 }
544 // Content Tab
545 $post['source'] = 'freemius_reviews';
546 $post['freemius_item_type'] = $this->get("_nx_meta_freemius_item_type");
547 $post['freemius_themes'] = $this->get("_nx_meta_freemius_themes");
548 $post['freemius_plugins'] = $this->get("_nx_meta_freemius_plugins");
549
550
551 $sales = $this->get("_nx_meta_freemius_content");
552 $freemius = FreemiusReviews::get_instance();
553 if(is_array($sales)){
554 foreach ($sales as $key => $sale) {
555 $sales[$key] = [
556 'nx_id' => $_post['nx_id'],
557 'source' => $freemius->id,
558 'entry_key' => $sale['id'],
559 'data' => $sale,
560 ];
561 }
562 $freemius->update_notifications($sales);
563 }
564
565 break;
566 case 'zapier':
567 $post['source'] = 'zapier_reviews';
568 break;
569 default:
570 # code...
571 break;
572 }
573 break;
574 case 'download_stats':
575 // Source Tab
576 $post['source'] = $this->get('_nx_meta_stats_source');
577 $post['themes'] = $this->get('_nx_meta_wpstats_theme');
578 $post['advance_edit'] = $this->get('_nx_meta_wpstats_advance_edit');
579
580
581
582 // Theme Tab
583 $post['bg_color'] = $this->get('_nx_meta_wpstats_bg_color');
584 $post['text_color'] = $this->get('_nx_meta_wpstats_text_color');
585 $post['border'] = $this->get('_nx_meta_wpstats_border');
586 $post['border_size'] = $this->get('_nx_meta_wpstats_border_size');
587 $post['border_style'] = $this->get('_nx_meta_wpstats_border_style');
588 $post['border_color'] = $this->get('_nx_meta_wpstats_border_color');
589 $post['image_position'] = $this->get("_nx_meta_wpstats_image_position");
590 $post['first_font_size'] = $this->get("_nx_meta_wpstats_first_font_size");
591 $post['second_font_size'] = $this->get("_nx_meta_wpstats_second_font_size");
592 $post['third_font_size'] = $this->get("_nx_meta_wpstats_third_font_size");
593
594 // Content Tab
595 $post['wp_stats_product_type'] = $this->get("_nx_meta_wp_stats_product_type");
596 $post['wp_stats_slug'] = $this->get("_nx_meta_wp_stats_slug");
597 //
598 if ($post['themes'] == 'actively_using') {
599 $post['notification-template'] = $this->get("_nx_meta_actively_using_template_new");
600 if(!empty($post['notification-template']['third_param']) && $post['notification-template']['third_param'] == 'tag_name'){
601 $post['notification-template']['third_param'] = 'tag_plugin_theme_name';
602 }
603 } else {
604 $post['notification-template'] = $this->get("_nx_meta_wp_stats_template_new");
605 if(!empty($post['notification-template']['first_param']) && $post['notification-template']['first_param'] == 'tag_name'){
606 $post['notification-template']['first_param'] = 'tag_plugin_theme_name';
607 }
608 }
609 if($post['template_adv'] = $this->get("_nx_meta_wp_stats_template_adv")){
610 $post['advanced_template'] = $this->get("_nx_meta_wp_stats_template");
611 if(!empty($post['advanced_template']) && is_array($post['advanced_template'])){
612 foreach ($post['advanced_template'] as $key => &$value) {
613 $value = str_replace('{{name}}', '{{plugin_theme_name}} ', $value);
614 }
615 }
616 }
617
618 $post['link_type'] = $this->get("_nx_meta_rs_url");
619 if($post['link_type'] == 'product_page'){
620 $post['link_type'] = 'stats_page';
621 }
622 $post['custom_url'] = $this->get("_nx_meta_rs_custom_url");
623 $post['sound'] = $this->get("_nx_meta_download_stats_sound");
624
625 switch ($post['source']) {
626 case 'wp_stats':
627 if( boolval( $post['enabled'] ) ) {
628 Cron::get_instance()->set_cron($nx_id, 'nx_wp_stats_interval');
629 }
630 $plugin_data = $this->get('_nx_meta_wporg_stats_content');
631 if (!empty($plugin_data)) {
632 $WPS = WPOrgStats::get_instance();
633 $reviews = [];
634 if(is_array($plugin_data)){
635 foreach ($plugin_data as $key => $stats) {
636 $reviews[$key] = [
637 'nx_id' => $_post['nx_id'],
638 'source' => $WPS->id,
639 'entry_key' => '',
640 'data' => $stats,
641 ];
642 }
643 $WPS->update_notifications($reviews);
644 }
645 }
646 # code...
647 break;
648 case 'freemius':
649 if( boolval( $post['enabled'] ) ) {
650 Cron::get_instance()->set_cron($nx_id, 'nx_freemius_interval');
651 }
652 $post['source'] = 'freemius_stats';
653 $post['freemius_item_type'] = $this->get("_nx_meta_freemius_item_type");
654 $post['freemius_themes'] = $this->get("_nx_meta_freemius_themes");
655 $post['freemius_plugins'] = $this->get("_nx_meta_freemius_plugins");
656
657 $sales = $this->get("_nx_meta_freemius_content");
658 $freemius = FreemiusStats::get_instance();
659 if(is_array($sales)){
660 foreach ($sales as $key => $sale) {
661 $sales[$key] = [
662 'nx_id' => $_post['nx_id'],
663 'source' => $freemius->id,
664 'entry_key' => $sale['id'],
665 'data' => $sale,
666 ];
667 }
668 $freemius->update_notifications($sales);
669 }
670
671 break;
672 default:
673 # code...
674 break;
675 }
676 break;
677 case 'elearning':
678 // Source Tab
679 $post['source'] = $this->get('_nx_meta_elearning_source');
680 $post['themes'] = $this->get('_nx_meta_elearning_theme');
681 $post['advance_edit'] = $this->get('_nx_meta_elearning_advance_edit');
682
683
684 // Theme Tab
685 $post['bg_color'] = $this->get("_nx_meta_bg_color");
686 $post['text_color'] = $this->get("_nx_meta_text_color");
687 $post['border'] = $this->get("_nx_meta_border");
688 $post['border_size'] = $this->get("_nx_meta_border_size");
689 $post['border_style'] = $this->get("_nx_meta_border_style");
690 $post['border_color'] = $this->get("_nx_meta_border_color");
691 $post['image_shape'] = $this->get("_nx_meta_image_shape");
692 $post['image_position'] = $this->get("_nx_meta_image_position");
693 $post['custom_image_shape'] = $this->get("_nx_meta_image_custom_shape");
694 $post['first_font_size'] = $this->get("_nx_meta_first_font_size");
695 $post['second_font_size'] = $this->get("_nx_meta_second_font_size");
696 $post['third_font_size'] = $this->get("_nx_meta_third_font_size");
697
698 // Content Tab
699 // $post['elearning_template'] = $this->get("");
700 $post['notification-template'] = $this->get("_nx_meta_elearning_template_new");
701 if($post['template_adv'] = $this->get("_nx_meta_elearning_template_adv")){
702 $post['advanced_template'] = $this->get("_nx_meta_elearning_template");
703 }
704 $post['link_type'] = $this->get("_nx_meta_elearning_url");
705 if($post['link_type'] == 'product_page'){
706 $post['link_type'] = 'course_page';
707 }
708 $post['custom_url'] = $this->get("_nx_meta_elearning_custom_url");
709
710 $post['sound'] = $this->get("_nx_meta_comments_sound");
711
712 switch ($post['source']) {
713 case 'tutor':
714 $post['ld_product_control'] = $this->get("_nx_meta_tutor_product_control");
715 $post['ld_course_list'] = $this->get("_nx_meta_tutor_course_list");
716 break;
717 case 'learndash':
718 $post['ld_product_control'] = $this->get("_nx_meta_ld_product_control");
719 $post['ld_course_list'] = $this->get("_nx_meta_ld_course_list");
720 break;
721 default:
722 # code...
723 break;
724 }
725 break;
726 case 'donation':
727 // Source Tab
728 $post['source'] = $this->get('_nx_meta_donation_source');
729 $post['themes'] = $this->get('_nx_meta_donation_theme');
730 $post['advance_edit'] = $this->get('_nx_meta_donation_advance_edit');
731
732 // Theme Tab
733 $post['bg_color'] = $this->get("_nx_meta_bg_color");
734 $post['text_color'] = $this->get("_nx_meta_text_color");
735 $post['border'] = $this->get("_nx_meta_border");
736 $post['border_size'] = $this->get("_nx_meta_border_size");
737 $post['border_style'] = $this->get("_nx_meta_border_style");
738 $post['border_color'] = $this->get("_nx_meta_border_color");
739 $post['image_shape'] = $this->get("_nx_meta_image_shape");
740 $post['image_position'] = $this->get("_nx_meta_image_position");
741 $post['custom_image_shape'] = $this->get("_nx_meta_image_custom_shape");
742 $post['first_font_size'] = $this->get("_nx_meta_first_font_size");
743 $post['second_font_size'] = $this->get("_nx_meta_second_font_size");
744 $post['third_font_size'] = $this->get("_nx_meta_third_font_size");
745
746 // Content Tab
747 $post['notification-template'] = $this->get("_nx_meta_donation_template_new");
748 if($post['template_adv'] = $this->get("_nx_meta_donation_template_adv")){
749 $post['advanced_template'] = $this->get("_nx_meta_donation_template");
750 }
751 $post['give_forms_control'] = $this->get("_nx_meta_give_forms_control");
752 $post['give_form_list'] = $this->get("_nx_meta_give_form_list");
753
754 $post['link_type'] = $this->get("_nx_meta_donation_url");
755 if($post['link_type'] == 'product_page'){
756 $post['link_type'] = 'donation_page';
757 }
758 $post['custom_url'] = $this->get("_nx_meta_donation_custom_url");
759
760 $post['sound'] = $this->get("_nx_meta_comments_sound");
761
762 switch ($post['source']) {
763 case 'give':
764 # code...
765 break;
766 default:
767 # code...
768 break;
769 }
770 break;
771 case 'press_bar':
772 // Source Tab
773 $post['type'] = 'notification_bar';
774 $post['source'] = 'press_bar';
775 $post['themes'] = $this->get('_nx_meta_bar_theme');
776 $post['advance_edit'] = $this->get('_nx_meta_bar_advance_edit');
777
778 // Theme Tab
779 $post['bg_color'] = $this->get('_nx_meta_bar_bg_color');
780 $post['text_color'] = $this->get('_nx_meta_bar_text_color');
781 $post['btn_bg'] = $this->get('_nx_meta_bar_btn_bg');
782 $post['btn_text_color'] = $this->get('_nx_meta_bar_btn_text_color');
783 $post['counter_bg'] = $this->get('_nx_meta_bar_counter_bg');
784 $post['counter_text_color'] = $this->get('_nx_meta_bar_counter_text_color');
785 $post['close_color'] = $this->get('_nx_meta_bar_close_color');
786 $post['close_position'] = $this->get('_nx_meta_bar_close_position');
787 $post['bar_font_size'] = $this->get('_nx_meta_bar_font_size');
788 $post['press_content'] = $this->get('_nx_meta_press_content');
789 $post['button_text'] = $this->get('_nx_meta_button_text');
790 $post['button_url'] = $this->get('_nx_meta_button_url');
791 $post['content_trim_length'] = $this->get('_nx_meta_content_trim_length');
792
793 // Content Tab
794 $post['enable_countdown'] = $this->get('_nx_meta_enable_countdown');
795 $post['evergreen_timer'] = $this->get('_nx_meta_evergreen_timer');
796 $post['countdown_text'] = $this->get('_nx_meta_countdown_text');
797 $post['countdown_expired_text'] = $this->get('_nx_meta_countdown_expired_text');
798 $post['countdown_start_date'] = $this->get('_nx_meta_countdown_start_date');
799 $post['countdown_end_date'] = $this->get('_nx_meta_countdown_end_date');
800 $post['time_rotation'] = $this->get('_nx_meta_time_rotation');
801 $post['countdown_rand'] = time();
802 $post['time_randomize'] = $this->get('_nx_meta_time_randomize');
803 $post['time_randomize_between'] = $this->get('_nx_meta_time_randomize_between');
804 // $post['start_time'] = $this->get('start_time');
805 // $post['end_time'] = $this->get('end_time');
806 $post['time_reset'] = $this->get('_nx_meta_time_reset');
807 $post['close_forever'] = $this->get('_nx_meta_close_forever');
808 if(empty($post['close_forever']) && !empty($this->get('_nx_meta_close_forever_2'))){
809 $post['close_forever'] = $this->get('_nx_meta_close_forever_2');
810 }
811
812 $post['position'] = $this->get('_nx_meta_pressbar_position');
813 $post['sticky_bar'] = $this->get('_nx_meta_sticky_bar');
814 $post['pressbar_body'] = $this->get('_nx_meta_pressbar_body');
815 $post['elementor_id'] = (int) $this->get('_nx_bar_elementor_type_id');
816 // if($post['nx_id'] == 4386){
817 // wp_send_json([$post, $_post]);
818 // }
819
820 break;
821 case 'form':
822 // Source Tab
823 $post['source'] = $this->get('_nx_meta_form_source');
824 $post['themes'] = $this->get('_nx_meta_form_theme');
825 $post['advance_edit'] = $this->get('_nx_meta_form_advance_edit');
826
827 // Theme Tab
828 $post['bg_color'] = $this->get("_nx_meta_bg_color");
829 $post['text_color'] = $this->get("_nx_meta_text_color");
830 $post['border'] = $this->get("_nx_meta_border");
831 $post['border_size'] = $this->get("_nx_meta_border_size");
832 $post['border_style'] = $this->get("_nx_meta_border_style");
833 $post['border_color'] = $this->get("_nx_meta_border_color");
834 $post['image_shape'] = $this->get("_nx_meta_image_shape");
835 $post['image_position'] = $this->get("_nx_meta_image_position");
836 $post['custom_image_shape'] = $this->get("_nx_meta_image_custom_shape");
837 $post['first_font_size'] = $this->get("_nx_meta_first_font_size");
838 $post['second_font_size'] = $this->get("_nx_meta_second_font_size");
839 $post['third_font_size'] = $this->get("_nx_meta_third_font_size");
840
841 $post['sound'] = $this->get("_nx_meta_comments_sound");
842
843 switch ($post['source']) {
844 case 'cf7':
845
846 // Content Tab
847 $post['form_list'] = "{$post['source']}_" . $this->get('_nx_meta_cf7_form');
848 $post['notification-template'] = $this->get('_nx_meta_form_template_new');
849 break;
850 case 'wpf':
851 // Content Tab
852 $post['form_list'] = "{$post['source']}_" . $this->get('_nx_meta_wpf_form');
853 $post['notification-template'] = $this->get('_nx_meta_wpf_template_new');
854 break;
855 case 'njf':
856 // Content Tab
857 $post['form_list'] = "{$post['source']}_" . $this->get('_nx_meta_njf_form');
858 $post['notification-template'] = $this->get('_nx_meta_njf_template_new');
859 break;
860 case 'grvf':
861 // Content Tab
862 $post['form_list'] = "{$post['source']}_" . $this->get('_nx_meta_grvf_form');
863 $post['notification-template'] = $this->get('_nx_meta_grvf_template_new');
864 break;
865 default:
866 # code...
867 break;
868 }
869 break;
870 case 'email_subscription':
871 // Source Tab
872 $post['source'] = $this->get('_nx_meta_subscription_source');
873 $post['themes'] = $this->get('_nx_meta_mailchimp_theme');
874 $post['advance_edit'] = $this->get('_nx_meta_mailchimp_advance_edit');
875
876
877
878 // Theme Tab
879 $post['bg_color'] = $this->get('_nx_meta_mailchimp_bg_color');
880 $post['text_color'] = $this->get('_nx_meta_mailchimp_text_color');
881 $post['border'] = $this->get('_nx_meta_mailchimp_border');
882 $post['border_size'] = $this->get('_nx_meta_mailchimp_border_size');
883 $post['border_style'] = $this->get('_nx_meta_mailchimp_border_style');
884 $post['border_color'] = $this->get('_nx_meta_mailchimp_border_color');
885 $post['first_font_size'] = $this->get("_nx_meta_mailchimp_first_font_size");
886 $post['second_font_size'] = $this->get("_nx_meta_mailchimp_second_font_size");
887 $post['third_font_size'] = $this->get("_nx_meta_mailchimp_third_font_size");
888
889 // Content Tab
890 $post['notification-template'] = $this->get("_nx_meta_mailchimp_template_new");
891 if($post['template_adv'] = $this->get("_nx_meta_mailchimp_template_adv")){
892 $post['advanced_template'] = $this->get("_nx_meta_mailchimp_template");
893 }
894 $show_avatar = $this->get("_nx_meta_show_avatar");
895 if($show_avatar){
896 $post['show_notification_image'] = 'gravatar';
897 }
898 $post['sound'] = $this->get("_nx_meta_email_subscription_sound");
899
900 switch ($post['source']) {
901 case 'mailchimp':
902 if( boolval( $post['enabled'] ) ) {
903 Cron::get_instance()->set_cron($nx_id, 'nx_mailchimp_interval');
904 }
905 $post['mailchimp_list'] = $this->get("_nx_meta_mailchimp_list");
906 $sales = $this->get("_nx_meta_mailchimp_content");
907 $mailchimp = MailChimp::get_instance();
908 if(is_array($sales)){
909 foreach ($sales as $key => $sale) {
910 $sales[$key] = [
911 'nx_id' => $_post['nx_id'],
912 'source' => $mailchimp->id,
913 'entry_key' => isset($sale['timestamp']) ? $sale['timestamp'] : '',
914 'data' => $sale,
915 ];
916 }
917 $mailchimp->update_notifications($sales);
918 }
919 # code...
920 break;
921 case 'convertkit':
922 if( boolval( $post['enabled'] ) ) {
923 Cron::get_instance()->set_cron($nx_id, 'nx_convertkit_interval');
924 }
925 $post['convertkit_form'] = $this->get("_nx_meta_convertkit_form");
926 $sales = $this->get("_nx_meta_convertkit_content");
927 $convertkit = ConvertKit::get_instance();
928 if(is_array($sales)){
929 foreach ($sales as $key => $sale) {
930 $sales[$key] = [
931 'nx_id' => $_post['nx_id'],
932 'source' => $convertkit->id,
933 'entry_key' => isset($sale['timestamp']) ? $sale['timestamp'] : '',
934 'data' => $sale,
935 ];
936 }
937 $convertkit->update_notifications($sales);
938 }
939 break;
940 case 'zapier':
941 $post['source'] = 'zapier_email_subscription';
942 break;
943 default:
944 # code...
945 break;
946 }
947 break;
948 case 'page_analytics':
949 if( boolval( $post['enabled'] ) ) {
950 Cron::get_instance()->set_cron($nx_id, 'nx_ga_cache_duration');
951 }
952 // Source Tab
953 $post['source'] = $this->get('_nx_meta_page_analytics_source');
954 $post['themes'] = $this->get('_nx_meta_page_analytics_theme');
955
956 // Theme Tab
957 $post['bg_color'] = $this->get("_nx_meta_bg_color");
958 $post['text_color'] = $this->get("_nx_meta_text_color");
959 $post['border'] = $this->get("_nx_meta_border");
960 $post['border_size'] = $this->get("_nx_meta_border_size");
961 $post['border_style'] = $this->get("_nx_meta_border_style");
962 $post['border_color'] = $this->get("_nx_meta_border_color");
963 $post['image_shape'] = $this->get("_nx_meta_image_shape");
964 $post['image_position'] = $this->get("_nx_meta_image_position");
965 $post['custom_image_shape'] = $this->get("_nx_meta_image_custom_shape");
966 $post['first_font_size'] = $this->get("_nx_meta_first_font_size");
967 $post['second_font_size'] = $this->get("_nx_meta_second_font_size");
968 $post['third_font_size'] = $this->get("_nx_meta_third_font_size");
969
970 // Content Tab
971 $template = $this->get("_nx_meta_page_analytics_template_new");
972 $post['notification-template']['first_param'] = $this->get('first_param', '', $template);
973 $post['notification-template']['second_param'] = $this->get('second_param', '', $template);
974 $post['notification-template']['third_param'] = $this->get('page_third_param', '', $template);
975 $post['notification-template']['custom_third_param'] = $this->get('custom_page_third_param', '', $template);
976 if($this->get('first_param', '', $template) == 'tag_siteview'){
977 $post['notification-template']['ga_fourth_param'] = $this->get('analytics_fourth_param', '', $template);
978 }
979 else if($this->get('first_param', '', $template) == 'tag_realtime_siteview'){
980 $post['notification-template']['ga_fourth_param'] = $this->get('realtime_fourth_param', '', $template);
981 }
982 $post['notification-template']['ga_fifth_param'] = $this->get('fifth_param', '', $template);
983 $post['notification-template']['sixth_param'] = $this->get('sixth_param', '', $template);
984
985 $post['advance_edit'] = $this->get('_nx_meta_page_analytics_advance_edit');
986
987 $post['sound'] = $this->get("_nx_meta_conversions_sound");
988
989 // @todo check with new version.
990 $sales = $this->get("_nx_meta_custom_contents");
991 if( boolval( $post['enabled'] ) ) {
992 Cron::get_instance()->set_cron($nx_id, 'nx_ga_cache_duration');
993 }
994
995 $ga = Google_Analytics::get_instance();
996 if(is_array($sales)){
997 foreach ($sales as $key => $sale) {
998 $sales[$key] = [
999 'nx_id' => $_post['nx_id'],
1000 'source' => $ga->id,
1001 'data' => $sale,
1002 ];
1003 }
1004 $ga->update_notifications($sales);
1005 }
1006
1007 break;
1008 case 'custom':
1009 // Source Tab
1010 $post['source'] = 'custom_notification';
1011 $post['themes'] = $this->get('_nx_meta_custom_theme');
1012 $post['advance_edit'] = $this->get('_nx_meta_custom_advance_edit');
1013
1014 // Theme Tab
1015 $post['bg_color'] = $this->get("_nx_meta_bg_color");
1016 $post['text_color'] = $this->get("_nx_meta_text_color");
1017 $post['border'] = $this->get("_nx_meta_border");
1018 $post['border_size'] = $this->get("_nx_meta_border_size");
1019 $post['border_style'] = $this->get("_nx_meta_border_style");
1020 $post['border_color'] = $this->get("_nx_meta_border_color");
1021 $post['image_shape'] = $this->get("_nx_meta_image_shape");
1022 $post['image_position'] = $this->get("_nx_meta_image_position");
1023 $post['custom_image_shape'] = $this->get("_nx_meta_image_custom_shape");
1024 $post['first_font_size'] = $this->get("_nx_meta_first_font_size");
1025 $post['second_font_size'] = $this->get("_nx_meta_second_font_size");
1026 $post['third_font_size'] = $this->get("_nx_meta_third_font_size");
1027
1028 // Content Tab
1029 $custom = CustomNotification::get_instance()->supported_themes();
1030 $conv_themes = array_keys(Conversions::get_instance()->get_themes());
1031 $temp_meta_key = '_nx_meta_type_custom_contents';
1032 $_themes = $post['themes'] = str_replace([
1033 'comments-',
1034 'reviews-',
1035 'stats-',
1036 'subs-',
1037 ], [
1038 'comments_',
1039 'reviews_',
1040 'download_stats_',
1041 'email_subscription_',
1042 ], $post['themes']); // = CustomNotification::get_instance()->get_theme_type($post);
1043
1044 switch (true) {
1045 case in_array($_themes, array_merge($conv_themes, ['maps_theme'])):
1046 $post['themes'] = 'conversions_' . $post['themes'];
1047 $final_meta_key = $temp_meta_key;
1048 if (in_array($_themes, $custom['sales_count'])) {
1049 $final_meta_key = $temp_meta_key . '_sales_count';
1050 }
1051 if (in_array($_themes, ['maps_theme'])) {
1052 $final_meta_key = $temp_meta_key . '_maps_theme';
1053 }
1054 break;
1055 case in_array($_themes, array_merge($custom['comments'], ['comments_maps_theme'])):
1056 $final_meta_key = $temp_meta_key . '_comments';
1057 if (in_array($_themes, array('comments_maps_theme'))) {
1058 $final_meta_key = $temp_meta_key . '_maps_theme';
1059 }
1060 break;
1061 case in_array($_themes, $custom['reviews']):
1062 $final_meta_key = $temp_meta_key . '_reviews';
1063
1064 break;
1065 case in_array($_themes, $custom['stats']):
1066 $final_meta_key = $temp_meta_key . '_stats';
1067 break;
1068 case in_array($_themes, array_merge($custom['subs'], ['email_subscription_maps_theme'])):
1069 $final_meta_key = $temp_meta_key . '_subs';
1070 if (in_array($_themes, array('email_subscription_maps_theme'))) {
1071 $final_meta_key = $temp_meta_key . '_maps_theme';
1072 }
1073 break;
1074 }
1075
1076
1077 $post['notification-template'] = $this->get("_nx_meta_woo_template_new");
1078
1079 if (in_array($this->get('_nx_meta_custom_theme'), array('maps_theme', 'subs-maps_theme', 'comments-maps_theme'))) {
1080 $template = $this->get('_nx_meta_maps_theme_template_new');
1081 if(!empty($template)){
1082 $p_template = &$post['notification-template'];
1083 $p_template['first_param'] = $template['first_param'];
1084 $p_template['custom_first_param'] = $template['custom_first_param'];
1085 $p_template['second_param'] = $template['from'];
1086 $p_template['third_param'] = $template['second_param'];
1087 $p_template['map_fourth_param'] = $template['third_param'];
1088 $p_template['fourth_param'] = $template['fourth_param'];
1089 $p_template['fifth_param'] = $template['fifth_param'];
1090 $p_template['custom_fourth_param'] = $template['custom_fourth_param'];
1091 }
1092 if($post['template_adv'] = $this->get("_nx_meta_maps_theme_template_adv")){
1093 $post['advanced_template'] = $this->get("_nx_meta_maps_theme_template");
1094 }
1095 }
1096
1097 if (in_array($this->get('_nx_meta_custom_theme'), array('reviews-review-comment-3', 'reviews-review-comment-2', 'reviews-review-comment', 'reviews-reviewed', 'reviews-total-rated'))) {
1098 $post['notification-template'] = $this->get('_nx_meta_wp_reviews_template_new');
1099 if($post['template_adv'] = $this->get("_nx_meta_wp_reviews_template_adv")){
1100 $post['advanced_template'] = $this->get("_nx_meta_wp_reviews_template");
1101 }
1102 }
1103
1104 if ($this->get('_nx_meta_custom_theme') === 'reviews-review_saying') {
1105 $post['notification-template'] = $this->get('_nx_meta_review_saying_template_new');
1106 if($post['template_adv'] = $this->get("_nx_meta_wp_reviews_template_adv")){
1107 $post['advanced_template'] = $this->get("_nx_meta_wp_reviews_template");
1108 }
1109 }
1110
1111 if (in_array($this->get('_nx_meta_custom_theme'), array('stats-today-download', 'stats-total-download', 'stats-7day-download'))) {
1112 $post['notification-template'] = $this->get('_nx_meta_wp_stats_template_new');
1113 if($post['template_adv'] = $this->get("_nx_meta_wp_stats_template_adv")){
1114 $post['advanced_template'] = $this->get("_nx_meta_wp_stats_template");
1115 }
1116 }
1117
1118 if ($this->get('_nx_meta_custom_theme') === 'stats-actively_using') {
1119 $post['notification-template'] = $this->get('_nx_meta_actively_using_template_new');
1120 if($post['template_adv'] = $this->get("_nx_meta_wp_stats_template_adv")){
1121 $post['advanced_template'] = $this->get("_nx_meta_wp_stats_template");
1122 }
1123 }
1124
1125 if (in_array($this->get('_nx_meta_custom_theme'), array('subs-theme-one', 'subs-theme-two', 'subs-theme-three'))) {
1126 $post['notification-template'] = $this->get('_nx_meta_mailchimp_template_new');
1127 if($post['template_adv'] = $this->get("_nx_meta_mailchimp_template_adv")){
1128 $post['advanced_template'] = $this->get("_nx_meta_mailchimp_template");
1129 }
1130 }
1131
1132 if (in_array($this->get('_nx_meta_custom_theme'), array('comments-theme-one', 'comments-theme-two', 'comments-theme-three', 'comments-theme-six-free', 'comments-theme-seven-free', 'comments-theme-eight-free', 'comments-theme-four', 'comments-theme-five'))) {
1133 $post['notification-template'] = $this->get('_nx_meta_mailchimp_template_new');
1134 if($post['template_adv'] = $this->get("_nx_meta_mailchimp_template_adv")){
1135 $post['advanced_template'] = $this->get("_nx_meta_mailchimp_template");
1136 }
1137 }
1138
1139 if(!empty($_post[$final_meta_key])){
1140 $post['custom_contents'] = $_post[$final_meta_key];
1141 if(is_array($post['custom_contents'])){
1142 foreach($post['custom_contents'] as &$entry){
1143 if(!empty($entry['time'])){
1144 $entry['timestamp'] = Helper::mysql_time($entry['time']);
1145 }
1146 }
1147 }
1148 }
1149
1150
1151
1152 $post['sound'] = $this->get("_nx_meta_custom_sound");
1153
1154 break;
1155
1156 default:
1157 break;
1158 }
1159
1160 if(in_array($post['themes'], ['conv-theme-six', 'maps_theme'])){
1161 $template = $this->get('_nx_meta_maps_theme_template_new');
1162 if(!empty($template)){
1163 $p_template = &$post['notification-template'];
1164 $p_template['first_param'] = $template['first_param'];
1165 $p_template['custom_first_param'] = $template['custom_first_param'];
1166 $p_template['second_param'] = $template['from'];
1167 $p_template['third_param'] = $template['second_param'];
1168 $p_template['map_fourth_param'] = $template['third_param'];
1169 $p_template['fourth_param'] = $template['fourth_param'];
1170 $p_template['fifth_param'] = $template['fifth_param'];
1171 $p_template['custom_fourth_param'] = $template['custom_fourth_param'];
1172 }
1173 if($post['template_adv'] = $this->get("_nx_meta_maps_theme_template_adv")){
1174 $post['advanced_template'] = $this->get("_nx_meta_maps_theme_template");
1175 }
1176 }
1177
1178 if($post['show_notification_image'] == 'product_image'){
1179 $post['show_notification_image'] = 'featured_image';
1180 }
1181
1182 if (!empty($post['advanced_template']) && is_array($post['advanced_template'])) {
1183 $post['advanced_template'] = implode("\n", array_filter($post['advanced_template'], 'trim'));
1184 }
1185
1186 if (empty($post['image_url']['id']) && empty($post['image_url']['url'])) {
1187 unset($post['image_url']);
1188 }
1189 if ($post['type'] == 'custom') {
1190 $post['themes'] = $post['themes'];
1191 } else if($post['source'] == 'woo_reviews'||$post['source'] == 'reviewx') {
1192 $post['themes'] = $post['source'] . '_' . $post['themes'];
1193 } else if($post['source'] == 'press_bar') {
1194 $post['themes'] = $post['source'] . '_' . $post['themes'];
1195 } else {
1196 $post['themes'] = $post['type'] . '_' . $post['themes'];
1197 }
1198
1199 return $post;
1200 }
1201
1202 public function migrate_entries($posts) {
1203 $notifications = get_option('notificationx_data', []);
1204 if(is_array($notifications)){
1205 foreach ($notifications as $source => $entries) {
1206 // @todo review later if it covers all case.
1207 $source = $this->normalize_source($source, $posts);
1208 $ext = ExtensionFactory::get_instance()->get($source);
1209 if ($ext && is_array($entries)) {
1210 foreach ($entries as $key => $entry) {
1211 $_entry = [
1212 'source' => $source,
1213 'entry_key' => $key,
1214 'data' => $entry,
1215 ];
1216 $ext->update_notification($_entry);
1217 }
1218 } else {
1219 // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log -- deliberate failure logging, not debug output.
1220 error_log("$source not found");
1221 }
1222 }
1223 }
1224 }
1225
1226 public function normalize_source($source, $posts) {
1227 $prefix = [
1228 'zapier',
1229 'grvf',
1230 'wpf',
1231 'njf',
1232 'cf7',
1233 ];
1234 if (strpos($source, 'zapier') === 0) {
1235 $nx_id = str_replace('zapier_', '', $source);
1236 if(!empty($posts[$nx_id])){
1237 return $posts[$nx_id]['source'];
1238 }
1239
1240 }
1241 foreach ($prefix as $key => $value) {
1242 if (strpos($source, $value) === 0) {
1243 return $value;
1244 }
1245 }
1246 return $source;
1247 }
1248
1249 public function migrate_stats($post) {
1250 $nx_id = $post['ID'];
1251 if (!empty($post['_nx_meta_impression_per_day'])) {
1252 $impression = $post['_nx_meta_impression_per_day'];
1253 if(is_array($impression)){
1254 $stats = [];
1255 foreach ($impression as $_impressions) {
1256 foreach ($_impressions as $date => $value) {
1257 $data = [
1258 'nx_id' => $nx_id,
1259 'clicks' => !empty($value['clicks']) ? $value['clicks'] : 0,
1260 'views' => !empty($value['impressions']) ? $value['impressions'] : 0,
1261 'created_at' => gmdate(Analytics::$date_format, strtotime($date)),
1262 ];
1263 $stats[] = $data;
1264 }
1265 }
1266 if( ! empty( $stats ) ) {
1267 Analytics::get_instance()->migrate_analytics($stats);
1268 }
1269 }
1270 }
1271 }
1272
1273 protected function get($index, $default = '', $arr = []){
1274 if(empty($arr)){
1275 $arr = $this->_post;
1276 }
1277
1278 if(isset($arr[$index])){
1279 return $arr[$index];
1280 }
1281 return $default;
1282 }
1283
1284 }
1285