Popup Builder – Responsive WordPress Pop up - Version 4.0.7

Version Description

Download this release

Release Info

Developer Sygnoos
Plugin Icon 128x128 Popup Builder – Responsive WordPress Pop up
Version 4.0.7
Comparing to
See all releases

Code changes from version 4.0.6 to 4.0.7

Files changed (42) hide show
  1. PopupBuilderInit.php +118 -118
  2. com/boot.php +11 -11
  3. com/classes/Actions.php +1526 -1480
  4. com/classes/Ajax.php +721 -721
  5. com/classes/ConditionBuilder.php +246 -246
  6. com/classes/ConditionCreator.php +668 -668
  7. com/classes/ConvertToNewVersion.php +1274 -1274
  8. com/classes/Feedback.php +146 -146
  9. com/classes/Filters.php +873 -873
  10. com/classes/Installer.php +331 -331
  11. com/classes/Javascript.php +133 -133
  12. com/classes/MediaButton.php +114 -114
  13. com/classes/Notification.php +94 -94
  14. com/classes/NotificationCenter.php +292 -292
  15. com/classes/PopupChecker.php +673 -673
  16. com/classes/PopupGroupFilter.php +193 -193
  17. com/classes/PopupInstaller.php +5 -5
  18. com/classes/PopupLoader.php +181 -181
  19. com/classes/PopupType.php +36 -36
  20. com/classes/RegisterPostType.php +478 -478
  21. com/classes/SGPBRequirementsChecker.php +16 -16
  22. com/classes/ScriptsLoader.php +406 -406
  23. com/classes/Style.php +120 -120
  24. com/classes/Updates.php +181 -181
  25. com/classes/_detection/SgpbPopupVersionDetection.php +136 -136
  26. com/classes/components/Menu.php +232 -232
  27. com/classes/dataTable/Subscribers.php +206 -206
  28. com/classes/extension/SgpbIPopupExtension.php +9 -9
  29. com/classes/extension/SgpbPopupExtension.php +358 -358
  30. com/classes/extension/SgpbPopupExtensionActivator.php +108 -108
  31. com/classes/extension/SgpbPopupExtensionRegister.php +120 -120
  32. com/classes/popups/FblikePopup.php +114 -114
  33. com/classes/popups/HtmlPopup.php +38 -38
  34. com/classes/popups/ImagePopup.php +90 -90
  35. com/classes/popups/PopupData.php +20 -20
  36. com/classes/popups/SGPopup.php +1751 -1749
  37. com/classes/popups/SubscriptionPopup.php +688 -688
  38. com/config/config.php +176 -176
  39. com/config/configPackage.php +8 -8
  40. com/config/dataConfig.php +1033 -1033
  41. com/helpers/AdminHelper.php +2126 -2126
  42. com/helpers/ConfigDataHelper.php +0 -670
PopupBuilderInit.php CHANGED
@@ -1,118 +1,118 @@
1
- <?php
2
- namespace sgpb;
3
- use \SgpbPopupExtensionRegister;
4
- use sgpb\AdminHelper;
5
-
6
- class PopupBuilderInit
7
- {
8
- private static $instance = null;
9
- private $actions;
10
- private $filters;
11
-
12
- private function __construct()
13
- {
14
- $this->init();
15
- }
16
-
17
- private function __clone()
18
- {
19
-
20
- }
21
-
22
- public static function getInstance()
23
- {
24
- if(!isset(self::$instance)) {
25
- self::$instance = new self();
26
- }
27
- return self::$instance;
28
- }
29
-
30
- public function init()
31
- {
32
- /*Included required data*/
33
- $this->includeData();
34
- $this->registerHooks();
35
- $this->actions();
36
- $this->filters();
37
- $this->versionDetection();
38
- }
39
-
40
- private function includeData()
41
- {
42
- require_once(SG_POPUP_EXTENSION_PATH.'SgpbPopupExtensionRegister.php');
43
- require_once(SG_POPUP_EXTENSION_PATH.'SgpbPopupExtensionActivator.php');
44
- require_once(SG_POPUP_CLASSES_PATH.'Installer.php');
45
- require_once(SG_POPUP_HELPERS_PATH.'AdminHelper.php');
46
- require_once(SG_POPUP_HELPERS_PATH.'Functions.php');
47
- require_once(SG_POPUP_HELPERS_PATH.'ScriptsIncluder.php');
48
- require_once(SG_POPUP_HELPERS_PATH.'PopupBuilderActivePackage.php');
49
- require_once(SG_POPUP_HELPERS_PATH.'License.php');
50
- require_once(SG_POPUP_EXTENSION_PATH.'SgpbPopupExtension.php');
51
- require_once(SG_POPUP_HELPERS_PATH.'MultipleChoiceButton.php');
52
- require_once(SG_POPUP_CLASSES_PATH.'ConditionBuilder.php');
53
- require_once(SG_POPUP_CLASSES_PATH.'ConditionCreator.php');
54
- require_once(SG_POPUP_CLASSES_POPUPS_PATH.'SGPopup.php');
55
- require_once(SG_POPUP_CLASSES_PATH.'ScriptsLoader.php');
56
- require_once(SG_POPUP_CLASSES_PATH.'PopupGroupFilter.php');
57
- require_once(SG_POPUP_CLASSES_PATH.'PopupChecker.php');
58
- require_once(SG_POPUP_CLASSES_PATH.'PopupLoader.php');
59
- require_once(SG_POPUP_CLASSES_PATH.'PopupType.php');
60
- require_once(SG_POPUP_CLASSES_PATH.'MediaButton.php');
61
- require_once(SG_POPUP_CLASSES_PATH.'Style.php');
62
- require_once(SG_POPUP_CLASSES_PATH.'Javascript.php');
63
- require_once(SG_POPUP_CLASSES_PATH.'PopupInstaller.php');
64
- require_once(SG_POPUP_CLASSES_PATH.'RegisterPostType.php');
65
- require_once(SG_POPUP_CLASSES_PATH.'Ajax.php');
66
- require_once(SG_POPUP_CLASSES_PATH.'ConvertToNewVersion.php');
67
- require_once(SG_POPUP_LIBS_PATH.'Reports.php');
68
- require_once(SG_POPUP_CLASSES_PATH.'Filters.php');
69
- require_once(SG_POPUP_CLASSES_PATH.'Actions.php');
70
- require_once(SG_POPUP_LIBS_PATH.'Table.php');
71
- require_once(SG_POPUP_CLASSES_PATH.'Updates.php');
72
- require_once(SG_POPUP_CLASSES_PATH.'NotificationCenter.php');
73
- require_once(SG_POPUP_CLASSES_PATH.'Notification.php');
74
- require_once(SG_POPUP_CLASSES_PATH.'Feedback.php');
75
- require_once(SG_POPUP_COMPONENTS_PATH.'Menu.php');
76
- require_once(SGPB_POPUP_DETECTION_PATH.'SgpbPopupVersionDetection.php');
77
- }
78
-
79
- public function actions()
80
- {
81
- $this->actions = new Actions();
82
- }
83
-
84
- public function filters()
85
- {
86
- $this->filters = new Filters();
87
- }
88
- public function versionDetection()
89
- {
90
- new SgpbPopupVersionDetection();
91
- }
92
-
93
- private function registerHooks()
94
- {
95
- register_activation_hook(SG_POPUP_FILE_NAME, array($this, 'activate'));
96
- register_deactivation_hook(SG_POPUP_FILE_NAME, array($this, 'deactivate'));
97
- }
98
-
99
- public function activate()
100
- {
101
- Installer::install();
102
- Installer::registerPlugin();
103
- AdminHelper::filterUserCapabilitiesForTheUserRoles('activate');
104
- }
105
-
106
- public function deactivate()
107
- {
108
- Functions::clearAllTransients();
109
- AdminHelper::removeSelectedTypeOptions('cron');
110
- AdminHelper::filterUserCapabilitiesForTheUserRoles('deactivate');
111
- require_once(SG_POPUP_EXTENSION_PATH.'SgpbPopupExtensionRegister.php');
112
- $pluginName = SG_POPUP_FILE_NAME;
113
- // remove AWeber extension from registered extensions
114
- SgpbPopupExtensionRegister::remove($pluginName);
115
- }
116
- }
117
-
118
- PopupBuilderInit::getInstance();
1
+ <?php
2
+ namespace sgpb;
3
+ use \SgpbPopupExtensionRegister;
4
+ use sgpb\AdminHelper;
5
+
6
+ class PopupBuilderInit
7
+ {
8
+ private static $instance = null;
9
+ private $actions;
10
+ private $filters;
11
+
12
+ private function __construct()
13
+ {
14
+ $this->init();
15
+ }
16
+
17
+ private function __clone()
18
+ {
19
+
20
+ }
21
+
22
+ public static function getInstance()
23
+ {
24
+ if(!isset(self::$instance)) {
25
+ self::$instance = new self();
26
+ }
27
+ return self::$instance;
28
+ }
29
+
30
+ public function init()
31
+ {
32
+ /*Included required data*/
33
+ $this->includeData();
34
+ $this->registerHooks();
35
+ $this->actions();
36
+ $this->filters();
37
+ $this->versionDetection();
38
+ }
39
+
40
+ private function includeData()
41
+ {
42
+ require_once(SG_POPUP_EXTENSION_PATH.'SgpbPopupExtensionRegister.php');
43
+ require_once(SG_POPUP_EXTENSION_PATH.'SgpbPopupExtensionActivator.php');
44
+ require_once(SG_POPUP_CLASSES_PATH.'Installer.php');
45
+ require_once(SG_POPUP_HELPERS_PATH.'AdminHelper.php');
46
+ require_once(SG_POPUP_HELPERS_PATH.'Functions.php');
47
+ require_once(SG_POPUP_HELPERS_PATH.'ScriptsIncluder.php');
48
+ require_once(SG_POPUP_HELPERS_PATH.'PopupBuilderActivePackage.php');
49
+ require_once(SG_POPUP_HELPERS_PATH.'License.php');
50
+ require_once(SG_POPUP_EXTENSION_PATH.'SgpbPopupExtension.php');
51
+ require_once(SG_POPUP_HELPERS_PATH.'MultipleChoiceButton.php');
52
+ require_once(SG_POPUP_CLASSES_PATH.'ConditionBuilder.php');
53
+ require_once(SG_POPUP_CLASSES_PATH.'ConditionCreator.php');
54
+ require_once(SG_POPUP_CLASSES_POPUPS_PATH.'SGPopup.php');
55
+ require_once(SG_POPUP_CLASSES_PATH.'ScriptsLoader.php');
56
+ require_once(SG_POPUP_CLASSES_PATH.'PopupGroupFilter.php');
57
+ require_once(SG_POPUP_CLASSES_PATH.'PopupChecker.php');
58
+ require_once(SG_POPUP_CLASSES_PATH.'PopupLoader.php');
59
+ require_once(SG_POPUP_CLASSES_PATH.'PopupType.php');
60
+ require_once(SG_POPUP_CLASSES_PATH.'MediaButton.php');
61
+ require_once(SG_POPUP_CLASSES_PATH.'Style.php');
62
+ require_once(SG_POPUP_CLASSES_PATH.'Javascript.php');
63
+ require_once(SG_POPUP_CLASSES_PATH.'PopupInstaller.php');
64
+ require_once(SG_POPUP_CLASSES_PATH.'RegisterPostType.php');
65
+ require_once(SG_POPUP_CLASSES_PATH.'Ajax.php');
66
+ require_once(SG_POPUP_CLASSES_PATH.'ConvertToNewVersion.php');
67
+ require_once(SG_POPUP_LIBS_PATH.'Reports.php');
68
+ require_once(SG_POPUP_CLASSES_PATH.'Filters.php');
69
+ require_once(SG_POPUP_CLASSES_PATH.'Actions.php');
70
+ require_once(SG_POPUP_LIBS_PATH.'Table.php');
71
+ require_once(SG_POPUP_CLASSES_PATH.'Updates.php');
72
+ require_once(SG_POPUP_CLASSES_PATH.'NotificationCenter.php');
73
+ require_once(SG_POPUP_CLASSES_PATH.'Notification.php');
74
+ require_once(SG_POPUP_CLASSES_PATH.'Feedback.php');
75
+ require_once(SG_POPUP_COMPONENTS_PATH.'Menu.php');
76
+ require_once(SGPB_POPUP_DETECTION_PATH.'SgpbPopupVersionDetection.php');
77
+ }
78
+
79
+ public function actions()
80
+ {
81
+ $this->actions = new Actions();
82
+ }
83
+
84
+ public function filters()
85
+ {
86
+ $this->filters = new Filters();
87
+ }
88
+ public function versionDetection()
89
+ {
90
+ new SgpbPopupVersionDetection();
91
+ }
92
+
93
+ private function registerHooks()
94
+ {
95
+ register_activation_hook(SG_POPUP_FILE_NAME, array($this, 'activate'));
96
+ register_deactivation_hook(SG_POPUP_FILE_NAME, array($this, 'deactivate'));
97
+ }
98
+
99
+ public function activate()
100
+ {
101
+ Installer::install();
102
+ Installer::registerPlugin();
103
+ AdminHelper::filterUserCapabilitiesForTheUserRoles('activate');
104
+ }
105
+
106
+ public function deactivate()
107
+ {
108
+ Functions::clearAllTransients();
109
+ AdminHelper::removeSelectedTypeOptions('cron');
110
+ AdminHelper::filterUserCapabilitiesForTheUserRoles('deactivate');
111
+ require_once(SG_POPUP_EXTENSION_PATH.'SgpbPopupExtensionRegister.php');
112
+ $pluginName = SG_POPUP_FILE_NAME;
113
+ // remove AWeber extension from registered extensions
114
+ SgpbPopupExtensionRegister::remove($pluginName);
115
+ }
116
+ }
117
+
118
+ PopupBuilderInit::getInstance();
com/boot.php CHANGED
@@ -1,11 +1,11 @@
1
- <?php
2
- require_once(dirname(__FILE__).'/config/config.php');
3
- require_once(dirname(__FILE__).'/config/configPackage.php');
4
-
5
- if (file_exists(SG_POPUP_CONFIG_PATH.'dataConfig.php')) {
6
- require_once(SG_POPUP_CONFIG_PATH.'dataConfig.php');
7
- }
8
-
9
- require_once(SG_POPUP_CLASSES_PATH.'SGPBRequirementsChecker.php');
10
-
11
- SGPBRequirementsChecker::init();
1
+ <?php
2
+ require_once(dirname(__FILE__).'/config/config.php');
3
+ require_once(dirname(__FILE__).'/config/configPackage.php');
4
+
5
+ if (file_exists(SG_POPUP_CONFIG_PATH.'dataConfig.php')) {
6
+ require_once(SG_POPUP_CONFIG_PATH.'dataConfig.php');
7
+ }
8
+
9
+ require_once(SG_POPUP_CLASSES_PATH.'SGPBRequirementsChecker.php');
10
+
11
+ SGPBRequirementsChecker::init();
com/classes/Actions.php CHANGED
@@ -1,1480 +1,1526 @@
1
- <?php
2
- namespace sgpb;
3
- use \WP_Query;
4
- use \SgpbPopupConfig;
5
- use \SgpbDataConfig;
6
-
7
-
8
- class Actions
9
- {
10
- public $customPostTypeObj;
11
- public $mediaButton = false;
12
-
13
- public function __construct()
14
- {
15
- $this->init();
16
- }
17
-
18
- public function init()
19
- {
20
- add_action('init', array($this, 'wpInit'), 9999999999);
21
- add_action('init', array($this, 'postTypeInit'), 9999);
22
- add_action('init', array($this, 'updatesInit'), 9999);
23
- add_action('admin_menu', array($this, 'addSubMenu'));
24
- add_action('admin_menu', array($this, 'supportLinks'), 999);
25
- add_action('admin_head', array($this, 'showPreviewButtonAfterPopupPublish'));
26
- add_action('admin_head', array($this, 'custom_admin_js'));
27
- add_action('admin_enqueue_scripts', array($this, 'adminLoadPopups'));
28
- add_action('admin_action_popupSaveAsNew', array($this, 'popupSaveAsNew'));
29
- add_action('admin_post_csv_file', array($this, 'getSubscribersCsvFile'));
30
- add_action('admin_post_sgpb_system_info', array($this, 'getSystemInfoFile'));
31
- add_action('admin_post_sgpbSaveSettings', array($this, 'saveSettings'), 10, 1);
32
- add_action('admin_init', array($this, 'userRolesCaps'));
33
- add_action('admin_notices', array($this, 'pluginNotices'));
34
- add_action('admin_init', array($this, 'pluginLoaded'));
35
- add_action('transition_post_status', array($this, 'deletePopup'), 100, 3);
36
- // activate extensions
37
- add_action('wp_before_admin_bar_render', array($this, 'pluginActivated'), 10, 2);
38
- add_action('admin_head', array($this, 'hidePageBuilderEditButtons'));
39
- add_action('admin_head', array($this, 'hidePublishingActions'));
40
- add_action('add_meta_boxes', array($this, 'popupMetaboxes'), 100);
41
- add_filter('post_updated_messages', array($this, 'popupPublishedMessage'), 1, 1);
42
- add_action('before_delete_post', array($this, 'deleteSubscribersWithPopup'), 1, 1);
43
- add_action('sgpb_duplicate_post', array($this, 'popupCopyPostMetaInfo'), 10, 2);
44
- add_filter('get_sample_permalink_html', array($this, 'removePostPermalink'), 1, 1);
45
- add_action('manage_'.SG_POPUP_POST_TYPE.'_posts_custom_column' , array($this, 'popupsTableColumnsValues'), 10, 2);
46
- add_action('media_buttons', array($this, 'popupMediaButton'));
47
- add_filter('mce_external_plugins', array($this, 'editorButton'), 1, 1);
48
- add_action('admin_enqueue_scripts', array('sgpb\Style', 'enqueueStyles'));
49
- add_action('admin_enqueue_scripts', array('sgpb\Javascript', 'enqueueScripts'));
50
- // this action for popup options saving and popup builder classes save ex from post and page
51
- add_action('save_post', array($this, 'savePost'), 100, 3);
52
- add_action('wp_enqueue_scripts', array($this, 'enqueuePopupBuilderScripts'));
53
- add_filter('sgpbOtherConditions', array($this ,'conditionsSatisfy'), 11, 1);
54
- add_shortcode('sg_popup', array($this, 'popupShortcode'));
55
- add_filter('cron_schedules', array($this, 'cronAddMinutes'), 10, 1);
56
- add_action('sgpb_send_newsletter', array($this, 'newsletterSendEmail'), 10, 1);
57
- add_action('sgpbGetBannerContentOnce', array($this, 'getBannerContent'), 10, 1);
58
- add_action('plugins_loaded', array($this, 'loadTextDomain'));
59
- // for change admin popup list order
60
- add_action('pre_get_posts', array($this, 'preGetPosts'));
61
- add_action('template_redirect', array($this, 'redirectFromPopupPage'));
62
- add_filter('views_edit-popupbuilder', array($this, 'mainActionButtons'), 10, 1);
63
- add_action('wpml_loaded', array($this, 'wpmlRelatedActions'));
64
-
65
- add_filter('get_user_option_screen_layout_'.SG_POPUP_POST_TYPE, array($this, 'screenLayoutSetOneColumn'));
66
- new SGPBFeedback();
67
- new SGPBReports();
68
- new SGPBMenu();
69
- new Ajax();
70
- }
71
-
72
- private function checkIfLicenseIsActive($license, $itemId, $storeURL, $key) {
73
- $transient = 'sgpb-license-key-'.$key.'-requested';
74
- if ( false !== ( $value = get_transient( $transient ) ) ) {
75
- return;
76
- }
77
- $params = array(
78
- 'woo_sl_action' => 'status-check',
79
- 'licence_key' => $license,
80
- 'product_unique_id' => $itemId,
81
- 'domain' => home_url()
82
- );
83
- $requestUri = 'https://popup-builder.com/index.php?'.http_build_query($params);
84
- $response = wp_remote_get($requestUri);
85
- if (!is_wp_error($response) || 200 == wp_remote_retrieve_response_code($response)) {
86
- $licenseData = json_decode(wp_remote_retrieve_body($response));
87
- $status = isset($licenseData[0]->licence_status) && $licenseData[0]->licence_status === 'active' ? 'valid' : $licenseData[0]->licence_status;
88
- update_option('sgpb-license-status-'.$key, $status);
89
- set_transient($transient, $licenseData[0]->status_code, WEEK_IN_SECONDS);
90
- }
91
- }
92
- public function updatesInit()
93
- {
94
- if (!class_exists('sgpb\WOOSL_CodeAutoUpdate')) {
95
- // load our custom updater if it doesn't already exist
96
- require_once(SG_POPUP_LIBS_PATH .'WOOSL_CodeAutoUpdate.php');
97
- }
98
- $licenses = (new License())->getLicenses();
99
-
100
- foreach ($licenses as $license) {
101
- $key = @$license['key'];
102
- $storeURL = @$license['storeURL'];
103
- $itemId = @$license['itemId'];
104
- $filePath = @$license['file'];
105
- $pluginMainFilePath = strpos($filePath, SG_POPUP_PLUGIN_PATH) !== 0 ? SG_POPUP_PLUGIN_PATH.$filePath : $filePath;
106
-
107
- $licenseKey = trim(get_option('sgpb-license-key-'.$key));
108
- $status = get_option('sgpb-license-status-'.$key);
109
-
110
- if ($status == false || $status != 'valid') {
111
- continue;
112
- }
113
- $this->checkIfLicenseIsActive($licenseKey, $itemId, $storeURL, $key);
114
- switch($key) {
115
- case 'POPUP_SOCIAL':
116
- if (defined('SGPB_SOCIAL_POPUP_VERSION')) {
117
- $version = @constant('SGPB_SOCIAL_POPUP_VERSION');
118
- } else {
119
- $version = @constant('SG_VERSION_'.$key);
120
- }
121
- break;
122
- case 'POPUP_AGE_VERIFICATION':
123
- if (defined('SGPB_AGE_VERIFICATION_POPUP_VERSION')) {
124
- $version = @constant('SGPB_AGE_VERIFICATION_POPUP_VERSION');
125
- } else{
126
- $version = @constant('SG_VERSION_'.$key);
127
- }
128
- break;
129
- case 'POPUP_GAMIFICATION':
130
- if (defined('POPUP_GAMIFICATION')) {
131
- $version = @constant('POPUP_GAMIFICATION');
132
- } else {
133
- $version = @constant('SG_VERSION_'.$key);
134
- }
135
- break;
136
- default :
137
- $version = @constant('SG_VERSION_'.$key);
138
- break;
139
- }
140
- // If the version of the extension is not found, update will not possibly be shown
141
- if(empty($version)) {
142
- continue;
143
- }
144
- $sgpbUpdater = new WOOSL_CodeAutoUpdate(
145
- 'https://popup-builder.com/index.php',
146
- $pluginMainFilePath,
147
- $itemId,
148
- $licenseKey,
149
- $version
150
- );
151
- }
152
- }
153
- public function custom_admin_js()
154
- {
155
- $currentPostType = AdminHelper::getCurrentPostType();
156
- if (!empty($currentPostType) && ($currentPostType == SG_POPUP_POST_TYPE || $currentPostType == SG_POPUP_AUTORESPONDER_POST_TYPE || $currentPostType == SG_POPUP_TEMPLATE_POST_TYPE)) {
157
- ?>
158
- <script type="text/javascript">
159
- jQuery(document).ready(function($) {
160
- const myForm = $('#posts-filter');
161
- myForm.addClass('sgpb-table');
162
- const searchValue = $('#post-search-input').val();
163
- $('#posts-filter .tablenav.top .tablenav-pages').append($('.subsubsub').addClass('show'));
164
- myForm.append($('#posts-filter .tablenav.bottom .tablenav-pages:not(.no-pages, .one-page) .pagination-links'));
165
- $('#sgpbSearchInPosts').val(searchValue);
166
- $('#sgpbSearchInPosts').keyup('enter', function (e) {
167
- if (e.key === 'Enter') {
168
- $('#post-search-input').val(this.value);
169
- $(myForm).submit();
170
- }
171
- });
172
- $('#sgpbSearchInPostsSubmit').on('click', function () {
173
- $('#post-search-input').val($('#sgpbSearchInPosts').val());
174
- $(myForm).submit();
175
- })
176
- });
177
- </script>
178
- <?php
179
- }
180
- }
181
-
182
- public function screenLayoutSetOneColumn()
183
- {
184
- return 1;
185
- }
186
-
187
- public function wpmlRelatedActions()
188
- {
189
- // The actions below will be executed right after WPML is fully configured and loaded.
190
- add_action('admin_head', array($this, 'removeUnneededMetaboxesFromPopups'), 10);
191
- }
192
-
193
- public function removeUnneededMetaboxesFromPopups()
194
- {
195
- if (isset($_GET['post_type']) && $_GET['post_type'] == SG_POPUP_POST_TYPE) {
196
- $exlcudeTrPopupTypes = array(
197
- 'image',
198
- 'video',
199
- 'iframe',
200
- 'recentSales',
201
- 'pdf'
202
- );
203
- $exlcudeTrPopupTypes = apply_filters('sgpbNoMcePopupTypes', $exlcudeTrPopupTypes);
204
- if (isset($_GET['sgpb_type']) && in_array($_GET['sgpb_type'], $exlcudeTrPopupTypes)) {
205
- remove_meta_box('icl_div', SG_POPUP_POST_TYPE, 'side');
206
- }
207
- }
208
- }
209
-
210
- public function deletePopup($newStatus, $oldStatus, $post)
211
- {
212
- $currentPostType = AdminHelper::getCurrentPostType();
213
-
214
- if (!empty($currentPostType) && $currentPostType == SG_POPUP_POST_TYPE) {
215
- Functions::clearAllTransients();
216
- }
217
- }
218
-
219
- public function showPreviewButtonAfterPopupPublish()
220
- {
221
- $currentPostType = AdminHelper::getCurrentPostType();
222
- if (!empty($currentPostType) && ($currentPostType == SG_POPUP_POST_TYPE || $currentPostType == SG_POPUP_AUTORESPONDER_POST_TYPE || $currentPostType == SG_POPUP_TEMPLATE_POST_TYPE)) {
223
- echo '<style>
224
- #save-post {
225
- display:none !important;
226
- }
227
- .subsubsub {
228
- display:none !important;
229
- }
230
- .subsubsub.show {
231
- display:block !important;
232
- }
233
- .search-box {
234
- display:none !important;
235
- }
236
- .search-box.show {
237
- display:block !important;
238
- }
239
- .tablenav-pages.no-pages {
240
- display: block;
241
- }
242
- .tablenav-pages *:not(.subsubsub, .subsubsub *),
243
- .tablenav-pages.no-pages *:not(.subsubsub, .subsubsub *),
244
- .tablenav-pages.one-page *:not(.subsubsub, .subsubsub *) {
245
- display: none;
246
- }
247
- </style>';
248
- }
249
- }
250
-
251
- public function inactiveExtensionNotice()
252
- {
253
- $screen = '';
254
- $dontShowLicenseBanner = get_option('sgpb-hide-license-notice-banner');
255
- if ($dontShowLicenseBanner) {
256
- return $screen;
257
- }
258
- $inactive = AdminHelper::getOption('SGPB_INACTIVE_EXTENSIONS');
259
- $hasInactiveExtensions = AdminHelper::hasInactiveExtensions();
260
- if (!$inactive) {
261
- AdminHelper::updateOption('SGPB_INACTIVE_EXTENSIONS', 1);
262
- if ($hasInactiveExtensions) {
263
- AdminHelper::updateOption('SGPB_INACTIVE_EXTENSIONS', 'inactive');
264
- $inactive = 'inactive';
265
- }
266
-
267
- }
268
- $licenseSectionUrl = menu_page_url(SGPB_POPUP_LICENSE, false);
269
- $partOfContent = '<br><br>'.__('<a href="'.$licenseSectionUrl.'">Follow the link</a> to finalize the activation.', SG_POPUP_TEXT_DOMAIN);
270
- if (function_exists('get_current_screen')) {
271
- $screen = get_current_screen();
272
- $screenId = $screen->id;
273
- if ($screenId == SGPB_POPUP_LICENSE_SCREEN) {
274
- $partOfContent = '';
275
- }
276
- }
277
-
278
- if ($hasInactiveExtensions && $inactive == 'inactive') {
279
- $content = '';
280
- ob_start();
281
- ?>
282
- <div id="welcome-panel" class="update-nag sgpb-extensions-notices sgpb-license-notice">
283
- <div class="welcome-panel-content">
284
- <b><?php _e('Thank you for choosing our plugin!', SG_POPUP_TEXT_DOMAIN) ?></b>
285
- <br>
286
- <br>
287
- <b><?php _e('You have activated Popup Builder extension(s). Please, don\'t forget to activate the license key(s) as well.', SG_POPUP_TEXT_DOMAIN) ?></b>
288
- <b><?php echo $partOfContent; ?></b>
289
- </div>
290
- <button type="button" class="notice-dismiss" onclick="jQuery('.sgpb-license-notice').remove();"><span class="screen-reader-text"><?php _e('Dismiss this notice.', SG_POPUP_TEXT_DOMAIN) ?></span></button>
291
- <span class="sgpb-dont-show-again-license-notice"><?php _e('Don\'t show again.', SG_POPUP_TEXT_DOMAIN); ?></span>
292
- </div>
293
- <?php
294
- $content = ob_get_clean();
295
-
296
- echo $content;
297
- return true;
298
- }
299
- }
300
-
301
- public function hidePublishingActions() {
302
- $currentPostType = AdminHelper::getCurrentPostType();
303
- if (empty($currentPostType) || $currentPostType != SG_POPUP_POST_TYPE) {
304
- return false;
305
- }
306
-
307
- echo '<style>
308
- #misc-publishing-actions .edit-post-status,
309
- #misc-publishing-actions .edit-timestamp,
310
- #misc-publishing-actions .edit-visibility {
311
- display:none !important;
312
- }
313
- </style>';
314
- }
315
-
316
- public function hidePageBuilderEditButtons($postId = 0, $post = array())
317
- {
318
- $currentPostType = AdminHelper::getCurrentPostType();
319
- if (empty($currentPostType) || $currentPostType != SG_POPUP_POST_TYPE) {
320
- return false;
321
- }
322
- $excludedPopupTypesFromPageBuildersFunctionality = array(
323
- 'image'
324
- );
325
-
326
- $excludedPopupTypesFromPageBuildersFunctionality = apply_filters('sgpbHidePageBuilderEditButtons', $excludedPopupTypesFromPageBuildersFunctionality);
327
-
328
- $popupType = AdminHelper::getCurrentPopupType();
329
- if (in_array($popupType, $excludedPopupTypesFromPageBuildersFunctionality)) {
330
- echo '<style>
331
- #elementor-switch-mode, #elementor-editor {
332
- display:none !important;
333
- }
334
- </style>';
335
- }
336
- }
337
-
338
- public function getBannerContent()
339
- {
340
- // right metabox banner content
341
- $metaboxBannerContent = AdminHelper::getFileFromURL(SGPB_METABOX_BANNER_CRON_TEXT_URL);
342
- update_option('sgpb-metabox-banner-remote-get', $metaboxBannerContent);
343
-
344
- return true;
345
- }
346
-
347
- public function wpInit()
348
- {
349
-
350
- }
351
-
352
- public function mainActionButtons($views)
353
- {
354
- require_once(SG_POPUP_VIEWS_PATH.'mainActionButtons.php');
355
-
356
- return $views;
357
- }
358
-
359
- /**
360
- * Loads the plugin language files
361
- */
362
- public function loadTextDomain()
363
- {
364
- $popupBuilderLangDir = SG_POPUP_BUILDER_PATH.'/languages/';
365
- $popupBuilderLangDir = apply_filters('popupBuilderLanguagesDirectory', $popupBuilderLangDir);
366
-
367
- $locale = apply_filters('sgpbPluginLocale', get_locale(), SG_POPUP_TEXT_DOMAIN);
368
- $mofile = sprintf('%1$s-%2$s.mo', SG_POPUP_TEXT_DOMAIN, $locale);
369
-
370
- $mofileLocal = $popupBuilderLangDir.$mofile;
371
-
372
- if (file_exists($mofileLocal)) {
373
- // Look in local /wp-content/plugins/popup-builder/languages/ folder
374
- load_textdomain(SG_POPUP_TEXT_DOMAIN, $mofileLocal);
375
- }
376
- else {
377
- // Load the default language files
378
- load_plugin_textdomain(SG_POPUP_TEXT_DOMAIN, false, $popupBuilderLangDir);
379
- }
380
-
381
- }
382
-
383
- public function redirectFromPopupPage()
384
- {
385
- global $post;
386
- $currentPostType = '';
387
-
388
- if (is_object($post)) {
389
- $currentPostType = @$post->post_type;
390
- }
391
- // in some themes global $post returns null
392
- if (empty($currentPostType)) {
393
- global $post_type;
394
- $currentPostType = $post_type;
395
- }
396
- // for editing popup content via page builders on backend
397
- if (!isset($_GET) || empty($_GET)) {
398
- if (!is_admin() && SG_POPUP_POST_TYPE == $currentPostType && !is_preview()) {
399
- // it's for seo optimization
400
- status_header(301);
401
- $homeURL = home_url();
402
- wp_redirect($homeURL);
403
- exit();
404
- }
405
- }
406
- }
407
-
408
- public function preGetPosts($query)
409
- {
410
- if (!is_admin() || !isset($_GET['post_type']) || $_GET['post_type'] != SG_POPUP_POST_TYPE) {
411
- return false;
412
- }
413
-
414
- // change default order by id and desc
415
- if (!isset($_GET['orderby'])) {
416
- $query->set('orderby', 'ID');
417
- $query->set('order', 'desc');
418
- }
419
- $query = apply_filters('sgpbPreGetPosts', $query);
420
-
421
- return true;
422
- }
423
-
424
- public function pluginNotices()
425
- {
426
- if (function_exists('get_current_screen')) {
427
- $screen = get_current_screen();
428
- $screenId = $screen->id;
429
- if ($screenId == 'edit-popupbuilder') {
430
- $notificationsObj = new SGPBNotificationCenter();
431
- echo $notificationsObj->displayNotifications();
432
- }
433
- }
434
- $extensions = AdminHelper::getAllActiveExtensions();
435
- $updated = get_option('sgpb_extensions_updated');
436
-
437
- $content = '';
438
-
439
- // if popup builder has the old version
440
- if (!get_option('SG_POPUP_VERSION')) {
441
- return $content;
442
- }
443
-
444
- $alertProblem = get_option('sgpb_alert_problems');
445
- // for old users show alert about problems
446
- if (!$alertProblem) {
447
- echo AdminHelper::renderAlertProblem();
448
- }
449
-
450
- // Don't show the banner if there's not any extension of Popup Builder or if the user has clicked "don't show"
451
- if (empty($extensions) || $updated) {
452
- return $content;
453
- }
454
-
455
- ob_start();
456
- ?>
457
- <div id="welcome-panel" class="update-nag sgpb-extensions-notices">
458
- <div class="welcome-panel-content">
459
- <?php echo AdminHelper::renderExtensionsContent(); ?>
460
- </div>
461
- </div>
462
- <?php
463
- $content = ob_get_clean();
464
-
465
- echo $content;
466
- return true;
467
- }
468
-
469
- private function registerImporter()
470
- {
471
- require_once SG_POPUP_LIBS_PATH.'Importer.php';
472
- $importer = new WP_Import();
473
- register_importer(SG_POPUP_POST_TYPE, SG_POPUP_POST_TYPE, __('Importer', SG_POPUP_TEXT_DOMAIN), array($importer, 'dispatch'));
474
- }
475
-
476
- public function pluginLoaded()
477
- {
478
- $this->registerImporter();
479
- $versionPopup = get_option('SG_POPUP_VERSION');
480
- $convert = get_option('sgpbConvertToNewVersion');
481
- $unsubscribeColumnFixed = get_option('sgpbUnsubscribeColumnFixed');
482
- AdminHelper::makeRegisteredPluginsStaticPathsToDynamic();
483
-
484
- if (!$unsubscribeColumnFixed) {
485
- AdminHelper::addUnsubscribeColumn();
486
- update_option('sgpbUnsubscribeColumnFixed', 1);
487
- delete_option('sgpbUnsubscribeColumn');
488
- }
489
-
490
- if ($versionPopup && !$convert) {
491
- update_option('sgpbConvertToNewVersion', 1);
492
- ConvertToNewVersion::convert();
493
- Installer::registerPlugin();
494
- }
495
- }
496
-
497
- public function popupMediaButton()
498
- {
499
- if (!$this->mediaButton) {
500
- $this->mediaButton = true;
501
- self::enqueueScriptsForPageBuilders();
502
- if (function_exists('get_current_screen')) {
503
- $screen = get_current_screen();
504
- if (!empty($screen)) {
505
- echo new MediaButton();
506
- }
507
- }
508
- }
509
- }
510
-
511
- public function editorButton($plugins)
512
- {
513
- if (empty($this->mediaButton)) {
514
- $this->mediaButton = true;
515
- add_action('admin_footer', function() {
516
- self::enqueueScriptsForPageBuilders();
517
- echo new MediaButton(false);
518
- });
519
- }
520
-
521
- return $plugins;
522
- }
523
-
524
- public static function enqueueScriptsForPageBuilders()
525
- {
526
- require_once(ABSPATH.'wp-admin/includes/screen.php');
527
- global $post;
528
- if (function_exists('get_current_screen')) {
529
- $screen = get_current_screen();
530
- if ((!empty($screen->id) && $screen->id == SG_POPUP_POST_TYPE) || !empty($post)) {
531
- if (!isset($_GET['fl_builder'])) {
532
- Javascript::enqueueScripts('post-new.php');
533
- Style::enqueueStyles('post-new.php');
534
- }
535
- }
536
- }
537
- else if (isset($_GET['fl_builder'])) {
538
- Javascript::enqueueScripts('post-new.php');
539
- Style::enqueueStyles('post-new.php');
540
- }
541
- }
542
-
543
- public function userRolesCaps()
544
- {
545
- $userSavedRoles = get_option('sgpb-user-roles');
546
-
547
- if (!$userSavedRoles) {
548
- $userSavedRoles = array('administrator');
549
- }
550
- else {
551
- array_push($userSavedRoles, 'administrator');
552
- }
553
-
554
- foreach ($userSavedRoles as $theRole) {
555
- $role = get_role($theRole);
556
- if (empty($role)) {
557
- continue;
558
- }
559
-
560
- $role->add_cap('read');
561
- $role->add_cap('read_post');
562
- $role->add_cap('read_private_sgpb_popups');
563
- $role->add_cap('edit_sgpb_popup');
564
- $role->add_cap('edit_sgpb_popups');
565
- $role->add_cap('edit_others_sgpb_popups');
566
- $role->add_cap('edit_published_sgpb_popups');
567
- $role->add_cap('publish_sgpb_popups');
568
- $role->add_cap('delete_sgpb_popups');
569
- $role->add_cap('delete_published_posts');
570
- $role->add_cap('delete_others_sgpb_popups');
571
- $role->add_cap('delete_private_sgpb_popups');
572
- $role->add_cap('delete_private_sgpb_popup');
573
- $role->add_cap('delete_published_sgpb_popups');
574
-
575
- // For popup builder sub-menus and terms
576
- $role->add_cap('sgpb_manage_options');
577
- $role->add_cap('manage_popup_terms');
578
- $role->add_cap('manage_popup_categories_terms');
579
- $role = apply_filters('sgpbUserRoleCap', $role);
580
- }
581
-
582
- return true;
583
- }
584
-
585
- public function pluginActivated()
586
- {
587
- if (!get_option('sgpbActivateExtensions') && SGPB_POPUP_PKG != SGPB_POPUP_PKG_FREE) {
588
- $obj = new PopupExtensionActivator();
589
- $obj->activate();
590
- update_option('sgpbActivateExtensions', 1);
591
- }
592
- }
593
-
594
- public function popupShortcode($args, $content)
595
- {
596
- if (empty($args) || empty($args['id'])) {
597
- return $content;
598
- }
599
-
600
- $oldShortcode = isset($args['event']) && $args['event'] === 'onload';
601
- $isInherit = isset($args['event']) && $args['event'] == 'inherit';
602
- $event = '';
603
-
604
- $shortcodeContent = '';
605
- $argsId = $popupId = (int)$args['id'];
606
-
607
- // for old popups
608
- if (function_exists('sgpb\sgpGetCorrectPopupId')) {
609
- $popupId = sgpGetCorrectPopupId($popupId);
610
- }
611
-
612
- $popup = SGPopup::find($popupId);
613
- $popup = apply_filters('sgpbShortCodePopupObj', $popup);
614
-
615
- $event = preg_replace('/on/', '', @$args['event']);
616
- // when popup does not exists or popup post status it's not publish ex when popup in trash
617
- if (empty($popup) || (!is_object($popup) && $popup != 'publish')) {
618
- return $content;
619
- }
620
-
621
- $isActive = $popup->isActive();
622
- if (!$isActive) {
623
- return $content;
624
- }
625
-
626
- $alreadySavedEvents = $popup->getEvents();
627
- $loadableMode = $popup->getLoadableModes();
628
-
629
- if (!isset($args['event']) && isset($args['insidepopup'])) {
630
- unset($args['insidepopup']);
631
- $event = 'insideclick';
632
- $insideShortcodeKey = $popupId.$event;
633
-
634
- // for prevent infinity chain
635
- if (is_array($this->insideShortcodes) && in_array($insideShortcodeKey, $this->insideShortcodes)) {
636
- $shortcodeContent = SGPopup::renderPopupContentShortcode($content, $argsId, $event, $args);
637
-
638
- return $shortcodeContent;
639
- }
640
- $this->insideShortcodes[] = $insideShortcodeKey;
641
- }
642
- // if no event attribute is set, or old shortcode
643
- if (!isset($args['event']) || $oldShortcode || $isInherit) {
644
- $loadableMode = $popup->getLoadableModes();
645
- if (!empty($content)) {
646
- $alreadySavedEvents = false;
647
- }
648
- // for old popup, after the update, there aren't any events
649
- if (empty($alreadySavedEvents)) {
650
- $event = '';
651
- if (!empty($content)) {
652
- $event = 'click';
653
- }
654
- if (!empty($args['event'])) {
655
- $event = $args['event'];
656
- }
657
- $event = preg_replace('/on/', '', $event);
658
- $popup->setEvents(array($event));
659
- }
660
- if (empty($loadableMode)) {
661
- $loadableMode = array();
662
- }
663
- $loadableMode['option_event'] = true;
664
- }
665
- else {
666
- $event = $args['event'];
667
- $event = preg_replace('/on/', '', $event);
668
- $popup->setEvents(array($event));
669
- }
670
-
671
- $popup->setLoadableModes($loadableMode);
672
- $scriptsLoader = new ScriptsLoader();
673
- $loadablePopups = array($popup);
674
- $groupObj = new PopupGroupFilter();
675
- $groupObj->setPopups(array($popup));
676
- $loadablePopups = $groupObj->filter();
677
- $scriptsLoader->setLoadablePopups($loadablePopups);
678
- $scriptsLoader->loadToFooter();
679
-
680
- if (!empty($content)) {
681
- $matches = SGPopup::getPopupShortcodeMatchesFromContent($content);
682
- if (!empty($matches)) {
683
- foreach ($matches[0] as $key => $value) {
684
- $attrs = shortcode_parse_atts($matches[3][$key]);
685
- if (empty($attrs['id'])) {
686
- continue;
687
- }
688
- $shortcodeContent = SGPopup::renderPopupContentShortcode($content, $attrs['id'], $attrs['event'], $attrs);
689
- break;
690
- }
691
- }
692
- }
693
-
694
- if (isset($event) && $event != 'onload' && !empty($content)) {
695
- $shortcodeContent = SGPopup::renderPopupContentShortcode($content, $argsId, $event, $args);
696
- }
697
- $shortcodeContent = apply_filters('sgpbPopupShortCodeContent', $shortcodeContent);
698
-
699
- return do_shortcode($shortcodeContent);
700
- }
701
-
702
- public function deleteSubscribersWithPopup($postId)
703
- {
704
- global $post_type;
705
-
706
- if ($post_type == SG_POPUP_POST_TYPE) {
707
- AdminHelper::deleteSubscriptionPopupSubscribers($postId);
708
- }
709
- }
710
-
711
- public function cronAddMinutes($schedules)
712
- {
713
- $schedules['sgpb_newsletter_send_every_minute'] = array(
714
- 'interval' => SGPB_CRON_REPEAT_INTERVAL * 60,
715
- 'display' => __('Once Every Minute', SG_POPUP_TEXT_DOMAIN)
716
- );
717
-
718
- $schedules['sgpb_banners'] = array(
719
- 'interval' => SGPB_TRANSIENT_TIMEOUT_WEEK,
720
- 'display' => __('Once Every Week', SG_POPUP_TEXT_DOMAIN)
721
- );
722
-
723
- $schedules = apply_filters('sgpbCronTimeoutSettings', $schedules);
724
-
725
- return $schedules;
726
- }
727
-
728
- public function newsletterSendEmail()
729
- {
730
- global $wpdb;
731
- $newsletterOptions = get_option('SGPB_NEWSLETTER_DATA');
732
-
733
- if (empty($newsletterOptions)) {
734
- wp_clear_scheduled_hook('sgpb_send_newsletter');
735
- }
736
- $subscriptionFormId = (int)$newsletterOptions['subscriptionFormId'];
737
- $subscriptionFormTitle = get_the_title($subscriptionFormId);
738
- $emailsInFlow = (int)$newsletterOptions['emailsInFlow'];
739
- $mailSubject = $newsletterOptions['newsletterSubject'];
740
- $fromEmail = $newsletterOptions['fromEmail'];
741
- $emailMessage = $newsletterOptions['messageBody'];
742
-
743
- $allAvailableShortcodes = array();
744
- $allAvailableShortcodes['patternFirstName'] = '/\[First name]/';
745
- $allAvailableShortcodes['patternLastName'] = '/\[Last name]/';
746
- $allAvailableShortcodes['patternBlogName'] = '/\[Blog name]/';
747
- $allAvailableShortcodes['patternUserName'] = '/\[User name]/';
748
- $allAvailableShortcodes['patternUnsubscribe'] = '';
749
-
750
- $pattern = "/\[(\[?)(Unsubscribe)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]\*+(?:\[(?!\/\2\])[^\[]\*+)\*+)\[\/\2\])?)(\]?)/";
751
- preg_match($pattern, $emailMessage, $matches);
752
- $title = __('Unsubscribe', SG_POPUP_TEXT_DOMAIN);
753
- if ($matches) {
754
- $patternUnsubscribe = $matches[0];
755
- // If user didn't change anything inside the [unsubscribe] shortcode $matches[2] will be equal to 'Unsubscribe'
756
- if ($matches[2] == 'Unsubscribe') {
757
- $pattern = '/\s(\w+?)="(.+?)"]/';
758
- preg_match($pattern, $matches[0], $matchesTitle);
759
- if (!empty($matchesTitle[2])) {
760
- $title = AdminHelper::removeAllNonPrintableCharacters($matchesTitle[2], 'Unsubscribe');
761
- }
762
- }
763
- $allAvailableShortcodes['patternUnsubscribe'] = $patternUnsubscribe;
764
- }
765
-
766
- // When email is not valid we don't continue
767
- if (!preg_match('/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/', $fromEmail)) {
768
- wp_clear_scheduled_hook('sgpb_send_newsletter');
769
- return false;
770
- }
771
-
772
- $selectionQuery = 'SELECT id FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE';
773
- $selectionQuery = apply_filters('sgpbUserSelectionQuery', $selectionQuery);
774
- $sql = $wpdb->prepare($selectionQuery .' and subscriptionType = %d limit 1', $subscriptionFormId);
775
-
776
- $result = $wpdb->get_row($sql, ARRAY_A);
777
- $currentStateEmailId = (int)$result['id'];
778
- $getTotalSql = $wpdb->prepare('SELECT count(*) FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE unsubscribed = 0 and subscriptionType = %d', $subscriptionFormId);
779
- $totalSubscribers = $wpdb->get_var($getTotalSql);
780
-
781
- // $currentStateEmailId == 0 when all emails status = 1
782
- if ($currentStateEmailId == 0) {
783
- // Clear schedule hook
784
- $headers = 'MIME-Version: 1.0'."\r\n";
785
- $headers .= 'Content-type: text/html; charset=UTF-8'."\r\n";
786
- $successTotal = get_option('SGPB_NEWSLETTER_'.$subscriptionFormId);
787
- if (!$successTotal) {
788
- $successTotal = 0;
789
- }
790
- $failedTotal = $totalSubscribers - $successTotal;
791
-
792
- $emailMessageCustom = __('Your mail list %s delivered successfully!
793
- %d of the %d emails succeeded, %d failed.
794
- For more details, please download log file inside the plugin.
795
- This email was generated via Popup Builder plugin.', SG_POPUP_TEXT_DOMAIN);
796
- $emailMessageCustom = sprintf($emailMessageCustom, $subscriptionFormTitle, $successTotal, $totalSubscribers, $failedTotal);
797
-
798
- wp_mail($fromEmail, $subscriptionFormTitle.' list has been successfully delivered!', $emailMessageCustom, $headers);
799
- delete_option('SGPB_NEWSLETTER_'.$subscriptionFormId);
800
- wp_clear_scheduled_hook('sgpb_send_newsletter');
801
- return;
802
- }
803
-
804
- $getAllDataSql = 'SELECT id, firstName, lastName, email FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE';
805
- $getAllDataSql = apply_filters('sgpbUserSelectionQuery', $getAllDataSql);
806
- $getAllDataSql = $wpdb->prepare($getAllDataSql .' and id >= %d and subscriptionType = %s limit %d', $currentStateEmailId, $subscriptionFormId, $emailsInFlow);
807
- $subscribers = $wpdb->get_results($getAllDataSql, ARRAY_A);
808
-
809
- $subscribers = apply_filters('sgpNewsletterSendingSubscribers', $subscribers);
810
-
811
- $blogInfo = get_bloginfo();
812
- $headers = array(
813
- 'From: "'.$blogInfo.'" <'.$fromEmail.'>' ,
814
- 'MIME-Version: 1.0' ,
815
- 'Content-type: text/html; charset=UTF-8'
816
- );
817
-
818
- foreach ($subscribers as $subscriber) {
819
- $replacementId = $subscriber['id'];
820
- $allAvailableShortcodes = apply_filters('sgpbNewsletterShortcodes', $allAvailableShortcodes, $subscriptionFormId, $replacementId);
821
- $replacementFirstName = $subscriber['firstName'];
822
- $replacementLastName = $subscriber['lastName'];
823
- $replacementBlogName = $newsletterOptions['blogname'];
824
- $replacementUserName = $newsletterOptions['username'];
825
- $replacementEmail = $subscriber['email'];
826
- $replacementUnsubscribe = get_home_url();
827
- $replacementUnsubscribe .= '?sgpbUnsubscribe='.md5($replacementId.$replacementEmail);
828
- $replacementUnsubscribe .= '&email='.$subscriber['email'];
829
- $replacementUnsubscribe .= '&popup='.$subscriptionFormId;
830
- $replacementUnsubscribe = '<br><a href="'.$replacementUnsubscribe.'">'.$title.'</a>';
831
-
832
- // Replace First name and Last name from email message
833
- $emailMessageCustom = preg_replace($allAvailableShortcodes['patternFirstName'], $replacementFirstName, $emailMessage);
834
- $emailMessageCustom = preg_replace($allAvailableShortcodes['patternLastName'], $replacementLastName, $emailMessageCustom);
835
- $emailMessageCustom = preg_replace($allAvailableShortcodes['patternBlogName'], $replacementBlogName, $emailMessageCustom);
836
- $emailMessageCustom = preg_replace($allAvailableShortcodes['patternUserName'], $replacementUserName, $emailMessageCustom);
837
- $emailMessageCustom = str_replace($allAvailableShortcodes['patternUnsubscribe'], $replacementUnsubscribe, $emailMessageCustom);
838
- if (!empty($allAvailableShortcodes['extraShortcodesWithValues'])) {
839
- $customFields = $allAvailableShortcodes['extraShortcodesWithValues'];
840
- foreach ($customFields as $customFieldKey => $customFieldValue) {
841
- $finalShortcode = '/\['.$customFieldKey.']/';
842
- $emailMessageCustom = preg_replace($finalShortcode, $customFieldValue, $emailMessageCustom);
843
- }
844
- }
845
- $emailMessageCustom = stripslashes($emailMessageCustom);
846
-
847
- $emailMessageCustom = apply_filters('sgpNewsletterSendingMessage', $emailMessageCustom);
848
- $mailStatus = wp_mail($subscriber['email'], $mailSubject, $emailMessageCustom, $headers);
849
- if (!$mailStatus) {
850
- $errorLogSql = $wpdb->prepare('INSERT INTO '. $wpdb->prefix .SGPB_SUBSCRIBERS_ERROR_TABLE_NAME.' (`popupType`, `email`, `date`) VALUES (%s, %s, %s)', $subscriptionFormId, $subscriber['email'], date('Y-m-d H:i'));
851
- $wpdb->query($errorLogSql);
852
- continue;
853
- }
854
-
855
- $successCount = get_option('SGPB_NEWSLETTER_'.$subscriptionFormId);
856
- if (!$successCount) {
857
- update_option('SGPB_NEWSLETTER_'.$subscriptionFormId, 1);
858
- }
859
- else {
860
- update_option('SGPB_NEWSLETTER_'.$subscriptionFormId, ++$successCount);
861
- }
862
- }
863
- // Update the status of all the sent mails
864
- $updateStatusQuery = $wpdb->prepare('UPDATE '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' SET status = 1 where id >= %d and subscriptionType = %d limit %d', $currentStateEmailId, $subscriptionFormId, $emailsInFlow);
865
- $wpdb->query($updateStatusQuery);
866
- }
867
-
868
- private function unsubscribe($params = array())
869
- {
870
- AdminHelper::deleteUserFromSubscribers($params);
871
- }
872
-
873
- public function enqueuePopupBuilderScripts()
874
- {
875
- // for old popups
876
- if (get_option('SG_POPUP_VERSION')) {
877
- ConvertToNewVersion::saveCustomInserted();
878
- }
879
-
880
- $popupLoaderObj = PopupLoader::instance();
881
- if (is_object($popupLoaderObj)) {
882
- $popupLoaderObj->loadPopups();
883
- }
884
- }
885
-
886
- public function adminLoadPopups($hook)
887
- {
888
- $allowedPages = array();
889
- $allowedPages = apply_filters('sgpbAdminLoadedPages', $allowedPages);
890
-
891
- if (!empty($allowedPages) && is_array($allowedPages) && in_array($hook, $allowedPages)) {
892
- $scriptsLoader = new ScriptsLoader();
893
- $scriptsLoader->setIsAdmin(true);
894
- $scriptsLoader->loadToFooter();
895
- }
896
- }
897
-
898
- public function postTypeInit()
899
- {
900
- if (isset($_POST['sgpb-is-preview']) && $_POST['sgpb-is-preview'] == 1) {
901
- $postId = $_POST['post_ID'];
902
- $post = get_post($postId);
903
- $this->savePost($postId, $post, false);
904
- }
905
- $adminUrl = admin_url();
906
-
907
- if (isset($_GET['page']) && $_GET['page'] == 'PopupBuilder') {
908
- _e('<span>Popup Builder plugin has been successfully updated. Please <a href="'.esc_attr($adminUrl).'edit.php?post_type='.SG_POPUP_POST_TYPE.'">click here</a> to go to the new Dashboard of the plugin.</span>', SG_POPUP_TEXT_DOMAIN);
909
- wp_die();
910
- }
911
-
912
- $unsubscribeArgs = $this->collectUnsubscriberArgs();
913
- if (!empty($unsubscribeArgs)) {
914
- $this->unsubscribe($unsubscribeArgs);
915
- }
916
-
917
- AdminHelper::removeUnnecessaryCodeFromPopups();
918
-
919
- $this->customPostTypeObj = new RegisterPostType();
920
- }
921
-
922
- public function collectUnsubscriberArgs()
923
- {
924
- if (!isset($_GET['sgpbUnsubscribe'])) {
925
- return false;
926
- }
927
- $args = array();
928
- if (isset($_GET['sgpbUnsubscribe'])) {
929
- $args['token'] = $_GET['sgpbUnsubscribe'];
930
- }
931
- if (isset($_GET['email'])) {
932
- $args['email'] = $_GET['email'];
933
- }
934
- if (isset($_GET['popup'])) {
935
- $args['popup'] = $_GET['popup'];
936
- }
937
-
938
- return $args;
939
- }
940
-
941
- public function addSubMenu()
942
- {
943
- // We need to check license keys and statuses before adding new menu "License" item
944
- new Updates();
945
-
946
- $this->customPostTypeObj->addSubMenu();
947
- }
948
-
949
- public function supportLinks()
950
- {
951
- if (SGPB_POPUP_PKG == SGPB_POPUP_PKG_FREE) {
952
- if (method_exists($this->customPostTypeObj, 'supportLinks')) {
953
- $this->customPostTypeObj->supportLinks();
954
- }
955
- }
956
- }
957
-
958
- public function popupMetaboxes()
959
- {
960
- $this->customPostTypeObj->addPopupMetaboxes();
961
- }
962
-
963
- public function savePost($postId = 0, $post = array(), $update = false)
964
- {
965
- if ($post->post_type !== SG_POPUP_POST_TYPE) {
966
- return;
967
- }
968
- $allowToAction = AdminHelper::userCanAccessTo();
969
- Functions::clearAllTransients();
970
- $postData = SGPopup::parsePopupDataFromData($_POST);
971
- $saveMode = '';
972
- $postData['sgpb-post-id'] = $postId;
973
- // If preview mode
974
- if (isset($postData['sgpb-is-preview']) && $postData['sgpb-is-preview'] == 1) {
975
- $saveMode = '_preview';
976
- SgpbPopupConfig::popupTypesInit();
977
- SgpbDataConfig::init();
978
- // published popup
979
- if (empty($post)) {
980
- global $post;
981
- $postId = $post->ID;
982
- }
983
- if ($post->post_status != 'draft') {
984
- $posts = array();
985
- $popupContent = $post->post_content;
986
-
987
- $query = new WP_Query(
988
- array(
989
- 'post_parent' => $postId,
990
- 'posts_per_page' => - 1,
991
- 'post_type' => 'revision',
992
- 'post_status' => 'inherit'
993
- )
994
- );
995
- $query = apply_filters('sgpbSavePostQuery', $query);
996
-
997
- while ($query->have_posts()) {
998
- $query->the_post();
999
- if (empty($posts)) {
1000
- $posts[] = $post;
1001
- }
1002
- }
1003
- if (!empty($posts[0])) {
1004
- $popup = $posts[0];
1005
- $popupContent = $popup->post_content;
1006
- }
1007
- }
1008
- }
1009
-
1010
-
1011
- if (empty($post)) {
1012
- $saveMode = '';
1013
- }
1014
-
1015
- if ($post->post_status == 'draft') {
1016
- $saveMode = '_preview';
1017
- }
1018
-
1019
- /* In preview mode saveMode should be true*/
1020
- if ((!empty($post) && $post->post_type == SG_POPUP_POST_TYPE) || $saveMode || (empty($post) && !$saveMode)) {
1021
- if (!$allowToAction) {
1022
- wp_redirect(get_home_url());
1023
- exit();
1024
- }
1025
- if (!empty($postData['sgpb-type'])) {
1026
- $popupType = $postData['sgpb-type'];
1027
- $popupClassName = SGPopup::getPopupClassNameFormType($popupType);
1028
- $popupClassPath = SGPopup::getPopupTypeClassPath($popupType);
1029
- require_once($popupClassPath.$popupClassName.'.php');
1030
- $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
1031
-
1032
- $popupClassName::create($postData, $saveMode, 1);
1033
- }
1034
- }
1035
- else {
1036
- $content = get_post_field('post_content', $postId);
1037
- SGPopup::deletePostCustomInsertedData($postId);
1038
- SGPopup::deletePostCustomInsertedEvents($postId);
1039
- /*We detect all the popups that were inserted as a custom ones, in the content.*/
1040
- SGPopup::savePopupsFromContentClasses($content, $post);
1041
- }
1042
- }
1043
-
1044
- /**
1045
- * Check Popup is satisfy for popup condition
1046
- *
1047
- * @param array $args
1048
- *
1049
- * @return array
1050
- *
1051
- *@since 1.0.0
1052
- *
1053
- */
1054
- public function conditionsSatisfy($args = array())
1055
- {
1056
- if (isset($args['status']) && $args['status'] === false) {
1057
- return $args;
1058
- }
1059
- $args['status'] = PopupChecker::checkOtherConditionsActions($args);
1060
-
1061
- return $args;
1062
- }
1063
-
1064
- public function popupsTableColumnsValues($column, $postId)
1065
- {
1066
- $postId = (int)$postId;// Convert to int for security reasons
1067
- global $post_type;
1068
- if ($postId) {
1069
- $args['status'] = array('publish', 'draft', 'pending', 'private', 'trash');
1070
- $popup = SGPopup::find($postId, $args);
1071
- }
1072
-
1073
- if (empty($popup) && $post_type == SG_POPUP_POST_TYPE) {
1074
- return false;
1075
- }
1076
-
1077
- if ($column == 'shortcode') {
1078
- echo '<input type="text" onfocus="this.select();" readonly value="[sg_popup id='.$postId.']" class="large-text code">';
1079
- }
1080
- if ($column == 'className') {
1081
- echo '<input type="text" onfocus="this.select();" readonly value="sg-popup-id-'.esc_attr($postId).'" class="large-text code">';
1082
- }
1083
- else if ($column == 'counter') {
1084
- $count = $popup->getPopupOpeningCountById($postId);
1085
- echo '<div ><span>'.$count.'</span>'.'<input onclick="SGPBBackend.resetCount('.$postId.', true);" type="button" name="" class="sgpb-btn sgpb-btn-dark-outline" value="'.__('reset', SG_POPUP_TEXT_DOMAIN).'"></div>';
1086
- }
1087
- else if ($column == 'type') {
1088
- global $SGPB_POPUP_TYPES;
1089
- $type = $popup->getType();
1090
- if (isset($SGPB_POPUP_TYPES['typeLabels'][$type])) {
1091
- $type = $SGPB_POPUP_TYPES['typeLabels'][$type];
1092
- }
1093
- echo $type;
1094
- }
1095
- else if ($column == 'onOff') {
1096
- $popupPostStatus = get_post_status($postId);
1097
- if ($popupPostStatus == 'publish' || $popupPostStatus == 'draft') {
1098
- $isActive = $popup->getOptionValue('sgpb-is-active', true);
1099
- }
1100
- $checked = isset($isActive) && $isActive ? 'checked' : '';
1101
- echo '<label class="sgpb-switch">
1102
- <input class="sg-switch-checkbox sgpb-popup-status-js" value="1" data-switch-id="'.$postId.'" type="checkbox" '.$checked.'>
1103
- <div class="sgpb-slider sgpb-round"></div>
1104
- </label>';
1105
- }
1106
- else if ($column == 'sgpbIsRandomEnabled') {
1107
- $showValues = apply_filters('sgpbAddRandomTableColumnValues', $postId);
1108
- echo $showValues;
1109
- }
1110
- else if ($column == 'options') {
1111
- $cloneUrl = AdminHelper::popupGetClonePostLink($postId);
1112
- $actionButtons = '<div class="icon icon_blue">
1113
- <img src="'.SG_POPUP_PUBLIC_URL.'icons/iconEdit.png" alt="Edit" class="icon_edit" onclick="location.href=\''.get_edit_post_link($postId).'\'">
1114
- </div>';
1115
- $actionButtons .= '<div class="icon icon_blue">
1116
- <img src="'.SG_POPUP_PUBLIC_URL.'icons/iconClone.png" alt="Clone" class="icon_clone" onclick="location.href=\''.$cloneUrl.'\'">
1117
- </div>';
1118
- $actionButtons .= '<div class="icon icon_pink">
1119
- <img src="'.SG_POPUP_PUBLIC_URL.'icons/recycle-bin.svg" alt="Remove" class="icon_remove" onclick="location.href=\''.get_delete_post_link($postId).'\'">
1120
- </div>';
1121
-
1122
- echo $actionButtons;
1123
- }
1124
- }
1125
-
1126
- /*
1127
- * This function calls the creation of a new copy of the selected post (by default preserving the original publish status)
1128
- * then redirects to the post list
1129
- */
1130
- public function popupSaveAsNew($status = '')
1131
- {
1132
- if (!(isset($_GET['post']) || isset($_POST['post']) || (isset($_REQUEST['action']) && 'popupSaveAsNew' == $_REQUEST['action']))) {
1133
- wp_die(esc_html__('No post to duplicate has been supplied!', SG_POPUP_TEXT_DOMAIN));
1134
- }
1135
- // Get the original post
1136
- $id = (isset($_GET['post']) ? $_GET['post'] : $_POST['post']);
1137
-
1138
- check_admin_referer('duplicate-post_'.$id);
1139
-
1140
- $post = get_post($id);
1141
-
1142
- // Copy the post and insert it
1143
- if (isset($post) && $post != null) {
1144
- $newId = $this->popupCreateDuplicate($post, $status);
1145
- $postType = $post->post_type;
1146
-
1147
- if ($status == '') {
1148
- $sendBack = wp_get_referer();
1149
- if (!$sendBack ||
1150
- strpos($sendBack, 'post.php') !== false ||
1151
- strpos($sendBack, 'post-new.php') !== false) {
1152
- if ('attachment' == $postType) {
1153
- $sendBack = admin_url('upload.php');
1154
- }
1155
- else {
1156
- $sendBack = admin_url('edit.php');
1157
- if (!empty($postType)) {
1158
- $sendBack = add_query_arg('post_type', $postType, $sendBack);
1159
- }
1160
- }
1161
- }
1162
- else {
1163
- $sendBack = remove_query_arg(array('trashed', 'untrashed', 'deleted', 'cloned', 'ids'), $sendBack);
1164
- }
1165
- // Redirect to the post list screen
1166
- wp_redirect(add_query_arg(array('cloned' => 1, 'ids' => $post->ID), $sendBack));
1167
- }
1168
- else {
1169
- // Redirect to the edit screen for the new draft post
1170
- wp_redirect(add_query_arg(array('cloned' => 1, 'ids' => $post->ID), admin_url('post.php?action=edit&post='.$newId)));
1171
- }
1172
- exit;
1173
-
1174
- }
1175
- else {
1176
- wp_die(esc_html__('Copy creation failed, could not find original:', SG_POPUP_TEXT_DOMAIN).' '.htmlspecialchars($id));
1177
- }
1178
- }
1179
-
1180
- /**
1181
- * Create a duplicate from a post
1182
- */
1183
- public function popupCreateDuplicate($post, $status = '', $parent_id = '')
1184
- {
1185
- $newPostStatus = (empty($status))? $post->post_status: $status;
1186
-
1187
- if ($post->post_type != 'attachment') {
1188
- $title = $post->post_title;
1189
- if ($title == '') {
1190
- // empty title
1191
- $title = __('(no title) (clone)');
1192
- }
1193
- else {
1194
- $title .= ' '.__('(clone)');
1195
- }
1196
-
1197
- if ('publish' == $newPostStatus || 'future' == $newPostStatus) {
1198
- // check if the user has the right capability
1199
- if (is_post_type_hierarchical($post->post_type)) {
1200
- if (!current_user_can('publish_pages')) {
1201
- $newPostStatus = 'pending';
1202
- }
1203
- }
1204
- else {
1205
- if (!current_user_can('publish_posts')) {
1206
- $newPostStatus = 'pending';
1207
- }
1208
- }
1209
- }
1210
- }
1211
-
1212
- $newPostAuthor = wp_get_current_user();
1213
- $newPostAuthorId = $newPostAuthor->ID;
1214
- // check if the user has the right capability
1215
- if (is_post_type_hierarchical($post->post_type)) {
1216
- if (current_user_can('edit_others_pages')) {
1217
- $newPostAuthorId = $post->post_author;
1218
- }
1219
- }
1220
- else {
1221
- if (current_user_can('edit_others_posts')) {
1222
- $newPostAuthorId = $post->post_author;
1223
- }
1224
- }
1225
-
1226
- $newPost = array(
1227
- 'menu_order' => $post->menu_order,
1228
- 'comment_status' => $post->comment_status,
1229
- 'ping_status' => $post->ping_status,
1230
- 'post_author' => $newPostAuthorId,
1231
- 'post_content' => $post->post_content,
1232
- 'post_content_filtered' => $post->post_content_filtered,
1233
- 'post_excerpt' => $post->post_excerpt,
1234
- 'post_mime_type' => $post->post_mime_type,
1235
- 'post_parent' => $newPostParent = empty($parent_id)? $post->post_parent : $parent_id,
1236
- 'post_password' => $post->post_password,
1237
- 'post_status' => $newPostStatus,
1238
- 'post_title' => $title,
1239
- 'post_type' => $post->post_type,
1240
- );
1241
-
1242
- $newPost['post_date'] = $newPostDate = $post->post_date;
1243
- $newPost['post_date_gmt'] = get_gmt_from_date($newPostDate);
1244
- $newPostId = wp_insert_post(wp_slash($newPost));
1245
-
1246
- // If the copy is published or scheduled, we have to set a proper slug.
1247
- if ($newPostStatus == 'publish' || $newPostStatus == 'future') {
1248
- $postName = $post->post_name;
1249
- $postName = wp_unique_post_slug($postName, $newPostId, $newPostStatus, $post->post_type, $newPostParent);
1250
-
1251
- $newPost = array();
1252
- $newPost['ID'] = $newPostId;
1253
- $newPost['post_name'] = $postName;
1254
-
1255
- // Update the post into the database
1256
- wp_update_post(wp_slash($newPost));
1257
- }
1258
-
1259
- // If you have written a plugin which uses non-WP database tables to save
1260
- // information about a post you can hook this action to dupe that data.
1261
- if ($post->post_type == 'page' || is_post_type_hierarchical($post->post_type)) {
1262
- do_action('dp_duplicate_page', $newPostId, $post, $status);
1263
- }
1264
- else {
1265
- do_action('sgpb_duplicate_post', $newPostId, $post, $status);
1266
- }
1267
-
1268
- delete_post_meta($newPostId, '_sgpb_original');
1269
- add_post_meta($newPostId, '_sgpb_original', $post->ID);
1270
-
1271
- return $newPostId;
1272
- }
1273
-
1274
- /**
1275
- * Copy the meta information of a post to another post
1276
- */
1277
- public function popupCopyPostMetaInfo($newId, $post)
1278
- {
1279
- $postMetaKeys = get_post_custom_keys($post->ID);
1280
- $metaBlacklist = '';
1281
-
1282
- if (empty($postMetaKeys) || !is_array($postMetaKeys)) {
1283
- return;
1284
- }
1285
- $metaBlacklist = explode(',', $metaBlacklist);
1286
- $metaBlacklist = array_filter($metaBlacklist);
1287
- $metaBlacklist = array_map('trim', $metaBlacklist);
1288
- $metaBlacklist[] = '_edit_lock';
1289
- $metaBlacklist[] = '_edit_last';
1290
- $metaBlacklist[] = '_wp_page_template';
1291
- $metaBlacklist[] = '_thumbnail_id';
1292
-
1293
- $metaBlacklist = apply_filters('duplicate_post_blacklist_filter' , $metaBlacklist);
1294
-
1295
- $metaBlacklistString = '('.implode(')|(',$metaBlacklist).')';
1296
- $metaKeys = array();
1297
-
1298
- if (strpos($metaBlacklistString, '*') !== false) {
1299
- $metaBlacklistString = str_replace(array('*'), array('[a-zA-Z0-9_]*'), $metaBlacklistString);
1300
-
1301
- foreach ($postMetaKeys as $metaKey) {
1302
- if (!preg_match('#^'.$metaBlacklistString.'$#', $metaKey)) {
1303
- $metaKeys[] = $metaKey;
1304
- }
1305
- }
1306
- }
1307
- else {
1308
- $metaKeys = array_diff($postMetaKeys, $metaBlacklist);
1309
- }
1310
-
1311
- $metaKeys = apply_filters('duplicate_post_meta_keys_filter', $metaKeys);
1312
-
1313
- foreach ($metaKeys as $metaKey) {
1314
- $metaValues = get_post_custom_values($metaKey, $post->ID);
1315
- foreach ($metaValues as $metaValue) {
1316
- $metaValue = maybe_unserialize($metaValue);
1317
- if (is_array($metaValue)) {
1318
- $metaValue['sgpb-post-id'] = $newId;
1319
- }
1320
- add_post_meta($newId, $metaKey, $this->popupWpSlash($metaValue));
1321
- }
1322
- }
1323
- }
1324
-
1325
- public function popupAddSlashesDeep($value)
1326
- {
1327
- if (function_exists('map_deep')) {
1328
- return map_deep($value, array($this, 'popupAddSlashesToStringsOnly'));
1329
- }
1330
- else {
1331
- return wp_slash($value);
1332
- }
1333
- }
1334
-
1335
- public function popupAddSlashesToStringsOnly($value)
1336
- {
1337
- return is_string($value) ? addslashes($value) : $value;
1338
- }
1339
-
1340
- public function popupWpSlash($value)
1341
- {
1342
- return $this->popupAddSlashesDeep($value);
1343
- }
1344
-
1345
- public function removePostPermalink($args)
1346
- {
1347
- global $post_type;
1348
-
1349
- if ($post_type == SG_POPUP_POST_TYPE && is_admin()) {
1350
- // hide permalink for popupbuilder post type
1351
- return '';
1352
- }
1353
-
1354
- return $args;
1355
- }
1356
-
1357
- // remove link ( e.g.: (View post) ), from popup updated/published message
1358
- public function popupPublishedMessage($messages)
1359
- {
1360
- global $post_type;
1361
-
1362
- if ($post_type == SG_POPUP_POST_TYPE) {
1363
- // post(popup) updated
1364
- if (isset($messages['post'][1])) {
1365
- $messages['post'][1] = __('Popup updated.', SG_POPUP_TEXT_DOMAIN);
1366
- }
1367
- // post(popup) published
1368
- if (isset($messages['post'][6])) {
1369
- $messages['post'][6] = __('Popup published.', SG_POPUP_TEXT_DOMAIN);
1370
- }
1371
- }
1372
- $messages = apply_filters('sgpbPostUpdateMessage', $messages);
1373
-
1374
- return $messages;
1375
- }
1376
-
1377
- public function getSubscribersCsvFile()
1378
- {
1379
- global $wpdb;
1380
- $allowToAction = AdminHelper::userCanAccessTo();
1381
- if (!$allowToAction) {
1382
- wp_redirect(get_home_url());
1383
- exit();
1384
- }
1385
-
1386
- $query = AdminHelper::subscribersRelatedQuery();
1387
- if (isset($_GET['orderby']) && !empty($_GET['orderby'])) {
1388
- if (isset($_GET['order']) && !empty($_GET['order'])) {
1389
- $query .= ' ORDER BY '.esc_sql($_GET['orderby']).' '.esc_sql($_GET['order']);
1390
- }
1391
- }
1392
- $content = '';
1393
- $exportTypeQuery = '';
1394
- $rows = array('first name', 'last name', 'email', 'date', 'popup');
1395
- foreach ($rows as $value) {
1396
- $content .= $value;
1397
- if ($value != 'popup') {
1398
- $content .= ',';
1399
- }
1400
- }
1401
- $content .= "\n";
1402
- $subscribers = $wpdb->get_results($query, ARRAY_A);
1403
-
1404
- $subscribers = apply_filters('sgpbSubscribersCsv', $subscribers);
1405
-
1406
- foreach($subscribers as $values) {
1407
- foreach ($values as $key => $value) {
1408
- $content .= $value;
1409
- if ($key != 'subscriptionTitle') {
1410
- $content .= ',';
1411
- }
1412
- }
1413
- $content .= "\n";
1414
- }
1415
-
1416
- $content = apply_filters('sgpbSubscribersContent', $content);
1417
-
1418
- header('Pragma: public');
1419
- header('Expires: 0');
1420
- header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
1421
- header('Cache-Control: private', false);
1422
- header('Content-Type: application/octet-stream');
1423
- header('Content-Disposition: attachment; filename=subscribersList.csv;');
1424
- header('Content-Transfer-Encoding: binary');
1425
- echo $content;
1426
- }
1427
-
1428
- public function getSystemInfoFile()
1429
- {
1430
- $allowToAction = AdminHelper::userCanAccessTo();
1431
- if (!$allowToAction) {
1432
- return false;
1433
- }
1434
-
1435
- $content = AdminHelper::getSystemInfoText();
1436
-
1437
- header('Pragma: public');
1438
- header('Expires: 0');
1439
- header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
1440
- header('Cache-Control: private', false);
1441
- header('Content-Type: application/octet-stream');
1442
- header('Content-Disposition: attachment; filename=popupBuilderSystemInfo.txt;');
1443
- header('Content-Transfer-Encoding: binary');
1444
-
1445
- echo $content;
1446
- }
1447
-
1448
- public function saveSettings()
1449
- {
1450
- $allowToAction = AdminHelper::userCanAccessTo();
1451
- if (!$allowToAction) {
1452
- wp_redirect(get_home_url());
1453
- exit();
1454
- }
1455
-
1456
- $postData = $_POST;
1457
- $deleteData = 0;
1458
- $enableDebugMode = 0;
1459
-
1460
- if (isset($postData['sgpb-dont-delete-data'])) {
1461
- $deleteData = 1;
1462
- }
1463
- if (isset($postData['sgpb-enable-debug-mode'])) {
1464
- $enableDebugMode = 1;
1465
- }
1466
- if (isset($postData['sgpb-disable-analytics-general'])) {
1467
- $disableAnalytics = 1;
1468
- }
1469
- $userRoles = @$postData['sgpb-user-roles'];
1470
-
1471
- update_option('sgpb-user-roles', $userRoles);
1472
- update_option('sgpb-dont-delete-data', $deleteData);
1473
- update_option('sgpb-enable-debug-mode', $enableDebugMode);
1474
- update_option('sgpb-disable-analytics-general', $disableAnalytics);
1475
-
1476
- AdminHelper::filterUserCapabilitiesForTheUserRoles('save');
1477
-
1478
- wp_redirect(admin_url().'edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SG_POPUP_SETTINGS_PAGE);
1479
- }
1480
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace sgpb;
3
+ use \WP_Query;
4
+ use \SgpbPopupConfig;
5
+ use \SgpbDataConfig;
6
+
7
+
8
+ class Actions
9
+ {
10
+ public $customPostTypeObj;
11
+ public $mediaButton = false;
12
+
13
+ public function __construct()
14
+ {
15
+ $this->init();
16
+ }
17
+
18
+ public function init()
19
+ {
20
+ add_action('init', array($this, 'wpInit'), 100);
21
+ add_action('init', array($this, 'postTypeInit'), 9999);
22
+ add_action('init', array($this, 'updatesInit'), 9999);
23
+ add_action('admin_menu', array($this, 'addSubMenu'));
24
+ add_action('admin_menu', array($this, 'supportLinks'), 999);
25
+ add_action('admin_head', array($this, 'showPreviewButtonAfterPopupPublish'));
26
+ add_action('admin_head', array($this, 'custom_admin_js'));
27
+ add_action('admin_enqueue_scripts', array($this, 'adminLoadPopups'));
28
+ add_action('admin_action_popupSaveAsNew', array($this, 'popupSaveAsNew'));
29
+ add_action('admin_post_csv_file', array($this, 'getSubscribersCsvFile'));
30
+ add_action('admin_post_sgpb_system_info', array($this, 'getSystemInfoFile'));
31
+ add_action('admin_post_sgpbSaveSettings', array($this, 'saveSettings'), 10, 1);
32
+ add_action('admin_init', array($this, 'userRolesCaps'));
33
+ add_action('admin_notices', array($this, 'pluginNotices'));
34
+ add_action('admin_init', array($this, 'pluginLoaded'));
35
+ add_action('transition_post_status', array($this, 'deletePopup'), 100, 3);
36
+ // activate extensions
37
+ add_action('wp_before_admin_bar_render', array($this, 'pluginActivated'), 10, 2);
38
+ add_action('admin_head', array($this, 'hidePageBuilderEditButtons'));
39
+ add_action('admin_head', array($this, 'hidePublishingActions'));
40
+ add_action('add_meta_boxes', array($this, 'popupMetaboxes'), 100);
41
+ add_filter('post_updated_messages', array($this, 'popupPublishedMessage'), 1, 1);
42
+ add_action('before_delete_post', array($this, 'deleteSubscribersWithPopup'), 1, 1);
43
+ add_action('sgpb_duplicate_post', array($this, 'popupCopyPostMetaInfo'), 10, 2);
44
+ add_filter('get_sample_permalink_html', array($this, 'removePostPermalink'), 1, 1);
45
+ add_action('manage_'.SG_POPUP_POST_TYPE.'_posts_custom_column' , array($this, 'popupsTableColumnsValues'), 10, 2);
46
+ add_action('media_buttons', array($this, 'popupMediaButton'));
47
+ add_filter('mce_external_plugins', array($this, 'editorButton'), 1, 1);
48
+ add_action('admin_enqueue_scripts', array('sgpb\Style', 'enqueueStyles'));
49
+ add_action('admin_enqueue_scripts', array('sgpb\Javascript', 'enqueueScripts'));
50
+ // this action for popup options saving and popup builder classes save ex from post and page
51
+ add_action('save_post', array($this, 'savePost'), 100, 3);
52
+ add_action('wp_enqueue_scripts', array($this, 'enqueuePopupBuilderScripts'));
53
+ add_filter('sgpbOtherConditions', array($this ,'conditionsSatisfy'), 11, 1);
54
+ add_shortcode('sg_popup', array($this, 'popupShortcode'));
55
+ add_filter('cron_schedules', array($this, 'cronAddMinutes'), 10, 1);
56
+ add_action('sgpb_send_newsletter', array($this, 'newsletterSendEmail'), 10, 1);
57
+ add_action('sgpbGetBannerContentOnce', array($this, 'getBannerContent'), 10, 1);
58
+ add_action('plugins_loaded', array($this, 'loadTextDomain'));
59
+ // for change admin popup list order
60
+ add_action('pre_get_posts', array($this, 'preGetPosts'));
61
+ add_action('template_redirect', array($this, 'redirectFromPopupPage'));
62
+ add_filter('views_edit-popupbuilder', array($this, 'mainActionButtons'), 10, 1);
63
+ add_action('wpml_loaded', array($this, 'wpmlRelatedActions'));
64
+
65
+ add_filter('get_user_option_screen_layout_'.SG_POPUP_POST_TYPE, array($this, 'screenLayoutSetOneColumn'));
66
+ new SGPBFeedback();
67
+ new SGPBReports();
68
+ new SGPBMenu();
69
+ new Ajax();
70
+ }
71
+
72
+ private function checkIfLicenseIsActive($license, $itemId, $storeURL, $key) {
73
+ $transient = 'sgpb-license-key-'.$key.'-requested';
74
+ if ( false !== ( $value = get_transient( $transient ) ) ) {
75
+ return;
76
+ }
77
+ $params = array(
78
+ 'woo_sl_action' => 'status-check',
79
+ 'licence_key' => $license,
80
+ 'product_unique_id' => $itemId,
81
+ 'domain' => home_url()
82
+ );
83
+ $requestUri = 'https://popup-builder.com/index.php?'.http_build_query($params);
84
+ $response = wp_remote_get($requestUri);
85
+ if (!is_wp_error($response) || 200 == wp_remote_retrieve_response_code($response)) {
86
+ $licenseData = json_decode(wp_remote_retrieve_body($response));
87
+ $status = isset($licenseData[0]->licence_status) && $licenseData[0]->licence_status === 'active' ? 'valid' : $licenseData[0]->licence_status;
88
+ update_option('sgpb-license-status-'.$key, $status);
89
+ set_transient($transient, $licenseData[0]->status_code, WEEK_IN_SECONDS);
90
+ }
91
+ }
92
+ public function updatesInit()
93
+ {
94
+ if (!class_exists('sgpb\WOOSL_CodeAutoUpdate')) {
95
+ // load our custom updater if it doesn't already exist
96
+ require_once(SG_POPUP_LIBS_PATH .'WOOSL_CodeAutoUpdate.php');
97
+ }
98
+ $licenses = (new License())->getLicenses();
99
+
100
+ foreach ($licenses as $license) {
101
+ $key = @$license['key'];
102
+ $storeURL = @$license['storeURL'];
103
+ $itemId = @$license['itemId'];
104
+ $filePath = @$license['file'];
105
+ $pluginMainFilePath = strpos($filePath, SG_POPUP_PLUGIN_PATH) !== 0 ? SG_POPUP_PLUGIN_PATH.$filePath : $filePath;
106
+
107
+ $licenseKey = trim(get_option('sgpb-license-key-'.$key));
108
+ $status = get_option('sgpb-license-status-'.$key);
109
+
110
+ if ($status == false || $status != 'valid') {
111
+ continue;
112
+ }
113
+ $this->checkIfLicenseIsActive($licenseKey, $itemId, $storeURL, $key);
114
+ switch($key) {
115
+ case 'POPUP_SOCIAL':
116
+ if (defined('SGPB_SOCIAL_POPUP_VERSION')) {
117
+ $version = @constant('SGPB_SOCIAL_POPUP_VERSION');
118
+ } else {
119
+ $version = @constant('SG_VERSION_'.$key);
120
+ }
121
+ break;
122
+ case 'POPUP_AGE_VERIFICATION':
123
+ if (defined('SGPB_AGE_VERIFICATION_POPUP_VERSION')) {
124
+ $version = @constant('SGPB_AGE_VERIFICATION_POPUP_VERSION');
125
+ } else{
126
+ $version = @constant('SG_VERSION_'.$key);
127
+ }
128
+ break;
129
+ case 'POPUP_GAMIFICATION':
130
+ if (defined('POPUP_GAMIFICATION')) {
131
+ $version = @constant('POPUP_GAMIFICATION');
132
+ } else {
133
+ $version = @constant('SG_VERSION_'.$key);
134
+ }
135
+ break;
136
+ default :
137
+ $version = @constant('SG_VERSION_'.$key);
138
+ break;
139
+ }
140
+ // If the version of the extension is not found, update will not possibly be shown
141
+ if(empty($version)) {
142
+ continue;
143
+ }
144
+ $sgpbUpdater = new WOOSL_CodeAutoUpdate(
145
+ 'https://popup-builder.com/index.php',
146
+ $pluginMainFilePath,
147
+ $itemId,
148
+ $licenseKey,
149
+ $version
150
+ );
151
+ }
152
+ }
153
+ public function custom_admin_js()
154
+ {
155
+ $currentPostType = AdminHelper::getCurrentPostType();
156
+ if (!empty($currentPostType) && ($currentPostType == SG_POPUP_POST_TYPE || $currentPostType == SG_POPUP_AUTORESPONDER_POST_TYPE || $currentPostType == SG_POPUP_TEMPLATE_POST_TYPE)) {
157
+ ?>
158
+ <script type="text/javascript">
159
+ jQuery(document).ready(function($) {
160
+ const myForm = $('#posts-filter');
161
+ myForm.addClass('sgpb-table');
162
+ const searchValue = $('#post-search-input').val();
163
+ $('#posts-filter .tablenav.top .tablenav-pages').append($('.subsubsub').addClass('show'));
164
+ myForm.append($('#posts-filter .tablenav.bottom .tablenav-pages:not(.no-pages, .one-page) .pagination-links'));
165
+ $('#sgpbSearchInPosts').val(searchValue);
166
+ $('#sgpbSearchInPosts').keyup('enter', function (e) {
167
+ if (e.key === 'Enter') {
168
+ $('#post-search-input').val(this.value);
169
+ $(myForm).submit();
170
+ }
171
+ });
172
+ $('#sgpbSearchInPostsSubmit').on('click', function () {
173
+ $('#post-search-input').val($('#sgpbSearchInPosts').val());
174
+ $(myForm).submit();
175
+ })
176
+ });
177
+ </script>
178
+ <?php
179
+ }
180
+ }
181
+
182
+ public function screenLayoutSetOneColumn()
183
+ {
184
+ return 1;
185
+ }
186
+
187
+ public function wpmlRelatedActions()
188
+ {
189
+ // The actions below will be executed right after WPML is fully configured and loaded.
190
+ add_action('admin_head', array($this, 'removeUnneededMetaboxesFromPopups'), 10);
191
+ }
192
+
193
+ public function removeUnneededMetaboxesFromPopups()
194
+ {
195
+ if (isset($_GET['post_type']) && $_GET['post_type'] == SG_POPUP_POST_TYPE) {
196
+ $exlcudeTrPopupTypes = array(
197
+ 'image',
198
+ 'video',
199
+ 'iframe',
200
+ 'recentSales',
201
+ 'pdf'
202
+ );
203
+ $exlcudeTrPopupTypes = apply_filters('sgpbNoMcePopupTypes', $exlcudeTrPopupTypes);
204
+ if (isset($_GET['sgpb_type']) && in_array($_GET['sgpb_type'], $exlcudeTrPopupTypes)) {
205
+ remove_meta_box('icl_div', SG_POPUP_POST_TYPE, 'side');
206
+ }
207
+ }
208
+ }
209
+
210
+ public function deletePopup($newStatus, $oldStatus, $post)
211
+ {
212
+ $currentPostType = AdminHelper::getCurrentPostType();
213
+
214
+ if (!empty($currentPostType) && $currentPostType == SG_POPUP_POST_TYPE) {
215
+ Functions::clearAllTransients();
216
+ }
217
+ }
218
+
219
+ public function showPreviewButtonAfterPopupPublish()
220
+ {
221
+ $currentPostType = AdminHelper::getCurrentPostType();
222
+ if (!empty($currentPostType) && ($currentPostType == SG_POPUP_POST_TYPE || $currentPostType == SG_POPUP_AUTORESPONDER_POST_TYPE || $currentPostType == SG_POPUP_TEMPLATE_POST_TYPE)) {
223
+ echo '<style>
224
+ #save-post {
225
+ display:none !important;
226
+ }
227
+ .subsubsub {
228
+ display:none !important;
229
+ }
230
+ .subsubsub.show {
231
+ display:block !important;
232
+ }
233
+ .search-box {
234
+ display:none !important;
235
+ }
236
+ .search-box.show {
237
+ display:block !important;
238
+ }
239
+ .tablenav-pages.no-pages {
240
+ display: block;
241
+ }
242
+ .tablenav-pages *:not(.subsubsub, .subsubsub *),
243
+ .tablenav-pages.no-pages *:not(.subsubsub, .subsubsub *),
244
+ .tablenav-pages.one-page *:not(.subsubsub, .subsubsub *) {
245
+ display: none;
246
+ }
247
+ </style>';
248
+ }
249
+ }
250
+
251
+ public function inactiveExtensionNotice()
252
+ {
253
+ $screen = '';
254
+ $dontShowLicenseBanner = get_option('sgpb-hide-license-notice-banner');
255
+ if ($dontShowLicenseBanner) {
256
+ return $screen;
257
+ }
258
+ $inactive = AdminHelper::getOption('SGPB_INACTIVE_EXTENSIONS');
259
+ $hasInactiveExtensions = AdminHelper::hasInactiveExtensions();
260
+ if (!$inactive) {
261
+ AdminHelper::updateOption('SGPB_INACTIVE_EXTENSIONS', 1);
262
+ if ($hasInactiveExtensions) {
263
+ AdminHelper::updateOption('SGPB_INACTIVE_EXTENSIONS', 'inactive');
264
+ $inactive = 'inactive';
265
+ }
266
+
267
+ }
268
+ $licenseSectionUrl = menu_page_url(SGPB_POPUP_LICENSE, false);
269
+ $partOfContent = '<br><br>'.__('<a href="'.$licenseSectionUrl.'">Follow the link</a> to finalize the activation.', SG_POPUP_TEXT_DOMAIN);
270
+ if (function_exists('get_current_screen')) {
271
+ $screen = get_current_screen();
272
+ $screenId = $screen->id;
273
+ if ($screenId == SGPB_POPUP_LICENSE_SCREEN) {
274
+ $partOfContent = '';
275
+ }
276
+ }
277
+
278
+ if ($hasInactiveExtensions && $inactive == 'inactive') {
279
+ $content = '';
280
+ ob_start();
281
+ ?>
282
+ <div id="welcome-panel" class="update-nag sgpb-extensions-notices sgpb-license-notice">
283
+ <div class="welcome-panel-content">
284
+ <b><?php _e('Thank you for choosing our plugin!', SG_POPUP_TEXT_DOMAIN) ?></b>
285
+ <br>
286
+ <br>
287
+ <b><?php _e('You have activated Popup Builder extension(s). Please, don\'t forget to activate the license key(s) as well.', SG_POPUP_TEXT_DOMAIN) ?></b>
288
+ <b><?php echo $partOfContent; ?></b>
289
+ </div>
290
+ <button type="button" class="notice-dismiss" onclick="jQuery('.sgpb-license-notice').remove();"><span class="screen-reader-text"><?php _e('Dismiss this notice.', SG_POPUP_TEXT_DOMAIN) ?></span></button>
291
+ <span class="sgpb-dont-show-again-license-notice"><?php _e('Don\'t show again.', SG_POPUP_TEXT_DOMAIN); ?></span>
292
+ </div>
293
+ <?php
294
+ $content = ob_get_clean();
295
+
296
+ echo $content;
297
+ return true;
298
+ }
299
+ }
300
+
301
+ public function hidePublishingActions() {
302
+ $currentPostType = AdminHelper::getCurrentPostType();
303
+ if (empty($currentPostType) || $currentPostType != SG_POPUP_POST_TYPE) {
304
+ return false;
305
+ }
306
+
307
+ echo '<style>
308
+ #misc-publishing-actions .edit-post-status,
309
+ #misc-publishing-actions .edit-timestamp,
310
+ #misc-publishing-actions .edit-visibility {
311
+ display:none !important;
312
+ }
313
+ </style>';
314
+ }
315
+
316
+ public function hidePageBuilderEditButtons($postId = 0, $post = array())
317
+ {
318
+ $currentPostType = AdminHelper::getCurrentPostType();
319
+ if (empty($currentPostType) || $currentPostType != SG_POPUP_POST_TYPE) {
320
+ return false;
321
+ }
322
+ $excludedPopupTypesFromPageBuildersFunctionality = array(
323
+ 'image'
324
+ );
325
+
326
+ $excludedPopupTypesFromPageBuildersFunctionality = apply_filters('sgpbHidePageBuilderEditButtons', $excludedPopupTypesFromPageBuildersFunctionality);
327
+
328
+ $popupType = AdminHelper::getCurrentPopupType();
329
+ if (in_array($popupType, $excludedPopupTypesFromPageBuildersFunctionality)) {
330
+ echo '<style>
331
+ #elementor-switch-mode, #elementor-editor {
332
+ display:none !important;
333
+ }
334
+ </style>';
335
+ }
336
+ }
337
+
338
+ public function getBannerContent()
339
+ {
340
+ // right metabox banner content
341
+ $metaboxBannerContent = AdminHelper::getFileFromURL(SGPB_METABOX_BANNER_CRON_TEXT_URL);
342
+ update_option('sgpb-metabox-banner-remote-get', $metaboxBannerContent);
343
+
344
+ return true;
345
+ }
346
+
347
+ public function wpInit()
348
+ {
349
+ if (isset($_GET['sgpb_type'])) {
350
+ $_GET['sgpb_type'] = sanitize_text_field($_GET['sgpb_type']);
351
+ $fields = array(
352
+ 'image',
353
+ 'html',
354
+ 'fblike',
355
+ 'shortcode',
356
+ 'iframe',
357
+ 'advancedClosing',
358
+ 'advancedTargeting',
359
+ 'ageVerification',
360
+ 'analytics',
361
+ 'gamification',
362
+ 'geoTargeting',
363
+ 'inactivity',
364
+ 'login',
365
+ 'registration',
366
+ 'scroll',
367
+ 'pdf',
368
+ 'pushNotification',
369
+ 'recentSales',
370
+ 'video',
371
+ 'ageRestriction',
372
+ 'social',
373
+ 'video',
374
+ 'subscription',
375
+ 'countdown',
376
+ 'contactForm',
377
+ 'mailchimp',
378
+ 'aweber',
379
+ );
380
+ if (!in_array($_GET['sgpb_type'], $fields)){
381
+ wp_redirect(get_home_url());
382
+ exit();
383
+ }
384
+ }
385
+ }
386
+
387
+ public function mainActionButtons($views)
388
+ {
389
+ require_once(SG_POPUP_VIEWS_PATH.'mainActionButtons.php');
390
+
391
+ return $views;
392
+ }
393
+
394
+ /**
395
+ * Loads the plugin language files
396
+ */
397
+ public function loadTextDomain()
398
+ {
399
+ $popupBuilderLangDir = SG_POPUP_BUILDER_PATH.'/languages/';
400
+ $popupBuilderLangDir = apply_filters('popupBuilderLanguagesDirectory', $popupBuilderLangDir);
401
+
402
+ $locale = apply_filters('sgpbPluginLocale', get_locale(), SG_POPUP_TEXT_DOMAIN);
403
+ $mofile = sprintf('%1$s-%2$s.mo', SG_POPUP_TEXT_DOMAIN, $locale);
404
+
405
+ $mofileLocal = $popupBuilderLangDir.$mofile;
406
+
407
+ if (file_exists($mofileLocal)) {
408
+ // Look in local /wp-content/plugins/popup-builder/languages/ folder
409
+ load_textdomain(SG_POPUP_TEXT_DOMAIN, $mofileLocal);
410
+ }
411
+ else {
412
+ // Load the default language files
413
+ load_plugin_textdomain(SG_POPUP_TEXT_DOMAIN, false, $popupBuilderLangDir);
414
+ }
415
+
416
+ }
417
+
418
+ public function redirectFromPopupPage()
419
+ {
420
+ global $post;
421
+ $currentPostType = '';
422
+
423
+ if (is_object($post)) {
424
+ $currentPostType = @$post->post_type;
425
+ }
426
+ // in some themes global $post returns null
427
+ if (empty($currentPostType)) {
428
+ global $post_type;
429
+ $currentPostType = $post_type;
430
+ }
431
+ // for editing popup content via page builders on backend
432
+ if (!isset($_GET) || empty($_GET)) {
433
+ if (!is_admin() && SG_POPUP_POST_TYPE == $currentPostType && !is_preview()) {
434
+ // it's for seo optimization
435
+ status_header(301);
436
+ $homeURL = home_url();
437
+ wp_redirect($homeURL);
438
+ exit();
439
+ }
440
+ }
441
+ }
442
+
443
+ public function preGetPosts($query)
444
+ {
445
+ if (!is_admin() || !isset($_GET['post_type']) || $_GET['post_type'] != SG_POPUP_POST_TYPE) {
446
+ return false;
447
+ }
448
+
449
+ // change default order by id and desc
450
+ if (!isset($_GET['orderby'])) {
451
+ $query->set('orderby', 'ID');
452
+ $query->set('order', 'desc');
453
+ }
454
+ $query = apply_filters('sgpbPreGetPosts', $query);
455
+
456
+ return true;
457
+ }
458
+
459
+ public function pluginNotices()
460
+ {
461
+ if (function_exists('get_current_screen')) {
462
+ $screen = get_current_screen();
463
+ $screenId = $screen->id;
464
+ if ($screenId == 'edit-popupbuilder') {
465
+ $notificationsObj = new SGPBNotificationCenter();
466
+ echo $notificationsObj->displayNotifications();
467
+ }
468
+ }
469
+ $extensions = AdminHelper::getAllActiveExtensions();
470
+ $updated = get_option('sgpb_extensions_updated');
471
+
472
+ $content = '';
473
+
474
+ // if popup builder has the old version
475
+ if (!get_option('SG_POPUP_VERSION')) {
476
+ return $content;
477
+ }
478
+
479
+ $alertProblem = get_option('sgpb_alert_problems');
480
+ // for old users show alert about problems
481
+ if (!$alertProblem) {
482
+ echo AdminHelper::renderAlertProblem();
483
+ }
484
+
485
+ // Don't show the banner if there's not any extension of Popup Builder or if the user has clicked "don't show"
486
+ if (empty($extensions) || $updated) {
487
+ return $content;
488
+ }
489
+
490
+ ob_start();
491
+ ?>
492
+ <div id="welcome-panel" class="update-nag sgpb-extensions-notices">
493
+ <div class="welcome-panel-content">
494
+ <?php echo AdminHelper::renderExtensionsContent(); ?>
495
+ </div>
496
+ </div>
497
+ <?php
498
+ $content = ob_get_clean();
499
+
500
+ echo $content;
501
+ return true;
502
+ }
503
+
504
+ private function registerImporter()
505
+ {
506
+ require_once SG_POPUP_LIBS_PATH.'Importer.php';
507
+ $importer = new WP_Import();
508
+ register_importer(SG_POPUP_POST_TYPE, SG_POPUP_POST_TYPE, __('Importer', SG_POPUP_TEXT_DOMAIN), array($importer, 'dispatch'));
509
+ }
510
+
511
+ public function pluginLoaded()
512
+ {
513
+ $this->registerImporter();
514
+ $versionPopup = get_option('SG_POPUP_VERSION');
515
+ $convert = get_option('sgpbConvertToNewVersion');
516
+ $unsubscribeColumnFixed = get_option('sgpbUnsubscribeColumnFixed');
517
+ AdminHelper::makeRegisteredPluginsStaticPathsToDynamic();
518
+
519
+ if (!$unsubscribeColumnFixed) {
520
+ AdminHelper::addUnsubscribeColumn();
521
+ update_option('sgpbUnsubscribeColumnFixed', 1);
522
+ delete_option('sgpbUnsubscribeColumn');
523
+ }
524
+
525
+ if ($versionPopup && !$convert) {
526
+ update_option('sgpbConvertToNewVersion', 1);
527
+ ConvertToNewVersion::convert();
528
+ Installer::registerPlugin();
529
+ }
530
+ }
531
+
532
+ public function popupMediaButton()
533
+ {
534
+ if (!$this->mediaButton) {
535
+ $this->mediaButton = true;
536
+ self::enqueueScriptsForPageBuilders();
537
+ if (function_exists('get_current_screen')) {
538
+ $screen = get_current_screen();
539
+ if (!empty($screen)) {
540
+ echo new MediaButton();
541
+ }
542
+ }
543
+ }
544
+ }
545
+
546
+ public function editorButton($plugins)
547
+ {
548
+ if (empty($this->mediaButton)) {
549
+ $this->mediaButton = true;
550
+ add_action('admin_footer', function() {
551
+ self::enqueueScriptsForPageBuilders();
552
+ echo new MediaButton(false);
553
+ });
554
+ }
555
+
556
+ return $plugins;
557
+ }
558
+
559
+ public static function enqueueScriptsForPageBuilders()
560
+ {
561
+ require_once(ABSPATH.'wp-admin/includes/screen.php');
562
+ global $post;
563
+ if (function_exists('get_current_screen')) {
564
+ $screen = get_current_screen();
565
+ if ((!empty($screen->id) && $screen->id == SG_POPUP_POST_TYPE) || !empty($post)) {
566
+ if (!isset($_GET['fl_builder'])) {
567
+ Javascript::enqueueScripts('post-new.php');
568
+ Style::enqueueStyles('post-new.php');
569
+ }
570
+ }
571
+ }
572
+ else if (isset($_GET['fl_builder'])) {
573
+ Javascript::enqueueScripts('post-new.php');
574
+ Style::enqueueStyles('post-new.php');
575
+ }
576
+ }
577
+
578
+ public function userRolesCaps()
579
+ {
580
+ $userSavedRoles = get_option('sgpb-user-roles');
581
+
582
+ if (!$userSavedRoles) {
583
+ $userSavedRoles = array('administrator');
584
+ }
585
+ else {
586
+ array_push($userSavedRoles, 'administrator');
587
+ }
588
+
589
+ foreach ($userSavedRoles as $theRole) {
590
+ $role = get_role($theRole);
591
+ if (empty($role)) {
592
+ continue;
593
+ }
594
+
595
+ $role->add_cap('read');
596
+ $role->add_cap('read_post');
597
+ $role->add_cap('read_private_sgpb_popups');
598
+ $role->add_cap('edit_sgpb_popup');
599
+ $role->add_cap('edit_sgpb_popups');
600
+ $role->add_cap('edit_others_sgpb_popups');
601
+ $role->add_cap('edit_published_sgpb_popups');
602
+ $role->add_cap('publish_sgpb_popups');
603
+ $role->add_cap('delete_sgpb_popups');
604
+ $role->add_cap('delete_published_posts');
605
+ $role->add_cap('delete_others_sgpb_popups');
606
+ $role->add_cap('delete_private_sgpb_popups');
607
+ $role->add_cap('delete_private_sgpb_popup');
608
+ $role->add_cap('delete_published_sgpb_popups');
609
+
610
+ // For popup builder sub-menus and terms
611
+ $role->add_cap('sgpb_manage_options');
612
+ $role->add_cap('manage_popup_terms');
613
+ $role->add_cap('manage_popup_categories_terms');
614
+ $role = apply_filters('sgpbUserRoleCap', $role);
615
+ }
616
+
617
+ return true;
618
+ }
619
+
620
+ public function pluginActivated()
621
+ {
622
+ if (!get_option('sgpbActivateExtensions') && SGPB_POPUP_PKG != SGPB_POPUP_PKG_FREE) {
623
+ $obj = new PopupExtensionActivator();
624
+ $obj->activate();
625
+ update_option('sgpbActivateExtensions', 1);
626
+ }
627
+ }
628
+
629
+ public function popupShortcode($args, $content)
630
+ {
631
+ if (empty($args) || empty($args['id'])) {
632
+ return $content;
633
+ }
634
+
635
+ $oldShortcode = isset($args['event']) && $args['event'] === 'onload';
636
+ $isInherit = isset($args['event']) && $args['event'] == 'inherit';
637
+ $event = '';
638
+
639
+ $shortcodeContent = '';
640
+ $argsId = $popupId = (int)$args['id'];
641
+
642
+ // for old popups
643
+ if (function_exists('sgpb\sgpGetCorrectPopupId')) {
644
+ $popupId = sgpGetCorrectPopupId($popupId);
645
+ }
646
+
647
+ $popup = SGPopup::find($popupId);
648
+ $popup = apply_filters('sgpbShortCodePopupObj', $popup);
649
+
650
+ $event = preg_replace('/on/', '', @$args['event']);
651
+ // when popup does not exists or popup post status it's not publish ex when popup in trash
652
+ if (empty($popup) || (!is_object($popup) && $popup != 'publish')) {
653
+ return $content;
654
+ }
655
+
656
+ $isActive = $popup->isActive();
657
+ if (!$isActive) {
658
+ return $content;
659
+ }
660
+
661
+ $alreadySavedEvents = $popup->getEvents();
662
+ $loadableMode = $popup->getLoadableModes();
663
+
664
+ if (!isset($args['event']) && isset($args['insidepopup'])) {
665
+ unset($args['insidepopup']);
666
+ $event = 'insideclick';
667
+ $insideShortcodeKey = $popupId.$event;
668
+
669
+ // for prevent infinity chain
670
+ if (is_array($this->insideShortcodes) && in_array($insideShortcodeKey, $this->insideShortcodes)) {
671
+ $shortcodeContent = SGPopup::renderPopupContentShortcode($content, $argsId, $event, $args);
672
+
673
+ return $shortcodeContent;
674
+ }
675
+ $this->insideShortcodes[] = $insideShortcodeKey;
676
+ }
677
+ // if no event attribute is set, or old shortcode
678
+ if (!isset($args['event']) || $oldShortcode || $isInherit) {
679
+ $loadableMode = $popup->getLoadableModes();
680
+ if (!empty($content)) {
681
+ $alreadySavedEvents = false;
682
+ }
683
+ // for old popup, after the update, there aren't any events
684
+ if (empty($alreadySavedEvents)) {
685
+ $event = '';
686
+ if (!empty($content)) {
687
+ $event = 'click';
688
+ }
689
+ if (!empty($args['event'])) {
690
+ $event = $args['event'];
691
+ }
692
+ $event = preg_replace('/on/', '', $event);
693
+ $popup->setEvents(array($event));
694
+ }
695
+ if (empty($loadableMode)) {
696
+ $loadableMode = array();
697
+ }
698
+ $loadableMode['option_event'] = true;
699
+ }
700
+ else {
701
+ $event = $args['event'];
702
+ $event = preg_replace('/on/', '', $event);
703
+ $popup->setEvents(array($event));
704
+ }
705
+
706
+ $popup->setLoadableModes($loadableMode);
707
+ $scriptsLoader = new ScriptsLoader();
708
+ $loadablePopups = array($popup);
709
+ $groupObj = new PopupGroupFilter();
710
+ $groupObj->setPopups(array($popup));
711
+ $loadablePopups = $groupObj->filter();
712
+ $scriptsLoader->setLoadablePopups($loadablePopups);
713
+ $scriptsLoader->loadToFooter();
714
+
715
+ if (!empty($content)) {
716
+ $matches = SGPopup::getPopupShortcodeMatchesFromContent($content);
717
+ if (!empty($matches)) {
718
+ foreach ($matches[0] as $key => $value) {
719
+ $attrs = shortcode_parse_atts($matches[3][$key]);
720
+ if (empty($attrs['id'])) {
721
+ continue;
722
+ }
723
+ $shortcodeContent = SGPopup::renderPopupContentShortcode($content, $attrs['id'], $attrs['event'], $attrs);
724
+ break;
725
+ }
726
+ }
727
+ }
728
+
729
+ if (isset($event) && $event != 'onload' && !empty($content)) {
730
+ $shortcodeContent = SGPopup::renderPopupContentShortcode($content, $argsId, $event, $args);
731
+ }
732
+ $shortcodeContent = apply_filters('sgpbPopupShortCodeContent', $shortcodeContent);
733
+
734
+ return do_shortcode($shortcodeContent);
735
+ }
736
+
737
+ public function deleteSubscribersWithPopup($postId)
738
+ {
739
+ global $post_type;
740
+
741
+ if ($post_type == SG_POPUP_POST_TYPE) {
742
+ AdminHelper::deleteSubscriptionPopupSubscribers($postId);
743
+ }
744
+ }
745
+
746
+ public function cronAddMinutes($schedules)
747
+ {
748
+ $schedules['sgpb_newsletter_send_every_minute'] = array(
749
+ 'interval' => SGPB_CRON_REPEAT_INTERVAL * 60,
750
+ 'display' => __('Once Every Minute', SG_POPUP_TEXT_DOMAIN)
751
+ );
752
+
753
+ $schedules['sgpb_banners'] = array(
754
+ 'interval' => SGPB_TRANSIENT_TIMEOUT_WEEK,
755
+ 'display' => __('Once Every Week', SG_POPUP_TEXT_DOMAIN)
756
+ );
757
+
758
+ $schedules = apply_filters('sgpbCronTimeoutSettings', $schedules);
759
+
760
+ return $schedules;
761
+ }
762
+
763
+ public function newsletterSendEmail()
764
+ {
765
+ global $wpdb;
766
+ $newsletterOptions = get_option('SGPB_NEWSLETTER_DATA');
767
+
768
+ if (empty($newsletterOptions)) {
769
+ wp_clear_scheduled_hook('sgpb_send_newsletter');
770
+ }
771
+ $subscriptionFormId = (int)$newsletterOptions['subscriptionFormId'];
772
+ $subscriptionFormTitle = get_the_title($subscriptionFormId);
773
+ $emailsInFlow = (int)$newsletterOptions['emailsInFlow'];
774
+ $mailSubject = $newsletterOptions['newsletterSubject'];
775
+ $fromEmail = $newsletterOptions['fromEmail'];
776
+ $emailMessage = $newsletterOptions['messageBody'];
777
+
778
+ $allAvailableShortcodes = array();
779
+ $allAvailableShortcodes['patternFirstName'] = '/\[First name]/';
780
+ $allAvailableShortcodes['patternLastName'] = '/\[Last name]/';
781
+ $allAvailableShortcodes['patternBlogName'] = '/\[Blog name]/';
782
+ $allAvailableShortcodes['patternUserName'] = '/\[User name]/';
783
+ $allAvailableShortcodes['patternUnsubscribe'] = '';
784
+
785
+ $pattern = "/\[(\[?)(Unsubscribe)(?![\w-])([^\]\/]*(?:\/(?!\])[^\]\/]*)*?)(?:(\/)\]|\](?:([^\[]\*+(?:\[(?!\/\2\])[^\[]\*+)\*+)\[\/\2\])?)(\]?)/";
786
+ preg_match($pattern, $emailMessage, $matches);
787
+ $title = __('Unsubscribe', SG_POPUP_TEXT_DOMAIN);
788
+ if ($matches) {
789
+ $patternUnsubscribe = $matches[0];
790
+ // If user didn't change anything inside the [unsubscribe] shortcode $matches[2] will be equal to 'Unsubscribe'
791
+ if ($matches[2] == 'Unsubscribe') {
792
+ $pattern = '/\s(\w+?)="(.+?)"]/';
793
+ preg_match($pattern, $matches[0], $matchesTitle);
794
+ if (!empty($matchesTitle[2])) {
795
+ $title = AdminHelper::removeAllNonPrintableCharacters($matchesTitle[2], 'Unsubscribe');
796
+ }
797
+ }
798
+ $allAvailableShortcodes['patternUnsubscribe'] = $patternUnsubscribe;
799
+ }
800
+
801
+ // When email is not valid we don't continue
802
+ if (!preg_match('/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/', $fromEmail)) {
803
+ wp_clear_scheduled_hook('sgpb_send_newsletter');
804
+ return false;
805
+ }
806
+
807
+ $selectionQuery = 'SELECT id FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE';
808
+ $selectionQuery = apply_filters('sgpbUserSelectionQuery', $selectionQuery);
809
+ $sql = $wpdb->prepare($selectionQuery .' and subscriptionType = %d limit 1', $subscriptionFormId);
810
+
811
+ $result = $wpdb->get_row($sql, ARRAY_A);
812
+ $currentStateEmailId = (int)$result['id'];
813
+ $getTotalSql = $wpdb->prepare('SELECT count(*) FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE unsubscribed = 0 and subscriptionType = %d', $subscriptionFormId);
814
+ $totalSubscribers = $wpdb->get_var($getTotalSql);
815
+
816
+ // $currentStateEmailId == 0 when all emails status = 1
817
+ if ($currentStateEmailId == 0) {
818
+ // Clear schedule hook
819
+ $headers = 'MIME-Version: 1.0'."\r\n";
820
+ $headers .= 'Content-type: text/html; charset=UTF-8'."\r\n";
821
+ $successTotal = get_option('SGPB_NEWSLETTER_'.$subscriptionFormId);
822
+ if (!$successTotal) {
823
+ $successTotal = 0;
824
+ }
825
+ $failedTotal = $totalSubscribers - $successTotal;
826
+
827
+ $emailMessageCustom = __('Your mail list %s delivered successfully!
828
+ %d of the %d emails succeeded, %d failed.
829
+ For more details, please download log file inside the plugin.
830
+ This email was generated via Popup Builder plugin.', SG_POPUP_TEXT_DOMAIN);
831
+ $emailMessageCustom = sprintf($emailMessageCustom, $subscriptionFormTitle, $successTotal, $totalSubscribers, $failedTotal);
832
+
833
+ wp_mail($fromEmail, $subscriptionFormTitle.' list has been successfully delivered!', $emailMessageCustom, $headers);
834
+ delete_option('SGPB_NEWSLETTER_'.$subscriptionFormId);
835
+ wp_clear_scheduled_hook('sgpb_send_newsletter');
836
+ return;
837
+ }
838
+
839
+ $getAllDataSql = 'SELECT id, firstName, lastName, email FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE';
840
+ $getAllDataSql = apply_filters('sgpbUserSelectionQuery', $getAllDataSql);
841
+ $getAllDataSql = $wpdb->prepare($getAllDataSql .' and id >= %d and subscriptionType = %s limit %d', $currentStateEmailId, $subscriptionFormId, $emailsInFlow);
842
+ $subscribers = $wpdb->get_results($getAllDataSql, ARRAY_A);
843
+
844
+ $subscribers = apply_filters('sgpNewsletterSendingSubscribers', $subscribers);
845
+
846
+ $blogInfo = get_bloginfo();
847
+ $headers = array(
848
+ 'From: "'.$blogInfo.'" <'.$fromEmail.'>' ,
849
+ 'MIME-Version: 1.0' ,
850
+ 'Content-type: text/html; charset=UTF-8'
851
+ );
852
+
853
+ foreach ($subscribers as $subscriber) {
854
+ $replacementId = $subscriber['id'];
855
+ $allAvailableShortcodes = apply_filters('sgpbNewsletterShortcodes', $allAvailableShortcodes, $subscriptionFormId, $replacementId);
856
+ $replacementFirstName = $subscriber['firstName'];
857
+ $replacementLastName = $subscriber['lastName'];
858
+ $replacementBlogName = $newsletterOptions['blogname'];
859
+ $replacementUserName = $newsletterOptions['username'];
860
+ $replacementEmail = $subscriber['email'];
861
+ $replacementUnsubscribe = get_home_url();
862
+ $replacementUnsubscribe .= '?sgpbUnsubscribe='.md5($replacementId.$replacementEmail);
863
+ $replacementUnsubscribe .= '&email='.$subscriber['email'];
864
+ $replacementUnsubscribe .= '&popup='.$subscriptionFormId;
865
+ $replacementUnsubscribe = '<br><a href="'.$replacementUnsubscribe.'">'.$title.'</a>';
866
+
867
+ // Replace First name and Last name from email message
868
+ $emailMessageCustom = preg_replace($allAvailableShortcodes['patternFirstName'], $replacementFirstName, $emailMessage);
869
+ $emailMessageCustom = preg_replace($allAvailableShortcodes['patternLastName'], $replacementLastName, $emailMessageCustom);
870
+ $emailMessageCustom = preg_replace($allAvailableShortcodes['patternBlogName'], $replacementBlogName, $emailMessageCustom);
871
+ $emailMessageCustom = preg_replace($allAvailableShortcodes['patternUserName'], $replacementUserName, $emailMessageCustom);
872
+ $emailMessageCustom = str_replace($allAvailableShortcodes['patternUnsubscribe'], $replacementUnsubscribe, $emailMessageCustom);
873
+ if (!empty($allAvailableShortcodes['extraShortcodesWithValues'])) {
874
+ $customFields = $allAvailableShortcodes['extraShortcodesWithValues'];
875
+ foreach ($customFields as $customFieldKey => $customFieldValue) {
876
+ $finalShortcode = '/\['.$customFieldKey.']/';
877
+ $emailMessageCustom = preg_replace($finalShortcode, $customFieldValue, $emailMessageCustom);
878
+ }
879
+ }
880
+ $emailMessageCustom = stripslashes($emailMessageCustom);
881
+
882
+ $emailMessageCustom = apply_filters('sgpNewsletterSendingMessage', $emailMessageCustom);
883
+ $mailStatus = wp_mail($subscriber['email'], $mailSubject, $emailMessageCustom, $headers);
884
+ if (!$mailStatus) {
885
+ $errorLogSql = $wpdb->prepare('INSERT INTO '. $wpdb->prefix .SGPB_SUBSCRIBERS_ERROR_TABLE_NAME.' (`popupType`, `email`, `date`) VALUES (%s, %s, %s)', $subscriptionFormId, $subscriber['email'], date('Y-m-d H:i'));
886
+ $wpdb->query($errorLogSql);
887
+ continue;
888
+ }
889
+
890
+ $successCount = get_option('SGPB_NEWSLETTER_'.$subscriptionFormId);
891
+ if (!$successCount) {
892
+ update_option('SGPB_NEWSLETTER_'.$subscriptionFormId, 1);
893
+ }
894
+ else {
895
+ update_option('SGPB_NEWSLETTER_'.$subscriptionFormId, ++$successCount);
896
+ }
897
+ }
898
+ // Update the status of all the sent mails
899
+ $updateStatusQuery = $wpdb->prepare('UPDATE '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' SET status = 1 where id >= %d and subscriptionType = %d limit %d', $currentStateEmailId, $subscriptionFormId, $emailsInFlow);
900
+ $wpdb->query($updateStatusQuery);
901
+ }
902
+
903
+ private function unsubscribe($params = array())
904
+ {
905
+ AdminHelper::deleteUserFromSubscribers($params);
906
+ }
907
+
908
+ public function enqueuePopupBuilderScripts()
909
+ {
910
+ // for old popups
911
+ if (get_option('SG_POPUP_VERSION')) {
912
+ ConvertToNewVersion::saveCustomInserted();
913
+ }
914
+
915
+ $popupLoaderObj = PopupLoader::instance();
916
+ if (is_object($popupLoaderObj)) {
917
+ $popupLoaderObj->loadPopups();
918
+ }
919
+ }
920
+
921
+ public function adminLoadPopups($hook)
922
+ {
923
+ $allowedPages = array();
924
+ $allowedPages = apply_filters('sgpbAdminLoadedPages', $allowedPages);
925
+
926
+ if (!empty($allowedPages) && is_array($allowedPages) && in_array($hook, $allowedPages)) {
927
+ $scriptsLoader = new ScriptsLoader();
928
+ $scriptsLoader->setIsAdmin(true);
929
+ $scriptsLoader->loadToFooter();
930
+ }
931
+ }
932
+
933
+ public function postTypeInit()
934
+ {
935
+ if (isset($_POST['sgpb-is-preview']) && $_POST['sgpb-is-preview'] == 1) {
936
+ $postId = $_POST['post_ID'];
937
+ $post = get_post($postId);
938
+ $this->savePost($postId, $post, false);
939
+ }
940
+ $adminUrl = admin_url();
941
+
942
+ if (isset($_GET['page']) && $_GET['page'] == 'PopupBuilder') {
943
+ _e('<span>Popup Builder plugin has been successfully updated. Please <a href="'.esc_attr($adminUrl).'edit.php?post_type='.SG_POPUP_POST_TYPE.'">click here</a> to go to the new Dashboard of the plugin.</span>', SG_POPUP_TEXT_DOMAIN);
944
+ wp_die();
945
+ }
946
+
947
+ $unsubscribeArgs = $this->collectUnsubscriberArgs();
948
+ if (!empty($unsubscribeArgs)) {
949
+ $this->unsubscribe($unsubscribeArgs);
950
+ }
951
+
952
+ AdminHelper::removeUnnecessaryCodeFromPopups();
953
+
954
+ $this->customPostTypeObj = new RegisterPostType();
955
+ }
956
+
957
+ public function collectUnsubscriberArgs()
958
+ {
959
+ if (!isset($_GET['sgpbUnsubscribe'])) {
960
+ return false;
961
+ }
962
+ $args = array();
963
+ if (isset($_GET['sgpbUnsubscribe'])) {
964
+ $args['token'] = $_GET['sgpbUnsubscribe'];
965
+ }
966
+ if (isset($_GET['email'])) {
967
+ $args['email'] = $_GET['email'];
968
+ }
969
+ if (isset($_GET['popup'])) {
970
+ $args['popup'] = $_GET['popup'];
971
+ }
972
+
973
+ return $args;
974
+ }
975
+
976
+ public function addSubMenu()
977
+ {
978
+ // We need to check license keys and statuses before adding new menu "License" item
979
+ new Updates();
980
+
981
+ $this->customPostTypeObj->addSubMenu();
982
+ }
983
+
984
+ public function supportLinks()
985
+ {
986
+ if (SGPB_POPUP_PKG == SGPB_POPUP_PKG_FREE) {
987
+ if (method_exists($this->customPostTypeObj, 'supportLinks')) {
988
+ $this->customPostTypeObj->supportLinks();
989
+ }
990
+ }
991
+ }
992
+
993
+ public function popupMetaboxes()
994
+ {
995
+ $this->customPostTypeObj->addPopupMetaboxes();
996
+ }
997
+
998
+ public function savePost($postId = 0, $post = array(), $update = false)
999
+ {
1000
+ if ($post->post_type !== SG_POPUP_POST_TYPE) {
1001
+ return;
1002
+ }
1003
+ $allowToAction = AdminHelper::userCanAccessTo();
1004
+ Functions::clearAllTransients();
1005
+ $postData = SGPopup::parsePopupDataFromData($_POST);
1006
+ $saveMode = '';
1007
+ $postData['sgpb-post-id'] = $postId;
1008
+ // If preview mode
1009
+ if (isset($postData['sgpb-is-preview']) && $postData['sgpb-is-preview'] == 1) {
1010
+ $saveMode = '_preview';
1011
+ SgpbPopupConfig::popupTypesInit();
1012
+ SgpbDataConfig::init();
1013
+ // published popup
1014
+ if (empty($post)) {
1015
+ global $post;
1016
+ $postId = $post->ID;
1017
+ }
1018
+ if ($post->post_status != 'draft') {
1019
+ $posts = array();
1020
+ $popupContent = $post->post_content;
1021
+
1022
+ $query = new WP_Query(
1023
+ array(
1024
+ 'post_parent' => $postId,
1025
+ 'posts_per_page' => - 1,
1026
+ 'post_type' => 'revision',
1027
+ 'post_status' => 'inherit'
1028
+ )
1029
+ );
1030
+ $query = apply_filters('sgpbSavePostQuery', $query);
1031
+
1032
+ while ($query->have_posts()) {
1033
+ $query->the_post();
1034
+ if (empty($posts)) {
1035
+ $posts[] = $post;
1036
+ }
1037
+ }
1038
+ if (!empty($posts[0])) {
1039
+ $popup = $posts[0];
1040
+ $popupContent = $popup->post_content;
1041
+ }
1042
+ }
1043
+ }
1044
+
1045
+
1046
+ if (empty($post)) {
1047
+ $saveMode = '';
1048
+ }
1049
+
1050
+ if ($post->post_status == 'draft') {
1051
+ $saveMode = '_preview';
1052
+ }
1053
+
1054
+ /* In preview mode saveMode should be true*/
1055
+ if ((!empty($post) && $post->post_type == SG_POPUP_POST_TYPE) || $saveMode || (empty($post) && !$saveMode)) {
1056
+ if (!$allowToAction) {
1057
+ wp_redirect(get_home_url());
1058
+ exit();
1059
+ }
1060
+ if (!empty($postData['sgpb-type'])) {
1061
+ $popupType = $postData['sgpb-type'];
1062
+ $popupClassName = SGPopup::getPopupClassNameFormType($popupType);
1063
+ $popupClassPath = SGPopup::getPopupTypeClassPath($popupType);
1064
+ require_once($popupClassPath.$popupClassName.'.php');
1065
+ $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
1066
+
1067
+ $popupClassName::create($postData, $saveMode, 1);
1068
+ }
1069
+ }
1070
+ else {
1071
+ $content = get_post_field('post_content', $postId);
1072
+ SGPopup::deletePostCustomInsertedData($postId);
1073
+ SGPopup::deletePostCustomInsertedEvents($postId);
1074
+ /*We detect all the popups that were inserted as a custom ones, in the content.*/
1075
+ SGPopup::savePopupsFromContentClasses($content, $post);
1076
+ }
1077
+ }
1078
+
1079
+ /**
1080
+ * Check Popup is satisfy for popup condition
1081
+ *
1082
+ * @param array $args
1083
+ *
1084
+ * @return array
1085
+ *
1086
+ *@since 1.0.0
1087
+ *
1088
+ */
1089
+ public function conditionsSatisfy($args = array())
1090
+ {
1091
+ if (isset($args['status']) && $args['status'] === false) {
1092
+ return $args;
1093
+ }
1094
+ $args['status'] = PopupChecker::checkOtherConditionsActions($args);
1095
+
1096
+ return $args;
1097
+ }
1098
+
1099
+ public function popupsTableColumnsValues($column, $postId)
1100
+ {
1101
+ $postId = (int)$postId;// Convert to int for security reasons
1102
+ global $post_type;
1103
+ if ($postId) {
1104
+ $args['status'] = array('publish', 'draft', 'pending', 'private', 'trash');
1105
+ $popup = SGPopup::find($postId, $args);
1106
+ }
1107
+
1108
+ if (empty($popup) && $post_type == SG_POPUP_POST_TYPE) {
1109
+ return false;
1110
+ }
1111
+
1112
+ if ($column == 'shortcode') {
1113
+ echo '<input type="text" onfocus="this.select();" readonly value="[sg_popup id='.$postId.']" class="large-text code">';
1114
+ }
1115
+ if ($column == 'className') {
1116
+ echo '<input type="text" onfocus="this.select();" readonly value="sg-popup-id-'.esc_attr($postId).'" class="large-text code">';
1117
+ }
1118
+ else if ($column == 'counter') {
1119
+ $count = $popup->getPopupOpeningCountById($postId);
1120
+ echo '<div ><span>'.$count.'</span>'.'<input onclick="SGPBBackend.resetCount('.$postId.', true);" type="button" name="" class="sgpb-btn sgpb-btn-dark-outline" value="'.__('reset', SG_POPUP_TEXT_DOMAIN).'"></div>';
1121
+ }
1122
+ else if ($column == 'type') {
1123
+ global $SGPB_POPUP_TYPES;
1124
+ $type = $popup->getType();
1125
+ if (isset($SGPB_POPUP_TYPES['typeLabels'][$type])) {
1126
+ $type = $SGPB_POPUP_TYPES['typeLabels'][$type];
1127
+ }
1128
+ echo $type;
1129
+ }
1130
+ else if ($column == 'onOff') {
1131
+ $popupPostStatus = get_post_status($postId);
1132
+ if ($popupPostStatus == 'publish' || $popupPostStatus == 'draft') {
1133
+ $isActive = $popup->getOptionValue('sgpb-is-active', true);
1134
+ }
1135
+ $checked = isset($isActive) && $isActive ? 'checked' : '';
1136
+ echo '<label class="sgpb-switch">
1137
+ <input class="sg-switch-checkbox sgpb-popup-status-js" value="1" data-switch-id="'.$postId.'" type="checkbox" '.$checked.'>
1138
+ <div class="sgpb-slider sgpb-round"></div>
1139
+ </label>';
1140
+ }
1141
+ else if ($column == 'sgpbIsRandomEnabled') {
1142
+ $showValues = apply_filters('sgpbAddRandomTableColumnValues', $postId);
1143
+ echo $showValues;
1144
+ }
1145
+ else if ($column == 'options') {
1146
+ $cloneUrl = AdminHelper::popupGetClonePostLink($postId);
1147
+ $actionButtons = '<div class="icon icon_blue">
1148
+ <img src="'.SG_POPUP_PUBLIC_URL.'icons/iconEdit.png" alt="Edit" class="icon_edit" onclick="location.href=\''.get_edit_post_link($postId).'\'">
1149
+ </div>';
1150
+ $actionButtons .= '<div class="icon icon_blue">
1151
+ <img src="'.SG_POPUP_PUBLIC_URL.'icons/iconClone.png" alt="Clone" class="icon_clone" onclick="location.href=\''.$cloneUrl.'\'">
1152
+ </div>';
1153
+ $actionButtons .= '<div class="icon icon_pink">
1154
+ <img src="'.SG_POPUP_PUBLIC_URL.'icons/recycle-bin.svg" alt="Remove" class="icon_remove" onclick="location.href=\''.get_delete_post_link($postId).'\'">
1155
+ </div>';
1156
+
1157
+ echo $actionButtons;
1158
+ }
1159
+ }
1160
+
1161
+ /*
1162
+ * This function calls the creation of a new copy of the selected post (by default preserving the original publish status)
1163
+ * then redirects to the post list
1164
+ */
1165
+ public function popupSaveAsNew($status = '')
1166
+ {
1167
+ if (!(isset($_GET['post']) || isset($_POST['post']) || (isset($_REQUEST['action']) && 'popupSaveAsNew' == $_REQUEST['action']))) {
1168
+ wp_die(esc_html__('No post to duplicate has been supplied!', SG_POPUP_TEXT_DOMAIN));
1169
+ }
1170
+ // Get the original post
1171
+ $id = (isset($_GET['post']) ? $_GET['post'] : $_POST['post']);
1172
+
1173
+ check_admin_referer('duplicate-post_'.$id);
1174
+
1175
+ $post = get_post($id);
1176
+
1177
+ // Copy the post and insert it
1178
+ if (isset($post) && $post != null) {
1179
+ $newId = $this->popupCreateDuplicate($post, $status);
1180
+ $postType = $post->post_type;
1181
+
1182
+ if ($status == '') {
1183
+ $sendBack = wp_get_referer();
1184
+ if (!$sendBack ||
1185
+ strpos($sendBack, 'post.php') !== false ||
1186
+ strpos($sendBack, 'post-new.php') !== false) {
1187
+ if ('attachment' == $postType) {
1188
+ $sendBack = admin_url('upload.php');
1189
+ }
1190
+ else {
1191
+ $sendBack = admin_url('edit.php');
1192
+ if (!empty($postType)) {
1193
+ $sendBack = add_query_arg('post_type', $postType, $sendBack);
1194
+ }
1195
+ }
1196
+ }
1197
+ else {
1198
+ $sendBack = remove_query_arg(array('trashed', 'untrashed', 'deleted', 'cloned', 'ids'), $sendBack);
1199
+ }
1200
+ // Redirect to the post list screen
1201
+ wp_redirect(add_query_arg(array('cloned' => 1, 'ids' => $post->ID), $sendBack));
1202
+ }
1203
+ else {
1204
+ // Redirect to the edit screen for the new draft post
1205
+ wp_redirect(add_query_arg(array('cloned' => 1, 'ids' => $post->ID), admin_url('post.php?action=edit&post='.$newId)));
1206
+ }
1207
+ exit;
1208
+
1209
+ }
1210
+ else {
1211
+ wp_die(esc_html__('Copy creation failed, could not find original:', SG_POPUP_TEXT_DOMAIN).' '.htmlspecialchars($id));
1212
+ }
1213
+ }
1214
+
1215
+ /**
1216
+ * Create a duplicate from a post
1217
+ */
1218
+ public function popupCreateDuplicate($post, $status = '', $parent_id = '')
1219
+ {
1220
+ $newPostStatus = (empty($status))? $post->post_status: $status;
1221
+
1222
+ if ($post->post_type != 'attachment') {
1223
+ $title = $post->post_title;
1224
+ if ($title == '') {
1225
+ // empty title
1226
+ $title = __('(no title) (clone)');
1227
+ }
1228
+ else {
1229
+ $title .= ' '.__('(clone)');
1230
+ }
1231
+
1232
+ if ('publish' == $newPostStatus || 'future' == $newPostStatus) {
1233
+ // check if the user has the right capability
1234
+ if (is_post_type_hierarchical($post->post_type)) {
1235
+ if (!current_user_can('publish_pages')) {
1236
+ $newPostStatus = 'pending';
1237
+ }
1238
+ }
1239
+ else {
1240
+ if (!current_user_can('publish_posts')) {
1241
+ $newPostStatus = 'pending';
1242
+ }
1243
+ }
1244
+ }
1245
+ }
1246
+
1247
+ $newPostAuthor = wp_get_current_user();
1248
+ $newPostAuthorId = $newPostAuthor->ID;
1249
+ // check if the user has the right capability
1250
+ if (is_post_type_hierarchical($post->post_type)) {
1251
+ if (current_user_can('edit_others_pages')) {
1252
+ $newPostAuthorId = $post->post_author;
1253
+ }
1254
+ }
1255
+ else {
1256
+ if (current_user_can('edit_others_posts')) {
1257
+ $newPostAuthorId = $post->post_author;
1258
+ }
1259
+ }
1260
+
1261
+ $newPost = array(
1262
+ 'menu_order' => $post->menu_order,
1263
+ 'comment_status' => $post->comment_status,
1264
+ 'ping_status' => $post->ping_status,
1265
+ 'post_author' => $newPostAuthorId,
1266
+ 'post_content' => $post->post_content,
1267
+ 'post_content_filtered' => $post->post_content_filtered,
1268
+ 'post_excerpt' => $post->post_excerpt,
1269
+ 'post_mime_type' => $post->post_mime_type,
1270
+ 'post_parent' => $newPostParent = empty($parent_id)? $post->post_parent : $parent_id,
1271
+ 'post_password' => $post->post_password,
1272
+ 'post_status' => $newPostStatus,
1273
+ 'post_title' => $title,
1274
+ 'post_type' => $post->post_type,
1275
+ );
1276
+
1277
+ $newPost['post_date'] = $newPostDate = $post->post_date;
1278
+ $newPost['post_date_gmt'] = get_gmt_from_date($newPostDate);
1279
+ $newPostId = wp_insert_post(wp_slash($newPost));
1280
+
1281
+ // If the copy is published or scheduled, we have to set a proper slug.
1282
+ if ($newPostStatus == 'publish' || $newPostStatus == 'future') {
1283
+ $postName = $post->post_name;
1284
+ $postName = wp_unique_post_slug($postName, $newPostId, $newPostStatus, $post->post_type, $newPostParent);
1285
+
1286
+ $newPost = array();
1287
+ $newPost['ID'] = $newPostId;
1288
+ $newPost['post_name'] = $postName;
1289
+
1290
+ // Update the post into the database
1291
+ wp_update_post(wp_slash($newPost));
1292
+ }
1293
+
1294
+ // If you have written a plugin which uses non-WP database tables to save
1295
+ // information about a post you can hook this action to dupe that data.
1296
+ if ($post->post_type == 'page' || is_post_type_hierarchical($post->post_type)) {
1297
+ do_action('dp_duplicate_page', $newPostId, $post, $status);
1298
+ }
1299
+ else {
1300
+ do_action('sgpb_duplicate_post', $newPostId, $post, $status);
1301
+ }
1302
+
1303
+ delete_post_meta($newPostId, '_sgpb_original');
1304
+ add_post_meta($newPostId, '_sgpb_original', $post->ID);
1305
+
1306
+ return $newPostId;
1307
+ }
1308
+
1309
+ /**
1310
+ * Copy the meta information of a post to another post
1311
+ */
1312
+ public function popupCopyPostMetaInfo($newId, $post)
1313
+ {
1314
+ $postMetaKeys = get_post_custom_keys($post->ID);
1315
+ $metaBlacklist = '';
1316
+
1317
+ if (empty($postMetaKeys) || !is_array($postMetaKeys)) {
1318
+ return;
1319
+ }
1320
+ $metaBlacklist = explode(',', $metaBlacklist);
1321
+ $metaBlacklist = array_filter($metaBlacklist);
1322
+ $metaBlacklist = array_map('trim', $metaBlacklist);
1323
+ $metaBlacklist[] = '_edit_lock';
1324
+ $metaBlacklist[] = '_edit_last';
1325
+ $metaBlacklist[] = '_wp_page_template';
1326
+ $metaBlacklist[] = '_thumbnail_id';
1327
+
1328
+ $metaBlacklist = apply_filters('duplicate_post_blacklist_filter' , $metaBlacklist);
1329
+
1330
+ $metaBlacklistString = '('.implode(')|(',$metaBlacklist).')';
1331
+ $metaKeys = array();
1332
+
1333
+ if (strpos($metaBlacklistString, '*') !== false) {
1334
+ $metaBlacklistString = str_replace(array('*'), array('[a-zA-Z0-9_]*'), $metaBlacklistString);
1335
+
1336
+ foreach ($postMetaKeys as $metaKey) {
1337
+ if (!preg_match('#^'.$metaBlacklistString.'$#', $metaKey)) {
1338
+ $metaKeys[] = $metaKey;
1339
+ }
1340
+ }
1341
+ }
1342
+ else {
1343
+ $metaKeys = array_diff($postMetaKeys, $metaBlacklist);
1344
+ }
1345
+
1346
+ $metaKeys = apply_filters('duplicate_post_meta_keys_filter', $metaKeys);
1347
+
1348
+ foreach ($metaKeys as $metaKey) {
1349
+ $metaValues = get_post_custom_values($metaKey, $post->ID);
1350
+ foreach ($metaValues as $metaValue) {
1351
+ $metaValue = maybe_unserialize($metaValue);
1352
+ if (is_array($metaValue)) {
1353
+ $metaValue['sgpb-post-id'] = $newId;
1354
+ }
1355
+ add_post_meta($newId, $metaKey, $this->popupWpSlash($metaValue));
1356
+ }
1357
+ }
1358
+ }
1359
+
1360
+ public function popupAddSlashesDeep($value)
1361
+ {
1362
+ if (function_exists('map_deep')) {
1363
+ return map_deep($value, array($this, 'popupAddSlashesToStringsOnly'));
1364
+ }
1365
+ else {
1366
+ return wp_slash($value);
1367
+ }
1368
+ }
1369
+
1370
+ public function popupAddSlashesToStringsOnly($value)
1371
+ {
1372
+ return is_string($value) ? addslashes($value) : $value;
1373
+ }
1374
+
1375
+ public function popupWpSlash($value)
1376
+ {
1377
+ return $this->popupAddSlashesDeep($value);
1378
+ }
1379
+
1380
+ public function removePostPermalink($args)
1381
+ {
1382
+ global $post_type;
1383
+
1384
+ if ($post_type == SG_POPUP_POST_TYPE && is_admin()) {
1385
+ // hide permalink for popupbuilder post type
1386
+ return '';
1387
+ }
1388
+
1389
+ return $args;
1390
+ }
1391
+
1392
+ // remove link ( e.g.: (View post) ), from popup updated/published message
1393
+ public function popupPublishedMessage($messages)
1394
+ {
1395
+ global $post_type;
1396
+
1397
+ if ($post_type == SG_POPUP_POST_TYPE) {
1398
+ // post(popup) updated
1399
+ if (isset($messages['post'][1])) {
1400
+ $messages['post'][1] = __('Popup updated.', SG_POPUP_TEXT_DOMAIN);
1401
+ }
1402
+ // post(popup) published
1403
+ if (isset($messages['post'][6])) {
1404
+ $messages['post'][6] = __('Popup published.', SG_POPUP_TEXT_DOMAIN);
1405
+ }
1406
+ }
1407
+ $messages = apply_filters('sgpbPostUpdateMessage', $messages);
1408
+
1409
+ return $messages;
1410
+ }
1411
+ private function subscriberFields() {
1412
+ return array('id', 'firstName', 'lastName', 'email', 'cDate', 'subscriptionType');
1413
+ }
1414
+ public function getSubscribersCsvFile()
1415
+ {
1416
+ global $wpdb;
1417
+ $allowToAction = AdminHelper::userCanAccessTo();
1418
+ if (!$allowToAction) {
1419
+ wp_redirect(get_home_url());
1420
+ exit();
1421
+ }
1422
+ $fields = $this->subscriberFields();
1423
+ $query = AdminHelper::subscribersRelatedQuery();
1424
+ if (isset($_GET['orderby']) && !empty($_GET['orderby'])) {
1425
+ $orderBy = sanitize_text_field($_GET['orderby']);
1426
+ if (!in_array($orderBy, $fields)){
1427
+ wp_redirect(get_home_url());
1428
+ exit();
1429
+ }
1430
+ if (isset($_GET['order']) && !empty($_GET['order'])) {
1431
+ $order = array('ASC', 'DESC');
1432
+ if (!in_array(sanitize_text_field($_GET['order']), $order)){
1433
+ wp_redirect(get_home_url());
1434
+ exit();
1435
+ }
1436
+ $query .= ' ORDER BY '.esc_sql($orderBy).' '.esc_sql($_GET['order']);
1437
+ }
1438
+ }
1439
+ $content = '';
1440
+ $rows = array('first name', 'last name', 'email', 'date', 'popup');
1441
+ foreach ($rows as $value) {
1442
+ $content .= $value;
1443
+ if ($value != 'popup') {
1444
+ $content .= ',';
1445
+ }
1446
+ }
1447
+ $content .= "\n";
1448
+ $subscribers = $wpdb->get_results($query, ARRAY_A);
1449
+
1450
+ $subscribers = apply_filters('sgpbSubscribersCsv', $subscribers);
1451
+
1452
+ foreach($subscribers as $values) {
1453
+ foreach ($values as $key => $value) {
1454
+ $content .= $value;
1455
+ if ($key != 'subscriptionTitle') {
1456
+ $content .= ',';
1457
+ }
1458
+ }
1459
+ $content .= "\n";
1460
+ }
1461
+
1462
+ $content = apply_filters('sgpbSubscribersContent', $content);
1463
+
1464
+ header('Pragma: public');
1465
+ header('Expires: 0');
1466
+ header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
1467
+ header('Cache-Control: private', false);
1468
+ header('Content-Type: application/octet-stream');
1469
+ header('Content-Disposition: attachment; filename=subscribersList.csv;');
1470
+ header('Content-Transfer-Encoding: binary');
1471
+ echo $content;
1472
+ }
1473
+
1474
+ public function getSystemInfoFile()
1475
+ {
1476
+ $allowToAction = AdminHelper::userCanAccessTo();
1477
+ if (!$allowToAction) {
1478
+ return false;
1479
+ }
1480
+
1481
+ $content = AdminHelper::getSystemInfoText();
1482
+
1483
+ header('Pragma: public');
1484
+ header('Expires: 0');
1485
+ header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
1486
+ header('Cache-Control: private', false);
1487
+ header('Content-Type: application/octet-stream');
1488
+ header('Content-Disposition: attachment; filename=popupBuilderSystemInfo.txt;');
1489
+ header('Content-Transfer-Encoding: binary');
1490
+
1491
+ echo $content;
1492
+ }
1493
+
1494
+ public function saveSettings()
1495
+ {
1496
+ $allowToAction = AdminHelper::userCanAccessTo();
1497
+ if (!$allowToAction) {
1498
+ wp_redirect(get_home_url());
1499
+ exit();
1500
+ }
1501
+
1502
+ $postData = $_POST;
1503
+ $deleteData = 0;
1504
+ $enableDebugMode = 0;
1505
+
1506
+ if (isset($postData['sgpb-dont-delete-data'])) {
1507
+ $deleteData = 1;
1508
+ }
1509
+ if (isset($postData['sgpb-enable-debug-mode'])) {
1510
+ $enableDebugMode = 1;
1511
+ }
1512
+ if (isset($postData['sgpb-disable-analytics-general'])) {
1513
+ $disableAnalytics = 1;
1514
+ }
1515
+ $userRoles = @$postData['sgpb-user-roles'];
1516
+
1517
+ update_option('sgpb-user-roles', $userRoles);
1518
+ update_option('sgpb-dont-delete-data', $deleteData);
1519
+ update_option('sgpb-enable-debug-mode', $enableDebugMode);
1520
+ update_option('sgpb-disable-analytics-general', $disableAnalytics);
1521
+
1522
+ AdminHelper::filterUserCapabilitiesForTheUserRoles('save');
1523
+
1524
+ wp_redirect(admin_url().'edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SG_POPUP_SETTINGS_PAGE);
1525
+ }
1526
+ }
com/classes/Ajax.php CHANGED
@@ -1,721 +1,721 @@
1
- <?php
2
- namespace sgpb;
3
- use \ConfigDataHelper;
4
- use \SgpbDataConfig;
5
-
6
- class Ajax
7
- {
8
- private $postData;
9
-
10
- public function __construct()
11
- {
12
- $this->actions();
13
- }
14
-
15
- public function setPostData($postData)
16
- {
17
- $this->postData = $postData;
18
- }
19
-
20
- public function getPostData()
21
- {
22
- return $this->postData;
23
- }
24
-
25
- /**
26
- * Return ajax param form post data by key
27
- *
28
- * @since 1.0.0
29
- *
30
- * @param string $key
31
- *
32
- * @return string $value
33
- */
34
- public function getValueFromPost($key)
35
- {
36
- $postData = $this->getPostData();
37
- $value = '';
38
-
39
- if(!empty($postData[$key])) {
40
- $value = $postData[$key];
41
- }
42
-
43
- return $value;
44
- }
45
-
46
- public function actions()
47
- {
48
- add_action('wp_ajax_sgpb_send_to_open_counter', array($this, 'addToCounter'));
49
- add_action('wp_ajax_nopriv_sgpb_send_to_open_counter', array($this, 'addToCounter'));
50
-
51
- add_action('wp_ajax_sgpb_process_after_submission', array($this, 'sgpbSubsciptionFormSubmittedAction'));
52
- add_action('wp_ajax_nopriv_sgpb_process_after_submission', array($this, 'sgpbSubsciptionFormSubmittedAction'));
53
-
54
- add_action('wp_ajax_sgpb_subscription_submission', array($this, 'subscriptionSubmission'));
55
- add_action('wp_ajax_nopriv_sgpb_subscription_submission', array($this, 'subscriptionSubmission'));
56
-
57
- $allowToAction = AdminHelper::userCanAccessTo();
58
-
59
- if($allowToAction) {
60
- add_action('wp_ajax_add_condition_group_row', array($this, 'addConditionGroupRow'));
61
- add_action('wp_ajax_add_condition_rule_row', array($this, 'addConditionRuleRow'));
62
- add_action('wp_ajax_change_condition_rule_row', array($this, 'changeConditionRuleRow'));
63
- add_action('wp_ajax_select2_search_data', array($this, 'select2SearchData'));
64
- add_action('wp_ajax_change_popup_status', array($this, 'changePopupStatus'));
65
- // proStartGold
66
- add_action('wp_ajax_check_same_origin', array($this, 'checkSameOrigin'));
67
- // proEndGold
68
- add_action('wp_ajax_sgpb_subscribers_delete', array($this, 'deleteSubscribers'));
69
- add_action('wp_ajax_sgpb_add_subscribers', array($this, 'addSubscribers'));
70
- add_action('wp_ajax_sgpb_import_subscribers', array($this, 'importSubscribers'));
71
- add_action('wp_ajax_sgpb_import_settings', array($this, 'importSettings'));
72
- add_action('wp_ajax_sgpb_save_imported_subscribers', array($this, 'saveImportedSubscribers'));
73
- add_action('wp_ajax_sgpb_send_newsletter', array($this, 'sendNewsletter'));
74
- add_action('wp_ajax_sgpb_change_review_popup_show_period', array($this, 'changeReviewPopupPeriod'));
75
- add_action('wp_ajax_sgpb_dont_show_review_popup', array($this, 'dontShowReviewPopup'));
76
- add_action('wp_ajax_sgpb_close_banner', array($this, 'closeMainRateUsBanner'));
77
- add_action('wp_ajax_sgpb_close_license_notice', array($this, 'closeLicenseNoticeBanner'));
78
- add_action('wp_ajax_sgpb_hide_ask_review_popup', array($this, 'dontShowAskReviewBanner'));
79
- add_action('wp_ajax_sgpb_reset_popup_opening_count', array($this, 'resetPopupOpeningCount'));
80
- /*Extension notification panel*/
81
- add_action('wp_ajax_sgpb_dont_show_extension_panel', array($this, 'extensionNotificationPanel'));
82
- add_action('wp_ajax_sgpb_dont_show_problem_alert', array($this, 'dontShowProblemAlert'));
83
- // autosave
84
- add_action('wp_ajax_sgpb_autosave', array($this, 'sgpbAutosave'));
85
- }
86
- }
87
-
88
- public function sgpbAutosave()
89
- {
90
- $allowToAction = AdminHelper::userCanAccessTo();
91
- if(!$allowToAction) {
92
- wp_die('');
93
- }
94
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
95
-
96
- $popupId = @(int)$_POST['post_ID'];
97
- $postStatus = get_post_status($popupId);
98
- if($postStatus == 'publish') {
99
- wp_die('');
100
- }
101
-
102
- if(!isset($_POST['allPopupData'])) {
103
- wp_die(true);
104
- }
105
- $popupData = SGPopup::parsePopupDataFromData($_POST['allPopupData']);
106
- do_action('save_post_popupbuilder');
107
- $popupType = $popupData['sgpb-type'];
108
- $popupClassName = SGPopup::getPopupClassNameFormType($popupType);
109
- $popupClassPath = SGPopup::getPopupTypeClassPath($popupType);
110
- if(file_exists($popupClassPath.$popupClassName.'.php')) {
111
- require_once($popupClassPath.$popupClassName.'.php');
112
- $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
113
- $popupClassName::create($popupData, '_preview', 1);
114
- }
115
-
116
- wp_die();
117
- }
118
-
119
- public function dontShowReviewPopup()
120
- {
121
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
122
- update_option('SGPBCloseReviewPopup-notification', true);
123
- do_action('sgpbGetNotifications');
124
- wp_die();
125
- }
126
-
127
- public function changeReviewPopupPeriod()
128
- {
129
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
130
- $messageType = sanitize_text_field($_POST['messageType']);
131
-
132
- if($messageType == 'count') {
133
- $maxPopupCount = get_option('SGPBMaxOpenCount');
134
- if(!$maxPopupCount) {
135
- $maxPopupCount = SGPB_ASK_REVIEW_POPUP_COUNT;
136
- }
137
- $maxPopupData = AdminHelper::getMaxOpenPopupId();
138
- if(!empty($maxPopupData['maxCount'])) {
139
- $maxPopupCount = $maxPopupData['maxCount'];
140
- }
141
-
142
- $maxPopupCount += SGPB_ASK_REVIEW_POPUP_COUNT;
143
- update_option('SGPBMaxOpenCount', $maxPopupCount);
144
- wp_die();
145
- }
146
-
147
- $popupTimeZone = get_option('timezone_string');
148
- if(!$popupTimeZone) {
149
- $popupTimeZone = SG_POPUP_DEFAULT_TIME_ZONE;
150
- }
151
- $timeDate = new \DateTime('now', new \DateTimeZone($popupTimeZone));
152
- $timeDate->modify('+'.SGPB_REVIEW_POPUP_PERIOD.' day');
153
-
154
- $timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
155
- update_option('SGPBOpenNextTime', $timeNow);
156
- $usageDays = get_option('SGPBUsageDays');
157
- $usageDays += SGPB_REVIEW_POPUP_PERIOD;
158
- update_option('SGPBUsageDays', $usageDays);
159
- wp_die();
160
- }
161
-
162
- public function resetPopupOpeningCount()
163
- {
164
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
165
-
166
- global $wpdb;
167
-
168
- $tableName = $wpdb->prefix.'sgpb_analytics';
169
- $popupId = (int)$_POST['popupId'];
170
- $allPopupsCount = get_option('SgpbCounter');
171
- if($wpdb->get_var("SHOW TABLES LIKE '$tableName'") == $tableName) {
172
- SGPopup::deleteAnalyticsDataByPopupId($popupId);
173
- }
174
- if(empty($allPopupsCount)) {
175
- echo SGPB_AJAX_STATUS_FALSE;
176
- wp_die();
177
- }
178
- if(isset($allPopupsCount[$popupId])) {
179
- $allPopupsCount[$popupId] = 0;
180
- }
181
-
182
- // 7, 12, 13 => exclude close, subscription success, contact success events
183
- $stmt = $wpdb->prepare(' DELETE FROM '.$wpdb->prefix.'sgpb_analytics WHERE target_id = %d AND event_id NOT IN (7, 12, 13)', $popupId);
184
- $popupAnalyticsData = $wpdb->get_var($stmt);
185
-
186
- update_option('SgpbCounter', $allPopupsCount);
187
-
188
- }
189
-
190
- public function dontShowAskReviewBanner()
191
- {
192
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
193
- update_option('sgpbDontShowAskReviewBanner', 1);
194
- echo SGPB_AJAX_STATUS_TRUE;
195
- wp_die();
196
- }
197
-
198
- public function dontShowProblemAlert()
199
- {
200
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
201
- update_option('sgpb_alert_problems', 1);
202
- echo SGPB_AJAX_STATUS_TRUE;
203
- wp_die();
204
- }
205
-
206
- public function extensionNotificationPanel()
207
- {
208
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
209
- update_option('sgpb_extensions_updated', 1);
210
- echo SGPB_AJAX_STATUS_TRUE;
211
- wp_die();
212
- }
213
-
214
- public function closeMainRateUsBanner()
215
- {
216
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
217
- update_option('sgpb-hide-support-banner', 1);
218
- do_action('sgpbGetNotifications');
219
- wp_die();
220
- }
221
-
222
- public function closeLicenseNoticeBanner()
223
- {
224
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
225
- update_option('sgpb-hide-license-notice-banner', 1);
226
- wp_die();
227
- }
228
-
229
- public function addToCounter()
230
- {
231
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
232
-
233
- if(isset($_GET['sg_popup_preview_id']) && !isset($_POST['params'])) {
234
- wp_die(0);
235
- }
236
-
237
- /* Sanitizing multidimensional array */
238
- $popupParams = $_POST['params'];
239
- array_walk($popupParams, 'sanitize_text_field');
240
-
241
- $popupsIdCollection = is_array($popupParams['popupsIdCollection']) ? $popupParams['popupsIdCollection'] : array();
242
- $popupsCounterData = get_option('SgpbCounter');
243
-
244
- if($popupsCounterData === false) {
245
- $popupsCounterData = array();
246
- }
247
-
248
- foreach($popupsIdCollection as $popupId => $popupCount) {
249
- if(empty($popupsCounterData[$popupId])) {
250
- $popupsCounterData[$popupId] = 0;
251
- }
252
- $popupsCounterData[$popupId] += $popupCount;
253
- }
254
-
255
- update_option('SgpbCounter', $popupsCounterData);
256
- wp_die(1);
257
- }
258
-
259
- public function deleteSubscribers()
260
- {
261
- global $wpdb;
262
-
263
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
264
-
265
- $subscribersId = array_map('sanitize_text_field', $_POST['subscribersId']);
266
-
267
- foreach($subscribersId as $subscriberId) {
268
- $prepareSql = $wpdb->prepare('DELETE FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE id = %d', $subscriberId);
269
- $wpdb->query($prepareSql);
270
- }
271
- }
272
-
273
- public function addSubscribers()
274
- {
275
- global $wpdb;
276
-
277
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
278
- $status = SGPB_AJAX_STATUS_FALSE;
279
- $firstName = sanitize_text_field($_POST['firstName']);
280
- $lastName = sanitize_text_field($_POST['lastName']);
281
- $email = sanitize_text_field($_POST['email']);
282
- $date = date('Y-m-d');
283
- $subscriptionPopupsId = array_map('sanitize_text_field', $_POST['popups']);
284
-
285
- foreach($subscriptionPopupsId as $subscriptionPopupId) {
286
- $selectSql = $wpdb->prepare('SELECT id FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE email = %s AND subscriptionType = %d', $email, $subscriptionPopupId);
287
- $res = $wpdb->get_row($selectSql, ARRAY_A);
288
- // add new subscriber
289
- if(empty($res)) {
290
- $sql = $wpdb->prepare('INSERT INTO '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' (firstName, lastName, email, cDate, subscriptionType) VALUES (%s, %s, %s, %s, %d) ', $firstName, $lastName, $email, $date, $subscriptionPopupId);
291
- $res = $wpdb->query($sql);
292
- } // edit existing
293
- else {
294
- $sql = $wpdb->prepare('UPDATE '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' SET firstName = %s, lastName = %s, email = %s, cDate = %s, subscriptionType = %d, unsubscribered = 0 WHERE id = %d', $firstName, $lastName, $email, $date, $subscriptionPopupId, $res['id']);
295
- $wpdb->query($sql);
296
- $res = 1;
297
- }
298
-
299
- if($res) {
300
- $status = SGPB_AJAX_STATUS_TRUE;
301
- }
302
- }
303
-
304
- echo $status;
305
- wp_die();
306
- }
307
-
308
- public function importSubscribers()
309
- {
310
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
311
- $formId = (int)sanitize_text_field($_POST['popupSubscriptionList']);
312
- $fileURL = sanitize_text_field($_POST['importListURL']);
313
- ob_start();
314
- require_once SG_POPUP_VIEWS_PATH.'importConfigView.php';
315
- $content = ob_get_contents();
316
- ob_end_clean();
317
-
318
- echo $content;
319
- wp_die();
320
- }
321
-
322
- public function importSettings()
323
- {
324
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
325
- ob_start();
326
- require_once SG_POPUP_VIEWS_PATH.'importPopupsView.php';
327
- $content = ob_get_contents();
328
- ob_end_clean();
329
-
330
- echo $content;
331
- wp_die();
332
- }
333
-
334
- public function saveImportedSubscribers()
335
- {
336
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
337
- @ini_set('auto_detect_line_endings', '1');
338
- $formId = (int)sanitize_text_field($_POST['popupSubscriptionList']);
339
- $fileURL = sanitize_text_field($_POST['importListURL']);
340
- $mapping = $_POST['namesMapping'];
341
-
342
- $fileContent = AdminHelper::getFileFromURL($fileURL);
343
- $csvFileArray = array_map('str_getcsv', file($fileURL));
344
-
345
- $header = $csvFileArray[0];
346
- unset($csvFileArray[0]);
347
- $subscriptionPlusContent = apply_filters('sgpbImportToSubscriptionList', $csvFileArray, $mapping, $formId);
348
-
349
- // -1 it's mean saved from Subscription Plus
350
- if($subscriptionPlusContent != -1) {
351
- foreach($csvFileArray as $csvData) {
352
- global $wpdb;
353
- $subscribersTableName = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
354
- $sql = $wpdb->prepare('SELECT submittedData FROM '.$subscribersTableName);
355
- if(!empty($mapping['date'])) {
356
- $date = $csvData[$mapping['date']];
357
- $date = date('Y-m-d', strtotime($date));
358
- }
359
- if($sql) {
360
- $sql = $wpdb->prepare('INSERT INTO '.$subscribersTableName.' (firstName, lastName, email, cDate, subscriptionType, status, unsubscribed) VALUES (%s, %s, %s, %s, %d, %d, %d) ', $csvData[$mapping['firstName']], $csvData[$mapping['lastName']], $csvData[$mapping['email']], $date, $formId, 0, 0);
361
- } else {
362
- $sql = $wpdb->prepare('INSERT INTO '.$subscribersTableName.' (firstName, lastName, email, cDate, subscriptionType, status, unsubscribed, submittedData) VALUES (%s, %s, %s, %s, %d, %d, %d, %s) ', $csvData[$mapping['firstName']], $csvData[$mapping['lastName']], $csvData[$mapping['email']], $csvData[$mapping['date']], $formId, 0, 0, '');
363
- }
364
-
365
- $wpdb->query($sql);
366
- }
367
- }
368
-
369
- echo SGPB_AJAX_STATUS_TRUE;
370
- wp_die();
371
- }
372
-
373
- public function sendNewsletter()
374
- {
375
- $allowToAction = AdminHelper::userCanAccessTo();
376
- if(!$allowToAction) {
377
- wp_redirect(get_home_url());
378
- exit();
379
- }
380
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
381
- global $wpdb;
382
-
383
- $newsletterData = stripslashes_deep($_POST['newsletterData']);
384
- if(isset($newsletterData['testSendingStatus']) && $newsletterData['testSendingStatus'] == 'test') {
385
- AdminHelper::sendTestNewsletter($newsletterData);
386
- }
387
- $subscriptionFormId = (int)$newsletterData['subscriptionFormId'];
388
-
389
- $updateStatusQuery = $wpdb->prepare('UPDATE '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' SET status = 0 WHERE subscriptionType = %d', $subscriptionFormId);
390
- $wpdb->query($updateStatusQuery);
391
- $newsletterData['blogname'] = get_bloginfo('name');
392
- $newsletterData['username'] = wp_get_current_user()->user_login;
393
- update_option('SGPB_NEWSLETTER_DATA', $newsletterData);
394
-
395
- wp_schedule_event(time(), 'sgpb_newsletter_send_every_minute', 'sgpb_send_newsletter');
396
- wp_die();
397
- }
398
-
399
- // proStartGold
400
- public function checkSameOrigin()
401
- {
402
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
403
-
404
- $url = esc_url($_POST['iframeUrl']);
405
- $status = SGPB_AJAX_STATUS_FALSE;
406
-
407
- $remoteGet = wp_remote_get($url);
408
-
409
- if(is_array($remoteGet) && !empty($remoteGet['headers']['x-frame-options'])) {
410
- $siteUrl = esc_url($_POST['siteUrl']);
411
- $xFrameOptions = $remoteGet['headers']['x-frame-options'];
412
- $mayNotShow = false;
413
-
414
- if($xFrameOptions == 'deny') {
415
- $mayNotShow = true;
416
- } else if($xFrameOptions == 'SAMEORIGIN') {
417
- if(strpos($url, $siteUrl) === false) {
418
- $mayNotShow = true;
419
- }
420
- } else {
421
- if(strpos($xFrameOptions, $siteUrl) === false) {
422
- $mayNotShow = true;;
423
- }
424
- }
425
-
426
- if($mayNotShow) {
427
- echo $status;
428
- wp_die();
429
- }
430
- }
431
-
432
- // $remoteGet['response']['code'] < 400 it's mean correct status
433
- if(is_array($remoteGet) && isset($remoteGet['response']['code']) && $remoteGet['response']['code'] < 400) {
434
- $status = SGPB_AJAX_STATUS_TRUE;
435
- }
436
-
437
- echo $status;
438
- wp_die();
439
- }
440
-
441
- // proEndGold
442
-
443
- public function changePopupStatus()
444
- {
445
- $popupId = (int)$_POST['popupId'];
446
- $obj = SGPopup::find($popupId);
447
- $isDraft = '';
448
- $postStatus = get_post_status($popupId);
449
- if($postStatus == 'draft') {
450
- $isDraft = '_preview';
451
- }
452
-
453
- if(!$obj || !is_object($obj)) {
454
- wp_die(SGPB_AJAX_STATUS_FALSE);
455
- }
456
- $options = $obj->getOptions();
457
- $options['sgpb-is-active'] = sanitize_text_field($_POST['popupStatus']);
458
-
459
- unset($options['sgpb-conditions']);
460
- update_post_meta($popupId, 'sg_popup_options'.$isDraft, $options);
461
-
462
- wp_die($popupId);
463
- }
464
-
465
- public function subscriptionSubmission()
466
- {
467
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
468
- $this->setPostData($_POST);
469
- $submissionData = $this->getValueFromPost('formData');
470
- $popupPostId = (int)$this->getValueFromPost('popupPostId');
471
-
472
- parse_str($submissionData, $formData);
473
-
474
- if(empty($formData)) {
475
- echo SGPB_AJAX_STATUS_FALSE;
476
- wp_die();
477
- }
478
-
479
- $hiddenChecker = sanitize_text_field($formData['sgpb-subs-hidden-checker']);
480
-
481
- // this check is made to protect ourselves from bot
482
- if(!empty($hiddenChecker)) {
483
- echo 'Bot';
484
- wp_die();
485
- }
486
- global $wpdb;
487
-
488
- $status = SGPB_AJAX_STATUS_FALSE;
489
- $date = date('Y-m-d');
490
- $email = sanitize_email($formData['sgpb-subs-email']);
491
- $firstName = sanitize_text_field($formData['sgpb-subs-first-name']);
492
- $lastName = sanitize_text_field($formData['sgpb-subs-last-name']);
493
-
494
- $subscribersTableName = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
495
-
496
- $getSubscriberQuery = $wpdb->prepare('SELECT id FROM '.$subscribersTableName.' WHERE email = %s AND subscriptionType = %d', $email, $popupPostId);
497
- $list = $wpdb->get_row($getSubscriberQuery, ARRAY_A);
498
-
499
- // When subscriber does not exist we insert to subscribers table otherwise we update user info
500
- if(empty($list['id'])) {
501
- $sql = $wpdb->prepare('INSERT INTO '.$subscribersTableName.' (firstName, lastName, email, cDate, subscriptionType) VALUES (%s, %s, %s, %s, %d) ', $firstName, $lastName, $email, $date, $popupPostId);
502
- $res = $wpdb->query($sql);
503
- } else {
504
- $sql = $wpdb->prepare('UPDATE '.$subscribersTableName.' SET firstName = %s, lastName = %s, email = %s, cDate = %s, subscriptionType = %d WHERE id = %d', $firstName, $lastName, $email, $date, $popupPostId, $list['id']);
505
- $wpdb->query($sql);
506
- $res = 1;
507
- }
508
- if($res) {
509
- $status = SGPB_AJAX_STATUS_TRUE;
510
- }
511
-
512
- echo $status;
513
- wp_die();
514
- }
515
-
516
- public function sgpbSubsciptionFormSubmittedAction()
517
- {
518
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
519
- $this->setPostData($_POST);
520
-
521
- $submissionData = $this->getValueFromPost('formData');
522
- $popupPostId = (int)$this->getValueFromPost('popupPostId');
523
- parse_str($submissionData, $formData);
524
- if(empty($_POST)) {
525
- echo SGPB_AJAX_STATUS_FALSE;
526
- wp_die();
527
- }
528
- $email = sanitize_email($_POST['emailValue']);
529
- $firstName = sanitize_text_field($_POST['firstNameValue']);
530
- $lastName = sanitize_text_field($_POST['lastNameValue']);
531
- $userData = array(
532
- 'email' => $email,
533
- 'firstName' => $firstName,
534
- 'lastName' => $lastName
535
- );
536
- $this->sendSuccessEmails($popupPostId, $userData);
537
- do_action('sgpbProcessAfterSuccessfulSubmission', $popupPostId, $userData);
538
- }
539
-
540
- public function sendSuccessEmails($popupPostId, $subscriptionDetails)
541
- {
542
- global $wpdb;
543
- $popup = SGPopup::find($popupPostId);
544
-
545
- if(!is_object($popup)) {
546
- return false;
547
- }
548
- $subscribersTableName = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
549
-
550
- $getSubscriberCountQuery = $wpdb->prepare('SELECT COUNT(id) as countIds FROM '.$subscribersTableName.' WHERE subscriptionType = %d', $popupPostId);
551
- $count = $wpdb->get_row($getSubscriberCountQuery, ARRAY_A);
552
-
553
- $popupOptions = $popup->getOptions();
554
- $adminUserName = 'admin';
555
-
556
- $adminEmail = get_option('admin_email');
557
- $userData = @get_user_by('email', $adminEmail);
558
-
559
- if(!empty($userData)) {
560
- $adminUserName = $userData->display_name;
561
- }
562
-
563
- $newSubscriberEmailHeader = AdminHelper::getEmailHeader($adminEmail);
564
- $takeReviewAfterFirstSubscription = get_option('sgpb-new-subscriber');
565
-
566
- if($count['countIds'] == 1 && !$takeReviewAfterFirstSubscription) {
567
- // take review
568
- update_option('sgpb-new-subscriber', 1);
569
- $newSubscriberEmailTitle = __('Congrats! You have already 1 subscriber!', SG_POPUP_TEXT_DOMAIN);
570
- $reviewEmailTemplate = AdminHelper::getFileFromURL(SG_POPUP_EMAIL_TEMPLATES_URL.'takeReviewAfterSubscribe.html');
571
- $reviewEmailTemplate = preg_replace('/\[adminUserName]/', $adminUserName, $reviewEmailTemplate);
572
- $sendStatus = wp_mail($adminEmail, $newSubscriberEmailTitle, $reviewEmailTemplate, $newSubscriberEmailHeader); //return true or false
573
- }
574
- }
575
-
576
- public function select2SearchData()
577
- {
578
- check_ajax_referer(SG_AJAX_NONCE, 'nonce_ajax');
579
-
580
- $postTypeName = sanitize_text_field($_POST['searchKey']);
581
- $search = sanitize_text_field($_POST['searchTerm']);
582
- $searchResults = $this->selectFromPost($postTypeName, $search);
583
-
584
- if(isset($_POST['searchCallback'])) {
585
- $searchCallback = sanitize_text_field($_POST['searchCallback']);
586
- $searchResults = apply_filters('sgpbSearchAdditionalData', $search, array());
587
- }
588
-
589
- if(empty($searchResults)) {
590
- $results['items'] = array();
591
- }
592
-
593
- /*Selected custom post type convert for select2 format*/
594
- foreach($searchResults as $id => $name) {
595
- $results['items'][] = array(
596
- 'id' => $id,
597
- 'text' => $name
598
- );
599
- }
600
-
601
- echo json_encode($results);
602
- wp_die();
603
- }
604
-
605
- private function selectFromPost($postTypeName, $search)
606
- {
607
- $args = array(
608
- 's' => $search,
609
- 'post__in' => !empty($_REQUEST['include']) ? array_map('intval', $_REQUEST['include']) : null,
610
- 'page' => !empty($_REQUEST['page']) ? absint($_REQUEST['page']) : null,
611
- 'posts_per_page' => 100,
612
- 'post_type' => $postTypeName
613
- );
614
- $searchResults = ConfigDataHelper::getPostTypeData($args);
615
-
616
- return $searchResults;
617
- }
618
-
619
- public function addConditionGroupRow()
620
- {
621
- check_ajax_referer(SG_AJAX_NONCE, 'nonce_ajax');
622
- global $SGPB_DATA_CONFIG_ARRAY;
623
-
624
- $groupId = (int)$_POST['groupId'];
625
- $targetType = sanitize_text_field($_POST['conditionName']);
626
- $addedObj = array();
627
-
628
- $builderObj = new ConditionBuilder();
629
-
630
- $builderObj->setGroupId($groupId);
631
- $builderObj->setRuleId(SG_CONDITION_FIRST_RULE);
632
- $builderObj->setSavedData($SGPB_DATA_CONFIG_ARRAY[$targetType]['initialData'][0]);
633
- $builderObj->setConditionName($targetType);
634
- $addedObj[] = $builderObj;
635
-
636
- $creator = new ConditionCreator($addedObj);
637
- echo $creator->render();
638
- wp_die();
639
- }
640
-
641
- public function addConditionRuleRow()
642
- {
643
- check_ajax_referer(SG_AJAX_NONCE, 'nonce_ajax');
644
- $data = '';
645
- global $SGPB_DATA_CONFIG_ARRAY;
646
- $targetType = sanitize_text_field($_POST['conditionName']);
647
- $builderObj = new ConditionBuilder();
648
-
649
- $groupId = (int)$_POST['groupId'];
650
- $ruleId = (int)$_POST['ruleId'];
651
-
652
- $builderObj->setGroupId($groupId);
653
- $builderObj->setRuleId($ruleId);
654
- $builderObj->setSavedData($SGPB_DATA_CONFIG_ARRAY[$targetType]['initialData'][0]);
655
- $builderObj->setConditionName($targetType);
656
-
657
- $data .= ConditionCreator::createConditionRuleRow($builderObj);
658
-
659
- echo $data;
660
- wp_die();
661
- }
662
-
663
- public function changeConditionRuleRow()
664
- {
665
- check_ajax_referer(SG_AJAX_NONCE, 'nonce_ajax');
666
- $data = '';
667
- global $SGPB_DATA_CONFIG_ARRAY;
668
-
669
- $targetType = sanitize_text_field($_POST['conditionName']);
670
- $builderObj = new ConditionBuilder();
671
- $conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$targetType];
672
- $groupId = (int)$_POST['groupId'];
673
- $ruleId = (int)$_POST['ruleId'];
674
- $popupId = (int)$_POST['popupId'];
675
- $paramName = sanitize_text_field($_POST['paramName']);
676
-
677
- $savedData = array(
678
- 'param' => $paramName
679
- );
680
-
681
- if($targetType == 'target' || $targetType == 'conditions') {
682
- $savedData['operator'] = '==';
683
- } else if($conditionConfig['specialDefaultOperator']) {
684
- $savedData['operator'] = $paramName;
685
- }
686
-
687
- if(!empty($_POST['paramValue'])) {
688
- $savedData['tempParam'] = sanitize_text_field($_POST['paramValue']);
689
- $savedData['operator'] = $paramName;
690
- }
691
- // change operator value related to condition value
692
- if(!empty($conditionConfig['operatorAllowInConditions']) && in_array($paramName, $conditionConfig['operatorAllowInConditions'])) {
693
- $conditionConfig['paramsData']['operator'] = array();
694
-
695
- if(!empty($conditionConfig['paramsData'][$paramName.'Operator'])) {
696
- $operatorData = $conditionConfig['paramsData'][$paramName.'Operator'];
697
- $SGPB_DATA_CONFIG_ARRAY[$targetType]['paramsData']['operator'] = $operatorData;
698
- // change take value related to condition value
699
- $operatorDataKeys = array_keys($operatorData);
700
- if(!empty($operatorDataKeys[0])) {
701
- $savedData['operator'] = $operatorDataKeys[0];
702
- $builderObj->setTakeValueFrom('operator');
703
- }
704
- }
705
- }
706
- // by default set empty value for users' role (adv. tar.)
707
- $savedData['value'] = array();
708
- $savedData['hiddenOption'] = @$conditionConfig['hiddenOptionData'][$paramName];
709
-
710
- $builderObj->setPopupId($popupId);
711
- $builderObj->setGroupId($groupId);
712
- $builderObj->setRuleId($ruleId);
713
- $builderObj->setSavedData($savedData);
714
- $builderObj->setConditionName($targetType);
715
-
716
- $data .= ConditionCreator::createConditionRuleRow($builderObj);
717
-
718
- echo $data;
719
- wp_die();
720
- }
721
- }
1
+ <?php
2
+ namespace sgpb;
3
+ use \ConfigDataHelper;
4
+ use \SgpbDataConfig;
5
+
6
+ class Ajax
7
+ {
8
+ private $postData;
9
+
10
+ public function __construct()
11
+ {
12
+ $this->actions();
13
+ }
14
+
15
+ public function setPostData($postData)
16
+ {
17
+ $this->postData = $postData;
18
+ }
19
+
20
+ public function getPostData()
21
+ {
22
+ return $this->postData;
23
+ }
24
+
25
+ /**
26
+ * Return ajax param form post data by key
27
+ *
28
+ * @since 1.0.0
29
+ *
30
+ * @param string $key
31
+ *
32
+ * @return string $value
33
+ */
34
+ public function getValueFromPost($key)
35
+ {
36
+ $postData = $this->getPostData();
37
+ $value = '';
38
+
39
+ if(!empty($postData[$key])) {
40
+ $value = $postData[$key];
41
+ }
42
+
43
+ return $value;
44
+ }
45
+
46
+ public function actions()
47
+ {
48
+ add_action('wp_ajax_sgpb_send_to_open_counter', array($this, 'addToCounter'));
49
+ add_action('wp_ajax_nopriv_sgpb_send_to_open_counter', array($this, 'addToCounter'));
50
+
51
+ add_action('wp_ajax_sgpb_process_after_submission', array($this, 'sgpbSubsciptionFormSubmittedAction'));
52
+ add_action('wp_ajax_nopriv_sgpb_process_after_submission', array($this, 'sgpbSubsciptionFormSubmittedAction'));
53
+
54
+ add_action('wp_ajax_sgpb_subscription_submission', array($this, 'subscriptionSubmission'));
55
+ add_action('wp_ajax_nopriv_sgpb_subscription_submission', array($this, 'subscriptionSubmission'));
56
+
57
+ $allowToAction = AdminHelper::userCanAccessTo();
58
+
59
+ if($allowToAction) {
60
+ add_action('wp_ajax_add_condition_group_row', array($this, 'addConditionGroupRow'));
61
+ add_action('wp_ajax_add_condition_rule_row', array($this, 'addConditionRuleRow'));
62
+ add_action('wp_ajax_change_condition_rule_row', array($this, 'changeConditionRuleRow'));
63
+ add_action('wp_ajax_select2_search_data', array($this, 'select2SearchData'));
64
+ add_action('wp_ajax_change_popup_status', array($this, 'changePopupStatus'));
65
+ // proStartGold
66
+ add_action('wp_ajax_check_same_origin', array($this, 'checkSameOrigin'));
67
+ // proEndGold
68
+ add_action('wp_ajax_sgpb_subscribers_delete', array($this, 'deleteSubscribers'));
69
+ add_action('wp_ajax_sgpb_add_subscribers', array($this, 'addSubscribers'));
70
+ add_action('wp_ajax_sgpb_import_subscribers', array($this, 'importSubscribers'));
71
+ add_action('wp_ajax_sgpb_import_settings', array($this, 'importSettings'));
72
+ add_action('wp_ajax_sgpb_save_imported_subscribers', array($this, 'saveImportedSubscribers'));
73
+ add_action('wp_ajax_sgpb_send_newsletter', array($this, 'sendNewsletter'));
74
+ add_action('wp_ajax_sgpb_change_review_popup_show_period', array($this, 'changeReviewPopupPeriod'));
75
+ add_action('wp_ajax_sgpb_dont_show_review_popup', array($this, 'dontShowReviewPopup'));
76
+ add_action('wp_ajax_sgpb_close_banner', array($this, 'closeMainRateUsBanner'));
77
+ add_action('wp_ajax_sgpb_close_license_notice', array($this, 'closeLicenseNoticeBanner'));
78
+ add_action('wp_ajax_sgpb_hide_ask_review_popup', array($this, 'dontShowAskReviewBanner'));
79
+ add_action('wp_ajax_sgpb_reset_popup_opening_count', array($this, 'resetPopupOpeningCount'));
80
+ /*Extension notification panel*/
81
+ add_action('wp_ajax_sgpb_dont_show_extension_panel', array($this, 'extensionNotificationPanel'));
82
+ add_action('wp_ajax_sgpb_dont_show_problem_alert', array($this, 'dontShowProblemAlert'));
83
+ // autosave
84
+ add_action('wp_ajax_sgpb_autosave', array($this, 'sgpbAutosave'));
85
+ }
86
+ }
87
+
88
+ public function sgpbAutosave()
89
+ {
90
+ $allowToAction = AdminHelper::userCanAccessTo();
91
+ if(!$allowToAction) {
92
+ wp_die('');
93
+ }
94
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
95
+
96
+ $popupId = @(int)$_POST['post_ID'];
97
+ $postStatus = get_post_status($popupId);
98
+ if($postStatus == 'publish') {
99
+ wp_die('');
100
+ }
101
+
102
+ if(!isset($_POST['allPopupData'])) {
103
+ wp_die(true);
104
+ }
105
+ $popupData = SGPopup::parsePopupDataFromData($_POST['allPopupData']);
106
+ do_action('save_post_popupbuilder');
107
+ $popupType = $popupData['sgpb-type'];
108
+ $popupClassName = SGPopup::getPopupClassNameFormType($popupType);
109
+ $popupClassPath = SGPopup::getPopupTypeClassPath($popupType);
110
+ if(file_exists($popupClassPath.$popupClassName.'.php')) {
111
+ require_once($popupClassPath.$popupClassName.'.php');
112
+ $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
113
+ $popupClassName::create($popupData, '_preview', 1);
114
+ }
115
+
116
+ wp_die();
117
+ }
118
+
119
+ public function dontShowReviewPopup()
120
+ {
121
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
122
+ update_option('SGPBCloseReviewPopup-notification', true);
123
+ do_action('sgpbGetNotifications');
124
+ wp_die();
125
+ }
126
+
127
+ public function changeReviewPopupPeriod()
128
+ {
129
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
130
+ $messageType = sanitize_text_field($_POST['messageType']);
131
+
132
+ if($messageType == 'count') {
133
+ $maxPopupCount = get_option('SGPBMaxOpenCount');
134
+ if(!$maxPopupCount) {
135
+ $maxPopupCount = SGPB_ASK_REVIEW_POPUP_COUNT;
136
+ }
137
+ $maxPopupData = AdminHelper::getMaxOpenPopupId();
138
+ if(!empty($maxPopupData['maxCount'])) {
139
+ $maxPopupCount = $maxPopupData['maxCount'];
140
+ }
141
+
142
+ $maxPopupCount += SGPB_ASK_REVIEW_POPUP_COUNT;
143
+ update_option('SGPBMaxOpenCount', $maxPopupCount);
144
+ wp_die();
145
+ }
146
+
147
+ $popupTimeZone = get_option('timezone_string');
148
+ if(!$popupTimeZone) {
149
+ $popupTimeZone = SG_POPUP_DEFAULT_TIME_ZONE;
150
+ }
151
+ $timeDate = new \DateTime('now', new \DateTimeZone($popupTimeZone));
152
+ $timeDate->modify('+'.SGPB_REVIEW_POPUP_PERIOD.' day');
153
+
154
+ $timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
155
+ update_option('SGPBOpenNextTime', $timeNow);
156
+ $usageDays = get_option('SGPBUsageDays');
157
+ $usageDays += SGPB_REVIEW_POPUP_PERIOD;
158
+ update_option('SGPBUsageDays', $usageDays);
159
+ wp_die();
160
+ }
161
+
162
+ public function resetPopupOpeningCount()
163
+ {
164
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
165
+
166
+ global $wpdb;
167
+
168
+ $tableName = $wpdb->prefix.'sgpb_analytics';
169
+ $popupId = (int)$_POST['popupId'];
170
+ $allPopupsCount = get_option('SgpbCounter');
171
+ if($wpdb->get_var("SHOW TABLES LIKE '$tableName'") == $tableName) {
172
+ SGPopup::deleteAnalyticsDataByPopupId($popupId);
173
+ }
174
+ if(empty($allPopupsCount)) {
175
+ echo SGPB_AJAX_STATUS_FALSE;
176
+ wp_die();
177
+ }
178
+ if(isset($allPopupsCount[$popupId])) {
179
+ $allPopupsCount[$popupId] = 0;
180
+ }
181
+
182
+ // 7, 12, 13 => exclude close, subscription success, contact success events
183
+ $stmt = $wpdb->prepare(' DELETE FROM '.$wpdb->prefix.'sgpb_analytics WHERE target_id = %d AND event_id NOT IN (7, 12, 13)', $popupId);
184
+ $popupAnalyticsData = $wpdb->get_var($stmt);
185
+
186
+ update_option('SgpbCounter', $allPopupsCount);
187
+
188
+ }
189
+
190
+ public function dontShowAskReviewBanner()
191
+ {
192
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
193
+ update_option('sgpbDontShowAskReviewBanner', 1);
194
+ echo SGPB_AJAX_STATUS_TRUE;
195
+ wp_die();
196
+ }
197
+
198
+ public function dontShowProblemAlert()
199
+ {
200
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
201
+ update_option('sgpb_alert_problems', 1);
202
+ echo SGPB_AJAX_STATUS_TRUE;
203
+ wp_die();
204
+ }
205
+
206
+ public function extensionNotificationPanel()
207
+ {
208
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
209
+ update_option('sgpb_extensions_updated', 1);
210
+ echo SGPB_AJAX_STATUS_TRUE;
211
+ wp_die();
212
+ }
213
+
214
+ public function closeMainRateUsBanner()
215
+ {
216
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
217
+ update_option('sgpb-hide-support-banner', 1);
218
+ do_action('sgpbGetNotifications');
219
+ wp_die();
220
+ }
221
+
222
+ public function closeLicenseNoticeBanner()
223
+ {
224
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
225
+ update_option('sgpb-hide-license-notice-banner', 1);
226
+ wp_die();
227
+ }
228
+
229
+ public function addToCounter()
230
+ {
231
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
232
+
233
+ if(isset($_GET['sg_popup_preview_id']) && !isset($_POST['params'])) {
234
+ wp_die(0);
235
+ }
236
+
237
+ /* Sanitizing multidimensional array */
238
+ $popupParams = $_POST['params'];
239
+ array_walk($popupParams, 'sanitize_text_field');
240
+
241
+ $popupsIdCollection = is_array($popupParams['popupsIdCollection']) ? $popupParams['popupsIdCollection'] : array();
242
+ $popupsCounterData = get_option('SgpbCounter');
243
+
244
+ if($popupsCounterData === false) {
245
+ $popupsCounterData = array();
246
+ }
247
+
248
+ foreach($popupsIdCollection as $popupId => $popupCount) {
249
+ if(empty($popupsCounterData[$popupId])) {
250
+ $popupsCounterData[$popupId] = 0;
251
+ }
252
+ $popupsCounterData[$popupId] += $popupCount;
253
+ }
254
+
255
+ update_option('SgpbCounter', $popupsCounterData);
256
+ wp_die(1);
257
+ }
258
+
259
+ public function deleteSubscribers()
260
+ {
261
+ global $wpdb;
262
+
263
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
264
+
265
+ $subscribersId = array_map('sanitize_text_field', $_POST['subscribersId']);
266
+
267
+ foreach($subscribersId as $subscriberId) {
268
+ $prepareSql = $wpdb->prepare('DELETE FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE id = %d', $subscriberId);
269
+ $wpdb->query($prepareSql);
270
+ }
271
+ }
272
+
273
+ public function addSubscribers()
274
+ {
275
+ global $wpdb;
276
+
277
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
278
+ $status = SGPB_AJAX_STATUS_FALSE;
279
+ $firstName = sanitize_text_field($_POST['firstName']);
280
+ $lastName = sanitize_text_field($_POST['lastName']);
281
+ $email = sanitize_text_field($_POST['email']);
282
+ $date = date('Y-m-d');
283
+ $subscriptionPopupsId = array_map('sanitize_text_field', $_POST['popups']);
284
+
285
+ foreach($subscriptionPopupsId as $subscriptionPopupId) {
286
+ $selectSql = $wpdb->prepare('SELECT id FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE email = %s AND subscriptionType = %d', $email, $subscriptionPopupId);
287
+ $res = $wpdb->get_row($selectSql, ARRAY_A);
288
+ // add new subscriber
289
+ if(empty($res)) {
290
+ $sql = $wpdb->prepare('INSERT INTO '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' (firstName, lastName, email, cDate, subscriptionType) VALUES (%s, %s, %s, %s, %d) ', $firstName, $lastName, $email, $date, $subscriptionPopupId);
291
+ $res = $wpdb->query($sql);
292
+ } // edit existing
293
+ else {
294
+ $sql = $wpdb->prepare('UPDATE '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' SET firstName = %s, lastName = %s, email = %s, cDate = %s, subscriptionType = %d, unsubscribered = 0 WHERE id = %d', $firstName, $lastName, $email, $date, $subscriptionPopupId, $res['id']);
295
+ $wpdb->query($sql);
296
+ $res = 1;
297
+ }
298
+
299
+ if($res) {
300
+ $status = SGPB_AJAX_STATUS_TRUE;
301
+ }
302
+ }
303
+
304
+ echo $status;
305
+ wp_die();
306
+ }
307
+
308
+ public function importSubscribers()
309
+ {
310
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
311
+ $formId = (int)sanitize_text_field($_POST['popupSubscriptionList']);
312
+ $fileURL = sanitize_text_field($_POST['importListURL']);
313
+ ob_start();
314
+ require_once SG_POPUP_VIEWS_PATH.'importConfigView.php';
315
+ $content = ob_get_contents();
316
+ ob_end_clean();
317
+
318
+ echo $content;
319
+ wp_die();
320
+ }
321
+
322
+ public function importSettings()
323
+ {
324
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
325
+ ob_start();
326
+ require_once SG_POPUP_VIEWS_PATH.'importPopupsView.php';
327
+ $content = ob_get_contents();
328
+ ob_end_clean();
329
+
330
+ echo $content;
331
+ wp_die();
332
+ }
333
+
334
+ public function saveImportedSubscribers()
335
+ {
336
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
337
+ @ini_set('auto_detect_line_endings', '1');
338
+ $formId = (int)sanitize_text_field($_POST['popupSubscriptionList']);
339
+ $fileURL = sanitize_text_field($_POST['importListURL']);
340
+ $mapping = $_POST['namesMapping'];
341
+
342
+ $fileContent = AdminHelper::getFileFromURL($fileURL);
343
+ $csvFileArray = array_map('str_getcsv', file($fileURL));
344
+
345
+ $header = $csvFileArray[0];
346
+ unset($csvFileArray[0]);
347
+ $subscriptionPlusContent = apply_filters('sgpbImportToSubscriptionList', $csvFileArray, $mapping, $formId);
348
+
349
+ // -1 it's mean saved from Subscription Plus
350
+ if($subscriptionPlusContent != -1) {
351
+ foreach($csvFileArray as $csvData) {
352
+ global $wpdb;
353
+ $subscribersTableName = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
354
+ $sql = $wpdb->prepare('SELECT submittedData FROM '.$subscribersTableName);
355
+ if(!empty($mapping['date'])) {
356
+ $date = $csvData[$mapping['date']];
357
+ $date = date('Y-m-d', strtotime($date));
358
+ }
359
+ if($sql) {
360
+ $sql = $wpdb->prepare('INSERT INTO '.$subscribersTableName.' (firstName, lastName, email, cDate, subscriptionType, status, unsubscribed) VALUES (%s, %s, %s, %s, %d, %d, %d) ', $csvData[$mapping['firstName']], $csvData[$mapping['lastName']], $csvData[$mapping['email']], $date, $formId, 0, 0);
361
+ } else {
362
+ $sql = $wpdb->prepare('INSERT INTO '.$subscribersTableName.' (firstName, lastName, email, cDate, subscriptionType, status, unsubscribed, submittedData) VALUES (%s, %s, %s, %s, %d, %d, %d, %s) ', $csvData[$mapping['firstName']], $csvData[$mapping['lastName']], $csvData[$mapping['email']], $csvData[$mapping['date']], $formId, 0, 0, '');
363
+ }
364
+
365
+ $wpdb->query($sql);
366
+ }
367
+ }
368
+
369
+ echo SGPB_AJAX_STATUS_TRUE;
370
+ wp_die();
371
+ }
372
+
373
+ public function sendNewsletter()
374
+ {
375
+ $allowToAction = AdminHelper::userCanAccessTo();
376
+ if(!$allowToAction) {
377
+ wp_redirect(get_home_url());
378
+ exit();
379
+ }
380
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
381
+ global $wpdb;
382
+
383
+ $newsletterData = stripslashes_deep($_POST['newsletterData']);
384
+ if(isset($newsletterData['testSendingStatus']) && $newsletterData['testSendingStatus'] == 'test') {
385
+ AdminHelper::sendTestNewsletter($newsletterData);
386
+ }
387
+ $subscriptionFormId = (int)$newsletterData['subscriptionFormId'];
388
+
389
+ $updateStatusQuery = $wpdb->prepare('UPDATE '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' SET status = 0 WHERE subscriptionType = %d', $subscriptionFormId);
390
+ $wpdb->query($updateStatusQuery);
391
+ $newsletterData['blogname'] = get_bloginfo('name');
392
+ $newsletterData['username'] = wp_get_current_user()->user_login;
393
+ update_option('SGPB_NEWSLETTER_DATA', $newsletterData);
394
+
395
+ wp_schedule_event(time(), 'sgpb_newsletter_send_every_minute', 'sgpb_send_newsletter');
396
+ wp_die();
397
+ }
398
+
399
+ // proStartGold
400
+ public function checkSameOrigin()
401
+ {
402
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
403
+
404
+ $url = esc_url($_POST['iframeUrl']);
405
+ $status = SGPB_AJAX_STATUS_FALSE;
406
+
407
+ $remoteGet = wp_remote_get($url);
408
+
409
+ if(is_array($remoteGet) && !empty($remoteGet['headers']['x-frame-options'])) {
410
+ $siteUrl = esc_url($_POST['siteUrl']);
411
+ $xFrameOptions = $remoteGet['headers']['x-frame-options'];
412
+ $mayNotShow = false;
413
+
414
+ if($xFrameOptions == 'deny') {
415
+ $mayNotShow = true;
416
+ } else if($xFrameOptions == 'SAMEORIGIN') {
417
+ if(strpos($url, $siteUrl) === false) {
418
+ $mayNotShow = true;
419
+ }
420
+ } else {
421
+ if(strpos($xFrameOptions, $siteUrl) === false) {
422
+ $mayNotShow = true;;
423
+ }
424
+ }
425
+
426
+ if($mayNotShow) {
427
+ echo $status;
428
+ wp_die();
429
+ }
430
+ }
431
+
432
+ // $remoteGet['response']['code'] < 400 it's mean correct status
433
+ if(is_array($remoteGet) && isset($remoteGet['response']['code']) && $remoteGet['response']['code'] < 400) {
434
+ $status = SGPB_AJAX_STATUS_TRUE;
435
+ }
436
+
437
+ echo $status;
438
+ wp_die();
439
+ }
440
+
441
+ // proEndGold
442
+
443
+ public function changePopupStatus()
444
+ {
445
+ $popupId = (int)$_POST['popupId'];
446
+ $obj = SGPopup::find($popupId);
447
+ $isDraft = '';
448
+ $postStatus = get_post_status($popupId);
449
+ if($postStatus == 'draft') {
450
+ $isDraft = '_preview';
451
+ }
452
+
453
+ if(!$obj || !is_object($obj)) {
454
+ wp_die(SGPB_AJAX_STATUS_FALSE);
455
+ }
456
+ $options = $obj->getOptions();
457
+ $options['sgpb-is-active'] = sanitize_text_field($_POST['popupStatus']);
458
+
459
+ unset($options['sgpb-conditions']);
460
+ update_post_meta($popupId, 'sg_popup_options'.$isDraft, $options);
461
+
462
+ wp_die($popupId);
463
+ }
464
+
465
+ public function subscriptionSubmission()
466
+ {
467
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
468
+ $this->setPostData($_POST);
469
+ $submissionData = $this->getValueFromPost('formData');
470
+ $popupPostId = (int)$this->getValueFromPost('popupPostId');
471
+
472
+ parse_str($submissionData, $formData);
473
+
474
+ if(empty($formData)) {
475
+ echo SGPB_AJAX_STATUS_FALSE;
476
+ wp_die();
477
+ }
478
+
479
+ $hiddenChecker = sanitize_text_field($formData['sgpb-subs-hidden-checker']);
480
+
481
+ // this check is made to protect ourselves from bot
482
+ if(!empty($hiddenChecker)) {
483
+ echo 'Bot';
484
+ wp_die();
485
+ }
486
+ global $wpdb;
487
+
488
+ $status = SGPB_AJAX_STATUS_FALSE;
489
+ $date = date('Y-m-d');
490
+ $email = sanitize_email($formData['sgpb-subs-email']);
491
+ $firstName = sanitize_text_field($formData['sgpb-subs-first-name']);
492
+ $lastName = sanitize_text_field($formData['sgpb-subs-last-name']);
493
+
494
+ $subscribersTableName = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
495
+
496
+ $getSubscriberQuery = $wpdb->prepare('SELECT id FROM '.$subscribersTableName.' WHERE email = %s AND subscriptionType = %d', $email, $popupPostId);
497
+ $list = $wpdb->get_row($getSubscriberQuery, ARRAY_A);
498
+
499
+ // When subscriber does not exist we insert to subscribers table otherwise we update user info
500
+ if(empty($list['id'])) {
501
+ $sql = $wpdb->prepare('INSERT INTO '.$subscribersTableName.' (firstName, lastName, email, cDate, subscriptionType) VALUES (%s, %s, %s, %s, %d) ', $firstName, $lastName, $email, $date, $popupPostId);
502
+ $res = $wpdb->query($sql);
503
+ } else {
504
+ $sql = $wpdb->prepare('UPDATE '.$subscribersTableName.' SET firstName = %s, lastName = %s, email = %s, cDate = %s, subscriptionType = %d WHERE id = %d', $firstName, $lastName, $email, $date, $popupPostId, $list['id']);
505
+ $wpdb->query($sql);
506
+ $res = 1;
507
+ }
508
+ if($res) {
509
+ $status = SGPB_AJAX_STATUS_TRUE;
510
+ }
511
+
512
+ echo $status;
513
+ wp_die();
514
+ }
515
+
516
+ public function sgpbSubsciptionFormSubmittedAction()
517
+ {
518
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
519
+ $this->setPostData($_POST);
520
+
521
+ $submissionData = $this->getValueFromPost('formData');
522
+ $popupPostId = (int)$this->getValueFromPost('popupPostId');
523
+ parse_str($submissionData, $formData);
524
+ if(empty($_POST)) {
525
+ echo SGPB_AJAX_STATUS_FALSE;
526
+ wp_die();
527
+ }
528
+ $email = sanitize_email($_POST['emailValue']);
529
+ $firstName = sanitize_text_field($_POST['firstNameValue']);
530
+ $lastName = sanitize_text_field($_POST['lastNameValue']);
531
+ $userData = array(
532
+ 'email' => $email,
533
+ 'firstName' => $firstName,
534
+ 'lastName' => $lastName
535
+ );
536
+ $this->sendSuccessEmails($popupPostId, $userData);
537
+ do_action('sgpbProcessAfterSuccessfulSubmission', $popupPostId, $userData);
538
+ }
539
+
540
+ public function sendSuccessEmails($popupPostId, $subscriptionDetails)
541
+ {
542
+ global $wpdb;
543
+ $popup = SGPopup::find($popupPostId);
544
+
545
+ if(!is_object($popup)) {
546
+ return false;
547
+ }
548
+ $subscribersTableName = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
549
+
550
+ $getSubscriberCountQuery = $wpdb->prepare('SELECT COUNT(id) as countIds FROM '.$subscribersTableName.' WHERE subscriptionType = %d', $popupPostId);
551
+ $count = $wpdb->get_row($getSubscriberCountQuery, ARRAY_A);
552
+
553
+ $popupOptions = $popup->getOptions();
554
+ $adminUserName = 'admin';
555
+
556
+ $adminEmail = get_option('admin_email');
557
+ $userData = @get_user_by('email', $adminEmail);
558
+
559
+ if(!empty($userData)) {
560
+ $adminUserName = $userData->display_name;
561
+ }
562
+
563
+ $newSubscriberEmailHeader = AdminHelper::getEmailHeader($adminEmail);
564
+ $takeReviewAfterFirstSubscription = get_option('sgpb-new-subscriber');
565
+
566
+ if($count['countIds'] == 1 && !$takeReviewAfterFirstSubscription) {
567
+ // take review
568
+ update_option('sgpb-new-subscriber', 1);
569
+ $newSubscriberEmailTitle = __('Congrats! You have already 1 subscriber!', SG_POPUP_TEXT_DOMAIN);
570
+ $reviewEmailTemplate = AdminHelper::getFileFromURL(SG_POPUP_EMAIL_TEMPLATES_URL.'takeReviewAfterSubscribe.html');
571
+ $reviewEmailTemplate = preg_replace('/\[adminUserName]/', $adminUserName, $reviewEmailTemplate);
572
+ $sendStatus = wp_mail($adminEmail, $newSubscriberEmailTitle, $reviewEmailTemplate, $newSubscriberEmailHeader); //return true or false
573
+ }
574
+ }
575
+
576
+ public function select2SearchData()
577
+ {
578
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce_ajax');
579
+
580
+ $postTypeName = sanitize_text_field($_POST['searchKey']);
581
+ $search = sanitize_text_field($_POST['searchTerm']);
582
+ $searchResults = $this->selectFromPost($postTypeName, $search);
583
+
584
+ if(isset($_POST['searchCallback'])) {
585
+ $searchCallback = sanitize_text_field($_POST['searchCallback']);
586
+ $searchResults = apply_filters('sgpbSearchAdditionalData', $search, array());
587
+ }
588
+
589
+ if(empty($searchResults)) {
590
+ $results['items'] = array();
591
+ }
592
+
593
+ /*Selected custom post type convert for select2 format*/
594
+ foreach($searchResults as $id => $name) {
595
+ $results['items'][] = array(
596
+ 'id' => $id,
597
+ 'text' => $name
598
+ );
599
+ }
600
+
601
+ echo json_encode($results);
602
+ wp_die();
603
+ }
604
+
605
+ private function selectFromPost($postTypeName, $search)
606
+ {
607
+ $args = array(
608
+ 's' => $search,
609
+ 'post__in' => !empty($_REQUEST['include']) ? array_map('intval', $_REQUEST['include']) : null,
610
+ 'page' => !empty($_REQUEST['page']) ? absint($_REQUEST['page']) : null,
611
+ 'posts_per_page' => 100,
612
+ 'post_type' => $postTypeName
613
+ );
614
+ $searchResults = ConfigDataHelper::getPostTypeData($args);
615
+
616
+ return $searchResults;
617
+ }
618
+
619
+ public function addConditionGroupRow()
620
+ {
621
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce_ajax');
622
+ global $SGPB_DATA_CONFIG_ARRAY;
623
+
624
+ $groupId = (int)$_POST['groupId'];
625
+ $targetType = sanitize_text_field($_POST['conditionName']);
626
+ $addedObj = array();
627
+
628
+ $builderObj = new ConditionBuilder();
629
+
630
+ $builderObj->setGroupId($groupId);
631
+ $builderObj->setRuleId(SG_CONDITION_FIRST_RULE);
632
+ $builderObj->setSavedData($SGPB_DATA_CONFIG_ARRAY[$targetType]['initialData'][0]);
633
+ $builderObj->setConditionName($targetType);
634
+ $addedObj[] = $builderObj;
635
+
636
+ $creator = new ConditionCreator($addedObj);
637
+ echo $creator->render();
638
+ wp_die();
639
+ }
640
+
641
+ public function addConditionRuleRow()
642
+ {
643
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce_ajax');
644
+ $data = '';
645
+ global $SGPB_DATA_CONFIG_ARRAY;
646
+ $targetType = sanitize_text_field($_POST['conditionName']);
647
+ $builderObj = new ConditionBuilder();
648
+
649
+ $groupId = (int)$_POST['groupId'];
650
+ $ruleId = (int)$_POST['ruleId'];
651
+
652
+ $builderObj->setGroupId($groupId);
653
+ $builderObj->setRuleId($ruleId);
654
+ $builderObj->setSavedData($SGPB_DATA_CONFIG_ARRAY[$targetType]['initialData'][0]);
655
+ $builderObj->setConditionName($targetType);
656
+
657
+ $data .= ConditionCreator::createConditionRuleRow($builderObj);
658
+
659
+ echo $data;
660
+ wp_die();
661
+ }
662
+
663
+ public function changeConditionRuleRow()
664
+ {
665
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce_ajax');
666
+ $data = '';
667
+ global $SGPB_DATA_CONFIG_ARRAY;
668
+
669
+ $targetType = sanitize_text_field($_POST['conditionName']);
670
+ $builderObj = new ConditionBuilder();
671
+ $conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$targetType];
672
+ $groupId = (int)$_POST['groupId'];
673
+ $ruleId = (int)$_POST['ruleId'];
674
+ $popupId = (int)$_POST['popupId'];
675
+ $paramName = sanitize_text_field($_POST['paramName']);
676
+
677
+ $savedData = array(
678
+ 'param' => $paramName
679
+ );
680
+
681
+ if($targetType == 'target' || $targetType == 'conditions') {
682
+ $savedData['operator'] = '==';
683
+ } else if($conditionConfig['specialDefaultOperator']) {
684
+ $savedData['operator'] = $paramName;
685
+ }
686
+
687
+ if(!empty($_POST['paramValue'])) {
688
+ $savedData['tempParam'] = sanitize_text_field($_POST['paramValue']);
689
+ $savedData['operator'] = $paramName;
690
+ }
691
+ // change operator value related to condition value
692
+ if(!empty($conditionConfig['operatorAllowInConditions']) && in_array($paramName, $conditionConfig['operatorAllowInConditions'])) {
693
+ $conditionConfig['paramsData']['operator'] = array();
694
+
695
+ if(!empty($conditionConfig['paramsData'][$paramName.'Operator'])) {
696
+ $operatorData = $conditionConfig['paramsData'][$paramName.'Operator'];
697
+ $SGPB_DATA_CONFIG_ARRAY[$targetType]['paramsData']['operator'] = $operatorData;
698
+ // change take value related to condition value
699
+ $operatorDataKeys = array_keys($operatorData);
700
+ if(!empty($operatorDataKeys[0])) {
701
+ $savedData['operator'] = $operatorDataKeys[0];
702
+ $builderObj->setTakeValueFrom('operator');
703
+ }
704
+ }
705
+ }
706
+ // by default set empty value for users' role (adv. tar.)
707
+ $savedData['value'] = array();
708
+ $savedData['hiddenOption'] = @$conditionConfig['hiddenOptionData'][$paramName];
709
+
710
+ $builderObj->setPopupId($popupId);
711
+ $builderObj->setGroupId($groupId);
712
+ $builderObj->setRuleId($ruleId);
713
+ $builderObj->setSavedData($savedData);
714
+ $builderObj->setConditionName($targetType);
715
+
716
+ $data .= ConditionCreator::createConditionRuleRow($builderObj);
717
+
718
+ echo $data;
719
+ wp_die();
720
+ }
721
+ }
com/classes/ConditionBuilder.php CHANGED
@@ -1,246 +1,246 @@
1
- <?php
2
- namespace sgpb;
3
-
4
- class ConditionBuilder
5
- {
6
- private $savedData = array();
7
- private $groupId = 0;
8
- private $ruleId = 0;
9
- private $conditionName;
10
- private $groupTotal;
11
- private $popupId;
12
- private $takeValueFrom = 'param';
13
-
14
- public function setSavedData($savedData)
15
- {
16
- $this->savedData = $savedData;
17
- }
18
-
19
- public function getSavedData()
20
- {
21
- return $this->savedData;
22
- }
23
-
24
- public function setGroupTotal($groupTotal)
25
- {
26
- $this->groupTotal = $groupTotal;
27
- }
28
-
29
- public function getGroupTotal()
30
- {
31
- return $this->groupTotal;
32
- }
33
-
34
- public function setPopupId($popupId)
35
- {
36
- $this->popupId = $popupId;
37
- }
38
-
39
- public function getPopupId()
40
- {
41
- return $this->popupId;
42
- }
43
-
44
- public function setGroupId($groupId)
45
- {
46
- $this->groupId = $groupId;
47
- }
48
-
49
- public function getGroupId()
50
- {
51
- return $this->groupId;
52
- }
53
-
54
- public function setRuleId($ruleId)
55
- {
56
- $this->ruleId = $ruleId;
57
- }
58
-
59
- public function getRuleId()
60
- {
61
- return $this->ruleId;
62
- }
63
-
64
- public function setTakeValueFrom($takeValueFrom)
65
- {
66
- $this->takeValueFrom = $takeValueFrom;
67
- }
68
-
69
- public function getTakeValueFrom()
70
- {
71
- return $this->takeValueFrom;
72
- }
73
-
74
- public function setConditionName($conditionName)
75
- {
76
- $this->conditionName = $conditionName;
77
- }
78
-
79
- public function getConditionName()
80
- {
81
- return $this->conditionName;
82
- }
83
-
84
- public static function createTargetConditionBuilder($conditionData = array())
85
- {
86
- $targetColumns = array();
87
-
88
- if(empty($conditionData)) {
89
- return $targetColumns;
90
- }
91
-
92
- foreach($conditionData as $groupId => $groupData) {
93
-
94
- if(empty($groupData)) {
95
- continue;
96
- }
97
-
98
- foreach($groupData as $ruleId => $ruleData) {
99
- $builderObj = new ConditionBuilder();
100
- $builderObj->setGroupId($groupId);
101
- $builderObj->setRuleId($ruleId);
102
- /*Assoc array where key option name value saved Data*/
103
- $builderObj->setSavedData($ruleData);
104
- $builderObj->setConditionName('target');
105
- $builderObj->setGroupTotal(sizeof($groupData) - 1);
106
- $targetColumns[] = $builderObj;
107
- }
108
- }
109
-
110
- return $targetColumns;
111
- }
112
-
113
- public static function createEventsConditionBuilder($conditionData)
114
- {
115
- $eventsDataObj = array();
116
-
117
- if(empty($conditionData)) {
118
- return $eventsDataObj;
119
- }
120
-
121
- foreach($conditionData as $groupId => $groupData) {
122
-
123
- if(empty($groupData) || !is_array($groupData)) {
124
- continue;
125
- }
126
- global $SGPB_DATA_CONFIG_ARRAY;
127
- $eventsData = $SGPB_DATA_CONFIG_ARRAY['events']['operatorAllowInConditions'];
128
- foreach($groupData as $ruleId => $ruleData) {
129
- $builderObj = new ConditionBuilder();
130
- $builderObj->setGroupId($groupId);
131
- $builderObj->setRuleId($ruleId);
132
- /*Assoc array where key option name value saved Data*/
133
- $builderObj->setSavedData($ruleData);
134
- $builderObj->setConditionName('events');
135
-
136
- // in some cases value data must take from operator
137
- if (is_array($eventsData) && in_array($ruleData['param'], $eventsData)) {
138
- $builderObj->setTakeValueFrom('operator');
139
- }
140
-
141
- $builderObj->setGroupTotal(sizeof($groupData) - 1);
142
- $eventsDataObj[] = $builderObj;
143
- }
144
- }
145
-
146
- return $eventsDataObj;
147
- }
148
-
149
- public static function createConditionBuilder($conditionData)
150
- {
151
- $eventsDataObj = array();
152
-
153
- if(empty($conditionData)) {
154
- return $eventsDataObj;
155
- }
156
-
157
- foreach($conditionData as $groupId => $groupData) {
158
-
159
- if(empty($groupData) || !is_array($groupData)) {
160
- continue;
161
- }
162
-
163
- foreach($groupData as $ruleId => $ruleData) {
164
- $builderObj = new ConditionBuilder();
165
- $builderObj->setGroupId($groupId);
166
- $builderObj->setRuleId($ruleId);
167
- /*Assoc array where key option name value saved Data*/
168
- $builderObj->setSavedData($ruleData);
169
- $builderObj->setConditionName('conditions');
170
-
171
- $builderObj->setGroupTotal(sizeof($groupData) - 1);
172
- $eventsDataObj[] = $builderObj;
173
- }
174
- }
175
-
176
- return $eventsDataObj;
177
- }
178
-
179
- public static function createBehaviorAfterSpecialEventsConditionBuilder($data)
180
- {
181
- $dataObj = array();
182
-
183
- if (empty($data)) {
184
- return $dataObj;
185
- }
186
-
187
- foreach ($data as $groupId => $groupData) {
188
- if (empty($groupData)) {
189
- continue;
190
- }
191
-
192
- foreach ($groupData as $ruleId => $ruleData) {
193
- $builderObj = new ConditionBuilder();
194
- $builderObj->setGroupId($groupId);
195
- $builderObj->setRuleId($ruleId);
196
- $builderObj->setSavedData($ruleData);
197
- $builderObj->setConditionName('behavior-after-special-events');
198
- $builderObj->setGroupTotal(count($groupData) - 1);
199
- $builderObj->setTakeValueFrom('operator');
200
- $dataObj[] = $builderObj;
201
- }
202
- }
203
-
204
- return $dataObj;
205
- }
206
-
207
- public static function additionalConditionBuilder()
208
- {
209
- $dataObj = apply_filters('sgpbAdditionalConditionBuilder', array());
210
-
211
- if (empty($dataObj)) {
212
- return array();
213
- }
214
- $allCondition = array();
215
- $result = array();
216
-
217
- foreach ($dataObj as $data) {
218
- if (empty($data['conditionName'])) {
219
- continue;
220
- }
221
- $conditionName = $data['conditionName'];
222
- unset($data['conditionName']);
223
-
224
- foreach ($data as $groupId => $groupData) {
225
-
226
- if (empty($groupData)) {
227
- continue;
228
- }
229
-
230
- foreach ($groupData as $ruleId => $ruleData) {
231
-
232
- $builderObj = new ConditionBuilder();
233
- $builderObj->setGroupId(0);
234
- $builderObj->setRuleId($ruleId);
235
- $builderObj->setSavedData($ruleData);
236
- $builderObj->setConditionName($conditionName);
237
- $builderObj->setGroupTotal(count($groupData) - 1);
238
- $allCondition[] = $builderObj;
239
- }
240
- }
241
- $result[$conditionName] = $allCondition;
242
- }
243
-
244
- return $result;
245
- }
246
- }
1
+ <?php
2
+ namespace sgpb;
3
+
4
+ class ConditionBuilder
5
+ {
6
+ private $savedData = array();
7
+ private $groupId = 0;
8
+ private $ruleId = 0;
9
+ private $conditionName;
10
+ private $groupTotal;
11
+ private $popupId;
12
+ private $takeValueFrom = 'param';
13
+
14
+ public function setSavedData($savedData)
15
+ {
16
+ $this->savedData = $savedData;
17
+ }
18
+
19
+ public function getSavedData()
20
+ {
21
+ return $this->savedData;
22
+ }
23
+
24
+ public function setGroupTotal($groupTotal)
25
+ {
26
+ $this->groupTotal = $groupTotal;
27
+ }
28
+
29
+ public function getGroupTotal()
30
+ {
31
+ return $this->groupTotal;
32
+ }
33
+
34
+ public function setPopupId($popupId)
35
+ {
36
+ $this->popupId = $popupId;
37
+ }
38
+
39
+ public function getPopupId()
40
+ {
41
+ return $this->popupId;
42
+ }
43
+
44
+ public function setGroupId($groupId)
45
+ {
46
+ $this->groupId = $groupId;
47
+ }
48
+
49
+ public function getGroupId()
50
+ {
51
+ return $this->groupId;
52
+ }
53
+
54
+ public function setRuleId($ruleId)
55
+ {
56
+ $this->ruleId = $ruleId;
57
+ }
58
+
59
+ public function getRuleId()
60
+ {
61
+ return $this->ruleId;
62
+ }
63
+
64
+ public function setTakeValueFrom($takeValueFrom)
65
+ {
66
+ $this->takeValueFrom = $takeValueFrom;
67
+ }
68
+
69
+ public function getTakeValueFrom()
70
+ {
71
+ return $this->takeValueFrom;
72
+ }
73
+
74
+ public function setConditionName($conditionName)
75
+ {
76
+ $this->conditionName = $conditionName;
77
+ }
78
+
79
+ public function getConditionName()
80
+ {
81
+ return $this->conditionName;
82
+ }
83
+
84
+ public static function createTargetConditionBuilder($conditionData = array())
85
+ {
86
+ $targetColumns = array();
87
+
88
+ if(empty($conditionData)) {
89
+ return $targetColumns;
90
+ }
91
+
92
+ foreach($conditionData as $groupId => $groupData) {
93
+
94
+ if(empty($groupData)) {
95
+ continue;
96
+ }
97
+
98
+ foreach($groupData as $ruleId => $ruleData) {
99
+ $builderObj = new ConditionBuilder();
100
+ $builderObj->setGroupId($groupId);
101
+ $builderObj->setRuleId($ruleId);
102
+ /*Assoc array where key option name value saved Data*/
103
+ $builderObj->setSavedData($ruleData);
104
+ $builderObj->setConditionName('target');
105
+ $builderObj->setGroupTotal(sizeof($groupData) - 1);
106
+ $targetColumns[] = $builderObj;
107
+ }
108
+ }
109
+
110
+ return $targetColumns;
111
+ }
112
+
113
+ public static function createEventsConditionBuilder($conditionData)
114
+ {
115
+ $eventsDataObj = array();
116
+
117
+ if(empty($conditionData)) {
118
+ return $eventsDataObj;
119
+ }
120
+
121
+ foreach($conditionData as $groupId => $groupData) {
122
+
123
+ if(empty($groupData) || !is_array($groupData)) {
124
+ continue;
125
+ }
126
+ global $SGPB_DATA_CONFIG_ARRAY;
127
+ $eventsData = $SGPB_DATA_CONFIG_ARRAY['events']['operatorAllowInConditions'];
128
+ foreach($groupData as $ruleId => $ruleData) {
129
+ $builderObj = new ConditionBuilder();
130
+ $builderObj->setGroupId($groupId);
131
+ $builderObj->setRuleId($ruleId);
132
+ /*Assoc array where key option name value saved Data*/
133
+ $builderObj->setSavedData($ruleData);
134
+ $builderObj->setConditionName('events');
135
+
136
+ // in some cases value data must take from operator
137
+ if (is_array($eventsData) && in_array($ruleData['param'], $eventsData)) {
138
+ $builderObj->setTakeValueFrom('operator');
139
+ }
140
+
141
+ $builderObj->setGroupTotal(sizeof($groupData) - 1);
142
+ $eventsDataObj[] = $builderObj;
143
+ }
144
+ }
145
+
146
+ return $eventsDataObj;
147
+ }
148
+
149
+ public static function createConditionBuilder($conditionData)
150
+ {
151
+ $eventsDataObj = array();
152
+
153
+ if(empty($conditionData)) {
154
+ return $eventsDataObj;
155
+ }
156
+
157
+ foreach($conditionData as $groupId => $groupData) {
158
+
159
+ if(empty($groupData) || !is_array($groupData)) {
160
+ continue;
161
+ }
162
+
163
+ foreach($groupData as $ruleId => $ruleData) {
164
+ $builderObj = new ConditionBuilder();
165
+ $builderObj->setGroupId($groupId);
166
+ $builderObj->setRuleId($ruleId);
167
+ /*Assoc array where key option name value saved Data*/
168
+ $builderObj->setSavedData($ruleData);
169
+ $builderObj->setConditionName('conditions');
170
+
171
+ $builderObj->setGroupTotal(sizeof($groupData) - 1);
172
+ $eventsDataObj[] = $builderObj;
173
+ }
174
+ }
175
+
176
+ return $eventsDataObj;
177
+ }
178
+
179
+ public static function createBehaviorAfterSpecialEventsConditionBuilder($data)
180
+ {
181
+ $dataObj = array();
182
+
183
+ if (empty($data)) {
184
+ return $dataObj;
185
+ }
186
+
187
+ foreach ($data as $groupId => $groupData) {
188
+ if (empty($groupData)) {
189
+ continue;
190
+ }
191
+
192
+ foreach ($groupData as $ruleId => $ruleData) {
193
+ $builderObj = new ConditionBuilder();
194
+ $builderObj->setGroupId($groupId);
195
+ $builderObj->setRuleId($ruleId);
196
+ $builderObj->setSavedData($ruleData);
197
+ $builderObj->setConditionName('behavior-after-special-events');
198
+ $builderObj->setGroupTotal(count($groupData) - 1);
199
+ $builderObj->setTakeValueFrom('operator');
200
+ $dataObj[] = $builderObj;
201
+ }
202
+ }
203
+
204
+ return $dataObj;
205
+ }
206
+
207
+ public static function additionalConditionBuilder()
208
+ {
209
+ $dataObj = apply_filters('sgpbAdditionalConditionBuilder', array());
210
+
211
+ if (empty($dataObj)) {
212
+ return array();
213
+ }
214
+ $allCondition = array();
215
+ $result = array();
216
+
217
+ foreach ($dataObj as $data) {
218
+ if (empty($data['conditionName'])) {
219
+ continue;
220
+ }
221
+ $conditionName = $data['conditionName'];
222
+ unset($data['conditionName']);
223
+
224
+ foreach ($data as $groupId => $groupData) {
225
+
226
+ if (empty($groupData)) {
227
+ continue;
228
+ }
229
+
230
+ foreach ($groupData as $ruleId => $ruleData) {
231
+
232
+ $builderObj = new ConditionBuilder();
233
+ $builderObj->setGroupId(0);
234
+ $builderObj->setRuleId($ruleId);
235
+ $builderObj->setSavedData($ruleData);
236
+ $builderObj->setConditionName($conditionName);
237
+ $builderObj->setGroupTotal(count($groupData) - 1);
238
+ $allCondition[] = $builderObj;
239
+ }
240
+ }
241
+ $result[$conditionName] = $allCondition;
242
+ }
243
+
244
+ return $result;
245
+ }
246
+ }
com/classes/ConditionCreator.php CHANGED
@@ -1,668 +1,668 @@
1
- <?php
2
- namespace sgpb;
3
- class ConditionCreator
4
- {
5
- public function __construct($targetData)
6
- {
7
- if (!empty($targetData)) {
8
- $this->setConditionsObj($targetData);
9
- }
10
- }
11
-
12
- private $conditionsObj;
13
- //When there is not group set groupId -1
14
- private $prevGroupId = -1;
15
-
16
- public function setPrevGroupId($prevGroupId)
17
- {
18
- $this->prevGroupId = $prevGroupId;
19
- }
20
-
21
- public function getPrevGroupId()
22
- {
23
- return $this->prevGroupId;
24
- }
25
-
26
- public function setConditionsObj($conditionsObj)
27
- {
28
- $this->conditionsObj = $conditionsObj;
29
- }
30
-
31
- public function getConditionsObj()
32
- {
33
- return $this->conditionsObj;
34
- }
35
-
36
- public function render()
37
- {
38
- $conditionsObj = $this->getConditionsObj();
39
- $view = '';
40
-
41
- if (empty($conditionsObj)) {
42
- return array();
43
- }
44
-
45
- foreach ($conditionsObj as $conditionObj) {
46
-
47
- $currentGroupId = $conditionObj->getGroupId();
48
-
49
- $prevGroupId = $this->getPrevGroupId();
50
- $openGroupDiv = '';
51
- $separator = '';
52
- $closePrevGroupDiv = '';
53
-
54
- if ($currentGroupId > $prevGroupId) {
55
- if ($currentGroupId != 0) {
56
- $closePrevGroupDiv = '</div>';
57
- $separator = ConditionCreator::getOrRuleSeparator();
58
- }
59
- $openGroupDiv = '<div class="sgpb-wrapper sgpb-box-'.$conditionObj->getConditionName().' sg-target-group sg-target-group-'.$conditionObj->getGroupId().'" data-group-id="'.$currentGroupId.'">';
60
- }
61
-
62
- $view .= $closePrevGroupDiv;
63
- $view .= $separator;
64
- $view .= $openGroupDiv;
65
- $view .= ConditionCreator::createConditionRuleRow($conditionObj);
66
-
67
- $this->setPrevGroupId($currentGroupId);
68
- }
69
-
70
- $view .= '</div>';
71
-
72
- return $view;
73
- }
74
-
75
- public static function getOrRuleSeparator()
76
- {
77
- return '<h4 class="sgpb-rules-or"><span>'.__('OR', SG_POPUP_TEXT_DOMAIN).'</span></h4>';
78
- }
79
-
80
- public static function createConditionRuleRow($conditionDataObj)
81
- {
82
- ob_start();
83
- ?>
84
- <div class="events form sg-target-rule sgpb-margin-bottom-40 sg-target-rule-<?php echo $conditionDataObj->getRuleId(); ?> sgpb-event-row" data-rule-id="<?php echo $conditionDataObj->getRuleId(); ?>">
85
- <div class="formItem sgpb-align-item-start">
86
- <?php
87
- $savedData = $conditionDataObj->getSavedData();
88
-
89
- if (!isset($savedData['value'])) {
90
- $savedData['value'] = '';
91
- }
92
- ?>
93
- <?php $idHiddenDiv = $conditionDataObj->getConditionName().'_'.$conditionDataObj->getGroupId().'_'.$conditionDataObj->getRuleId();?>
94
- <?php foreach ($savedData as $conditionName => $conditionSavedData): ?>
95
- <?php
96
- $showRowStatusClass = '';
97
- $hideStatus = self::getParamRowHideStatus($conditionDataObj, $conditionName);
98
- $ruleElementData = self::getRuleElementData($conditionDataObj, 'param');
99
- $ruleSavedData = $ruleElementData['saved'];
100
- $currentArgs = array('savedData' => $ruleSavedData, 'conditionName' => $conditionName);
101
-
102
- if (!self::allowToShowOperatorColumn($conditionDataObj, $currentArgs)) {
103
- $hideStatus = true;
104
- }
105
- $showRowStatusClass = ($hideStatus) ? 'sgpb-hide-condition-row' : $showRowStatusClass;
106
- ?>
107
- <?php if ($conditionName != 'hiddenOption'): ?>
108
- <div data-condition-name="<?php echo $conditionName;?>" class="<?php echo 'inputBlock sg-condition-'.$conditionName.'-wrapper'.' '.$showRowStatusClass; ?>">
109
- <?php
110
- if (!$hideStatus) {
111
- echo self::createConditionElement($conditionDataObj, $conditionName);
112
- }
113
- ?>
114
- </div>
115
- <?php endif; ?>
116
- <?php if (($conditionName == 'hiddenOption')): ?>
117
- <?php $hiddenContent = self::getHiddenDataContent($conditionDataObj); ?>
118
- <div class="sgpb-hide-condition-row"><div id="<?php echo $idHiddenDiv;?>"><?php echo $hiddenContent; ?></div></div>
119
- <?php endif; ?>
120
- <?php endforeach;?>
121
- <?php echo self::createConditionOperators($conditionDataObj, $idHiddenDiv); ?>
122
- </div>
123
- </div>
124
- <?php
125
- $targetOptionRow = ob_get_contents();
126
- ob_end_clean();
127
-
128
- return $targetOptionRow;
129
- }
130
-
131
- private static function allowToShowOperatorColumn($conditionDataObj, $currentArgs = array())
132
- {
133
- global $SGPB_DATA_CONFIG_ARRAY;
134
- $conditionName = $conditionDataObj->getConditionName();
135
- $conditionData = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
136
- $operatorAllowInConditions = array();
137
-
138
- if (!empty($conditionData['operatorAllowInConditions'])) {
139
- $operatorAllowInConditions = $conditionData['operatorAllowInConditions'];
140
- }
141
-
142
- $savedData = $conditionDataObj->getSavedData();
143
-
144
- $status = true;
145
-
146
- if ($currentArgs['conditionName'] == 'operator') {
147
- $currentSavedData = $currentArgs['savedData'];
148
-
149
- if (($currentSavedData == 'not_rule' || $currentSavedData == 'select_role' || $currentSavedData == 'select_event')) {
150
- $status = false;
151
- }
152
-
153
- // unset old customOperator
154
- $SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['customOperator'] = '';
155
- if (is_array($operatorAllowInConditions)) {
156
-
157
- if (in_array($savedData['param'], $operatorAllowInConditions)) {
158
- $operator = '';
159
- if (!empty($conditionData['paramsData'][$savedData['param'].'Operator'])) {
160
- $operator = $conditionData['paramsData'][$savedData['param'].'Operator'];
161
- }
162
- $SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['customOperator'] = $operator;
163
- return true;
164
- }
165
- // there is no need to show is/is not column for not specific conditions (everywhere, all posts/pages/other_custom_post_types)
166
- if (isset($savedData['param']) && !is_array($savedData['param']) && (strpos($savedData['param'], '_all') || $savedData['param'] == 'everywhere' || $savedData['param'] == 'post_tags')) {
167
- return false;
168
- }
169
- if (!empty($savedData['tempParam']) && in_array($savedData['tempParam'], $operatorAllowInConditions)) {
170
- $SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['operator'] = $conditionData['paramsData'][$savedData['tempParam'].'Operator'];
171
- }
172
- }
173
-
174
- if (empty($SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['operator'])) {
175
- $status = false;
176
- }
177
- }
178
-
179
- return $status;
180
- }
181
-
182
- public static function createConditionOperators($conditionDataObj, $idHiddenDiv = '')
183
- {
184
- global $SGPB_DATA_CONFIG_ARRAY;
185
- $groupId = $conditionDataObj->getRuleId();
186
- $groupTotal = $conditionDataObj->getGroupTotal();
187
-
188
- $conditionName = $conditionDataObj->getConditionName();
189
- $operatorsHtml = '';
190
- $conditionData = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
191
- $eventsData = $SGPB_DATA_CONFIG_ARRAY['events'];
192
-
193
- $operatorsData = $conditionData['operators'];
194
- $eventButtonClasses = '';
195
- $eventButtonWrapperClass = '';
196
- $icon = '';
197
-
198
- if (empty($operatorsData)) {
199
- return $operatorsHtml;
200
- }
201
-
202
- foreach ($operatorsData as $operator) {
203
- $identificatorClass = '';
204
- $style = '';
205
- if (!isset($eventsData['hiddenOptionData'])) {
206
- continue;
207
- }
208
- $saveData = $conditionDataObj->getSavedData();
209
- if (empty($saveData['hiddenOption']) && $operator['name'] == 'Edit' && $saveData["param"] != 'load') {
210
- continue;
211
- }
212
- if ($operator['name'] == 'Edit') {
213
- $operator['name'] = 'Settings';
214
- }
215
-
216
- if ($operator['operator'] == 'edit') {
217
- $icon = 'D';
218
- $btnClass = ' icons_gray';
219
- $identificatorClass = $idHiddenDiv;
220
- $eventButtonClasses = 'sgpb-rules-'.$operator['operator'].'-rule ';
221
- }
222
- if ($operator['operator'] == 'add') {
223
- $icon = 'L';
224
- $btnClass = ' icons_blue';
225
- $eventButtonClasses = 'sgpb-rules-'.$operator['operator'].'-rule ';
226
- //Don't show add button if it's not for last element
227
- if ($groupId < $groupTotal) {
228
- $style = 'style="display: none;"';
229
- }
230
- }
231
- if ($operator['operator'] == 'delete') {
232
- $icon = 'I';
233
- $btnClass = ' icons_pink';
234
- $eventButtonClasses = 'sgpb-rules-'.$operator['operator'].'-rule ';
235
- }
236
-
237
- $element = '<i class="sgpb-icons '.$btnClass.'" data-id="'.$identificatorClass.'">'.$icon.'</i>';
238
-
239
- $operatorsHtml .= '<div class="'.$eventButtonClasses.' sgpb-rules-'.$operator['operator'].'-button-wrapper" '.$style.'>';
240
- $operatorsHtml .= $element;
241
- $operatorsHtml .= '</div>';
242
- }
243
-
244
- return $operatorsHtml;
245
- }
246
-
247
- public static function createConditionElement($conditionDataObj, $ruleName)
248
- {
249
- //more code added because of the lack of abstraction
250
- //todo: remove ASAP if possible
251
- $sData = $conditionDataObj->getSavedData();
252
- if ($ruleName == 'param' && !empty($sData['tempParam'])) {
253
- $sData['param'] = $sData['tempParam'];
254
- $newObj = clone $conditionDataObj;
255
- $newObj->setSavedData($sData);
256
- $conditionDataObj = $newObj;
257
- }
258
-
259
- $element = '';
260
-
261
- $ruleElementData = self::getRuleElementData($conditionDataObj, $ruleName);
262
- $elementHeader = self::createRuleHeader($ruleElementData);
263
- $field = self::createRuleField($ruleElementData);
264
- $element .= $elementHeader;
265
- $element .= $field;
266
-
267
- return $element;
268
- }
269
-
270
- public static function createConditionField($conditionDataObj, $ruleName)
271
- {
272
- $ruleElementData = self::getRuleElementData($conditionDataObj, $ruleName);
273
-
274
- return self::createRuleField($ruleElementData);
275
- }
276
-
277
- public static function createConditionFieldHeader($conditionDataObj, $ruleName)
278
- {
279
- $ruleElementData = self::getRuleElementData($conditionDataObj, $ruleName);
280
-
281
- return self::createRuleHeader($ruleElementData);
282
- }
283
-
284
- public static function optionLabelSupplement($conditionDataObj, $ruleName)
285
- {
286
- global $SGPB_DATA_CONFIG_ARRAY;
287
- $conditionName = $conditionDataObj->getConditionName();
288
- $conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
289
- $attrs = $conditionConfig['attrs'][$ruleName];
290
-
291
- if (isset($attrs['infoAttrs']['rightLabel'])) {
292
- $labelData = $attrs['infoAttrs']['rightLabel'];
293
- $value = $labelData['value'];
294
- $classes = $labelData['classes'];
295
- return '<span class="'.esc_attr($classes).'">'.$value.'</span>';
296
- }
297
-
298
- return '';
299
- }
300
-
301
- private static function getRuleElementData($conditionDataObj, $ruleName = '')
302
- {
303
- global $SGPB_DATA_CONFIG_ARRAY;
304
- $ruleElementData = array();
305
- $savedParam = '';
306
- $conditionName = $conditionDataObj->getConditionName();
307
- $saveData = $conditionDataObj->getSavedData();
308
- $conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
309
- $rulesType = $conditionConfig['columnTypes'];
310
- $paramsData = $conditionConfig['paramsData'];
311
-
312
- $attrs = $conditionConfig['attrs'];
313
-
314
- if (!empty($saveData[$ruleName])) {
315
- $savedParam = $saveData[$ruleName];
316
- }
317
- else if (!empty($saveData['hiddenOption']) && isset($saveData['hiddenOption'][$ruleName])) {
318
- $savedParam = $saveData['hiddenOption'][$ruleName];
319
- }
320
-
321
- $ruleElementData['ruleName'] = $ruleName;
322
- if ($ruleName == 'value' && !empty($saveData[$conditionDataObj->getTakeValueFrom()])) {
323
- $index = $conditionDataObj->getTakeValueFrom();
324
- $ruleName = $saveData[$index];
325
- }
326
-
327
- $type = array();
328
- if (!empty($rulesType[$ruleName])) {
329
- $type = $rulesType[$ruleName];
330
- }
331
- $data = array();
332
- if (!empty($paramsData[$ruleName])) {
333
- $data = $paramsData[$ruleName];
334
- }
335
-
336
- // if exists customOperator it takes the custom one
337
- if ($ruleName == 'operator' && !empty($paramsData['customOperator'])) {
338
- $data = $paramsData['customOperator'];
339
- }
340
-
341
- $optionAttr = array();
342
- if (!empty($attrs[$ruleName])) {
343
- $optionAttr = $attrs[$ruleName];
344
- }
345
-
346
- $attr = array();
347
-
348
- if (!empty($optionAttr['htmlAttrs'])) {
349
- $attr = $optionAttr['htmlAttrs'];
350
- }
351
-
352
- $ruleElementData['type'] = $type;
353
- $ruleElementData['data'] = apply_filters('sgpb'.$ruleName.'ConditionCreator', $data, $saveData);
354
- $ruleElementData['saved'] = $savedParam;
355
- $ruleElementData['attr'] = $attr;
356
- $ruleElementData['conditionDataObj'] = $conditionDataObj;
357
-
358
- return $ruleElementData;
359
- }
360
-
361
- private static function createRuleHeader($ruleElementData)
362
- {
363
- return self::createElementHeader($ruleElementData);
364
- }
365
-
366
- public static function createRuleField($ruleElementData)
367
- {
368
- $attr = array();
369
- $type = $ruleElementData['type'];
370
- $conditionObj = $ruleElementData['conditionDataObj'];
371
-
372
- $name = 'sgpb-'.$conditionObj->getConditionName().'['.$conditionObj->getGroupId().']['.$conditionObj->getRuleId().']['.$ruleElementData['ruleName'].']';
373
- $attr['name'] = $name;
374
-
375
- if (is_array($ruleElementData['attr'])) {
376
- $attr += $ruleElementData['attr'];
377
- $attr['data-rule-id'] = $conditionObj->getRuleId();
378
- }
379
- $rowField = '';
380
-
381
- switch($type) {
382
-
383
- case 'select':
384
- if (!empty($attr['multiple'])) {
385
- $attr['name'] .= '[]';
386
- }
387
- $savedData = $ruleElementData['saved'];
388
-
389
- if (empty($ruleElementData['data'])) {
390
- $ruleElementData['data'] = $ruleElementData['saved'];
391
- $savedData = array();
392
-
393
- if (!empty($ruleElementData['saved'])) {
394
- $savedData = array_keys($ruleElementData['saved']);
395
- }
396
- }
397
-
398
- $rowField .= AdminHelper::createSelectBox($ruleElementData['data'], $savedData, $attr);
399
- break;
400
- case 'text':
401
- case 'url':
402
- case 'number':
403
- $attr['type'] = $type;
404
-
405
- //this is done to override the initial input value
406
- if (!empty($ruleElementData['saved'])) {
407
- $attr['value'] = esc_attr($ruleElementData['saved']);
408
- }
409
-
410
- $rowField .= AdminHelper::createInput($ruleElementData['data'], $ruleElementData['saved'], $attr);
411
- break;
412
- case 'checkbox':
413
- $attr['type'] = $type;
414
- $rowField .= AdminHelper::createCheckBox($ruleElementData['data'], $ruleElementData['saved'], $attr);
415
- break;
416
- case 'conditionalText':
417
- $popupId = self::getPopupId($conditionObj);
418
- if(!empty($popupId)) {
419
- $attr['value'] = $attr['value'].$popupId;
420
- $rowField .= AdminHelper::createInput($ruleElementData['data'], $ruleElementData['saved'].$popupId, $attr);
421
- }
422
- else {
423
- $rowField .= '<div class="sgpb-show-alert-before-save">'.$attr['beforeSaveLabel'].'</div>';
424
- }
425
- break;
426
- }
427
-
428
- return $rowField;
429
- }
430
-
431
- public static function getPopupId($conditionObj)
432
- {
433
- $popupId = 0;
434
- $conditionPopupId = $conditionObj->getPopupId();
435
-
436
- if (!empty($conditionPopupId)) {
437
- $popupId = $conditionObj->getPopupId();
438
- }
439
- else if(!empty($_GET['post'])) {
440
- $popupId = $_GET['post'];
441
- }
442
-
443
- return $popupId;
444
- }
445
-
446
- public static function createElementHeader($ruleElementData)
447
- {
448
- $labelAttributes = '';
449
- $info = '';
450
- $conditionObj = $ruleElementData['conditionDataObj'];
451
- $conditionName = $conditionObj->getConditionName();
452
- $ruleName = $ruleElementData['ruleName'];
453
- global $SGPB_DATA_CONFIG_ARRAY;
454
- $conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
455
- $conditionAttrs = $conditionConfig['attrs'];
456
-
457
- $saveData = $conditionObj->getSavedData();
458
- $optionTitle = $ruleName;
459
- $titleKey = $ruleName;
460
-
461
-
462
- if ($ruleName == 'value' && !empty($saveData[$conditionObj->getTakeValueFrom()])) {
463
- $titleKey = $saveData[$conditionObj->getTakeValueFrom()];
464
- }
465
-
466
- if (!empty($conditionAttrs[$titleKey])) {
467
- $optionAttrs = $conditionAttrs[$titleKey];
468
- if (!empty($optionAttrs['infoAttrs'])) {
469
- // $conditionName => events, conditions, targets...
470
- // $ruleName => param, operator, value (1-st, 2-nd, 3-rd columns)
471
- $optionAttrs = apply_filters('sgpb'.$conditionName.$ruleName.'Param', $optionAttrs, $saveData);
472
- $optionTitle = $optionAttrs['infoAttrs']['label'];
473
- if (!empty($optionAttrs['infoAttrs']['labelAttrs'])) {
474
- $labelAttributes = AdminHelper::createAttrs($optionAttrs['infoAttrs']['labelAttrs']);
475
- }
476
- }
477
- }
478
- if (isset($optionAttrs['infoAttrs']['info']) && $optionAttrs['infoAttrs']['info']) {
479
- $info = '<div class="question-mark sgpb-info-icon">B</div>';
480
- $info .= '<div class="sgpb-info-wrapper">
481
- <span class="infoSelectRepeat samefontStyle sgpb-info-text" style="display: none;">'.$optionAttrs['infoAttrs']['info'].'</span>
482
- </div>';
483
- }
484
-
485
- return "<div class=\"sgpb-display-flex text\"><span class=\"inputBlock__title\" $labelAttributes>$optionTitle</span>$info</div>";
486
- }
487
-
488
- public static function getHiddenDataContent($conditionDataObj)
489
- {
490
- global $SGPB_DATA_CONFIG_ARRAY;
491
- $savedData = $conditionDataObj->getSavedData();
492
- $conditionName = $savedData['param'];
493
- $eventsData = $SGPB_DATA_CONFIG_ARRAY['events'];
494
- $hiddenOptions = $eventsData['hiddenOptionData'];
495
- $ruleId = $conditionDataObj->getRuleId();
496
- if (empty($hiddenOptions[$conditionName])) {
497
- return __('No Data', SG_POPUP_TEXT_DOMAIN);
498
- }
499
-
500
- $hiddenOptionsData = $hiddenOptions[$conditionName];
501
-
502
- $tabs = array_keys($hiddenOptionsData);
503
- ob_start();
504
- ?>
505
-
506
- <div class="sgpb sgpb-wrapper">
507
- <div class="tab">
508
- <?php
509
- $activeTab = '';
510
- if (!empty($tabs[0])) {
511
- $activeTab = $tabs[0];
512
- }
513
- ?>
514
- <?php foreach ($tabs as $tab): ?>
515
- <?php
516
- $activeClassName = '';
517
- if ($activeTab == $tab) {
518
- $activeClassName = 'sgpb-active';
519
- }
520
- ?>
521
- <button class="tablinks sgpb-tab-links <?php echo $activeClassName;?>" data-rule-id="<?php echo $ruleId; ?>" data-content-id="<?php echo $tab.'-'.$ruleId; ?>"><?php echo ucfirst($tab); ?></button>
522
- <?php endforeach;?>
523
- </div>
524
- <?php echo self::createHiddenFields($hiddenOptionsData, $conditionDataObj, $ruleId); ?>
525
- <div class="modal-footer">
526
- <button type="button" class="sgpb-no-button events-option-close sgpb-modal-cancel sgpb-btn sgpb-btn-gray-light" href="#"><?php _e('Cancel', SG_POPUP_TEXT_DOMAIN); ?></button>
527
- <button class="sgpb-btn sgpb-btn-blue sgpb-popup-option-save"><?php _e('Save', SG_POPUP_TEXT_DOMAIN); ?></button>
528
- </div>
529
- </div>
530
- <?php
531
- $hiddenPopupContent = ob_get_contents();
532
- ob_end_clean();
533
-
534
- return $hiddenPopupContent;
535
- }
536
-
537
- private static function createHiddenFields($hiddenOptionsData, $conditionDataObj, $ruleId)
538
- {
539
- ob_start();
540
- ?>
541
- <?php foreach ($hiddenOptionsData as $key => $hiddenData): ?>
542
- <div id="<?php echo $key.'-'.$ruleId; ?>" class="sgpb-tab-content-<?php echo $ruleId;?>">
543
- <div id="<?php echo $key; ?>" class="sgpb-tab-content-options">
544
- <?php foreach ($hiddenData as $name => $label): ?>
545
- <?php
546
- $hiddenOptionsView = self::optionLabelSupplement($conditionDataObj, $name);
547
- $colMdValue = 6;
548
- if (!empty($hiddenOptionsView)) {
549
- $colMdValue = 2;
550
- }
551
- ?>
552
- <div class="row form-group formItem sgpb-margin-y-10">
553
- <div class="col-md-6">
554
- <?php echo self::createConditionFieldHeader($conditionDataObj, $name); ?>
555
- </div>
556
- <div class="col-md-<?php echo $colMdValue; ?>">
557
- <?php echo self::createConditionField($conditionDataObj, $name); ?>
558
- </div>
559
- <?php if (!empty($hiddenOptionsView)): ?>
560
- <div class="col-md-4">
561
- <?php echo $hiddenOptionsView; ?>
562
- </div>
563
- <?php endif; ?>
564
- </div>
565
- <?php endforeach; ?>
566
- </div>
567
- </div>
568
- <?php endforeach;?>
569
- <?php
570
- $hiddenPopupContent = ob_get_contents();
571
- ob_end_clean();
572
-
573
- return $hiddenPopupContent;
574
- }
575
-
576
- public static function hiddenSubOptionsView($parentOptionName, $conditionDataObj)
577
- {
578
- $subOptionsContent = '';
579
- $subOptions = self::getHiddenOptionSubOptions($parentOptionName);
580
- if (!empty($subOptions)) {
581
- $subOptionsContent = self::createHiddenSubOptions($parentOptionName, $conditionDataObj, $subOptions);
582
- }
583
-
584
- return $subOptionsContent;
585
- }
586
-
587
- private static function createHiddenSubOptions($parentOptionName, $conditionDataObj, $subOptions)
588
- {
589
- $name = $parentOptionName;
590
- ob_start();
591
- ?>
592
- <div class="row <?php echo 'sgpb-popup-hidden-content-'.$name.'-'.$conditionDataObj->getRuleId().'-wrapper'?> form-group">
593
- <?php foreach ($subOptions as $subOption): ?>
594
- <div class="col-md-6">
595
- <?php echo self::createConditionFieldHeader($conditionDataObj, $subOption); ?>
596
- </div>
597
- <div class="col-md-6">
598
- <?php echo self::createConditionField($conditionDataObj, $subOption); ?>
599
- </div>
600
- <?php echo self::hiddenSubOptionsView($subOption, $conditionDataObj)?>
601
- <?php endforeach;?>
602
- </div>
603
- <?php
604
- $hiddenPopupContent = ob_get_contents();
605
- ob_end_clean();
606
-
607
- return $hiddenPopupContent;
608
- }
609
-
610
- public static function getHiddenOptionSubOptions($optionName)
611
- {
612
- global $SGPB_DATA_CONFIG_ARRAY;
613
- $childOptionNames = array();
614
- $eventsData = $SGPB_DATA_CONFIG_ARRAY['events'];
615
- $targetDataAttrs = $eventsData['attrs'];
616
-
617
- if (empty($targetDataAttrs[$optionName])) {
618
- return $childOptionNames;
619
- }
620
-
621
- if (empty($targetDataAttrs[$optionName]['childOptions'])) {
622
- return $childOptionNames;
623
- }
624
- $childOptionNames = $targetDataAttrs[$optionName]['childOptions'];
625
-
626
- return $childOptionNames;
627
- }
628
-
629
- private static function getParamRowHideStatus($conditionDataObj, $ruleName)
630
- {
631
- global $SGPB_DATA_CONFIG_ARRAY;
632
- if ($ruleName == 'hiddenOption') {
633
- return '';
634
- }
635
- $status = false;
636
- $conditionName = $conditionDataObj->getConditionName();
637
- $saveData = $conditionDataObj->getSavedData();
638
- $conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
639
- $paramsData = array();
640
- if (!empty($conditionConfig['paramsData'])) {
641
- $paramsData = $conditionConfig['paramsData'];
642
- }
643
-
644
- $ruleElementData['ruleName'] = $ruleName;
645
- if ($ruleName == 'value' && !empty($saveData) && !empty($saveData[$conditionDataObj->getTakeValueFrom()])) {
646
- $ruleName = $saveData[$conditionDataObj->getTakeValueFrom()];
647
- }
648
- if ((!isset($paramsData[$ruleName]) && empty($paramsData[$ruleName])) || is_null($paramsData[$ruleName])) {
649
- $status = true;
650
- }
651
-
652
- return $status;
653
- }
654
-
655
- public function targetHeader($targetName = '')
656
- {
657
- global $SGPB_DATA_CONFIG_ARRAY;
658
- $data = $SGPB_DATA_CONFIG_ARRAY[$targetName];
659
- $columnLabels = $data['columns'];
660
- $header = '<div class="sg-target-header-wrapper">';
661
-
662
- foreach ($columnLabels as $key => $columnLabel) {
663
- $header .= '<div class="sgpb-col-md">'.$columnLabel.'</div>';
664
- }
665
- $header .= '</div>';
666
- return $header;
667
- }
668
- }
1
+ <?php
2
+ namespace sgpb;
3
+ class ConditionCreator
4
+ {
5
+ public function __construct($targetData)
6
+ {
7
+ if (!empty($targetData)) {
8
+ $this->setConditionsObj($targetData);
9
+ }
10
+ }
11
+
12
+ private $conditionsObj;
13
+ //When there is not group set groupId -1
14
+ private $prevGroupId = -1;
15
+
16
+ public function setPrevGroupId($prevGroupId)
17
+ {
18
+ $this->prevGroupId = $prevGroupId;
19
+ }
20
+
21
+ public function getPrevGroupId()
22
+ {
23
+ return $this->prevGroupId;
24
+ }
25
+
26
+ public function setConditionsObj($conditionsObj)
27
+ {
28
+ $this->conditionsObj = $conditionsObj;
29
+ }
30
+
31
+ public function getConditionsObj()
32
+ {
33
+ return $this->conditionsObj;
34
+ }
35
+
36
+ public function render()
37
+ {
38
+ $conditionsObj = $this->getConditionsObj();
39
+ $view = '';
40
+
41
+ if (empty($conditionsObj)) {
42
+ return array();
43
+ }
44
+
45
+ foreach ($conditionsObj as $conditionObj) {
46
+
47
+ $currentGroupId = $conditionObj->getGroupId();
48
+
49
+ $prevGroupId = $this->getPrevGroupId();
50
+ $openGroupDiv = '';
51
+ $separator = '';
52
+ $closePrevGroupDiv = '';
53
+
54
+ if ($currentGroupId > $prevGroupId) {
55
+ if ($currentGroupId != 0) {
56
+ $closePrevGroupDiv = '</div>';
57
+ $separator = ConditionCreator::getOrRuleSeparator();
58
+ }
59
+ $openGroupDiv = '<div class="sgpb-wrapper sgpb-box-'.$conditionObj->getConditionName().' sg-target-group sg-target-group-'.$conditionObj->getGroupId().'" data-group-id="'.$currentGroupId.'">';
60
+ }
61
+
62
+ $view .= $closePrevGroupDiv;
63
+ $view .= $separator;
64
+ $view .= $openGroupDiv;
65
+ $view .= ConditionCreator::createConditionRuleRow($conditionObj);
66
+
67
+ $this->setPrevGroupId($currentGroupId);
68
+ }
69
+
70
+ $view .= '</div>';
71
+
72
+ return $view;
73
+ }
74
+
75
+ public static function getOrRuleSeparator()
76
+ {
77
+ return '<h4 class="sgpb-rules-or"><span>'.__('OR', SG_POPUP_TEXT_DOMAIN).'</span></h4>';
78
+ }
79
+
80
+ public static function createConditionRuleRow($conditionDataObj)
81
+ {
82
+ ob_start();
83
+ ?>
84
+ <div class="events form sg-target-rule sgpb-margin-bottom-40 sg-target-rule-<?php echo $conditionDataObj->getRuleId(); ?> sgpb-event-row" data-rule-id="<?php echo $conditionDataObj->getRuleId(); ?>">
85
+ <div class="formItem sgpb-align-item-start">
86
+ <?php
87
+ $savedData = $conditionDataObj->getSavedData();
88
+
89
+ if (!isset($savedData['value'])) {
90
+ $savedData['value'] = '';
91
+ }
92
+ ?>
93
+ <?php $idHiddenDiv = $conditionDataObj->getConditionName().'_'.$conditionDataObj->getGroupId().'_'.$conditionDataObj->getRuleId();?>
94
+ <?php foreach ($savedData as $conditionName => $conditionSavedData): ?>
95
+ <?php
96
+ $showRowStatusClass = '';
97
+ $hideStatus = self::getParamRowHideStatus($conditionDataObj, $conditionName);
98
+ $ruleElementData = self::getRuleElementData($conditionDataObj, 'param');
99
+ $ruleSavedData = $ruleElementData['saved'];
100
+ $currentArgs = array('savedData' => $ruleSavedData, 'conditionName' => $conditionName);
101
+
102
+ if (!self::allowToShowOperatorColumn($conditionDataObj, $currentArgs)) {
103
+ $hideStatus = true;
104
+ }
105
+ $showRowStatusClass = ($hideStatus) ? 'sgpb-hide-condition-row' : $showRowStatusClass;
106
+ ?>
107
+ <?php if ($conditionName != 'hiddenOption'): ?>
108
+ <div data-condition-name="<?php echo $conditionName;?>" class="<?php echo 'inputBlock sg-condition-'.$conditionName.'-wrapper'.' '.$showRowStatusClass; ?>">
109
+ <?php
110
+ if (!$hideStatus) {
111
+ echo self::createConditionElement($conditionDataObj, $conditionName);
112
+ }
113
+ ?>
114
+ </div>
115
+ <?php endif; ?>
116
+ <?php if (($conditionName == 'hiddenOption')): ?>
117
+ <?php $hiddenContent = self::getHiddenDataContent($conditionDataObj); ?>
118
+ <div class="sgpb-hide-condition-row"><div id="<?php echo $idHiddenDiv;?>"><?php echo $hiddenContent; ?></div></div>
119
+ <?php endif; ?>
120
+ <?php endforeach;?>
121
+ <?php echo self::createConditionOperators($conditionDataObj, $idHiddenDiv); ?>
122
+ </div>
123
+ </div>
124
+ <?php
125
+ $targetOptionRow = ob_get_contents();
126
+ ob_end_clean();
127
+
128
+ return $targetOptionRow;
129
+ }
130
+
131
+ private static function allowToShowOperatorColumn($conditionDataObj, $currentArgs = array())
132
+ {
133
+ global $SGPB_DATA_CONFIG_ARRAY;
134
+ $conditionName = $conditionDataObj->getConditionName();
135
+ $conditionData = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
136
+ $operatorAllowInConditions = array();
137
+
138
+ if (!empty($conditionData['operatorAllowInConditions'])) {
139
+ $operatorAllowInConditions = $conditionData['operatorAllowInConditions'];
140
+ }
141
+
142
+ $savedData = $conditionDataObj->getSavedData();
143
+
144
+ $status = true;
145
+
146
+ if ($currentArgs['conditionName'] == 'operator') {
147
+ $currentSavedData = $currentArgs['savedData'];
148
+
149
+ if (($currentSavedData == 'not_rule' || $currentSavedData == 'select_role' || $currentSavedData == 'select_event')) {
150
+ $status = false;
151
+ }
152
+
153
+ // unset old customOperator
154
+ $SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['customOperator'] = '';
155
+ if (is_array($operatorAllowInConditions)) {
156
+
157
+ if (in_array($savedData['param'], $operatorAllowInConditions)) {
158
+ $operator = '';
159
+ if (!empty($conditionData['paramsData'][$savedData['param'].'Operator'])) {
160
+ $operator = $conditionData['paramsData'][$savedData['param'].'Operator'];
161
+ }
162
+ $SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['customOperator'] = $operator;
163
+ return true;
164
+ }
165
+ // there is no need to show is/is not column for not specific conditions (everywhere, all posts/pages/other_custom_post_types)
166
+ if (isset($savedData['param']) && !is_array($savedData['param']) && (strpos($savedData['param'], '_all') || $savedData['param'] == 'everywhere' || $savedData['param'] == 'post_tags')) {
167
+ return false;
168
+ }
169
+ if (!empty($savedData['tempParam']) && in_array($savedData['tempParam'], $operatorAllowInConditions)) {
170
+ $SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['operator'] = $conditionData['paramsData'][$savedData['tempParam'].'Operator'];
171
+ }
172
+ }
173
+
174
+ if (empty($SGPB_DATA_CONFIG_ARRAY[$conditionName]['paramsData']['operator'])) {
175
+ $status = false;
176
+ }
177
+ }
178
+
179
+ return $status;
180
+ }
181
+
182
+ public static function createConditionOperators($conditionDataObj, $idHiddenDiv = '')
183
+ {
184
+ global $SGPB_DATA_CONFIG_ARRAY;
185
+ $groupId = $conditionDataObj->getRuleId();
186
+ $groupTotal = $conditionDataObj->getGroupTotal();
187
+
188
+ $conditionName = $conditionDataObj->getConditionName();
189
+ $operatorsHtml = '';
190
+ $conditionData = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
191
+ $eventsData = $SGPB_DATA_CONFIG_ARRAY['events'];
192
+
193
+ $operatorsData = $conditionData['operators'];
194
+ $eventButtonClasses = '';
195
+ $eventButtonWrapperClass = '';
196
+ $icon = '';
197
+
198
+ if (empty($operatorsData)) {
199
+ return $operatorsHtml;
200
+ }
201
+
202
+ foreach ($operatorsData as $operator) {
203
+ $identificatorClass = '';
204
+ $style = '';
205
+ if (!isset($eventsData['hiddenOptionData'])) {
206
+ continue;
207
+ }
208
+ $saveData = $conditionDataObj->getSavedData();
209
+ if (empty($saveData['hiddenOption']) && $operator['name'] == 'Edit' && $saveData["param"] != 'load') {
210
+ continue;
211
+ }
212
+ if ($operator['name'] == 'Edit') {
213
+ $operator['name'] = 'Settings';
214
+ }
215
+
216
+ if ($operator['operator'] == 'edit') {
217
+ $icon = 'D';
218
+ $btnClass = ' icons_gray';
219
+ $identificatorClass = $idHiddenDiv;
220
+ $eventButtonClasses = 'sgpb-rules-'.$operator['operator'].'-rule ';
221
+ }
222
+ if ($operator['operator'] == 'add') {
223
+ $icon = 'L';
224
+ $btnClass = ' icons_blue';
225
+ $eventButtonClasses = 'sgpb-rules-'.$operator['operator'].'-rule ';
226
+ //Don't show add button if it's not for last element
227
+ if ($groupId < $groupTotal) {
228
+ $style = 'style="display: none;"';
229
+ }
230
+ }
231
+ if ($operator['operator'] == 'delete') {
232
+ $icon = 'I';
233
+ $btnClass = ' icons_pink';
234
+ $eventButtonClasses = 'sgpb-rules-'.$operator['operator'].'-rule ';
235
+ }
236
+
237
+ $element = '<i class="sgpb-icons '.$btnClass.'" data-id="'.$identificatorClass.'">'.$icon.'</i>';
238
+
239
+ $operatorsHtml .= '<div class="'.$eventButtonClasses.' sgpb-rules-'.$operator['operator'].'-button-wrapper" '.$style.'>';
240
+ $operatorsHtml .= $element;
241
+ $operatorsHtml .= '</div>';
242
+ }
243
+
244
+ return $operatorsHtml;
245
+ }
246
+
247
+ public static function createConditionElement($conditionDataObj, $ruleName)
248
+ {
249
+ //more code added because of the lack of abstraction
250
+ //todo: remove ASAP if possible
251
+ $sData = $conditionDataObj->getSavedData();
252
+ if ($ruleName == 'param' && !empty($sData['tempParam'])) {
253
+ $sData['param'] = $sData['tempParam'];
254
+ $newObj = clone $conditionDataObj;
255
+ $newObj->setSavedData($sData);
256
+ $conditionDataObj = $newObj;
257
+ }
258
+
259
+ $element = '';
260
+
261
+ $ruleElementData = self::getRuleElementData($conditionDataObj, $ruleName);
262
+ $elementHeader = self::createRuleHeader($ruleElementData);
263
+ $field = self::createRuleField($ruleElementData);
264
+ $element .= $elementHeader;
265
+ $element .= $field;
266
+
267
+ return $element;
268
+ }
269
+
270
+ public static function createConditionField($conditionDataObj, $ruleName)
271
+ {
272
+ $ruleElementData = self::getRuleElementData($conditionDataObj, $ruleName);
273
+
274
+ return self::createRuleField($ruleElementData);
275
+ }
276
+
277
+ public static function createConditionFieldHeader($conditionDataObj, $ruleName)
278
+ {
279
+ $ruleElementData = self::getRuleElementData($conditionDataObj, $ruleName);
280
+
281
+ return self::createRuleHeader($ruleElementData);
282
+ }
283
+
284
+ public static function optionLabelSupplement($conditionDataObj, $ruleName)
285
+ {
286
+ global $SGPB_DATA_CONFIG_ARRAY;
287
+ $conditionName = $conditionDataObj->getConditionName();
288
+ $conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
289
+ $attrs = $conditionConfig['attrs'][$ruleName];
290
+
291
+ if (isset($attrs['infoAttrs']['rightLabel'])) {
292
+ $labelData = $attrs['infoAttrs']['rightLabel'];
293
+ $value = $labelData['value'];
294
+ $classes = $labelData['classes'];
295
+ return '<span class="'.esc_attr($classes).'">'.$value.'</span>';
296
+ }
297
+
298
+ return '';
299
+ }
300
+
301
+ private static function getRuleElementData($conditionDataObj, $ruleName = '')
302
+ {
303
+ global $SGPB_DATA_CONFIG_ARRAY;
304
+ $ruleElementData = array();
305
+ $savedParam = '';
306
+ $conditionName = $conditionDataObj->getConditionName();
307
+ $saveData = $conditionDataObj->getSavedData();
308
+ $conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
309
+ $rulesType = $conditionConfig['columnTypes'];
310
+ $paramsData = $conditionConfig['paramsData'];
311
+
312
+ $attrs = $conditionConfig['attrs'];
313
+
314
+ if (!empty($saveData[$ruleName])) {
315
+ $savedParam = $saveData[$ruleName];
316
+ }
317
+ else if (!empty($saveData['hiddenOption']) && isset($saveData['hiddenOption'][$ruleName])) {
318
+ $savedParam = $saveData['hiddenOption'][$ruleName];
319
+ }
320
+
321
+ $ruleElementData['ruleName'] = $ruleName;
322
+ if ($ruleName == 'value' && !empty($saveData[$conditionDataObj->getTakeValueFrom()])) {
323
+ $index = $conditionDataObj->getTakeValueFrom();
324
+ $ruleName = $saveData[$index];
325
+ }
326
+
327
+ $type = array();
328
+ if (!empty($rulesType[$ruleName])) {
329
+ $type = $rulesType[$ruleName];
330
+ }
331
+ $data = array();
332
+ if (!empty($paramsData[$ruleName])) {
333
+ $data = $paramsData[$ruleName];
334
+ }
335
+
336
+ // if exists customOperator it takes the custom one
337
+ if ($ruleName == 'operator' && !empty($paramsData['customOperator'])) {
338
+ $data = $paramsData['customOperator'];
339
+ }
340
+
341
+ $optionAttr = array();
342
+ if (!empty($attrs[$ruleName])) {
343
+ $optionAttr = $attrs[$ruleName];
344
+ }
345
+
346
+ $attr = array();
347
+
348
+ if (!empty($optionAttr['htmlAttrs'])) {
349
+ $attr = $optionAttr['htmlAttrs'];
350
+ }
351
+
352
+ $ruleElementData['type'] = $type;
353
+ $ruleElementData['data'] = apply_filters('sgpb'.$ruleName.'ConditionCreator', $data, $saveData);
354
+ $ruleElementData['saved'] = $savedParam;
355
+ $ruleElementData['attr'] = $attr;
356
+ $ruleElementData['conditionDataObj'] = $conditionDataObj;
357
+
358
+ return $ruleElementData;
359
+ }
360
+
361
+ private static function createRuleHeader($ruleElementData)
362
+ {
363
+ return self::createElementHeader($ruleElementData);
364
+ }
365
+
366
+ public static function createRuleField($ruleElementData)
367
+ {
368
+ $attr = array();
369
+ $type = $ruleElementData['type'];
370
+ $conditionObj = $ruleElementData['conditionDataObj'];
371
+
372
+ $name = 'sgpb-'.$conditionObj->getConditionName().'['.$conditionObj->getGroupId().']['.$conditionObj->getRuleId().']['.$ruleElementData['ruleName'].']';
373
+ $attr['name'] = $name;
374
+
375
+ if (is_array($ruleElementData['attr'])) {
376
+ $attr += $ruleElementData['attr'];
377
+ $attr['data-rule-id'] = $conditionObj->getRuleId();
378
+ }
379
+ $rowField = '';
380
+
381
+ switch($type) {
382
+
383
+ case 'select':
384
+ if (!empty($attr['multiple'])) {
385
+ $attr['name'] .= '[]';
386
+ }
387
+ $savedData = $ruleElementData['saved'];
388
+
389
+ if (empty($ruleElementData['data'])) {
390
+ $ruleElementData['data'] = $ruleElementData['saved'];
391
+ $savedData = array();
392
+
393
+ if (!empty($ruleElementData['saved'])) {
394
+ $savedData = array_keys($ruleElementData['saved']);
395
+ }
396
+ }
397
+
398
+ $rowField .= AdminHelper::createSelectBox($ruleElementData['data'], $savedData, $attr);
399
+ break;
400
+ case 'text':
401
+ case 'url':
402
+ case 'number':
403
+ $attr['type'] = $type;
404
+
405
+ //this is done to override the initial input value
406
+ if (!empty($ruleElementData['saved'])) {
407
+ $attr['value'] = esc_attr($ruleElementData['saved']);
408
+ }
409
+
410
+ $rowField .= AdminHelper::createInput($ruleElementData['data'], $ruleElementData['saved'], $attr);
411
+ break;
412
+ case 'checkbox':
413
+ $attr['type'] = $type;
414
+ $rowField .= AdminHelper::createCheckBox($ruleElementData['data'], $ruleElementData['saved'], $attr);
415
+ break;
416
+ case 'conditionalText':
417
+ $popupId = self::getPopupId($conditionObj);
418
+ if(!empty($popupId)) {
419
+ $attr['value'] = $attr['value'].$popupId;
420
+ $rowField .= AdminHelper::createInput($ruleElementData['data'], $ruleElementData['saved'].$popupId, $attr);
421
+ }
422
+ else {
423
+ $rowField .= '<div class="sgpb-show-alert-before-save">'.$attr['beforeSaveLabel'].'</div>';
424
+ }
425
+ break;
426
+ }
427
+
428
+ return $rowField;
429
+ }
430
+
431
+ public static function getPopupId($conditionObj)
432
+ {
433
+ $popupId = 0;
434
+ $conditionPopupId = $conditionObj->getPopupId();
435
+
436
+ if (!empty($conditionPopupId)) {
437
+ $popupId = $conditionObj->getPopupId();
438
+ }
439
+ else if(!empty($_GET['post'])) {
440
+ $popupId = $_GET['post'];
441
+ }
442
+
443
+ return $popupId;
444
+ }
445
+
446
+ public static function createElementHeader($ruleElementData)
447
+ {
448
+ $labelAttributes = '';
449
+ $info = '';
450
+ $conditionObj = $ruleElementData['conditionDataObj'];
451
+ $conditionName = $conditionObj->getConditionName();
452
+ $ruleName = $ruleElementData['ruleName'];
453
+ global $SGPB_DATA_CONFIG_ARRAY;
454
+ $conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
455
+ $conditionAttrs = $conditionConfig['attrs'];
456
+
457
+ $saveData = $conditionObj->getSavedData();
458
+ $optionTitle = $ruleName;
459
+ $titleKey = $ruleName;
460
+
461
+
462
+ if ($ruleName == 'value' && !empty($saveData[$conditionObj->getTakeValueFrom()])) {
463
+ $titleKey = $saveData[$conditionObj->getTakeValueFrom()];
464
+ }
465
+
466
+ if (!empty($conditionAttrs[$titleKey])) {
467
+ $optionAttrs = $conditionAttrs[$titleKey];
468
+ if (!empty($optionAttrs['infoAttrs'])) {
469
+ // $conditionName => events, conditions, targets...
470
+ // $ruleName => param, operator, value (1-st, 2-nd, 3-rd columns)
471
+ $optionAttrs = apply_filters('sgpb'.$conditionName.$ruleName.'Param', $optionAttrs, $saveData);
472
+ $optionTitle = $optionAttrs['infoAttrs']['label'];
473
+ if (!empty($optionAttrs['infoAttrs']['labelAttrs'])) {
474
+ $labelAttributes = AdminHelper::createAttrs($optionAttrs['infoAttrs']['labelAttrs']);
475
+ }
476
+ }
477
+ }
478
+ if (isset($optionAttrs['infoAttrs']['info']) && $optionAttrs['infoAttrs']['info']) {
479
+ $info = '<div class="question-mark sgpb-info-icon">B</div>';
480
+ $info .= '<div class="sgpb-info-wrapper">
481
+ <span class="infoSelectRepeat samefontStyle sgpb-info-text" style="display: none;">'.$optionAttrs['infoAttrs']['info'].'</span>
482
+ </div>';
483
+ }
484
+
485
+ return "<div class=\"sgpb-display-flex text\"><span class=\"inputBlock__title\" $labelAttributes>$optionTitle</span>$info</div>";
486
+ }
487
+
488
+ public static function getHiddenDataContent($conditionDataObj)
489
+ {
490
+ global $SGPB_DATA_CONFIG_ARRAY;
491
+ $savedData = $conditionDataObj->getSavedData();
492
+ $conditionName = $savedData['param'];
493
+ $eventsData = $SGPB_DATA_CONFIG_ARRAY['events'];
494
+ $hiddenOptions = $eventsData['hiddenOptionData'];
495
+ $ruleId = $conditionDataObj->getRuleId();
496
+ if (empty($hiddenOptions[$conditionName])) {
497
+ return __('No Data', SG_POPUP_TEXT_DOMAIN);
498
+ }
499
+
500
+ $hiddenOptionsData = $hiddenOptions[$conditionName];
501
+
502
+ $tabs = array_keys($hiddenOptionsData);
503
+ ob_start();
504
+ ?>
505
+
506
+ <div class="sgpb sgpb-wrapper">
507
+ <div class="tab">
508
+ <?php
509
+ $activeTab = '';
510
+ if (!empty($tabs[0])) {
511
+ $activeTab = $tabs[0];
512
+ }
513
+ ?>
514
+ <?php foreach ($tabs as $tab): ?>
515
+ <?php
516
+ $activeClassName = '';
517
+ if ($activeTab == $tab) {
518
+ $activeClassName = 'sgpb-active';
519
+ }
520
+ ?>
521
+ <button class="tablinks sgpb-tab-links <?php echo $activeClassName;?>" data-rule-id="<?php echo $ruleId; ?>" data-content-id="<?php echo $tab.'-'.$ruleId; ?>"><?php echo ucfirst($tab); ?></button>
522
+ <?php endforeach;?>
523
+ </div>
524
+ <?php echo self::createHiddenFields($hiddenOptionsData, $conditionDataObj, $ruleId); ?>
525
+ <div class="modal-footer">
526
+ <button type="button" class="sgpb-no-button events-option-close sgpb-modal-cancel sgpb-btn sgpb-btn-gray-light" href="#"><?php _e('Cancel', SG_POPUP_TEXT_DOMAIN); ?></button>
527
+ <button class="sgpb-btn sgpb-btn-blue sgpb-popup-option-save"><?php _e('Save', SG_POPUP_TEXT_DOMAIN); ?></button>
528
+ </div>
529
+ </div>
530
+ <?php
531
+ $hiddenPopupContent = ob_get_contents();
532
+ ob_end_clean();
533
+
534
+ return $hiddenPopupContent;
535
+ }
536
+
537
+ private static function createHiddenFields($hiddenOptionsData, $conditionDataObj, $ruleId)
538
+ {
539
+ ob_start();
540
+ ?>
541
+ <?php foreach ($hiddenOptionsData as $key => $hiddenData): ?>
542
+ <div id="<?php echo $key.'-'.$ruleId; ?>" class="sgpb-tab-content-<?php echo $ruleId;?>">
543
+ <div id="<?php echo $key; ?>" class="sgpb-tab-content-options">
544
+ <?php foreach ($hiddenData as $name => $label): ?>
545
+ <?php
546
+ $hiddenOptionsView = self::optionLabelSupplement($conditionDataObj, $name);
547
+ $colMdValue = 6;
548
+ if (!empty($hiddenOptionsView)) {
549
+ $colMdValue = 2;
550
+ }
551
+ ?>
552
+ <div class="row form-group formItem sgpb-margin-y-10">
553
+ <div class="col-md-6">
554
+ <?php echo self::createConditionFieldHeader($conditionDataObj, $name); ?>
555
+ </div>
556
+ <div class="col-md-<?php echo $colMdValue; ?>">
557
+ <?php echo self::createConditionField($conditionDataObj, $name); ?>
558
+ </div>
559
+ <?php if (!empty($hiddenOptionsView)): ?>
560
+ <div class="col-md-4">
561
+ <?php echo $hiddenOptionsView; ?>
562
+ </div>
563
+ <?php endif; ?>
564
+ </div>
565
+ <?php endforeach; ?>
566
+ </div>
567
+ </div>
568
+ <?php endforeach;?>
569
+ <?php
570
+ $hiddenPopupContent = ob_get_contents();
571
+ ob_end_clean();
572
+
573
+ return $hiddenPopupContent;
574
+ }
575
+
576
+ public static function hiddenSubOptionsView($parentOptionName, $conditionDataObj)
577
+ {
578
+ $subOptionsContent = '';
579
+ $subOptions = self::getHiddenOptionSubOptions($parentOptionName);
580
+ if (!empty($subOptions)) {
581
+ $subOptionsContent = self::createHiddenSubOptions($parentOptionName, $conditionDataObj, $subOptions);
582
+ }
583
+
584
+ return $subOptionsContent;
585
+ }
586
+
587
+ private static function createHiddenSubOptions($parentOptionName, $conditionDataObj, $subOptions)
588
+ {
589
+ $name = $parentOptionName;
590
+ ob_start();
591
+ ?>
592
+ <div class="row <?php echo 'sgpb-popup-hidden-content-'.$name.'-'.$conditionDataObj->getRuleId().'-wrapper'?> form-group">
593
+ <?php foreach ($subOptions as $subOption): ?>
594
+ <div class="col-md-6">
595
+ <?php echo self::createConditionFieldHeader($conditionDataObj, $subOption); ?>
596
+ </div>
597
+ <div class="col-md-6">
598
+ <?php echo self::createConditionField($conditionDataObj, $subOption); ?>
599
+ </div>
600
+ <?php echo self::hiddenSubOptionsView($subOption, $conditionDataObj)?>
601
+ <?php endforeach;?>
602
+ </div>
603
+ <?php
604
+ $hiddenPopupContent = ob_get_contents();
605
+ ob_end_clean();
606
+
607
+ return $hiddenPopupContent;
608
+ }
609
+
610
+ public static function getHiddenOptionSubOptions($optionName)
611
+ {
612
+ global $SGPB_DATA_CONFIG_ARRAY;
613
+ $childOptionNames = array();
614
+ $eventsData = $SGPB_DATA_CONFIG_ARRAY['events'];
615
+ $targetDataAttrs = $eventsData['attrs'];
616
+
617
+ if (empty($targetDataAttrs[$optionName])) {
618
+ return $childOptionNames;
619
+ }
620
+
621
+ if (empty($targetDataAttrs[$optionName]['childOptions'])) {
622
+ return $childOptionNames;
623
+ }
624
+ $childOptionNames = $targetDataAttrs[$optionName]['childOptions'];
625
+
626
+ return $childOptionNames;
627
+ }
628
+
629
+ private static function getParamRowHideStatus($conditionDataObj, $ruleName)
630
+ {
631
+ global $SGPB_DATA_CONFIG_ARRAY;
632
+ if ($ruleName == 'hiddenOption') {
633
+ return '';
634
+ }
635
+ $status = false;
636
+ $conditionName = $conditionDataObj->getConditionName();
637
+ $saveData = $conditionDataObj->getSavedData();
638
+ $conditionConfig = $SGPB_DATA_CONFIG_ARRAY[$conditionName];
639
+ $paramsData = array();
640
+ if (!empty($conditionConfig['paramsData'])) {
641
+ $paramsData = $conditionConfig['paramsData'];
642
+ }
643
+
644
+ $ruleElementData['ruleName'] = $ruleName;
645
+ if ($ruleName == 'value' && !empty($saveData) && !empty($saveData[$conditionDataObj->getTakeValueFrom()])) {
646
+ $ruleName = $saveData[$conditionDataObj->getTakeValueFrom()];
647
+ }
648
+ if ((!isset($paramsData[$ruleName]) && empty($paramsData[$ruleName])) || is_null($paramsData[$ruleName])) {
649
+ $status = true;
650
+ }
651
+
652
+ return $status;
653
+ }
654
+
655
+ public function targetHeader($targetName = '')
656
+ {
657
+ global $SGPB_DATA_CONFIG_ARRAY;
658
+ $data = $SGPB_DATA_CONFIG_ARRAY[$targetName];
659
+ $columnLabels = $data['columns'];
660
+ $header = '<div class="sg-target-header-wrapper">';
661
+
662
+ foreach ($columnLabels as $key => $columnLabel) {
663
+ $header .= '<div class="sgpb-col-md">'.$columnLabel.'</div>';
664
+ }
665
+ $header .= '</div>';
666
+ return $header;
667
+ }
668
+ }
com/classes/ConvertToNewVersion.php CHANGED
@@ -1,1274 +1,1274 @@
1
- <?php
2
- namespace sgpb;
3
- use sgpb\AdminHelper;
4
- use \ConfigDataHelper;
5
-
6
- class ConvertToNewVersion
7
- {
8
- private $id;
9
- private $content = '';
10
- private $type;
11
- private $title;
12
- private $options;
13
- private $customOptions = array();
14
-
15
- public function setContent($content)
16
- {
17
- $this->content = $content;
18
- }
19
-
20
- public function getContent()
21
- {
22
- return $this->content;
23
- }
24
-
25
- public function setType($type)
26
- {
27
- if ($type == 'shortcode') {
28
- $type = 'html';
29
- }
30
- $this->type = $type;
31
- }
32
-
33
- public function getType()
34
- {
35
- return $this->type;
36
- }
37
-
38
- public function setTitle($title)
39
- {
40
- $this->title = $title;
41
- }
42
-
43
- public function getTitle()
44
- {
45
- return $this->title;
46
- }
47
-
48
- public function setId($id)
49
- {
50
- $this->id = (int)$id;
51
- }
52
-
53
- public function getId()
54
- {
55
- return $this->id;
56
- }
57
-
58
- public function setOptions($options)
59
- {
60
- $this->options = $options;
61
- }
62
-
63
- public function getOptions()
64
- {
65
- return $this->options;
66
- }
67
-
68
- public function setCustomOptions($customOptions)
69
- {
70
- $this->customOptions = $customOptions;
71
- }
72
-
73
- public function getCustomOptions()
74
- {
75
- return $this->customOptions;
76
- }
77
-
78
- public static function convert()
79
- {
80
- $obj = new self();
81
- $obj->insertDataToNew();
82
- }
83
-
84
- public function insertDataToNew()
85
- {
86
- $idsMapping = array();
87
- Installer::install();
88
- Installer::registerPlugin();
89
- $popups = $this->getAllSavedPopups();
90
- $this->convertSettings();
91
-
92
- $arr = array();
93
- $popupPreviewId = get_option('popupPreviewId');
94
- foreach ($popups as $popup) {
95
- if (empty($popup)) {
96
- continue;
97
- }
98
- // we should not convert preview popup
99
- if ($popup['id'] == $popupPreviewId) {
100
- continue;
101
- }
102
-
103
- $popupObj = $this->popupObjectFromArray($popup);
104
- $arr[] = $popupObj;
105
- $args = array(
106
- 'post_title' => $popupObj->getTitle(),
107
- 'post_content' => $popupObj->getContent(),
108
- 'post_status' => 'publish',
109
- 'post_type' => SG_POPUP_POST_TYPE
110
- );
111
- $id = $popupObj->getId();
112
- $newOptions = $this->getNewOptionsFormSavedData($popupObj);
113
- $newPopupId = @wp_insert_post($args);
114
- $newOptions['sgpb-post-id'] = $newPopupId;
115
- $this->saveOtherOptions($newOptions);
116
-
117
- update_post_meta($newPopupId, 'sg_popup_options', $newOptions);
118
- $idsMapping[$id] = $newPopupId;
119
- }
120
-
121
- $this->convertCounter($idsMapping);
122
- $this->convertSubscribers();
123
-
124
- update_option('sgpbConvertedIds', $idsMapping);
125
-
126
- return $arr;
127
- }
128
-
129
- public function convertSubscribers()
130
- {
131
- global $wpdb;
132
- $subscribersSql = 'SELECT `id`, `firstName`, `lastName`, `email`, `subscriptionType`, `status` from '.$wpdb->prefix.'sg_subscribers';
133
- $subscribers = $wpdb->get_results($subscribersSql, ARRAY_A);
134
-
135
- if (empty($subscribers)) {
136
- return false;
137
- }
138
-
139
- foreach ($subscribers as $subscriber) {
140
- $subscriber['subscriptionType'] = $this->getPostByTitle($subscriber['subscriptionType']);
141
-
142
- $date = date('Y-m-d');
143
- $sql = $wpdb->prepare('INSERT INTO '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' (`firstName`, `lastName`, `email`, `cDate`, `subscriptionType`, `unsubscribed`) VALUES (%s, %s, %s, %s, %d, %d) ', $subscriber['firstName'], $subscriber['lastName'], $subscriber['email'], $date, $subscriber['subscriptionType'], 0);
144
- $wpdb->query($sql);
145
- }
146
- }
147
-
148
- private function getPostByTitle($pageTitle, $output = OBJECT)
149
- {
150
- global $wpdb;
151
- $post = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type='popupbuilder'", $pageTitle));
152
- if (!empty($post)) {
153
- return get_post($post, $output)->ID;
154
- }
155
-
156
- return null;
157
- }
158
-
159
- /**
160
- * Convert settings section saved options to new version
161
- *
162
- * @since 2.6.7.6
163
- *
164
- * @return bool
165
- */
166
- private function convertSettings()
167
- {
168
- global $wpdb;
169
- $settings = $wpdb->get_row('SELECT options FROM '.$wpdb->prefix .'sg_popup_settings WHERE id = 1', ARRAY_A);
170
-
171
- if (empty($settings['options'])) {
172
- return false;
173
- }
174
- $settings = json_decode($settings['options'], true);
175
-
176
- $deleteData = 0;
177
-
178
- if (!empty($settings['tables-delete-status'])) {
179
- $deleteData = 1;
180
- }
181
- $userRoles = $settings['plugin_users_role'];
182
-
183
- if (empty($userRoles) || !is_array($userRoles)) {
184
- $userRoles = array();
185
- }
186
-
187
- $userRoles = array_map(function($role) {
188
- // it's remove sgpb_ keyword from selected values
189
- $role = substr($role, 5, strlen($role)-1);
190
-
191
- return $role;
192
- }, $userRoles);
193
-
194
- update_option('sgpb-user-roles', $userRoles);
195
- update_option('sgpb-dont-delete-data', $deleteData);
196
-
197
- return true;
198
- }
199
-
200
- private function convertCounter($idsMapping)
201
- {
202
- $oldCounter = get_option('SgpbCounter');
203
-
204
- if (!$oldCounter) {
205
- return false;
206
- }
207
- $newCounter = array();
208
- foreach ($oldCounter as $key => $value) {
209
- $newId = @$idsMapping[$key];
210
- $newCounter[$newId] = $value;
211
- }
212
-
213
- update_option('SgpbCounter', $newCounter);
214
-
215
- return true;
216
- }
217
-
218
-
219
- private function getAllSavedPopups()
220
- {
221
- global $wpdb;
222
-
223
- $query = 'SELECT `id`, `type`, `title`, `options` from '.$wpdb->prefix.'sg_popup ORDER BY id';
224
- $popups = $wpdb->get_results($query, ARRAY_A);
225
-
226
- return $popups;
227
- }
228
-
229
- public function getNewOptionsFormSavedData($popup)
230
- {
231
- $options = $popup->getOptions();
232
- $customOptions = $popup->getCustomOptions();
233
- $options = array_merge($options, $customOptions);
234
- // return addons event from add_connections data
235
- $addonsEvent = $this->getAddonsEventFromPopup($popup);
236
- if ($addonsEvent) {
237
- $options = array_merge($options, $addonsEvent);
238
- }
239
- $options = $this->filterOptions($options);
240
-
241
- $names = $this->getNamesMapping();
242
- $newData = array();
243
- $type = $popup->getType();
244
-
245
- if (empty($names)) {
246
- return $newData;
247
- }
248
-
249
- $newData['sgpb-type'] = $type;
250
-
251
- foreach ($names as $oldName => $newName) {
252
- if (isset($options[$oldName])) {
253
- $optionName = $this->changeOldValues($oldName, $options[$oldName]);
254
- $newData[$newName] = $optionName;
255
- }
256
- }
257
- $newData['sgpb-enable-popup-overlay'] = 'on';
258
- $newData['sgpb-show-background'] = 'on';
259
-
260
- return $newData;
261
- }
262
-
263
- private function saveOtherOptions($options)
264
- {
265
- $popupId = (int)$options['sgpb-post-id'];
266
- $mobileOperator = '';
267
- $conditions = array();
268
- $conditions['sgpb-target'] = array(array(array('param' => 'not_rule')));
269
- $conditions['sgpb-conditions'] = array(array());
270
-
271
- $eventsInitialData = array(
272
- array(
273
- )
274
- );
275
-
276
- if (!empty($options['sgpb-option-exit-intent-enable'])) {
277
- $eventsInitialData[0][] = array(
278
- 'param' => 'exitIntent',
279
- 'value' => @$options['sgpb-option-exit-intent-type'],
280
- 'hiddenOption' => array(
281
- 'sgpb-exit-intent-expire-time' => @$options['sgpb-exit-intent-expire-time'],
282
- 'sgpb-exit-intent-cookie-level' => @$options['sgpb-exit-intent-cookie-level'],
283
- 'sgpb-exit-intent-soft-from-top' => @$options['sgpb-exit-intent-soft-from-top']
284
- )
285
- );
286
- }
287
- else if (!empty($options['sgpb-option-enable-ad-block'])) {
288
- $eventsInitialData[0][] = array(
289
- 'param' => 'AdBlock',
290
- 'value' => $options['sgpb-popup-delay'],
291
- 'hiddenOption' => array()
292
- );
293
- }
294
-
295
- // after inactivity
296
- if (!empty($options['sgpb-inactivity-status'])) {
297
- $eventsInitialData[0][] = array(
298
- 'param' => 'inactivity',
299
- 'value' => @$options['sgpb-inactivity-timer'],
300
- 'hiddenOption' => array()
301
- );
302
- }
303
-
304
- // after scroll
305
- if (!empty($options['sgpb-onscroll-status'])) {
306
- $eventsInitialData[0][] = array(
307
- 'param' => 'onScroll',
308
- 'value' => @$options['sgpb-onscroll-percentage'],
309
- 'hiddenOption' => array()
310
- );
311
- }
312
-
313
- if (empty($eventsInitialData[0])) {
314
- $eventsInitialData[0][] = array('param' => 'load', 'value' => '');
315
- }
316
-
317
- update_post_meta($popupId, 'sg_popup_events', $eventsInitialData);
318
-
319
- // by user status (logged in/out)
320
- if (!empty($options['sgpb-by-user-status'])) {
321
- $operator = '==';
322
- if (isset($options['sgpb-for-logged-in-user']) && $options['sgpb-for-logged-in-user'] === 'false') {
323
- $operator = '!=';
324
- }
325
- $conditions['sgpb-conditions'][0][] = array(
326
- 'param' => 'groups_user_role',
327
- 'operator' => $operator,
328
- 'value' => 'loggedIn'
329
- );
330
- }
331
-
332
- // hide or show on mobile
333
- if (isset($options['sgpb-hide-on-mobile']) && $options['sgpb-hide-on-mobile'] == 'on') {
334
- $conditions['sgpb-conditions'][0][] = array(
335
- 'param' => 'groups_devices',
336
- 'operator' => '!=',
337
- 'value' => array(
338
- 'is_mobile'
339
- )
340
- );
341
- }
342
- if (isset($options['sgpb-only-on-mobile']) && $options['sgpb-only-on-mobile'] == 'on') {
343
- $conditions['sgpb-conditions'][0][] = array(
344
- 'param' => 'groups_devices',
345
- 'operator' => '==',
346
- 'value' => array(
347
- 'is_mobile'
348
- )
349
- );
350
- }
351
-
352
- // detect by country
353
- if (isset($options['sgpb-by-country']) && $options['sgpb-by-country'] == 'on') {
354
- if (isset($options['sgpb-allow-countries'])) {
355
- $options['sgpb-allow-countries'] = '!=';
356
- if ($options['sgpb-allow-countries'] == 'allow') {
357
- $options['sgpb-allow-countries'] = '==';
358
- }
359
- }
360
- $conditions['sgpb-conditions'][0][] = array(
361
- 'param' => 'groups_countries',
362
- 'operator' => @$options['sgpb-allow-countries'],
363
- 'value' => explode(',', @$options['sgpb-countries-iso'])
364
- );
365
- }
366
-
367
- update_post_meta($popupId, 'sg_popup_target', $conditions);
368
-
369
- // random popup
370
- if (isset($options['sgpb-random-popup']) && $options['sgpb-random-popup'] == 'on') {
371
- $randomPopupCategory = AdminHelper::getTaxonomyBySlug(SG_RANDOM_TAXONOMY_SLUG);
372
- wp_set_object_terms($popupId, SG_RANDOM_TAXONOMY_SLUG, SG_POPUP_CATEGORY_TAXONOMY, true);
373
- }
374
-
375
- $this->saveProTarget($options);
376
-
377
- // MailChimp
378
- $mailchimpApiKey = get_option("SG_MAILCHIMP_API_KEY");
379
-
380
- if ($mailchimpApiKey) {
381
- update_option('SGPB_MAILCHIMP_API_KEY', $mailchimpApiKey);
382
- }
383
-
384
- // AWeber
385
- $aweberAccessToken = get_option('sgAccessToken');
386
- if ($aweberAccessToken) {
387
- $requestTokenSecret = get_option('requestTokenSecret');
388
- $accessTokenSecret = get_option('sgAccessTokenSecret');
389
-
390
- update_option('sgpbRequestTokenSecret', $requestTokenSecret);
391
- update_option('sgpbAccessTokenSecret', $accessTokenSecret);
392
- update_option('sgpbAccessToken', $aweberAccessToken);
393
- }
394
-
395
- return $options;
396
- }
397
-
398
- public function saveProTarget($options)
399
- {
400
- if (empty($options)) {
401
- return;
402
- }
403
- $popupId = (int)$options['sgpb-post-id'];
404
- // It's got already saved targets for do not override already saved data
405
- $popupSavedTarget = get_post_meta($popupId, 'sg_popup_target');
406
- $target = array();
407
- $target['sgpb-target'] = array();
408
- $target['sgpb-conditions'] = array();
409
-
410
- if (!empty($popupSavedTarget[0]['sgpb-conditions'])) {
411
- $target['sgpb-conditions'] = $popupSavedTarget[0]['sgpb-conditions'];
412
- }
413
- $isSavedToHome = false;
414
-
415
- if (!empty($options['allPagesStatus'])) {
416
-
417
- if ($options['allPages'] == 'selected') {
418
- $savedPages = (array)@$options['allSelectedPages'];
419
- $savedPagesValues = array_values($savedPages);
420
-
421
- // -1 mean saved for home page
422
- if (in_array('-1', $savedPagesValues)) {
423
- $isSavedToHome = true;
424
- }
425
- $args = array(
426
- 'post__in' => $savedPagesValues,
427
- 'posts_per_page' => 10,
428
- 'post_type' => 'page'
429
- );
430
-
431
- $searchResults = ConfigDataHelper::getPostTypeData($args);
432
- if (!empty($searchResults)) {
433
- $target['sgpb-target'][0][] = array('param' => 'page_selected', 'operator' => '==', 'value' => $searchResults);
434
- }
435
- }
436
- else {
437
- $target['sgpb-target'][0][] = array('param' => 'page_all', 'operator' => '==');
438
- }
439
- }
440
-
441
- if (!empty($options['allPostsStatus'])) {
442
- $allPosts = $options['allPosts'];
443
- if ($allPosts == 'selected') {
444
- $savedPosts = (array)$options['allSelectedPosts'];
445
- $savedPostsValues = array_values($savedPosts);
446
- // -1 mean saved for home page
447
- if (in_array('-1', $savedPostsValues)) {
448
- $isSavedToHome = true;
449
- }
450
- $args = array(
451
- 'post__in' => $savedPostsValues,
452
- 'posts_per_page' => 10,
453
- 'post_type' => 'post'
454
- );
455
-
456
- $searchResults = ConfigDataHelper::getPostTypeData($args);
457
- if (!empty($searchResults)) {
458
- $target['sgpb-target'][0][] = array('param' => 'post_selected', 'operator' => '==', 'value' => $searchResults);
459
- }
460
- }
461
- else if ($allPosts == 'all') {
462
- $target['sgpb-target'][0][] = array('param' => 'post_all', 'operator' => '==');
463
- }
464
- else {
465
- $selectedPostCategories = array_values($options['posts-all-categories']);
466
- $target['sgpb-target'][0][] = array('param' => 'post_category', 'operator' => '==', 'value' => $selectedPostCategories);
467
- }
468
- }
469
-
470
- if ($isSavedToHome) {
471
- $target['sgpb-target'][0][] = array('param' => 'page_type', 'operator' => '==', 'value' => array('is_home_page', 'is_home'));
472
- }
473
-
474
- if (!empty($options['allCustomPostsStatus'])) {
475
- $customPostTypes = $options['all-custom-posts'];
476
- if (!empty($customPostTypes)) {
477
- $selectedCustomPosts = $options['allSelectedCustomPosts'];
478
- if ($options['showAllCustomPosts'] == 'selected') {
479
- foreach ($customPostTypes as $customPostType) {
480
- $args = array(
481
- 'post__in' => array_values($selectedCustomPosts),
482
- 'posts_per_page' => 10,
483
- 'post_type' => $customPostType
484
- );
485
-
486
- $searchResults = ConfigDataHelper::getPostTypeData($args);
487
- if (!empty($searchResults)) {
488
- $target['sgpb-target'][0][] = array('param' => $customPostType.'_selected', 'operator' => '==', 'value' => $searchResults);
489
- }
490
- }
491
- }
492
-
493
- else {
494
- $target['sgpb-target'][0][] = array('param' => 'post_type', 'operator' => '==', 'value' => array_values($customPostTypes));
495
-
496
- }
497
- }
498
- }
499
-
500
- update_post_meta($popupId, 'sg_popup_target', $target);
501
- }
502
-
503
- /**
504
- * Get Addons options
505
- *
506
- * @param obj $popup
507
- *
508
- * @return bool|array
509
- */
510
- private function getAddonsEventFromPopup($popup)
511
- {
512
- if (empty($popup)) {
513
- return false;
514
- }
515
- $popupId = $popup->getId();
516
- global $wpdb;
517
-
518
- $addonsOptionSqlString = 'SELECT options FROM '.$wpdb->prefix.'sg_popup_addons_connection WHERE popupId = %d and extensionType = "option"';
519
- $addonsSql = $wpdb->prepare($addonsOptionSqlString, $popupId);
520
- $results = $wpdb->get_results($addonsSql, ARRAY_A);
521
-
522
- if (empty($results)) {
523
- return false;
524
- }
525
-
526
- $options = array();
527
-
528
- // it's collect all events saved values ex Exit Intent and AdBlock
529
- foreach ($results as $result) {
530
- $currentOptions = json_decode($result['options'], true);
531
-
532
- if (empty($currentOptions)) {
533
- continue;
534
- }
535
- $options = array_merge($options, $currentOptions);
536
- }
537
-
538
- return $options;
539
- }
540
-
541
- /**
542
- * Filter and change some related values for new version
543
- *
544
- * @param array $options
545
- *
546
- * @return array $options
547
- */
548
- private function filterOptions($options)
549
- {
550
- if (@$options['effect'] != 'No effect') {
551
- $options['sgpb-open-animation'] = 'on';
552
- }
553
-
554
- if (isset($options['isActiveStatus']) && $options['isActiveStatus'] == 'off') {
555
- $options['isActiveStatus'] = '';
556
- }
557
-
558
- if (empty($options['sgTheme3BorderColor'])) {
559
- $options['sgTheme3BorderColor'] = '#000000';
560
- }
561
-
562
- if (@$options['popupContentBackgroundRepeat'] != 'no-repeat' && $options['popupContentBackgroundSize'] == 'auto') {
563
- $options['popupContentBackgroundSize'] = 'repeat';
564
- }
565
- $themeNumber = 1;
566
-
567
- if (isset($options['theme'])) {
568
- $themeNumber = preg_replace('/[^0-9]/', '', $options['theme']);
569
- }
570
-
571
- if (isset($options['aweber-success-behavior']) && $options['aweber-success-behavior'] == 'redirectToUrl') {
572
- $options['aweber-success-behavior'] = 'redirectToURL';
573
- }
574
-
575
- // pro options
576
- if (isset($options['disablePopupOverlay'])) {
577
- $options['sgpb-enable-popup-overlay'] = '';
578
- }
579
- // contact form new options
580
- if (isset($options['contact-success-behavior']) && $options['contact-success-behavior'] == 'redirectToUrl') {
581
- $options['contact-success-behavior'] = 'redirectToURL';
582
- }
583
- if (isset($options['contact-text-input-bgcolor'])) {
584
- $options['sgpb-contact-message-bg-color'] = $options['contact-text-input-bgcolor'];
585
- }
586
- if (isset($options['contact-text-bordercolor'])) {
587
- $options['sgpb-contact-message-border-color'] = $options['contact-text-bordercolor'];
588
- }
589
- if (isset($options['contact-inputs-color'])) {
590
- $options['sgpb-contact-message-text-color'] = $options['contact-inputs-color'];
591
- }
592
- if (isset($options['contact-placeholder-color'])) {
593
- $options['sgpb-contact-message-placeholder-color'] = $options['contact-placeholder-color'];
594
- }
595
- if (isset($options['contact-inputs-border-width'])) {
596
- $options['sgpb-contact-message-border-width'] = $options['contact-inputs-border-width'];
597
- }
598
-
599
- if (isset($options['contact-success-popups-list'])) {
600
- $options['contact-success-popups-list'] = sgpGetCorrectPopupId($options['contact-success-popups-list']);
601
- }
602
-
603
- if (isset($options['popup-content-padding'])) {
604
- // add theme default padding to content padding
605
- switch ($themeNumber) {
606
- case 1:
607
- $options['popup-content-padding'] += 7;
608
- break;
609
- case 4:
610
- case 6:
611
- $options['popup-content-padding'] += 12;
612
- break;
613
- case 2:
614
- case 3:
615
- $options['popup-content-padding'] += 0;
616
- break;
617
- case 5:
618
- $options['popup-content-padding'] += 5;
619
- break;
620
- }
621
- }
622
-
623
- switch ($themeNumber) {
624
- case 1:
625
- $buttonImageWidth = 21;
626
- $buttonImageHeight = 21;
627
- break;
628
- case 2:
629
- $buttonImageWidth = 20;
630
- $buttonImageHeight = 20;
631
- break;
632
- case 3:
633
- $buttonImageWidth = 38;
634
- $buttonImageHeight = 19;
635
- break;
636
- case 5:
637
- $buttonImageWidth = 17;
638
- $buttonImageHeight = 17;
639
- break;
640
- case 6:
641
- $buttonImageWidth = 30;
642
- $buttonImageHeight = 30;
643
- break;
644
- default:
645
- $buttonImageWidth = 0;
646
- $buttonImageHeight = 0;
647
- }
648
-
649
- // social popup add to default value
650
- if (empty($options['sgMailLable'])) {
651
- $options['sgMailLable'] = 'E-mail';
652
- }
653
- if (empty($options['fbShareLabel'])) {
654
- $options['fbShareLabel'] = 'Share';
655
- }
656
- if (empty($options['lindkinLabel'])) {
657
- $options['lindkinLabel'] = 'Share';
658
- }
659
- if (empty($options['googLelabel'])) {
660
- $options['googLelabel'] = '+1';
661
- }
662
- if (empty($options['twitterLabel'])) {
663
- $options['twitterLabel'] = 'Tweet';
664
- }
665
- if (empty($options['pinterestLabel'])) {
666
- $options['pinterestLabel'] = 'Pin it';
667
- }
668
-
669
- if (isset($options['subs-success-behavior']) && $options['subs-success-behavior'] == 'redirectToUrl') {
670
- $options['subs-success-behavior'] = 'redirectToURL';
671
- }
672
-
673
- $options['sgpb-subs-form-bg-color'] = '#FFFFFF';
674
- $options['sgpb-button-image-width'] = $buttonImageWidth;
675
- $options['sgpb-button-image-height'] = $buttonImageHeight;
676
-
677
- // pro options customizations
678
- if (SGPB_POPUP_PKG > SGPB_POPUP_PKG_FREE) {
679
- if (empty($options['sgpb-restriction-yes-btn-radius-type'])) {
680
- $options['sgpb-restriction-yes-btn-radius-type'] = '%';
681
- }
682
-
683
- if (empty($options['sgpb-restriction-no-btn-radius-type'])) {
684
- $options['sgpb-restriction-no-btn-radius-type'] = '%';
685
- }
686
-
687
- if (empty($options['sgpb-restriction-yes-btn-border-color'])) {
688
- // border color should be like background color
689
- $options['sgpb-restriction-yes-btn-border-color'] = $options['yesButtonBackgroundColor'];
690
- }
691
- if (empty($options['sgpb-restriction-no-btn-border-color'])) {
692
- // border color should be like background color
693
- $options['sgpb-restriction-no-btn-border-color'] = $options['noButtonBackgroundColor'];
694
- }
695
- }
696
-
697
- return $options;
698
- }
699
-
700
- public function changeOldValues($optionName, $optionValue)
701
- {
702
- if ($optionName == 'theme') {
703
- $themeNumber = preg_replace('/[^0-9]/', '', $optionValue);
704
- $optionValue = 'sgpb-theme-'.$themeNumber;
705
- }
706
-
707
- return $optionValue;
708
- }
709
-
710
- private function popupObjectFromArray($arr)
711
- {
712
- global $wpdb;
713
-
714
- $options = json_decode($arr['options'], true);
715
- $type = $arr['type'];
716
-
717
- if (empty($type)) {
718
- return false;
719
- }
720
-
721
- $this->setId($arr['id']);
722
- $this->setType($type);
723
- $this->setTitle($arr['title']);
724
- $this->setContent('');
725
-
726
- switch ($type) {
727
- case 'image':
728
- $query = $wpdb->prepare('SELECT `url` FROM '.$wpdb->prefix.'sg_image_popup WHERE id = %d', $arr['id']);
729
- $result = $wpdb->get_row($query, ARRAY_A);
730
-
731
- if (!empty($result['url'])) {
732
- $options['image-url'] = $result['url'];
733
- }
734
- break;
735
- case 'html':
736
- $query = $wpdb->prepare('SELECT `content` FROM '.$wpdb->prefix.'sg_html_popup WHERE id = %d', $arr['id']);
737
- $result = $wpdb->get_row($query, ARRAY_A);
738
-
739
- if (!empty($result['content'])) {
740
- $this->setContent($result['content']);
741
- }
742
- break;
743
- case 'fblike':
744
- $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_fblike_popup WHERE id = %d', $arr['id']);
745
- $result = $wpdb->get_row($query, ARRAY_A);
746
-
747
- if (!empty($result['content'])) {
748
- $this->setContent($result['content']);
749
- }
750
- $customOptions = $result['options'];
751
- $customOptions = json_decode($customOptions, true);
752
-
753
- if (!empty($options)) {
754
- $this->setCustomOptions($customOptions);
755
- }
756
- break;
757
- case 'shortcode':
758
- $query = $wpdb->prepare('SELECT `url` FROM '.$wpdb->prefix.'sg_shortCode_popup WHERE id = %d', $arr['id']);
759
- $result = $wpdb->get_row($query, ARRAY_A);
760
-
761
- if (!empty($result['url'])) {
762
- $this->setContent($result['url']);
763
- }
764
- break;
765
- case 'iframe':
766
- $query = $wpdb->prepare('SELECT `url` FROM '.$wpdb->prefix.'sg_iframe_popup WHERE id = %d', $arr['id']);
767
- $result = $wpdb->get_row($query, ARRAY_A);
768
- if (!empty($result['url'])) {
769
- $options['iframe-url'] = $result['url'];
770
- }
771
- break;
772
- case 'video':
773
- $query = $wpdb->prepare('SELECT `url`, `options` FROM '.$wpdb->prefix.'sg_video_popup WHERE id = %d', $arr['id']);
774
- $result = $wpdb->get_row($query, ARRAY_A);
775
- if (!empty($result['url'])) {
776
- $options['video-url'] = $result['url'];
777
- }
778
-
779
- $customOptions = $result['options'];
780
- $customOptions = json_decode($customOptions, true);
781
-
782
- if (!empty($customOptions)) {
783
- $this->setCustomOptions($customOptions);
784
- }
785
- break;
786
- case 'ageRestriction':
787
- $query = $wpdb->prepare('SELECT `content`, `yesButton` as `yesButtonLabel`, `noButton` as `noButtonLabel`, `url` as `restrictionUrl` FROM '.$wpdb->prefix.'sg_age_restriction_popup WHERE id = %d', $arr['id']);
788
- $result = $wpdb->get_row($query, ARRAY_A);
789
- if (!empty($result['content'])) {
790
- $this->setContent($result['content']);
791
- }
792
- unset($result['content']);
793
- if (!empty($result)) {
794
- $this->setCustomOptions($result);
795
- }
796
- break;
797
- case 'social':
798
- $query = $wpdb->prepare('SELECT `socialContent`, `buttons`, `socialOptions` FROM '.$wpdb->prefix.'sg_social_popup WHERE id = %d', $arr['id']);
799
- $result = $wpdb->get_row($query, ARRAY_A);
800
-
801
- if (!empty($result['socialContent'])) {
802
- $this->setContent($result['socialContent']);
803
- }
804
-
805
- $buttons = json_decode($result['buttons'], true);
806
- $socialOptions = json_decode($result['socialOptions'], true);
807
-
808
- $socialAllOptions = array_merge($buttons, $socialOptions);
809
-
810
- $this->setCustomOptions($socialAllOptions);
811
- break;
812
- case 'subscription':
813
- $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_subscription_popup WHERE id = %d', $arr['id']);
814
- $result = $wpdb->get_row($query, ARRAY_A);
815
-
816
- if (!empty($result['content'])) {
817
- $this->setContent($result['content']);
818
- }
819
-
820
- $subsOptions = $result['options'];
821
- $subsOptions = json_decode($subsOptions, true);
822
-
823
- if (!empty($subsOptions)) {
824
- $this->setCustomOptions($subsOptions);
825
- }
826
- break;
827
- case 'countdown':
828
- $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_countdown_popup WHERE id = %d', $arr['id']);
829
- $result = $wpdb->get_row($query, ARRAY_A);
830
-
831
- if (!empty($result['content'])) {
832
- $this->setContent($result['content']);
833
- }
834
- $customOptions = $result['options'];
835
- $customOptions = json_decode($customOptions, true);
836
-
837
- if (!empty($options)) {
838
- $this->setCustomOptions($customOptions);
839
- }
840
- break;
841
- case 'contactForm':
842
- $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_contact_form_popup WHERE id = %d', $arr['id']);
843
- $result = $wpdb->get_row($query, ARRAY_A);
844
-
845
- if (!empty($result['content'])) {
846
- $this->setContent($result['content']);
847
- }
848
- $customOptions = $result['options'];
849
- $customOptions = json_decode($customOptions, true);
850
-
851
- if (!empty($options)) {
852
- $this->setCustomOptions($customOptions);
853
- }
854
- break;
855
- case 'mailchimp':
856
- $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_popup_mailchimp WHERE id = %d', $arr['id']);
857
- $result = $wpdb->get_row($query, ARRAY_A);
858
-
859
- if (!empty($result['content'])) {
860
- $this->setContent($result['content']);
861
- }
862
-
863
- $customOptions = $result['options'];
864
- $customOptions = json_decode($customOptions, true);
865
-
866
- if (!empty($options)) {
867
- $this->setCustomOptions($customOptions);
868
- }
869
- break;
870
- case 'aweber':
871
- $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_popup_aweber WHERE id = %d', $arr['id']);
872
- $result = $wpdb->get_row($query, ARRAY_A);
873
-
874
- if (!empty($result['content'])) {
875
- $this->setContent($result['content']);
876
- }
877
-
878
- $customOptions = $result['options'];
879
- $customOptions = json_decode($customOptions, true);
880
-
881
- if (!empty($options)) {
882
- $this->setCustomOptions($customOptions);
883
- }
884
- break;
885
- }
886
-
887
- $this->setOptions($options);
888
-
889
- return $this;
890
- }
891
-
892
- public function getNamesMapping()
893
- {
894
- $names = array(
895
- 'type' => 'sgpb-type',
896
- 'delay' => 'sgpb-popup-delay',
897
- 'isActiveStatus' => 'sgpb-is-active',
898
- 'image-url' => 'sgpb-image-url',
899
- 'theme' => 'sgpb-popup-themes',
900
- 'effect' => 'sgpb-open-animation-effect',
901
- 'duration' => 'sgpb-open-animation-speed',
902
- 'popupOpenSound' => 'sgpb-open-sound',
903
- 'popupOpenSoundFile' => 'sgpb-sound-url',
904
- 'popup-dimension-mode' => 'sgpb-popup-dimension-mode',
905
- 'popup-responsive-dimension-measure' => 'sgpb-responsive-dimension-measure',
906
- 'width' => 'sgpb-width',
907
- 'height' => 'sgpb-height',
908
- 'maxWidth' => 'sgpb-max-width',
909
- 'maxHeight' => 'sgpb-max-height',
910
- 'escKey' => 'sgpb-esc-key',
911
- 'closeButton' => 'sgpb-enable-close-button',
912
- 'buttonDelayValue' => 'sgpb-close-button-delay',
913
- 'scrolling' => 'sgpb-enable-content-scrolling',
914
- 'disable-page-scrolling' => 'sgpb-disable-page-scrolling',
915
- 'overlayClose' => 'sgpb-overlay-click',
916
- 'contentClick' => 'sgpb-content-click',
917
- 'content-click-behavior' => 'sgpb-content-click-behavior',
918
- 'click-redirect-to-url' => 'sgpb-click-redirect-to-url',
919
- 'redirect-to-new-tab' => 'sgpb-redirect-to-new-tab',
920
- 'reopenAfterSubmission' => 'sgpb-reopen-after-form-submission',
921
- 'repeatPopup' => 'sgpb-show-popup-same-user',
922
- 'popup-appear-number-limit' => 'sgpb-show-popup-same-user-count',
923
- 'onceExpiresTime' => 'sgpb-show-popup-same-user-expiry',
924
- 'save-cookie-page-level' => 'sgpb-show-popup-same-user-page-level',
925
- 'popupContentBgImage' => 'sgpb-show-background',
926
- 'popupContentBackgroundSize' => 'sgpb-background-image-mode',
927
- 'popupContentBgImageUrl' => 'sgpb-background-image',
928
- 'sgOverlayColor' => 'sgpb-overlay-color',
929
- 'sg-content-background-color' => 'sgpb-background-color',
930
- 'popup-background-opacity' => 'sgpb-content-opacity',
931
- 'opacity' => 'sgpb-overlay-opacity',
932
- 'sgOverlayCustomClasss' => 'sgpb-overlay-custom-class',
933
- 'sgContentCustomClasss' => 'sgpb-content-custom-class',
934
- 'popup-z-index' => 'sgpb-popup-z-index',
935
- 'popup-content-padding' => 'sgpb-content-padding',
936
- 'popupFixed' => 'sgpb-popup-fixed',
937
- 'fixedPostion' => 'sgpb-popup-fixed-position',
938
- 'sgpb-open-animation' => 'sgpb-open-animation',
939
- 'theme-close-text' => 'sgpb-button-text',
940
- 'sgTheme3BorderRadius' => 'sgpb-border-radius',
941
- 'sgTheme3BorderColor' => 'sgpb-border-color',
942
- 'fblike-like-url' => 'sgpb-fblike-like-url',
943
- 'fblike-layout' => 'sgpb-fblike-layout',
944
- 'fblike-dont-show-share-button' => 'sgpb-fblike-dont-show-share-button',
945
- 'sgpb-button-image-width' => 'sgpb-button-image-width',
946
- 'sgpb-button-image-height' => 'sgpb-button-image-height'
947
- );
948
- // iframe pro popup type
949
- $names['iframe-url'] = 'sgpb-iframe-url';
950
-
951
- // video pro popup type
952
- $names['video-url'] = 'sgpb-video-url';
953
- $names['video-autoplay'] = 'sgpb-video-autoplay';
954
-
955
- // age restriction
956
- $names['yesButtonLabel'] = 'sgpb-restriction-yes-btn';
957
- $names['noButtonLabel'] = 'sgpb-restriction-no-btn';
958
- $names['restrictionUrl'] = 'sgpb-restriction-no-url';
959
- $names['yesButtonBackgroundColor'] = 'sgpb-restriction-yes-btn-bg-color';
960
- $names['yesButtonTextColor'] = 'sgpb-restriction-yes-btn-text-color';
961
- $names['yesButtonRadius'] = 'sgpb-restriction-yes-btn-radius';
962
- $names['sgRestrictionExpirationTime'] = 'sgpb-restriction-yes-expiration-time';
963
- $names['restrictionCookeSavingLevel'] = 'sgpb-restriction-cookie-level';
964
- $names['noButtonBackgroundColor'] = 'sgpb-restriction-no-btn-bg-color';
965
- $names['noButtonTextColor'] = 'sgpb-restriction-no-btn-text-color';
966
- $names['noButtonRadius'] = 'sgpb-restriction-no-btn-radius';
967
-
968
- // age restriction new options
969
- $names['sgpb-restriction-yes-btn-radius-type'] = 'sgpb-restriction-yes-btn-radius-type';
970
- $names['sgpb-restriction-no-btn-radius-type'] = 'sgpb-restriction-no-btn-radius-type';
971
- $names['sgpb-restriction-yes-btn-border-color'] = 'sgpb-restriction-yes-btn-border-color';
972
- $names['sgpb-restriction-no-btn-border-color'] = 'sgpb-restriction-no-btn-border-color';
973
-
974
- $proNames = array(
975
- 'autoClosePopup' => 'sgpb-auto-close',
976
- 'popupClosingTimer' => 'sgpb-auto-close-time',
977
- 'disablePopupOverlay' => 'sgpb-enable-popup-overlay',
978
- 'disablePopup' => 'sgpb-disable-popup-closing',
979
- 'popup-schedule-status' => 'sgpb-schedule-status',
980
- 'schedule-start-weeks' => 'sgpb-schedule-weeks',
981
- 'schedule-start-time' => 'sgpb-schedule-start-time',
982
- 'schedule-end-time' => 'sgpb-schedule-end-time',
983
- 'popup-timer-status' => 'sgpb-popup-timer-status',
984
- 'popup-start-timer' => 'sgpb-popup-start-timer',
985
- 'popup-finish-timer' => 'sgpb-popup-end-timer',
986
- 'inActivityStatus' => 'sgpb-inactivity-status',
987
- 'inactivity-timout' => 'sgpb-inactivity-timer',
988
- 'onScrolling' => 'sgpb-onscroll-status',
989
- 'beforeScrolingPrsent' => 'sgpb-onscroll-percentage',
990
- 'sg-user-status' => 'sgpb-by-user-status',
991
- 'loggedin-user' => 'sgpb-for-logged-in-user',
992
- 'forMobile' => 'sgpb-hide-on-mobile',
993
- 'openMobile' => 'sgpb-only-on-mobile',
994
- 'countryStatus' => 'sgpb-by-country',
995
- 'allowCountries' => 'sgpb-allow-countries',
996
- 'countryIso' => 'sgpb-countries-iso',
997
- 'randomPopup' => 'sgpb-random-popup'
998
- );
999
- $names = array_merge($names, $proNames);
1000
-
1001
- // pro options
1002
- $names['allPagesStatus'] = 'allPagesStatus';
1003
- $names['showAllPages'] = 'allPages';
1004
- $names['allSelectedPages'] = 'allSelectedPages';
1005
- $names['allPostsStatus'] = 'allPostsStatus';
1006
- $names['showAllPosts'] = 'allPosts';
1007
- $names['allSelectedPosts'] = 'allSelectedPosts';
1008
- $names['posts-all-categories'] = 'posts-all-categories';
1009
- $names['allCustomPostsStatus'] = 'allCustomPostsStatus';
1010
- $names['all-custom-posts'] = 'all-custom-posts';
1011
- $names['showAllCustomPosts'] = 'showAllCustomPosts';
1012
- $names['allSelectedCustomPosts'] = 'allSelectedCustomPosts';
1013
- // countdown pro popup type
1014
- $names['countdownNumbersBgColor'] = 'sgpb-counter-background-color';
1015
- $names['countdownNumbersTextColor'] = 'sgpb-counter-text-color';
1016
- $names['sg-due-date'] = 'sgpb-countdown-due-date';
1017
- $names['sg-countdown-type'] = 'sgpb-countdown-type';
1018
- $names['sg-time-zone'] = 'sgpb-countdown-timezone';
1019
- $names['counts-language'] = 'sgpb-countdown-language';
1020
- $names['pushToBottom'] = 'sgpb-countdown-show-on-top';
1021
- $names['countdown-autoclose'] = 'sgpb-countdown-close-timeout';
1022
- // contact form pro popup type
1023
- $names['show-form-to-top'] = 'sgpb-contact-show-form-to-top';
1024
- $names['contact-name-status'] = 'sgpb-contact-field-name';
1025
- $names['contact-name'] = 'sgpb-contact-name-placeholder';
1026
- $names['contact-name-required'] = 'sgpb-contact-name-required';
1027
- $names['contact-subject-status'] = 'sgpb-contact-field-subject';
1028
- $names['contact-subject'] = 'sgpb-contact-subject-placeholder';
1029
- $names['contact-subject-required'] = 'sgpb-contact-subject-required';
1030
- $names['contact-email'] = 'sgpb-contact-email-placeholder';
1031
- $names['contact-message'] = 'sgpb-contact-message-placeholder';
1032
- $names['contact-fail-message'] = 'sgpb-contact-error-message';
1033
- $names['contact-receive-email'] = 'sgpb-contact-to-email';
1034
- $names['contact-validation-message'] = 'sgpb-contact-required-message';
1035
- $names['contact-validate-email'] = 'sgpb-contact-invalid-email-message';
1036
- $names['contact-inputs-width'] = 'sgpb-contact-inputs-width';
1037
- $names['contact-inputs-height'] = 'sgpb-contact-inputs-height';
1038
- $names['contact-inputs-border-width'] = 'sgpb-contact-inputs-border-width';
1039
- $names['contact-text-input-bgcolor'] = 'sgpb-contact-inputs-bg-color';
1040
- $names['contact-text-bordercolor'] = 'sgpb-contact-inputs-border-color';
1041
- $names['contact-inputs-color'] = 'sgpb-contact-inputs-text-color';
1042
- $names['contact-placeholder-color'] = 'sgpb-contact-inputs-placeholder-color';
1043
- $names['contact-area-width'] = 'sgpb-contact-message-width';
1044
- $names['contact-area-height'] = 'sgpb-contact-message-height';
1045
- $names['sg-contact-resize'] = 'sgpb-contact-message-resize';
1046
- $names['contact-btn-width'] = 'sgpb-contact-submit-width';
1047
- $names['contact-btn-height'] = 'sgpb-contact-submit-height';
1048
- $names['contact-btn-title'] = 'sgpb-contact-submit-title';
1049
- $names['contact-btn-progress-title'] = 'sgpb-contact-submit-title-progress';
1050
- $names['contact-button-bgcolor'] = 'sgpb-contact-submit-bg-color';
1051
- $names['contact-button-color'] = 'sgpb-contact-submit-text-color';
1052
- $names['dont-show-content-to-contacted-user'] = 'sgpb-contact-hide-for-contacted-users';
1053
- $names['contact-success-behavior'] = 'sgpb-contact-success-behavior';
1054
- $names['contact-success-message'] = 'sgpb-contact-success-message';
1055
- $names['contact-success-redirect-url'] = 'sgpb-contact-success-redirect-URL';
1056
- $names['contact-success-redirect-new-tab'] = 'sgpb-contact-success-redirect-new-tab';
1057
- $names['contact-success-popups-list'] = 'sgpb-contact-success-popup';
1058
- $names['contact-gdpr'] = 'sgpb-contact-gdpr-status';
1059
- $names['contact-gdpr-label'] = 'sgpb-contact-gdpr-label';
1060
- $names['contact-gdpr-text'] = 'sgpb-contact-gdpr-text';
1061
- $names['sgpb-contact-message-bg-color'] = 'sgpb-contact-message-bg-color';
1062
- $names['sgpb-contact-message-border-color'] = 'sgpb-contact-message-border-color';
1063
- $names['sgpb-contact-message-text-color'] = 'sgpb-contact-message-text-color';
1064
- $names['sgpb-contact-message-placeholder-color'] = 'sgpb-contact-message-placeholder-color';
1065
- $names['sgpb-contact-message-border-width'] = 'sgpb-contact-message-border-width';
1066
-
1067
- // Social
1068
- $names['shareUrlType'] = 'sgpb-social-share-url-type';
1069
- $names['sgShareUrl'] = 'sgpb-social-share-url';
1070
- $names['sgSocialTheme'] = 'sgpb-social-share-theme';
1071
- $names['sgSocialButtonsSize'] = 'sgpb-social-theme-size';
1072
- $names['sgSocialLabel'] = 'sgpb-social-show-labels';
1073
- $names['sgSocialShareCount'] = 'sgpb-social-share-count';
1074
- $names['sgRoundButton'] = 'sgpb-social-round-buttons';
1075
- $names['sgEmailStatus'] = 'sgpb-social-status-email';
1076
- $names['sgMailLable'] = 'sgpb-social-label-email';
1077
- $names['sgFbStatus'] = 'sgpb-social-status-facebook';
1078
- $names['fbShareLabel'] = 'sgpb-social-label-facebook';
1079
- $names['sgLinkedinStatus'] = 'sgpb-social-status-linkedin';
1080
- $names['lindkinLabel'] = 'sgpb-social-label-linkedin';
1081
- $names['sgGoogleStatus'] = 'sgpb-social-status-googleplus';
1082
- $names['googLelabel'] = 'sgpb-social-label-googleplus';
1083
- $names['sgTwitterStatus'] = 'sgpb-social-status-twitter';
1084
- $names['twitterLabel'] = 'sgpb-social-label-twitter';
1085
- $names['sgPinterestStatus'] = 'sgpb-social-status-pinterest';
1086
- $names['pinterestLabel'] = 'sgpb-social-label-pinterest';
1087
-
1088
- // Subscription
1089
- $names['subscription-email'] = 'sgpb-subs-email-placeholder';
1090
- $names['subs-gdpr'] = 'sgpb-subs-gdpr-status';
1091
- $names['subs-gdpr-label'] = 'sgpb-subs-gdpr-label';
1092
- $names['subs-gdpr-text'] = 'sgpb-subs-gdpr-text';
1093
- $names['subs-first-name-status'] = 'sgpb-subs-first-name-status';
1094
- $names['subs-first-name'] = 'sgpb-subs-first-placeholder';
1095
- $names['subs-first-name-required'] = 'sgpb-subs-first-name-required';
1096
- $names['subs-last-name-status'] = 'sgpb-subs-last-name-status';
1097
- $names['subs-last-name'] = 'sgpb-subs-last-placeholder';
1098
- $names['subs-last-name-required'] = 'sgpb-subs-last-name-required';
1099
- $names['subs-validation-message'] = 'sgpb-subs-validation-message';
1100
- $names['subs-text-width'] = 'sgpb-subs-text-width';
1101
- $names['subs-text-height'] = 'sgpb-subs-text-height';
1102
- $names['subs-text-border-width'] = 'sgpb-subs-text-border-width';
1103
- $names['subs-text-input-bgColor'] = 'sgpb-subs-text-bg-color';
1104
- $names['subs-text-borderColor'] = 'sgpb-subs-text-border-color';
1105
- $names['subs-inputs-color'] = 'sgpb-subs-text-color';
1106
- $names['subs-placeholder-color'] = 'sgpb-subs-text-placeholder-color';
1107
- $names['subs-btn-width'] = 'sgpb-subs-btn-width';
1108
- $names['subs-btn-height'] = 'sgpb-subs-btn-height';
1109
- $names['subs-btn-title'] = 'sgpb-subs-btn-title';
1110
- $names['subs-btn-progress-title'] = 'sgpb-subs-btn-progress-title';
1111
- $names['subs-button-bgColor'] = 'sgpb-subs-btn-bg-color';
1112
- $names['subs-button-color'] = 'sgpb-subs-btn-text-color';
1113
- $names['subs-success-behavior'] = 'sgpb-subs-success-behavior';
1114
- $names['subs-success-message'] = 'sgpb-subs-success-message';
1115
- $names['subs-success-redirect-url'] = 'sgpb-subs-success-redirect-URL';
1116
- $names['subs-success-redirect-new-tab'] = 'sgpb-subs-success-redirect-new-tab';
1117
- $names['subs-success-popups-list'] = 'sgpb-subs-success-popup';
1118
- // Subscription new option
1119
- $names['sgpb-subs-form-bg-color'] = 'sgpb-subs-form-bg-color';
1120
-
1121
- // Exit Intent extension names
1122
- $names['option-exit-intent-enable'] = 'sgpb-option-exit-intent-enable';
1123
- $names['option-exit-intent-type'] = 'sgpb-option-exit-intent-type';
1124
- $names['option-exit-intent-expire-time'] = 'sgpb-exit-intent-expire-time';
1125
- $names['option-exit-intent-cookie-level'] = 'sgpb-exit-intent-cookie-level';
1126
- $names['option-exit-intent-soft-from-top'] = 'sgpb-exit-intent-soft-from-top';
1127
-
1128
- // Adblock extension names
1129
- $names['option-enable-ad-block'] = 'sgpb-option-enable-ad-block';
1130
- // MailChimp extension names
1131
- $names['mailchimp-list-id'] = 'sgpb-mailchimp-lists';
1132
- $names['mailchimp-double-optin'] = 'sgpb-enable-double-optin';
1133
- $names['mailchimp-only-required'] = 'sgpb-show-required-fields';
1134
- $names['mailchimp-form-aligment'] = 'sgpb-mailchimp-form-align';
1135
- $names['mailchimp-label-aligment'] = 'sgpb-mailchimp-label-alignment';
1136
- $names['mailchimp-indicates-required-fields'] = 'sgpb-enable-asterisk-label';
1137
- $names['mailchimp-asterisk-label'] = 'sgpb-mailchimp-asterisk-label';
1138
- $names['mailchimp-required-error-message'] = 'sgpb-mailchimp-required-message';
1139
- $names['mailchimp-email-validate-message'] = 'sgpb-mailchimp-email-message';
1140
- $names['mailchimp-email-label'] = 'sgpb-mailchimp-email-label';
1141
- $names['mailchimp-error-message'] = 'sgpb-mailchimp-error-message';
1142
- $names['mailchimp-show-form-to-top'] = 'sgpb-mailchimp-show-form-to-top';
1143
- $names['mailchimp-label-color'] = 'sgpb-mailchimp-label-color';
1144
- $names['mailchimp-input-width'] = 'sgpb-mailchimp-input-width';
1145
- $names['mailchimp-input-height'] = 'sgpb-mailchimp-input-height';
1146
- $names['mailchimp-input-border-radius'] = 'sgpb-mailchimp-border-radius';
1147
- $names['mailchimp-input-border-width'] = 'sgpb-mailchimp-border-width';
1148
- $names['mailchimp-input-border-color'] = 'sgpb-mailchimp-border-color';
1149
- $names['mailchimp-input-bg-color'] = 'sgpb-mailchimp-background-color';
1150
- $names['sgpb-mailchimp-input-color'] = 'sgpb-mailchimp-input-color';
1151
- $names['mailchimp-submit-title'] = 'sgpb-mailchimp-submit-title';
1152
- $names['mailchimp-submit-width'] = 'sgpb-mailchimp-submit-width';
1153
- $names['mailchimp-submit-height'] = 'sgpb-mailchimp-submit-height';
1154
- $names['mailchimp-submit-border-width'] = 'sgpb-mailchimp-submit-border-width';
1155
- $names['mailchimp-submit-border-radius'] = 'sgpb-mailchimp-submit-border-radius';
1156
- $names['mailchimp-submit-border-color'] = 'sgpb-mailchimp-submit-border-color';
1157
- $names['mailchimp-submit-button-bgcolor'] = 'sgpb-mailchimp-submit-background-color';
1158
- $names['mailchimp-submit-color'] = 'sgpb-mailchimp-submit-color';
1159
- $names['mailchimp-success-behavior'] = 'sgpb-mailchimp-success-behavior';
1160
- $names['mailchimp-success-message'] = 'sgpb-mailchimp-success-message';
1161
- $names['mailchimp-success-redirect-url'] = 'sgpb-mailchimp-success-redirect-URL';
1162
- $names['mailchimp-success-redirect-new-tab'] = 'sgpb-mailchimp-success-redirect-new-tab';
1163
- $names['mailchimp-success-popups-list'] = 'sgpb-mailchimp-success-popup';
1164
- $names['mailchimp-close-popup-already-subscribed'] = 'sgpb-mailchimp-close-popup-already-subscribed';
1165
- // AWeber extension
1166
- $names['sg-aweber-list'] = 'sgpb-aweber-list';
1167
- $names['sg-aweber-webform'] = 'sgpb-aweber-signup-form';
1168
- $names['aweber-custom-invalid-email-message'] = 'sgpb-aweber-invalid-email';
1169
- $names['aweber-invalid-email'] = 'sgpb-aweber-invalid-email-message';
1170
- $names['aweber-already-subscribed-message'] = 'sgpb-aweber-custom-subscribed-message';
1171
- $names['aweber-required-message'] = 'sgpb-aweber-required-message';
1172
- $names['aweber-validate-email-message'] = 'sgpb-aweber-validate-email-message';
1173
- $names['aweber-success-behavior'] = 'sgpb-aweber-success-behavior';
1174
- $names['aweber-success-message'] = 'sgpb-aweber-success-message';
1175
- $names['aweber-success-redirect-url'] = 'sgpb-aweber-success-redirect-URL';
1176
- $names['aweber-success-redirect-new-tab'] = 'sgpb-aweber-success-redirect-new-tab';
1177
- $names['aweber-success-popups-list'] = 'sgpb-aweber-success-popup';
1178
-
1179
- return $names;
1180
- }
1181
-
1182
- public static function saveCustomInserted()
1183
- {
1184
- global $post;
1185
- if (empty($post)) {
1186
- return false;
1187
- }
1188
-
1189
- $postId = $post->ID;
1190
- if (get_option('sgpbSaveOldData'.$postId)) {
1191
- return false;
1192
- }
1193
-
1194
- update_option('sgpbSaveOldData'.$postId, 1);
1195
-
1196
- add_filter('sgpbConvertedPopupId', 'sgpb\sgpGetCorrectPopupId', 10, 1);
1197
- self::saveMetaboxPopup($postId);
1198
- $content = get_post_field('post_content', $postId);
1199
- SGPopup::deletePostCustomInsertedData($postId);
1200
- SGPopup::deletePostCustomInsertedEvents($postId);
1201
- // We detect all the popups that were inserted as a custom ones, in the content.
1202
- SGPopup::savePopupsFromContentClasses($content, $post);
1203
- }
1204
-
1205
- public static function saveMetaboxPopup($postId)
1206
- {
1207
- $selectedPost = get_post_meta($postId, 'sg_promotional_popup', true);
1208
-
1209
- if (empty($selectedPost)) {
1210
- return false;
1211
- }
1212
- global $SGPB_DATA_CONFIG_ARRAY;
1213
-
1214
- $postType = get_post_type($postId);
1215
- $postTitle = get_the_title($postId);
1216
- $popupId = sgpGetCorrectPopupId($selectedPost);
1217
- $popupTargetParam = $postType.'_selected';
1218
-
1219
- if (!get_post_meta($popupId, 'sg_popup_events')) {
1220
- update_post_meta($popupId, 'sg_popup_events', array($SGPB_DATA_CONFIG_ARRAY['events']['initialData']));
1221
- }
1222
-
1223
- $savedTarget = get_post_meta($popupId, 'sg_popup_target');
1224
- if (empty($savedTarget[0]['sgpb-target'][0])) {
1225
- $savedTarget['sgpb-target'][] = array(array('param' => $popupTargetParam, 'operator' => '==', 'value' => array($postId => $postTitle)));
1226
- $savedTarget['sgpb-conditions'][] = $SGPB_DATA_CONFIG_ARRAY['conditions']['initialData'];
1227
-
1228
- update_post_meta($popupId, 'sg_popup_target', $savedTarget, true);
1229
- return true;
1230
- }
1231
- $targets = $savedTarget[0]['sgpb-target'][0];
1232
- $targetExists = false;
1233
-
1234
- foreach ($targets as $key => $target) {
1235
- if ($key == 0 && $target['param'] == 'not_rule') {
1236
- $target['param'] = $popupTargetParam;
1237
- $savedTarget[0]['sgpb-target'][0][$key]['param'] = $popupTargetParam;
1238
- }
1239
- if ($target['param'] == $popupTargetParam) {
1240
- $targetExists = true;
1241
- $targetValue = array();
1242
- if (!empty($target['value'])) {
1243
- $targetValue = $target['value'];
1244
- }
1245
-
1246
- $targetValue[$postId] = $postTitle;
1247
- $savedTarget[0]['sgpb-target'][0][$key]['value'] = $targetValue;
1248
- break;
1249
- }
1250
- }
1251
-
1252
- if (!$targetExists) {
1253
- $savedTargetsLength = count($savedTarget[0]['sgpb-target'][0]);
1254
- $savedTarget[0]['sgpb-target'][0][$savedTargetsLength] = array('param' => $popupTargetParam, 'operator' => '==', 'value' => array($postId => $postTitle));
1255
- }
1256
-
1257
- delete_post_meta($postId, 'sg_promotional_popup');
1258
- delete_post_meta($popupId, 'sg_popup_target');
1259
- update_post_meta($popupId, 'sg_popup_target', $savedTarget[0], true);
1260
-
1261
- return true;
1262
- }
1263
- }
1264
-
1265
- function sgpGetCorrectPopupId($popupId)
1266
- {
1267
- $convertedIds = get_option('sgpbConvertedIds');
1268
-
1269
- if (empty($convertedIds) || empty($convertedIds[$popupId])) {
1270
- return $popupId;
1271
- }
1272
-
1273
- return $convertedIds[$popupId];
1274
- }
1
+ <?php
2
+ namespace sgpb;
3
+ use sgpb\AdminHelper;
4
+ use \ConfigDataHelper;
5
+
6
+ class ConvertToNewVersion
7
+ {
8
+ private $id;
9
+ private $content = '';
10
+ private $type;
11
+ private $title;
12
+ private $options;
13
+ private $customOptions = array();
14
+
15
+ public function setContent($content)
16
+ {
17
+ $this->content = $content;
18
+ }
19
+
20
+ public function getContent()
21
+ {
22
+ return $this->content;
23
+ }
24
+
25
+ public function setType($type)
26
+ {
27
+ if ($type == 'shortcode') {
28
+ $type = 'html';
29
+ }
30
+ $this->type = $type;
31
+ }
32
+
33
+ public function getType()
34
+ {
35
+ return $this->type;
36
+ }
37
+
38
+ public function setTitle($title)
39
+ {
40
+ $this->title = $title;
41
+ }
42
+
43
+ public function getTitle()
44
+ {
45
+ return $this->title;
46
+ }
47
+
48
+ public function setId($id)
49
+ {
50
+ $this->id = (int)$id;
51
+ }
52
+
53
+ public function getId()
54
+ {
55
+ return $this->id;
56
+ }
57
+
58
+ public function setOptions($options)
59
+ {
60
+ $this->options = $options;
61
+ }
62
+
63
+ public function getOptions()
64
+ {
65
+ return $this->options;
66
+ }
67
+
68
+ public function setCustomOptions($customOptions)
69
+ {
70
+ $this->customOptions = $customOptions;
71
+ }
72
+
73
+ public function getCustomOptions()
74
+ {
75
+ return $this->customOptions;
76
+ }
77
+
78
+ public static function convert()
79
+ {
80
+ $obj = new self();
81
+ $obj->insertDataToNew();
82
+ }
83
+
84
+ public function insertDataToNew()
85
+ {
86
+ $idsMapping = array();
87
+ Installer::install();
88
+ Installer::registerPlugin();
89
+ $popups = $this->getAllSavedPopups();
90
+ $this->convertSettings();
91
+
92
+ $arr = array();
93
+ $popupPreviewId = get_option('popupPreviewId');
94
+ foreach ($popups as $popup) {
95
+ if (empty($popup)) {
96
+ continue;
97
+ }
98
+ // we should not convert preview popup
99
+ if ($popup['id'] == $popupPreviewId) {
100
+ continue;
101
+ }
102
+
103
+ $popupObj = $this->popupObjectFromArray($popup);
104
+ $arr[] = $popupObj;
105
+ $args = array(
106
+ 'post_title' => $popupObj->getTitle(),
107
+ 'post_content' => $popupObj->getContent(),
108
+ 'post_status' => 'publish',
109
+ 'post_type' => SG_POPUP_POST_TYPE
110
+ );
111
+ $id = $popupObj->getId();
112
+ $newOptions = $this->getNewOptionsFormSavedData($popupObj);
113
+ $newPopupId = @wp_insert_post($args);
114
+ $newOptions['sgpb-post-id'] = $newPopupId;
115
+ $this->saveOtherOptions($newOptions);
116
+
117
+ update_post_meta($newPopupId, 'sg_popup_options', $newOptions);
118
+ $idsMapping[$id] = $newPopupId;
119
+ }
120
+
121
+ $this->convertCounter($idsMapping);
122
+ $this->convertSubscribers();
123
+
124
+ update_option('sgpbConvertedIds', $idsMapping);
125
+
126
+ return $arr;
127
+ }
128
+
129
+ public function convertSubscribers()
130
+ {
131
+ global $wpdb;
132
+ $subscribersSql = 'SELECT `id`, `firstName`, `lastName`, `email`, `subscriptionType`, `status` from '.$wpdb->prefix.'sg_subscribers';
133
+ $subscribers = $wpdb->get_results($subscribersSql, ARRAY_A);
134
+
135
+ if (empty($subscribers)) {
136
+ return false;
137
+ }
138
+
139
+ foreach ($subscribers as $subscriber) {
140
+ $subscriber['subscriptionType'] = $this->getPostByTitle($subscriber['subscriptionType']);
141
+
142
+ $date = date('Y-m-d');
143
+ $sql = $wpdb->prepare('INSERT INTO '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' (`firstName`, `lastName`, `email`, `cDate`, `subscriptionType`, `unsubscribed`) VALUES (%s, %s, %s, %s, %d, %d) ', $subscriber['firstName'], $subscriber['lastName'], $subscriber['email'], $date, $subscriber['subscriptionType'], 0);
144
+ $wpdb->query($sql);
145
+ }
146
+ }
147
+
148
+ private function getPostByTitle($pageTitle, $output = OBJECT)
149
+ {
150
+ global $wpdb;
151
+ $post = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type='popupbuilder'", $pageTitle));
152
+ if (!empty($post)) {
153
+ return get_post($post, $output)->ID;
154
+ }
155
+
156
+ return null;
157
+ }
158
+
159
+ /**
160
+ * Convert settings section saved options to new version
161
+ *
162
+ * @since 2.6.7.6
163
+ *
164
+ * @return bool
165
+ */
166
+ private function convertSettings()
167
+ {
168
+ global $wpdb;
169
+ $settings = $wpdb->get_row('SELECT options FROM '.$wpdb->prefix .'sg_popup_settings WHERE id = 1', ARRAY_A);
170
+
171
+ if (empty($settings['options'])) {
172
+ return false;
173
+ }
174
+ $settings = json_decode($settings['options'], true);
175
+
176
+ $deleteData = 0;
177
+
178
+ if (!empty($settings['tables-delete-status'])) {
179
+ $deleteData = 1;
180
+ }
181
+ $userRoles = $settings['plugin_users_role'];
182
+
183
+ if (empty($userRoles) || !is_array($userRoles)) {
184
+ $userRoles = array();
185
+ }
186
+
187
+ $userRoles = array_map(function($role) {
188
+ // it's remove sgpb_ keyword from selected values
189
+ $role = substr($role, 5, strlen($role)-1);
190
+
191
+ return $role;
192
+ }, $userRoles);
193
+
194
+ update_option('sgpb-user-roles', $userRoles);
195
+ update_option('sgpb-dont-delete-data', $deleteData);
196
+
197
+ return true;
198
+ }
199
+
200
+ private function convertCounter($idsMapping)
201
+ {
202
+ $oldCounter = get_option('SgpbCounter');
203
+
204
+ if (!$oldCounter) {
205
+ return false;
206
+ }
207
+ $newCounter = array();
208
+ foreach ($oldCounter as $key => $value) {
209
+ $newId = @$idsMapping[$key];
210
+ $newCounter[$newId] = $value;
211
+ }
212
+
213
+ update_option('SgpbCounter', $newCounter);
214
+
215
+ return true;
216
+ }
217
+
218
+
219
+ private function getAllSavedPopups()
220
+ {
221
+ global $wpdb;
222
+
223
+ $query = 'SELECT `id`, `type`, `title`, `options` from '.$wpdb->prefix.'sg_popup ORDER BY id';
224
+ $popups = $wpdb->get_results($query, ARRAY_A);
225
+
226
+ return $popups;
227
+ }
228
+
229
+ public function getNewOptionsFormSavedData($popup)
230
+ {
231
+ $options = $popup->getOptions();
232
+ $customOptions = $popup->getCustomOptions();
233
+ $options = array_merge($options, $customOptions);
234
+ // return addons event from add_connections data
235
+ $addonsEvent = $this->getAddonsEventFromPopup($popup);
236
+ if ($addonsEvent) {
237
+ $options = array_merge($options, $addonsEvent);
238
+ }
239
+ $options = $this->filterOptions($options);
240
+
241
+ $names = $this->getNamesMapping();
242
+ $newData = array();
243
+ $type = $popup->getType();
244
+
245
+ if (empty($names)) {
246
+ return $newData;
247
+ }
248
+
249
+ $newData['sgpb-type'] = $type;
250
+
251
+ foreach ($names as $oldName => $newName) {
252
+ if (isset($options[$oldName])) {
253
+ $optionName = $this->changeOldValues($oldName, $options[$oldName]);
254
+ $newData[$newName] = $optionName;
255
+ }
256
+ }
257
+ $newData['sgpb-enable-popup-overlay'] = 'on';
258
+ $newData['sgpb-show-background'] = 'on';
259
+
260
+ return $newData;
261
+ }
262
+
263
+ private function saveOtherOptions($options)
264
+ {
265
+ $popupId = (int)$options['sgpb-post-id'];
266
+ $mobileOperator = '';
267
+ $conditions = array();
268
+ $conditions['sgpb-target'] = array(array(array('param' => 'not_rule')));
269
+ $conditions['sgpb-conditions'] = array(array());
270
+
271
+ $eventsInitialData = array(
272
+ array(
273
+ )
274
+ );
275
+
276
+ if (!empty($options['sgpb-option-exit-intent-enable'])) {
277
+ $eventsInitialData[0][] = array(
278
+ 'param' => 'exitIntent',
279
+ 'value' => @$options['sgpb-option-exit-intent-type'],
280
+ 'hiddenOption' => array(
281
+ 'sgpb-exit-intent-expire-time' => @$options['sgpb-exit-intent-expire-time'],
282
+ 'sgpb-exit-intent-cookie-level' => @$options['sgpb-exit-intent-cookie-level'],
283
+ 'sgpb-exit-intent-soft-from-top' => @$options['sgpb-exit-intent-soft-from-top']
284
+ )
285
+ );
286
+ }
287
+ else if (!empty($options['sgpb-option-enable-ad-block'])) {
288
+ $eventsInitialData[0][] = array(
289
+ 'param' => 'AdBlock',
290
+ 'value' => $options['sgpb-popup-delay'],
291
+ 'hiddenOption' => array()
292
+ );
293
+ }
294
+
295
+ // after inactivity
296
+ if (!empty($options['sgpb-inactivity-status'])) {
297
+ $eventsInitialData[0][] = array(
298
+ 'param' => 'inactivity',
299
+ 'value' => @$options['sgpb-inactivity-timer'],
300
+ 'hiddenOption' => array()
301
+ );
302
+ }
303
+
304
+ // after scroll
305
+ if (!empty($options['sgpb-onscroll-status'])) {
306
+ $eventsInitialData[0][] = array(
307
+ 'param' => 'onScroll',
308
+ 'value' => @$options['sgpb-onscroll-percentage'],
309
+ 'hiddenOption' => array()
310
+ );
311
+ }
312
+
313
+ if (empty($eventsInitialData[0])) {
314
+ $eventsInitialData[0][] = array('param' => 'load', 'value' => '');
315
+ }
316
+
317
+ update_post_meta($popupId, 'sg_popup_events', $eventsInitialData);
318
+
319
+ // by user status (logged in/out)
320
+ if (!empty($options['sgpb-by-user-status'])) {
321
+ $operator = '==';
322
+ if (isset($options['sgpb-for-logged-in-user']) && $options['sgpb-for-logged-in-user'] === 'false') {
323
+ $operator = '!=';
324
+ }
325
+ $conditions['sgpb-conditions'][0][] = array(
326
+ 'param' => 'groups_user_role',
327
+ 'operator' => $operator,
328
+ 'value' => 'loggedIn'
329
+ );
330
+ }
331
+
332
+ // hide or show on mobile
333
+ if (isset($options['sgpb-hide-on-mobile']) && $options['sgpb-hide-on-mobile'] == 'on') {
334
+ $conditions['sgpb-conditions'][0][] = array(
335
+ 'param' => 'groups_devices',
336
+ 'operator' => '!=',
337
+ 'value' => array(
338
+ 'is_mobile'
339
+ )
340
+ );
341
+ }
342
+ if (isset($options['sgpb-only-on-mobile']) && $options['sgpb-only-on-mobile'] == 'on') {
343
+ $conditions['sgpb-conditions'][0][] = array(
344
+ 'param' => 'groups_devices',
345
+ 'operator' => '==',
346
+ 'value' => array(
347
+ 'is_mobile'
348
+ )
349
+ );
350
+ }
351
+
352
+ // detect by country
353
+ if (isset($options['sgpb-by-country']) && $options['sgpb-by-country'] == 'on') {
354
+ if (isset($options['sgpb-allow-countries'])) {
355
+ $options['sgpb-allow-countries'] = '!=';
356
+ if ($options['sgpb-allow-countries'] == 'allow') {
357
+ $options['sgpb-allow-countries'] = '==';
358
+ }
359
+ }
360
+ $conditions['sgpb-conditions'][0][] = array(
361
+ 'param' => 'groups_countries',
362
+ 'operator' => @$options['sgpb-allow-countries'],
363
+ 'value' => explode(',', @$options['sgpb-countries-iso'])
364
+ );
365
+ }
366
+
367
+ update_post_meta($popupId, 'sg_popup_target', $conditions);
368
+
369
+ // random popup
370
+ if (isset($options['sgpb-random-popup']) && $options['sgpb-random-popup'] == 'on') {
371
+ $randomPopupCategory = AdminHelper::getTaxonomyBySlug(SG_RANDOM_TAXONOMY_SLUG);
372
+ wp_set_object_terms($popupId, SG_RANDOM_TAXONOMY_SLUG, SG_POPUP_CATEGORY_TAXONOMY, true);
373
+ }
374
+
375
+ $this->saveProTarget($options);
376
+
377
+ // MailChimp
378
+ $mailchimpApiKey = get_option("SG_MAILCHIMP_API_KEY");
379
+
380
+ if ($mailchimpApiKey) {
381
+ update_option('SGPB_MAILCHIMP_API_KEY', $mailchimpApiKey);
382
+ }
383
+
384
+ // AWeber
385
+ $aweberAccessToken = get_option('sgAccessToken');
386
+ if ($aweberAccessToken) {
387
+ $requestTokenSecret = get_option('requestTokenSecret');
388
+ $accessTokenSecret = get_option('sgAccessTokenSecret');
389
+
390
+ update_option('sgpbRequestTokenSecret', $requestTokenSecret);
391
+ update_option('sgpbAccessTokenSecret', $accessTokenSecret);
392
+ update_option('sgpbAccessToken', $aweberAccessToken);
393
+ }
394
+
395
+ return $options;
396
+ }
397
+
398
+ public function saveProTarget($options)
399
+ {
400
+ if (empty($options)) {
401
+ return;
402
+ }
403
+ $popupId = (int)$options['sgpb-post-id'];
404
+ // It's got already saved targets for do not override already saved data
405
+ $popupSavedTarget = get_post_meta($popupId, 'sg_popup_target');
406
+ $target = array();
407
+ $target['sgpb-target'] = array();
408
+ $target['sgpb-conditions'] = array();
409
+
410
+ if (!empty($popupSavedTarget[0]['sgpb-conditions'])) {
411
+ $target['sgpb-conditions'] = $popupSavedTarget[0]['sgpb-conditions'];
412
+ }
413
+ $isSavedToHome = false;
414
+
415
+ if (!empty($options['allPagesStatus'])) {
416
+
417
+ if ($options['allPages'] == 'selected') {
418
+ $savedPages = (array)@$options['allSelectedPages'];
419
+ $savedPagesValues = array_values($savedPages);
420
+
421
+ // -1 mean saved for home page
422
+ if (in_array('-1', $savedPagesValues)) {
423
+ $isSavedToHome = true;
424
+ }
425
+ $args = array(
426
+ 'post__in' => $savedPagesValues,
427
+ 'posts_per_page' => 10,
428
+ 'post_type' => 'page'
429
+ );
430
+
431
+ $searchResults = ConfigDataHelper::getPostTypeData($args);
432
+ if (!empty($searchResults)) {
433
+ $target['sgpb-target'][0][] = array('param' => 'page_selected', 'operator' => '==', 'value' => $searchResults);
434
+ }
435
+ }
436
+ else {
437
+ $target['sgpb-target'][0][] = array('param' => 'page_all', 'operator' => '==');
438
+ }
439
+ }
440
+
441
+ if (!empty($options['allPostsStatus'])) {
442
+ $allPosts = $options['allPosts'];
443
+ if ($allPosts == 'selected') {
444
+ $savedPosts = (array)$options['allSelectedPosts'];
445
+ $savedPostsValues = array_values($savedPosts);
446
+ // -1 mean saved for home page
447
+ if (in_array('-1', $savedPostsValues)) {
448
+ $isSavedToHome = true;
449
+ }
450
+ $args = array(
451
+ 'post__in' => $savedPostsValues,
452
+ 'posts_per_page' => 10,
453
+ 'post_type' => 'post'
454
+ );
455
+
456
+ $searchResults = ConfigDataHelper::getPostTypeData($args);
457
+ if (!empty($searchResults)) {
458
+ $target['sgpb-target'][0][] = array('param' => 'post_selected', 'operator' => '==', 'value' => $searchResults);
459
+ }
460
+ }
461
+ else if ($allPosts == 'all') {
462
+ $target['sgpb-target'][0][] = array('param' => 'post_all', 'operator' => '==');
463
+ }
464
+ else {
465
+ $selectedPostCategories = array_values($options['posts-all-categories']);
466
+ $target['sgpb-target'][0][] = array('param' => 'post_category', 'operator' => '==', 'value' => $selectedPostCategories);
467
+ }
468
+ }
469
+
470
+ if ($isSavedToHome) {
471
+ $target['sgpb-target'][0][] = array('param' => 'page_type', 'operator' => '==', 'value' => array('is_home_page', 'is_home'));
472
+ }
473
+
474
+ if (!empty($options['allCustomPostsStatus'])) {
475
+ $customPostTypes = $options['all-custom-posts'];
476
+ if (!empty($customPostTypes)) {
477
+ $selectedCustomPosts = $options['allSelectedCustomPosts'];
478
+ if ($options['showAllCustomPosts'] == 'selected') {
479
+ foreach ($customPostTypes as $customPostType) {
480
+ $args = array(
481
+ 'post__in' => array_values($selectedCustomPosts),
482
+ 'posts_per_page' => 10,
483
+ 'post_type' => $customPostType
484
+ );
485
+
486
+ $searchResults = ConfigDataHelper::getPostTypeData($args);
487
+ if (!empty($searchResults)) {
488
+ $target['sgpb-target'][0][] = array('param' => $customPostType.'_selected', 'operator' => '==', 'value' => $searchResults);
489
+ }
490
+ }
491
+ }
492
+
493
+ else {
494
+ $target['sgpb-target'][0][] = array('param' => 'post_type', 'operator' => '==', 'value' => array_values($customPostTypes));
495
+
496
+ }
497
+ }
498
+ }
499
+
500
+ update_post_meta($popupId, 'sg_popup_target', $target);
501
+ }
502
+
503
+ /**
504
+ * Get Addons options
505
+ *
506
+ * @param obj $popup
507
+ *
508
+ * @return bool|array
509
+ */
510
+ private function getAddonsEventFromPopup($popup)
511
+ {
512
+ if (empty($popup)) {
513
+ return false;
514
+ }
515
+ $popupId = $popup->getId();
516
+ global $wpdb;
517
+
518
+ $addonsOptionSqlString = 'SELECT options FROM '.$wpdb->prefix.'sg_popup_addons_connection WHERE popupId = %d and extensionType = "option"';
519
+ $addonsSql = $wpdb->prepare($addonsOptionSqlString, $popupId);
520
+ $results = $wpdb->get_results($addonsSql, ARRAY_A);
521
+
522
+ if (empty($results)) {
523
+ return false;
524
+ }
525
+
526
+ $options = array();
527
+
528
+ // it's collect all events saved values ex Exit Intent and AdBlock
529
+ foreach ($results as $result) {
530
+ $currentOptions = json_decode($result['options'], true);
531
+
532
+ if (empty($currentOptions)) {
533
+ continue;
534
+ }
535
+ $options = array_merge($options, $currentOptions);
536
+ }
537
+
538
+ return $options;
539
+ }
540
+
541
+ /**
542
+ * Filter and change some related values for new version
543
+ *
544
+ * @param array $options
545
+ *
546
+ * @return array $options
547
+ */
548
+ private function filterOptions($options)
549
+ {
550
+ if (@$options['effect'] != 'No effect') {
551
+ $options['sgpb-open-animation'] = 'on';
552
+ }
553
+
554
+ if (isset($options['isActiveStatus']) && $options['isActiveStatus'] == 'off') {
555
+ $options['isActiveStatus'] = '';
556
+ }
557
+
558
+ if (empty($options['sgTheme3BorderColor'])) {
559
+ $options['sgTheme3BorderColor'] = '#000000';
560
+ }
561
+
562
+ if (@$options['popupContentBackgroundRepeat'] != 'no-repeat' && $options['popupContentBackgroundSize'] == 'auto') {
563
+ $options['popupContentBackgroundSize'] = 'repeat';
564
+ }
565
+ $themeNumber = 1;
566
+
567
+ if (isset($options['theme'])) {
568
+ $themeNumber = preg_replace('/[^0-9]/', '', $options['theme']);
569
+ }
570
+
571
+ if (isset($options['aweber-success-behavior']) && $options['aweber-success-behavior'] == 'redirectToUrl') {
572
+ $options['aweber-success-behavior'] = 'redirectToURL';
573
+ }
574
+
575
+ // pro options
576
+ if (isset($options['disablePopupOverlay'])) {
577
+ $options['sgpb-enable-popup-overlay'] = '';
578
+ }
579
+ // contact form new options
580
+ if (isset($options['contact-success-behavior']) && $options['contact-success-behavior'] == 'redirectToUrl') {
581
+ $options['contact-success-behavior'] = 'redirectToURL';
582
+ }
583
+ if (isset($options['contact-text-input-bgcolor'])) {
584
+ $options['sgpb-contact-message-bg-color'] = $options['contact-text-input-bgcolor'];
585
+ }
586
+ if (isset($options['contact-text-bordercolor'])) {
587
+ $options['sgpb-contact-message-border-color'] = $options['contact-text-bordercolor'];
588
+ }
589
+ if (isset($options['contact-inputs-color'])) {
590
+ $options['sgpb-contact-message-text-color'] = $options['contact-inputs-color'];
591
+ }
592
+ if (isset($options['contact-placeholder-color'])) {
593
+ $options['sgpb-contact-message-placeholder-color'] = $options['contact-placeholder-color'];
594
+ }
595
+ if (isset($options['contact-inputs-border-width'])) {
596
+ $options['sgpb-contact-message-border-width'] = $options['contact-inputs-border-width'];
597
+ }
598
+
599
+ if (isset($options['contact-success-popups-list'])) {
600
+ $options['contact-success-popups-list'] = sgpGetCorrectPopupId($options['contact-success-popups-list']);
601
+ }
602
+
603
+ if (isset($options['popup-content-padding'])) {
604
+ // add theme default padding to content padding
605
+ switch ($themeNumber) {
606
+ case 1:
607
+ $options['popup-content-padding'] += 7;
608
+ break;
609
+ case 4:
610
+ case 6:
611
+ $options['popup-content-padding'] += 12;
612
+ break;
613
+ case 2:
614
+ case 3:
615
+ $options['popup-content-padding'] += 0;
616
+ break;
617
+ case 5:
618
+ $options['popup-content-padding'] += 5;
619
+ break;
620
+ }
621
+ }
622
+
623
+ switch ($themeNumber) {
624
+ case 1:
625
+ $buttonImageWidth = 21;
626
+ $buttonImageHeight = 21;
627
+ break;
628
+ case 2:
629
+ $buttonImageWidth = 20;
630
+ $buttonImageHeight = 20;
631
+ break;
632
+ case 3:
633
+ $buttonImageWidth = 38;
634
+ $buttonImageHeight = 19;
635
+ break;
636
+ case 5:
637
+ $buttonImageWidth = 17;
638
+ $buttonImageHeight = 17;
639
+ break;
640
+ case 6:
641
+ $buttonImageWidth = 30;
642
+ $buttonImageHeight = 30;
643
+ break;
644
+ default:
645
+ $buttonImageWidth = 0;
646
+ $buttonImageHeight = 0;
647
+ }
648
+
649
+ // social popup add to default value
650
+ if (empty($options['sgMailLable'])) {
651
+ $options['sgMailLable'] = 'E-mail';
652
+ }
653
+ if (empty($options['fbShareLabel'])) {
654
+ $options['fbShareLabel'] = 'Share';
655
+ }
656
+ if (empty($options['lindkinLabel'])) {
657
+ $options['lindkinLabel'] = 'Share';
658
+ }
659
+ if (empty($options['googLelabel'])) {
660
+ $options['googLelabel'] = '+1';
661
+ }
662
+ if (empty($options['twitterLabel'])) {
663
+ $options['twitterLabel'] = 'Tweet';
664
+ }
665
+ if (empty($options['pinterestLabel'])) {
666
+ $options['pinterestLabel'] = 'Pin it';
667
+ }
668
+
669
+ if (isset($options['subs-success-behavior']) && $options['subs-success-behavior'] == 'redirectToUrl') {
670
+ $options['subs-success-behavior'] = 'redirectToURL';
671
+ }
672
+
673
+ $options['sgpb-subs-form-bg-color'] = '#FFFFFF';
674
+ $options['sgpb-button-image-width'] = $buttonImageWidth;
675
+ $options['sgpb-button-image-height'] = $buttonImageHeight;
676
+
677
+ // pro options customizations
678
+ if (SGPB_POPUP_PKG > SGPB_POPUP_PKG_FREE) {
679
+ if (empty($options['sgpb-restriction-yes-btn-radius-type'])) {
680
+ $options['sgpb-restriction-yes-btn-radius-type'] = '%';
681
+ }
682
+
683
+ if (empty($options['sgpb-restriction-no-btn-radius-type'])) {
684
+ $options['sgpb-restriction-no-btn-radius-type'] = '%';
685
+ }
686
+
687
+ if (empty($options['sgpb-restriction-yes-btn-border-color'])) {
688
+ // border color should be like background color
689
+ $options['sgpb-restriction-yes-btn-border-color'] = $options['yesButtonBackgroundColor'];
690
+ }
691
+ if (empty($options['sgpb-restriction-no-btn-border-color'])) {
692
+ // border color should be like background color
693
+ $options['sgpb-restriction-no-btn-border-color'] = $options['noButtonBackgroundColor'];
694
+ }
695
+ }
696
+
697
+ return $options;
698
+ }
699
+
700
+ public function changeOldValues($optionName, $optionValue)
701
+ {
702
+ if ($optionName == 'theme') {
703
+ $themeNumber = preg_replace('/[^0-9]/', '', $optionValue);
704
+ $optionValue = 'sgpb-theme-'.$themeNumber;
705
+ }
706
+
707
+ return $optionValue;
708
+ }
709
+
710
+ private function popupObjectFromArray($arr)
711
+ {
712
+ global $wpdb;
713
+
714
+ $options = json_decode($arr['options'], true);
715
+ $type = $arr['type'];
716
+
717
+ if (empty($type)) {
718
+ return false;
719
+ }
720
+
721
+ $this->setId($arr['id']);
722
+ $this->setType($type);
723
+ $this->setTitle($arr['title']);
724
+ $this->setContent('');
725
+
726
+ switch ($type) {
727
+ case 'image':
728
+ $query = $wpdb->prepare('SELECT `url` FROM '.$wpdb->prefix.'sg_image_popup WHERE id = %d', $arr['id']);
729
+ $result = $wpdb->get_row($query, ARRAY_A);
730
+
731
+ if (!empty($result['url'])) {
732
+ $options['image-url'] = $result['url'];
733
+ }
734
+ break;
735
+ case 'html':
736
+ $query = $wpdb->prepare('SELECT `content` FROM '.$wpdb->prefix.'sg_html_popup WHERE id = %d', $arr['id']);
737
+ $result = $wpdb->get_row($query, ARRAY_A);
738
+
739
+ if (!empty($result['content'])) {
740
+ $this->setContent($result['content']);
741
+ }
742
+ break;
743
+ case 'fblike':
744
+ $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_fblike_popup WHERE id = %d', $arr['id']);
745
+ $result = $wpdb->get_row($query, ARRAY_A);
746
+
747
+ if (!empty($result['content'])) {
748
+ $this->setContent($result['content']);
749
+ }
750
+ $customOptions = $result['options'];
751
+ $customOptions = json_decode($customOptions, true);
752
+
753
+ if (!empty($options)) {
754
+ $this->setCustomOptions($customOptions);
755
+ }
756
+ break;
757
+ case 'shortcode':
758
+ $query = $wpdb->prepare('SELECT `url` FROM '.$wpdb->prefix.'sg_shortCode_popup WHERE id = %d', $arr['id']);
759
+ $result = $wpdb->get_row($query, ARRAY_A);
760
+
761
+ if (!empty($result['url'])) {
762
+ $this->setContent($result['url']);
763
+ }
764
+ break;
765
+ case 'iframe':
766
+ $query = $wpdb->prepare('SELECT `url` FROM '.$wpdb->prefix.'sg_iframe_popup WHERE id = %d', $arr['id']);
767
+ $result = $wpdb->get_row($query, ARRAY_A);
768
+ if (!empty($result['url'])) {
769
+ $options['iframe-url'] = $result['url'];
770
+ }
771
+ break;
772
+ case 'video':
773
+ $query = $wpdb->prepare('SELECT `url`, `options` FROM '.$wpdb->prefix.'sg_video_popup WHERE id = %d', $arr['id']);
774
+ $result = $wpdb->get_row($query, ARRAY_A);
775
+ if (!empty($result['url'])) {
776
+ $options['video-url'] = $result['url'];
777
+ }
778
+
779
+ $customOptions = $result['options'];
780
+ $customOptions = json_decode($customOptions, true);
781
+
782
+ if (!empty($customOptions)) {
783
+ $this->setCustomOptions($customOptions);
784
+ }
785
+ break;
786
+ case 'ageRestriction':
787
+ $query = $wpdb->prepare('SELECT `content`, `yesButton` as `yesButtonLabel`, `noButton` as `noButtonLabel`, `url` as `restrictionUrl` FROM '.$wpdb->prefix.'sg_age_restriction_popup WHERE id = %d', $arr['id']);
788
+ $result = $wpdb->get_row($query, ARRAY_A);
789
+ if (!empty($result['content'])) {
790
+ $this->setContent($result['content']);
791
+ }
792
+ unset($result['content']);
793
+ if (!empty($result)) {
794
+ $this->setCustomOptions($result);
795
+ }
796
+ break;
797
+ case 'social':
798
+ $query = $wpdb->prepare('SELECT `socialContent`, `buttons`, `socialOptions` FROM '.$wpdb->prefix.'sg_social_popup WHERE id = %d', $arr['id']);
799
+ $result = $wpdb->get_row($query, ARRAY_A);
800
+
801
+ if (!empty($result['socialContent'])) {
802
+ $this->setContent($result['socialContent']);
803
+ }
804
+
805
+ $buttons = json_decode($result['buttons'], true);
806
+ $socialOptions = json_decode($result['socialOptions'], true);
807
+
808
+ $socialAllOptions = array_merge($buttons, $socialOptions);
809
+
810
+ $this->setCustomOptions($socialAllOptions);
811
+ break;
812
+ case 'subscription':
813
+ $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_subscription_popup WHERE id = %d', $arr['id']);
814
+ $result = $wpdb->get_row($query, ARRAY_A);
815
+
816
+ if (!empty($result['content'])) {
817
+ $this->setContent($result['content']);
818
+ }
819
+
820
+ $subsOptions = $result['options'];
821
+ $subsOptions = json_decode($subsOptions, true);
822
+
823
+ if (!empty($subsOptions)) {
824
+ $this->setCustomOptions($subsOptions);
825
+ }
826
+ break;
827
+ case 'countdown':
828
+ $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_countdown_popup WHERE id = %d', $arr['id']);
829
+ $result = $wpdb->get_row($query, ARRAY_A);
830
+
831
+ if (!empty($result['content'])) {
832
+ $this->setContent($result['content']);
833
+ }
834
+ $customOptions = $result['options'];
835
+ $customOptions = json_decode($customOptions, true);
836
+
837
+ if (!empty($options)) {
838
+ $this->setCustomOptions($customOptions);
839
+ }
840
+ break;
841
+ case 'contactForm':
842
+ $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_contact_form_popup WHERE id = %d', $arr['id']);
843
+ $result = $wpdb->get_row($query, ARRAY_A);
844
+
845
+ if (!empty($result['content'])) {
846
+ $this->setContent($result['content']);
847
+ }
848
+ $customOptions = $result['options'];
849
+ $customOptions = json_decode($customOptions, true);
850
+
851
+ if (!empty($options)) {
852
+ $this->setCustomOptions($customOptions);
853
+ }
854
+ break;
855
+ case 'mailchimp':
856
+ $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_popup_mailchimp WHERE id = %d', $arr['id']);
857
+ $result = $wpdb->get_row($query, ARRAY_A);
858
+
859
+ if (!empty($result['content'])) {
860
+ $this->setContent($result['content']);
861
+ }
862
+
863
+ $customOptions = $result['options'];
864
+ $customOptions = json_decode($customOptions, true);
865
+
866
+ if (!empty($options)) {
867
+ $this->setCustomOptions($customOptions);
868
+ }
869
+ break;
870
+ case 'aweber':
871
+ $query = $wpdb->prepare('SELECT `content`, `options` FROM '.$wpdb->prefix.'sg_popup_aweber WHERE id = %d', $arr['id']);
872
+ $result = $wpdb->get_row($query, ARRAY_A);
873
+
874
+ if (!empty($result['content'])) {
875
+ $this->setContent($result['content']);
876
+ }
877
+
878
+ $customOptions = $result['options'];
879
+ $customOptions = json_decode($customOptions, true);
880
+
881
+ if (!empty($options)) {
882
+ $this->setCustomOptions($customOptions);
883
+ }
884
+ break;
885
+ }
886
+
887
+ $this->setOptions($options);
888
+
889
+ return $this;
890
+ }
891
+
892
+ public function getNamesMapping()
893
+ {
894
+ $names = array(
895
+ 'type' => 'sgpb-type',
896
+ 'delay' => 'sgpb-popup-delay',
897
+ 'isActiveStatus' => 'sgpb-is-active',
898
+ 'image-url' => 'sgpb-image-url',
899
+ 'theme' => 'sgpb-popup-themes',
900
+ 'effect' => 'sgpb-open-animation-effect',
901
+ 'duration' => 'sgpb-open-animation-speed',
902
+ 'popupOpenSound' => 'sgpb-open-sound',
903
+ 'popupOpenSoundFile' => 'sgpb-sound-url',
904
+ 'popup-dimension-mode' => 'sgpb-popup-dimension-mode',
905
+ 'popup-responsive-dimension-measure' => 'sgpb-responsive-dimension-measure',
906
+ 'width' => 'sgpb-width',
907
+ 'height' => 'sgpb-height',
908
+ 'maxWidth' => 'sgpb-max-width',
909
+ 'maxHeight' => 'sgpb-max-height',
910
+ 'escKey' => 'sgpb-esc-key',
911
+ 'closeButton' => 'sgpb-enable-close-button',
912
+ 'buttonDelayValue' => 'sgpb-close-button-delay',
913
+ 'scrolling' => 'sgpb-enable-content-scrolling',
914
+ 'disable-page-scrolling' => 'sgpb-disable-page-scrolling',
915
+ 'overlayClose' => 'sgpb-overlay-click',
916
+ 'contentClick' => 'sgpb-content-click',
917
+ 'content-click-behavior' => 'sgpb-content-click-behavior',
918
+ 'click-redirect-to-url' => 'sgpb-click-redirect-to-url',
919
+ 'redirect-to-new-tab' => 'sgpb-redirect-to-new-tab',
920
+ 'reopenAfterSubmission' => 'sgpb-reopen-after-form-submission',
921
+ 'repeatPopup' => 'sgpb-show-popup-same-user',
922
+ 'popup-appear-number-limit' => 'sgpb-show-popup-same-user-count',
923
+ 'onceExpiresTime' => 'sgpb-show-popup-same-user-expiry',
924
+ 'save-cookie-page-level' => 'sgpb-show-popup-same-user-page-level',
925
+ 'popupContentBgImage' => 'sgpb-show-background',
926
+ 'popupContentBackgroundSize' => 'sgpb-background-image-mode',
927
+ 'popupContentBgImageUrl' => 'sgpb-background-image',
928
+ 'sgOverlayColor' => 'sgpb-overlay-color',
929
+ 'sg-content-background-color' => 'sgpb-background-color',
930
+ 'popup-background-opacity' => 'sgpb-content-opacity',
931
+ 'opacity' => 'sgpb-overlay-opacity',
932
+ 'sgOverlayCustomClasss' => 'sgpb-overlay-custom-class',
933
+ 'sgContentCustomClasss' => 'sgpb-content-custom-class',
934
+ 'popup-z-index' => 'sgpb-popup-z-index',
935
+ 'popup-content-padding' => 'sgpb-content-padding',
936
+ 'popupFixed' => 'sgpb-popup-fixed',
937
+ 'fixedPostion' => 'sgpb-popup-fixed-position',
938
+ 'sgpb-open-animation' => 'sgpb-open-animation',
939
+ 'theme-close-text' => 'sgpb-button-text',
940
+ 'sgTheme3BorderRadius' => 'sgpb-border-radius',
941
+ 'sgTheme3BorderColor' => 'sgpb-border-color',
942
+ 'fblike-like-url' => 'sgpb-fblike-like-url',
943
+ 'fblike-layout' => 'sgpb-fblike-layout',
944
+ 'fblike-dont-show-share-button' => 'sgpb-fblike-dont-show-share-button',
945
+ 'sgpb-button-image-width' => 'sgpb-button-image-width',
946
+ 'sgpb-button-image-height' => 'sgpb-button-image-height'
947
+ );
948
+ // iframe pro popup type
949
+ $names['iframe-url'] = 'sgpb-iframe-url';
950
+
951
+ // video pro popup type
952
+ $names['video-url'] = 'sgpb-video-url';
953
+ $names['video-autoplay'] = 'sgpb-video-autoplay';
954
+
955
+ // age restriction
956
+ $names['yesButtonLabel'] = 'sgpb-restriction-yes-btn';
957
+ $names['noButtonLabel'] = 'sgpb-restriction-no-btn';
958
+ $names['restrictionUrl'] = 'sgpb-restriction-no-url';
959
+ $names['yesButtonBackgroundColor'] = 'sgpb-restriction-yes-btn-bg-color';
960
+ $names['yesButtonTextColor'] = 'sgpb-restriction-yes-btn-text-color';
961
+ $names['yesButtonRadius'] = 'sgpb-restriction-yes-btn-radius';
962
+ $names['sgRestrictionExpirationTime'] = 'sgpb-restriction-yes-expiration-time';
963
+ $names['restrictionCookeSavingLevel'] = 'sgpb-restriction-cookie-level';
964
+ $names['noButtonBackgroundColor'] = 'sgpb-restriction-no-btn-bg-color';
965
+ $names['noButtonTextColor'] = 'sgpb-restriction-no-btn-text-color';
966
+ $names['noButtonRadius'] = 'sgpb-restriction-no-btn-radius';
967
+
968
+ // age restriction new options
969
+ $names['sgpb-restriction-yes-btn-radius-type'] = 'sgpb-restriction-yes-btn-radius-type';
970
+ $names['sgpb-restriction-no-btn-radius-type'] = 'sgpb-restriction-no-btn-radius-type';
971
+ $names['sgpb-restriction-yes-btn-border-color'] = 'sgpb-restriction-yes-btn-border-color';
972
+ $names['sgpb-restriction-no-btn-border-color'] = 'sgpb-restriction-no-btn-border-color';
973
+
974
+ $proNames = array(
975
+ 'autoClosePopup' => 'sgpb-auto-close',
976
+ 'popupClosingTimer' => 'sgpb-auto-close-time',
977
+ 'disablePopupOverlay' => 'sgpb-enable-popup-overlay',
978
+ 'disablePopup' => 'sgpb-disable-popup-closing',
979
+ 'popup-schedule-status' => 'sgpb-schedule-status',
980
+ 'schedule-start-weeks' => 'sgpb-schedule-weeks',
981
+ 'schedule-start-time' => 'sgpb-schedule-start-time',
982
+ 'schedule-end-time' => 'sgpb-schedule-end-time',
983
+ 'popup-timer-status' => 'sgpb-popup-timer-status',
984
+ 'popup-start-timer' => 'sgpb-popup-start-timer',
985
+ 'popup-finish-timer' => 'sgpb-popup-end-timer',
986
+ 'inActivityStatus' => 'sgpb-inactivity-status',
987
+ 'inactivity-timout' => 'sgpb-inactivity-timer',
988
+ 'onScrolling' => 'sgpb-onscroll-status',
989
+ 'beforeScrolingPrsent' => 'sgpb-onscroll-percentage',
990
+ 'sg-user-status' => 'sgpb-by-user-status',
991
+ 'loggedin-user' => 'sgpb-for-logged-in-user',
992
+ 'forMobile' => 'sgpb-hide-on-mobile',
993
+ 'openMobile' => 'sgpb-only-on-mobile',
994
+ 'countryStatus' => 'sgpb-by-country',
995
+ 'allowCountries' => 'sgpb-allow-countries',
996
+ 'countryIso' => 'sgpb-countries-iso',
997
+ 'randomPopup' => 'sgpb-random-popup'
998
+ );
999
+ $names = array_merge($names, $proNames);
1000
+
1001
+ // pro options
1002
+ $names['allPagesStatus'] = 'allPagesStatus';
1003
+ $names['showAllPages'] = 'allPages';
1004
+ $names['allSelectedPages'] = 'allSelectedPages';
1005
+ $names['allPostsStatus'] = 'allPostsStatus';
1006
+ $names['showAllPosts'] = 'allPosts';
1007
+ $names['allSelectedPosts'] = 'allSelectedPosts';
1008
+ $names['posts-all-categories'] = 'posts-all-categories';
1009
+ $names['allCustomPostsStatus'] = 'allCustomPostsStatus';
1010
+ $names['all-custom-posts'] = 'all-custom-posts';
1011
+ $names['showAllCustomPosts'] = 'showAllCustomPosts';
1012
+ $names['allSelectedCustomPosts'] = 'allSelectedCustomPosts';
1013
+ // countdown pro popup type
1014
+ $names['countdownNumbersBgColor'] = 'sgpb-counter-background-color';
1015
+ $names['countdownNumbersTextColor'] = 'sgpb-counter-text-color';
1016
+ $names['sg-due-date'] = 'sgpb-countdown-due-date';
1017
+ $names['sg-countdown-type'] = 'sgpb-countdown-type';
1018
+ $names['sg-time-zone'] = 'sgpb-countdown-timezone';
1019
+ $names['counts-language'] = 'sgpb-countdown-language';
1020
+ $names['pushToBottom'] = 'sgpb-countdown-show-on-top';
1021
+ $names['countdown-autoclose'] = 'sgpb-countdown-close-timeout';
1022
+ // contact form pro popup type
1023
+ $names['show-form-to-top'] = 'sgpb-contact-show-form-to-top';
1024
+ $names['contact-name-status'] = 'sgpb-contact-field-name';
1025
+ $names['contact-name'] = 'sgpb-contact-name-placeholder';
1026
+ $names['contact-name-required'] = 'sgpb-contact-name-required';
1027
+ $names['contact-subject-status'] = 'sgpb-contact-field-subject';
1028
+ $names['contact-subject'] = 'sgpb-contact-subject-placeholder';
1029
+ $names['contact-subject-required'] = 'sgpb-contact-subject-required';
1030
+ $names['contact-email'] = 'sgpb-contact-email-placeholder';
1031
+ $names['contact-message'] = 'sgpb-contact-message-placeholder';
1032
+ $names['contact-fail-message'] = 'sgpb-contact-error-message';
1033
+ $names['contact-receive-email'] = 'sgpb-contact-to-email';
1034
+ $names['contact-validation-message'] = 'sgpb-contact-required-message';
1035
+ $names['contact-validate-email'] = 'sgpb-contact-invalid-email-message';
1036
+ $names['contact-inputs-width'] = 'sgpb-contact-inputs-width';
1037
+ $names['contact-inputs-height'] = 'sgpb-contact-inputs-height';
1038
+ $names['contact-inputs-border-width'] = 'sgpb-contact-inputs-border-width';
1039
+ $names['contact-text-input-bgcolor'] = 'sgpb-contact-inputs-bg-color';
1040
+ $names['contact-text-bordercolor'] = 'sgpb-contact-inputs-border-color';
1041
+ $names['contact-inputs-color'] = 'sgpb-contact-inputs-text-color';
1042
+ $names['contact-placeholder-color'] = 'sgpb-contact-inputs-placeholder-color';
1043
+ $names['contact-area-width'] = 'sgpb-contact-message-width';
1044
+ $names['contact-area-height'] = 'sgpb-contact-message-height';
1045
+ $names['sg-contact-resize'] = 'sgpb-contact-message-resize';
1046
+ $names['contact-btn-width'] = 'sgpb-contact-submit-width';
1047
+ $names['contact-btn-height'] = 'sgpb-contact-submit-height';
1048
+ $names['contact-btn-title'] = 'sgpb-contact-submit-title';
1049
+ $names['contact-btn-progress-title'] = 'sgpb-contact-submit-title-progress';
1050
+ $names['contact-button-bgcolor'] = 'sgpb-contact-submit-bg-color';
1051
+ $names['contact-button-color'] = 'sgpb-contact-submit-text-color';
1052
+ $names['dont-show-content-to-contacted-user'] = 'sgpb-contact-hide-for-contacted-users';
1053
+ $names['contact-success-behavior'] = 'sgpb-contact-success-behavior';
1054
+ $names['contact-success-message'] = 'sgpb-contact-success-message';
1055
+ $names['contact-success-redirect-url'] = 'sgpb-contact-success-redirect-URL';
1056
+ $names['contact-success-redirect-new-tab'] = 'sgpb-contact-success-redirect-new-tab';
1057
+ $names['contact-success-popups-list'] = 'sgpb-contact-success-popup';
1058
+ $names['contact-gdpr'] = 'sgpb-contact-gdpr-status';
1059
+ $names['contact-gdpr-label'] = 'sgpb-contact-gdpr-label';
1060
+ $names['contact-gdpr-text'] = 'sgpb-contact-gdpr-text';
1061
+ $names['sgpb-contact-message-bg-color'] = 'sgpb-contact-message-bg-color';
1062
+ $names['sgpb-contact-message-border-color'] = 'sgpb-contact-message-border-color';
1063
+ $names['sgpb-contact-message-text-color'] = 'sgpb-contact-message-text-color';
1064
+ $names['sgpb-contact-message-placeholder-color'] = 'sgpb-contact-message-placeholder-color';
1065
+ $names['sgpb-contact-message-border-width'] = 'sgpb-contact-message-border-width';
1066
+
1067
+ // Social
1068
+ $names['shareUrlType'] = 'sgpb-social-share-url-type';
1069
+ $names['sgShareUrl'] = 'sgpb-social-share-url';
1070
+ $names['sgSocialTheme'] = 'sgpb-social-share-theme';
1071
+ $names['sgSocialButtonsSize'] = 'sgpb-social-theme-size';
1072
+ $names['sgSocialLabel'] = 'sgpb-social-show-labels';
1073
+ $names['sgSocialShareCount'] = 'sgpb-social-share-count';
1074
+ $names['sgRoundButton'] = 'sgpb-social-round-buttons';
1075
+ $names['sgEmailStatus'] = 'sgpb-social-status-email';
1076
+ $names['sgMailLable'] = 'sgpb-social-label-email';
1077
+ $names['sgFbStatus'] = 'sgpb-social-status-facebook';
1078
+ $names['fbShareLabel'] = 'sgpb-social-label-facebook';
1079
+ $names['sgLinkedinStatus'] = 'sgpb-social-status-linkedin';
1080
+ $names['lindkinLabel'] = 'sgpb-social-label-linkedin';
1081
+ $names['sgGoogleStatus'] = 'sgpb-social-status-googleplus';
1082
+ $names['googLelabel'] = 'sgpb-social-label-googleplus';
1083
+ $names['sgTwitterStatus'] = 'sgpb-social-status-twitter';
1084
+ $names['twitterLabel'] = 'sgpb-social-label-twitter';
1085
+ $names['sgPinterestStatus'] = 'sgpb-social-status-pinterest';
1086
+ $names['pinterestLabel'] = 'sgpb-social-label-pinterest';
1087
+
1088
+ // Subscription
1089
+ $names['subscription-email'] = 'sgpb-subs-email-placeholder';
1090
+ $names['subs-gdpr'] = 'sgpb-subs-gdpr-status';
1091
+ $names['subs-gdpr-label'] = 'sgpb-subs-gdpr-label';
1092
+ $names['subs-gdpr-text'] = 'sgpb-subs-gdpr-text';
1093
+ $names['subs-first-name-status'] = 'sgpb-subs-first-name-status';
1094
+ $names['subs-first-name'] = 'sgpb-subs-first-placeholder';
1095
+ $names['subs-first-name-required'] = 'sgpb-subs-first-name-required';
1096
+ $names['subs-last-name-status'] = 'sgpb-subs-last-name-status';
1097
+ $names['subs-last-name'] = 'sgpb-subs-last-placeholder';
1098
+ $names['subs-last-name-required'] = 'sgpb-subs-last-name-required';
1099
+ $names['subs-validation-message'] = 'sgpb-subs-validation-message';
1100
+ $names['subs-text-width'] = 'sgpb-subs-text-width';
1101
+ $names['subs-text-height'] = 'sgpb-subs-text-height';
1102
+ $names['subs-text-border-width'] = 'sgpb-subs-text-border-width';
1103
+ $names['subs-text-input-bgColor'] = 'sgpb-subs-text-bg-color';
1104
+ $names['subs-text-borderColor'] = 'sgpb-subs-text-border-color';
1105
+ $names['subs-inputs-color'] = 'sgpb-subs-text-color';
1106
+ $names['subs-placeholder-color'] = 'sgpb-subs-text-placeholder-color';
1107
+ $names['subs-btn-width'] = 'sgpb-subs-btn-width';
1108
+ $names['subs-btn-height'] = 'sgpb-subs-btn-height';
1109
+ $names['subs-btn-title'] = 'sgpb-subs-btn-title';
1110
+ $names['subs-btn-progress-title'] = 'sgpb-subs-btn-progress-title';
1111
+ $names['subs-button-bgColor'] = 'sgpb-subs-btn-bg-color';
1112
+ $names['subs-button-color'] = 'sgpb-subs-btn-text-color';
1113
+ $names['subs-success-behavior'] = 'sgpb-subs-success-behavior';
1114
+ $names['subs-success-message'] = 'sgpb-subs-success-message';
1115
+ $names['subs-success-redirect-url'] = 'sgpb-subs-success-redirect-URL';
1116
+ $names['subs-success-redirect-new-tab'] = 'sgpb-subs-success-redirect-new-tab';
1117
+ $names['subs-success-popups-list'] = 'sgpb-subs-success-popup';
1118
+ // Subscription new option
1119
+ $names['sgpb-subs-form-bg-color'] = 'sgpb-subs-form-bg-color';
1120
+
1121
+ // Exit Intent extension names
1122
+ $names['option-exit-intent-enable'] = 'sgpb-option-exit-intent-enable';
1123
+ $names['option-exit-intent-type'] = 'sgpb-option-exit-intent-type';
1124
+ $names['option-exit-intent-expire-time'] = 'sgpb-exit-intent-expire-time';
1125
+ $names['option-exit-intent-cookie-level'] = 'sgpb-exit-intent-cookie-level';
1126
+ $names['option-exit-intent-soft-from-top'] = 'sgpb-exit-intent-soft-from-top';
1127
+
1128
+ // Adblock extension names
1129
+ $names['option-enable-ad-block'] = 'sgpb-option-enable-ad-block';
1130
+ // MailChimp extension names
1131
+ $names['mailchimp-list-id'] = 'sgpb-mailchimp-lists';
1132
+ $names['mailchimp-double-optin'] = 'sgpb-enable-double-optin';
1133
+ $names['mailchimp-only-required'] = 'sgpb-show-required-fields';
1134
+ $names['mailchimp-form-aligment'] = 'sgpb-mailchimp-form-align';
1135
+ $names['mailchimp-label-aligment'] = 'sgpb-mailchimp-label-alignment';
1136
+ $names['mailchimp-indicates-required-fields'] = 'sgpb-enable-asterisk-label';
1137
+ $names['mailchimp-asterisk-label'] = 'sgpb-mailchimp-asterisk-label';
1138
+ $names['mailchimp-required-error-message'] = 'sgpb-mailchimp-required-message';
1139
+ $names['mailchimp-email-validate-message'] = 'sgpb-mailchimp-email-message';
1140
+ $names['mailchimp-email-label'] = 'sgpb-mailchimp-email-label';
1141
+ $names['mailchimp-error-message'] = 'sgpb-mailchimp-error-message';
1142
+ $names['mailchimp-show-form-to-top'] = 'sgpb-mailchimp-show-form-to-top';
1143
+ $names['mailchimp-label-color'] = 'sgpb-mailchimp-label-color';
1144
+ $names['mailchimp-input-width'] = 'sgpb-mailchimp-input-width';
1145
+ $names['mailchimp-input-height'] = 'sgpb-mailchimp-input-height';
1146
+ $names['mailchimp-input-border-radius'] = 'sgpb-mailchimp-border-radius';
1147
+ $names['mailchimp-input-border-width'] = 'sgpb-mailchimp-border-width';
1148
+ $names['mailchimp-input-border-color'] = 'sgpb-mailchimp-border-color';
1149
+ $names['mailchimp-input-bg-color'] = 'sgpb-mailchimp-background-color';
1150
+ $names['sgpb-mailchimp-input-color'] = 'sgpb-mailchimp-input-color';
1151
+ $names['mailchimp-submit-title'] = 'sgpb-mailchimp-submit-title';
1152
+ $names['mailchimp-submit-width'] = 'sgpb-mailchimp-submit-width';
1153
+ $names['mailchimp-submit-height'] = 'sgpb-mailchimp-submit-height';
1154
+ $names['mailchimp-submit-border-width'] = 'sgpb-mailchimp-submit-border-width';
1155
+ $names['mailchimp-submit-border-radius'] = 'sgpb-mailchimp-submit-border-radius';
1156
+ $names['mailchimp-submit-border-color'] = 'sgpb-mailchimp-submit-border-color';
1157
+ $names['mailchimp-submit-button-bgcolor'] = 'sgpb-mailchimp-submit-background-color';
1158
+ $names['mailchimp-submit-color'] = 'sgpb-mailchimp-submit-color';
1159
+ $names['mailchimp-success-behavior'] = 'sgpb-mailchimp-success-behavior';
1160
+ $names['mailchimp-success-message'] = 'sgpb-mailchimp-success-message';
1161
+ $names['mailchimp-success-redirect-url'] = 'sgpb-mailchimp-success-redirect-URL';
1162
+ $names['mailchimp-success-redirect-new-tab'] = 'sgpb-mailchimp-success-redirect-new-tab';
1163
+ $names['mailchimp-success-popups-list'] = 'sgpb-mailchimp-success-popup';
1164
+ $names['mailchimp-close-popup-already-subscribed'] = 'sgpb-mailchimp-close-popup-already-subscribed';
1165
+ // AWeber extension
1166
+ $names['sg-aweber-list'] = 'sgpb-aweber-list';
1167
+ $names['sg-aweber-webform'] = 'sgpb-aweber-signup-form';
1168
+ $names['aweber-custom-invalid-email-message'] = 'sgpb-aweber-invalid-email';
1169
+ $names['aweber-invalid-email'] = 'sgpb-aweber-invalid-email-message';
1170
+ $names['aweber-already-subscribed-message'] = 'sgpb-aweber-custom-subscribed-message';
1171
+ $names['aweber-required-message'] = 'sgpb-aweber-required-message';
1172
+ $names['aweber-validate-email-message'] = 'sgpb-aweber-validate-email-message';
1173
+ $names['aweber-success-behavior'] = 'sgpb-aweber-success-behavior';
1174
+ $names['aweber-success-message'] = 'sgpb-aweber-success-message';
1175
+ $names['aweber-success-redirect-url'] = 'sgpb-aweber-success-redirect-URL';
1176
+ $names['aweber-success-redirect-new-tab'] = 'sgpb-aweber-success-redirect-new-tab';
1177
+ $names['aweber-success-popups-list'] = 'sgpb-aweber-success-popup';
1178
+
1179
+ return $names;
1180
+ }
1181
+
1182
+ public static function saveCustomInserted()
1183
+ {
1184
+ global $post;
1185
+ if (empty($post)) {
1186
+ return false;
1187
+ }
1188
+
1189
+ $postId = $post->ID;
1190
+ if (get_option('sgpbSaveOldData'.$postId)) {
1191
+ return false;
1192
+ }
1193
+
1194
+ update_option('sgpbSaveOldData'.$postId, 1);
1195
+
1196
+ add_filter('sgpbConvertedPopupId', 'sgpb\sgpGetCorrectPopupId', 10, 1);
1197
+ self::saveMetaboxPopup($postId);
1198
+ $content = get_post_field('post_content', $postId);
1199
+ SGPopup::deletePostCustomInsertedData($postId);
1200
+ SGPopup::deletePostCustomInsertedEvents($postId);
1201
+ // We detect all the popups that were inserted as a custom ones, in the content.
1202
+ SGPopup::savePopupsFromContentClasses($content, $post);
1203
+ }
1204
+
1205
+ public static function saveMetaboxPopup($postId)
1206
+ {
1207
+ $selectedPost = get_post_meta($postId, 'sg_promotional_popup', true);
1208
+
1209
+ if (empty($selectedPost)) {
1210
+ return false;
1211
+ }
1212
+ global $SGPB_DATA_CONFIG_ARRAY;
1213
+
1214
+ $postType = get_post_type($postId);
1215
+ $postTitle = get_the_title($postId);
1216
+ $popupId = sgpGetCorrectPopupId($selectedPost);
1217
+ $popupTargetParam = $postType.'_selected';
1218
+
1219
+ if (!get_post_meta($popupId, 'sg_popup_events')) {
1220
+ update_post_meta($popupId, 'sg_popup_events', array($SGPB_DATA_CONFIG_ARRAY['events']['initialData']));
1221
+ }
1222
+
1223
+ $savedTarget = get_post_meta($popupId, 'sg_popup_target');
1224
+ if (empty($savedTarget[0]['sgpb-target'][0])) {
1225
+ $savedTarget['sgpb-target'][] = array(array('param' => $popupTargetParam, 'operator' => '==', 'value' => array($postId => $postTitle)));
1226
+ $savedTarget['sgpb-conditions'][] = $SGPB_DATA_CONFIG_ARRAY['conditions']['initialData'];
1227
+
1228
+ update_post_meta($popupId, 'sg_popup_target', $savedTarget, true);
1229
+ return true;
1230
+ }
1231
+ $targets = $savedTarget[0]['sgpb-target'][0];
1232
+ $targetExists = false;
1233
+
1234
+ foreach ($targets as $key => $target) {
1235
+ if ($key == 0 && $target['param'] == 'not_rule') {
1236
+ $target['param'] = $popupTargetParam;
1237
+ $savedTarget[0]['sgpb-target'][0][$key]['param'] = $popupTargetParam;
1238
+ }
1239
+ if ($target['param'] == $popupTargetParam) {
1240
+ $targetExists = true;
1241
+ $targetValue = array();
1242
+ if (!empty($target['value'])) {
1243
+ $targetValue = $target['value'];
1244
+ }
1245
+
1246
+ $targetValue[$postId] = $postTitle;
1247
+ $savedTarget[0]['sgpb-target'][0][$key]['value'] = $targetValue;
1248
+ break;
1249
+ }
1250
+ }
1251
+
1252
+ if (!$targetExists) {
1253
+ $savedTargetsLength = count($savedTarget[0]['sgpb-target'][0]);
1254
+ $savedTarget[0]['sgpb-target'][0][$savedTargetsLength] = array('param' => $popupTargetParam, 'operator' => '==', 'value' => array($postId => $postTitle));
1255
+ }
1256
+
1257
+ delete_post_meta($postId, 'sg_promotional_popup');
1258
+ delete_post_meta($popupId, 'sg_popup_target');
1259
+ update_post_meta($popupId, 'sg_popup_target', $savedTarget[0], true);
1260
+
1261
+ return true;
1262
+ }
1263
+ }
1264
+
1265
+ function sgpGetCorrectPopupId($popupId)
1266
+ {
1267
+ $convertedIds = get_option('sgpbConvertedIds');
1268
+
1269
+ if (empty($convertedIds) || empty($convertedIds[$popupId])) {
1270
+ return $popupId;
1271
+ }
1272
+
1273
+ return $convertedIds[$popupId];
1274
+ }
com/classes/Feedback.php CHANGED
@@ -1,146 +1,146 @@
1
- <?php
2
- namespace sgpb;
3
-
4
- class SGPBFeedback
5
- {
6
- public function __construct()
7
- {
8
- add_action('current_screen', array($this, 'actionToCurrentScreen'));
9
- add_action('wp_ajax_sgpb_deactivate_feedback', array($this, 'sgpbDeactivateFeedback'));
10
- }
11
-
12
- public function actionToCurrentScreen() {
13
- if (!$this->isPluginsScreen()) {
14
- return;
15
- }
16
-
17
- add_filter('sgpbAdminJsFiles', array($this, 'adminJsFilter'), 1, 1);
18
- add_action('admin_footer', array($this, 'renderDeactivateFeedbackDialog'));
19
- }
20
-
21
- public function adminJsFilter($jsFiles)
22
- {
23
- $jsFiles[] = array(
24
- 'folderUrl' => SG_POPUP_JS_PATH,
25
- 'filename' => 'Banner.js'
26
- );
27
-
28
- return $jsFiles;
29
- }
30
-
31
- public function sgpbDeactivateFeedback()
32
- {
33
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
34
- if (!empty($_POST['formData'])) {
35
- parse_str($_POST['formData'],$submissionData);
36
- }
37
- $feedbackKey = $feedbackText = 'Skipped';
38
- if (!empty($submissionData['reasonKey'])) {
39
- $feedbackKey = $submissionData['reasonKey'];
40
- }
41
-
42
- if (!empty($submissionData["reason_{$feedbackKey}"])) {
43
- $feedbackText = $submissionData["reason_{$feedbackKey}"];
44
- }
45
- $headers = 'MIME-Version: 1.0'."\r\n";
46
- $headers .= 'From: feedbackpopupbuilder@gmail.com'."\r\n";
47
- $headers .= 'Content-type: text/html; charset=UTF-8'."\r\n"; //set UTF-8
48
-
49
- $receiver = 'feedbackpopupbuilder@gmail.com';
50
- $title = 'Popup Builder Deactivation Feedback From Customer';
51
- $message .= 'Feedback key - '.$feedbackKey.'<br>'."\n";
52
- $message .= 'Feedback text - '.$feedbackText."\n";
53
-
54
- wp_mail($receiver, $title, $message, $headers);
55
-
56
- wp_die(1);
57
- }
58
-
59
- public function renderDeactivateFeedbackDialog() {
60
- $deactivateReasons = array(
61
- 'no_longer_needed' => array(
62
- 'title' => __('I no longer need the plugin', SG_POPUP_TEXT_DOMAIN),
63
- 'input_placeholder' => ''
64
- ),
65
- 'found_a_better_plugin' => array(
66
- 'title' => __('I found a better plugin', SG_POPUP_TEXT_DOMAIN),
67
- 'input_placeholder' => __( 'Please share which plugin', SG_POPUP_TEXT_DOMAIN)
68
- ),
69
- 'couldnt_get_the_plugin_to_work' => array(
70
- 'title' => __('I couldn\'t get the plugin to work', SG_POPUP_TEXT_DOMAIN),
71
- 'input_placeholder' => '',
72
- 'extra_help' => __('Having troubles? You can always count on us. Please try to contact us via <a href="https://popup-builder.com/">Live chat</a> or send a message to <a href="mailto:support@popup-builder.com">support@popup-builder.com</a>', SG_POPUP_TEXT_DOMAIN)
73
- ),
74
- 'temporary_deactivation' => array(
75
- 'title' => __('It\'s a temporary deactivation', SG_POPUP_TEXT_DOMAIN),
76
- 'input_placeholder' => ''
77
- ),
78
- 'other' => array(
79
- 'title' => __('Other', SG_POPUP_TEXT_DOMAIN),
80
- 'input_placeholder' => __('Please share the reason', SG_POPUP_TEXT_DOMAIN),
81
- )
82
- );
83
-
84
- ?>
85
- <div id="sgpb-feedback-popup">
86
- <div class="sgpb-feedback-popup-wrapper">
87
- <div class="sgpb-wrapper">
88
- <div class="row sgpb-feedback-popup-header sgpb-position-relative">
89
- <div class="col-sm-3 sgpb-add-subscriber-header-column">
90
- <h4>
91
- <?php _e('Quick Feedback', SG_POPUP_TEXT_DOMAIN)?>
92
- </h4>
93
- </div>
94
- <div class="col-sm-1 sgpb-add-subscriber-header-spinner-column">
95
- <img src="<?php echo SG_POPUP_IMG_URL.'ajaxSpinner.gif'; ?>" alt="gif" class="sgpb-subscribers-add-spinner js-sg-spinner js-sgpb-add-spinner sg-hide-element js-sg-import-gif" width="20px">
96
- </div>
97
- <img src="<?php echo SG_POPUP_IMG_URL.'subscribers_close.png'; ?>" alt="gif" class="sgpb-add-subscriber-popup-close-btn sgpb-subscriber-data-popup-close-btn-js" width="20px">
98
- </div>
99
- <div class="row">
100
- <div class="col-md-12">
101
- <h4 class="sgpb-feedback-descritpion">
102
- <?php _e('If you have a moment, please share why you are deactivating <b>Popup Builder</b>', SG_POPUP_TEXT_DOMAIN)?>:
103
- </h4>
104
- <p class="sgpb-feedback-error-message sg-hide-element"><?php _e('Please, select an option.', SG_POPUP_TEXT_DOMAIN)?></p>
105
- </div>
106
- </div>
107
- <div class="row">
108
- <div class="col-md-12">
109
- <form id="sgpb-deactivate-feedback-dialog-form" method="post">
110
- <?php foreach ($deactivateReasons as $reasonKey => $reason) : ?>
111
- <div class="row sgpb-feedback-each-reason-row">
112
- <div class="col-md-1">
113
- <input id="sgpb-deactivate-feedback-<?php echo esc_attr($reasonKey); ?>" class="sgpb-deactivate-feedback-dialog-input" type="radio" name="reasonKey" value="<?php echo esc_attr($reasonKey); ?>" />
114
- </div>
115
- <div class="col-md-11">
116
- <label for="sgpb-deactivate-feedback-<?php echo esc_attr($reasonKey); ?>" class="sgpb-deactivate-feedback-dialog-label"><?php echo esc_html($reason['title']); ?></label>
117
- <?php if (!empty($reason['input_placeholder'])) : ?>
118
- <input class="sgpb-feedback-text sgpb-feedback-text-input" style="display: none;" type="text" name="reason_<?php echo esc_attr( $reasonKey ); ?>" placeholder="<?php echo esc_attr($reason['input_placeholder']); ?>" />
119
- <?php endif; ?>
120
- <?php if (!empty($reason['extra_help'])) : ?>
121
- <p class="sgpb-feedback-text-input" style="display: none;"><?php echo $reason['extra_help']; ?></p>
122
- <?php endif; ?>
123
- </div>
124
- </div>
125
- <?php endforeach; ?>
126
- <div class="row sgpb-feedback-btns-wrapper">
127
- <div class="col-md-6">
128
- <input type="button" class="btn btn-sm btn-success sgpb-feedback-submit" name="sgpb-feedback-submit" value="<?php _e('Submit & Deactivate', SG_POPUP_TEXT_DOMAIN); ?>">
129
- </div>
130
- <div class="col-md-6">
131
- <input type="button" class="btn btn-sm sgpb-feedback-submit-skip" name="sgpb-feedback-submit-skip" value="<?php _e('Skip & Deactivate', SG_POPUP_TEXT_DOMAIN); ?>">
132
- </div>
133
- </div>
134
- </form>
135
- </div>
136
- </div>
137
- </div>
138
- </div>
139
- </div>
140
- <?php
141
- }
142
-
143
- private function isPluginsScreen() {
144
- return in_array(get_current_screen()->id, array('plugins', 'plugins-network'));
145
- }
146
- }
1
+ <?php
2
+ namespace sgpb;
3
+
4
+ class SGPBFeedback
5
+ {
6
+ public function __construct()
7
+ {
8
+ add_action('current_screen', array($this, 'actionToCurrentScreen'));
9
+ add_action('wp_ajax_sgpb_deactivate_feedback', array($this, 'sgpbDeactivateFeedback'));
10
+ }
11
+
12
+ public function actionToCurrentScreen() {
13
+ if (!$this->isPluginsScreen()) {
14
+ return;
15
+ }
16
+
17
+ add_filter('sgpbAdminJsFiles', array($this, 'adminJsFilter'), 1, 1);
18
+ add_action('admin_footer', array($this, 'renderDeactivateFeedbackDialog'));
19
+ }
20
+
21
+ public function adminJsFilter($jsFiles)
22
+ {
23
+ $jsFiles[] = array(
24
+ 'folderUrl' => SG_POPUP_JS_PATH,
25
+ 'filename' => 'Banner.js'
26
+ );
27
+
28
+ return $jsFiles;
29
+ }
30
+
31
+ public function sgpbDeactivateFeedback()
32
+ {
33
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
34
+ if (!empty($_POST['formData'])) {
35
+ parse_str($_POST['formData'],$submissionData);
36
+ }
37
+ $feedbackKey = $feedbackText = 'Skipped';
38
+ if (!empty($submissionData['reasonKey'])) {
39
+ $feedbackKey = $submissionData['reasonKey'];
40
+ }
41
+
42
+ if (!empty($submissionData["reason_{$feedbackKey}"])) {
43
+ $feedbackText = $submissionData["reason_{$feedbackKey}"];
44
+ }
45
+ $headers = 'MIME-Version: 1.0'."\r\n";
46
+ $headers .= 'From: feedbackpopupbuilder@gmail.com'."\r\n";
47
+ $headers .= 'Content-type: text/html; charset=UTF-8'."\r\n"; //set UTF-8
48
+
49
+ $receiver = 'feedbackpopupbuilder@gmail.com';
50
+ $title = 'Popup Builder Deactivation Feedback From Customer';
51
+ $message .= 'Feedback key - '.$feedbackKey.'<br>'."\n";
52
+ $message .= 'Feedback text - '.$feedbackText."\n";
53
+
54
+ wp_mail($receiver, $title, $message, $headers);
55
+
56
+ wp_die(1);
57
+ }
58
+
59
+ public function renderDeactivateFeedbackDialog() {
60
+ $deactivateReasons = array(
61
+ 'no_longer_needed' => array(
62
+ 'title' => __('I no longer need the plugin', SG_POPUP_TEXT_DOMAIN),
63
+ 'input_placeholder' => ''
64
+ ),
65
+ 'found_a_better_plugin' => array(
66
+ 'title' => __('I found a better plugin', SG_POPUP_TEXT_DOMAIN),
67
+ 'input_placeholder' => __( 'Please share which plugin', SG_POPUP_TEXT_DOMAIN)
68
+ ),
69
+ 'couldnt_get_the_plugin_to_work' => array(
70
+ 'title' => __('I couldn\'t get the plugin to work', SG_POPUP_TEXT_DOMAIN),
71
+ 'input_placeholder' => '',
72
+ 'extra_help' => __('Having troubles? You can always count on us. Please try to contact us via <a href="https://popup-builder.com/">Live chat</a> or send a message to <a href="mailto:support@popup-builder.com">support@popup-builder.com</a>', SG_POPUP_TEXT_DOMAIN)
73
+ ),
74
+ 'temporary_deactivation' => array(
75
+ 'title' => __('It\'s a temporary deactivation', SG_POPUP_TEXT_DOMAIN),
76
+ 'input_placeholder' => ''
77
+ ),
78
+ 'other' => array(
79
+ 'title' => __('Other', SG_POPUP_TEXT_DOMAIN),
80
+ 'input_placeholder' => __('Please share the reason', SG_POPUP_TEXT_DOMAIN),
81
+ )
82
+ );
83
+
84
+ ?>
85
+ <div id="sgpb-feedback-popup">
86
+ <div class="sgpb-feedback-popup-wrapper">
87
+ <div class="sgpb-wrapper">
88
+ <div class="row sgpb-feedback-popup-header sgpb-position-relative">
89
+ <div class="col-sm-3 sgpb-add-subscriber-header-column">
90
+ <h4>
91
+ <?php _e('Quick Feedback', SG_POPUP_TEXT_DOMAIN)?>
92
+ </h4>
93
+ </div>
94
+ <div class="col-sm-1 sgpb-add-subscriber-header-spinner-column">
95
+ <img src="<?php echo SG_POPUP_IMG_URL.'ajaxSpinner.gif'; ?>" alt="gif" class="sgpb-subscribers-add-spinner js-sg-spinner js-sgpb-add-spinner sg-hide-element js-sg-import-gif" width="20px">
96
+ </div>
97
+ <img src="<?php echo SG_POPUP_IMG_URL.'subscribers_close.png'; ?>" alt="gif" class="sgpb-add-subscriber-popup-close-btn sgpb-subscriber-data-popup-close-btn-js" width="20px">
98
+ </div>
99
+ <div class="row">
100
+ <div class="col-md-12">
101
+ <h4 class="sgpb-feedback-descritpion">
102
+ <?php _e('If you have a moment, please share why you are deactivating <b>Popup Builder</b>', SG_POPUP_TEXT_DOMAIN)?>:
103
+ </h4>
104
+ <p class="sgpb-feedback-error-message sg-hide-element"><?php _e('Please, select an option.', SG_POPUP_TEXT_DOMAIN)?></p>
105
+ </div>
106
+ </div>
107
+ <div class="row">
108
+ <div class="col-md-12">
109
+ <form id="sgpb-deactivate-feedback-dialog-form" method="post">
110
+ <?php foreach ($deactivateReasons as $reasonKey => $reason) : ?>
111
+ <div class="row sgpb-feedback-each-reason-row">
112
+ <div class="col-md-1">
113
+ <input id="sgpb-deactivate-feedback-<?php echo esc_attr($reasonKey); ?>" class="sgpb-deactivate-feedback-dialog-input" type="radio" name="reasonKey" value="<?php echo esc_attr($reasonKey); ?>" />
114
+ </div>
115
+ <div class="col-md-11">
116
+ <label for="sgpb-deactivate-feedback-<?php echo esc_attr($reasonKey); ?>" class="sgpb-deactivate-feedback-dialog-label"><?php echo esc_html($reason['title']); ?></label>
117
+ <?php if (!empty($reason['input_placeholder'])) : ?>
118
+ <input class="sgpb-feedback-text sgpb-feedback-text-input" style="display: none;" type="text" name="reason_<?php echo esc_attr( $reasonKey ); ?>" placeholder="<?php echo esc_attr($reason['input_placeholder']); ?>" />
119
+ <?php endif; ?>
120
+ <?php if (!empty($reason['extra_help'])) : ?>
121
+ <p class="sgpb-feedback-text-input" style="display: none;"><?php echo $reason['extra_help']; ?></p>
122
+ <?php endif; ?>
123
+ </div>
124
+ </div>
125
+ <?php endforeach; ?>
126
+ <div class="row sgpb-feedback-btns-wrapper">
127
+ <div class="col-md-6">
128
+ <input type="button" class="btn btn-sm btn-success sgpb-feedback-submit" name="sgpb-feedback-submit" value="<?php _e('Submit & Deactivate', SG_POPUP_TEXT_DOMAIN); ?>">
129
+ </div>
130
+ <div class="col-md-6">
131
+ <input type="button" class="btn btn-sm sgpb-feedback-submit-skip" name="sgpb-feedback-submit-skip" value="<?php _e('Skip & Deactivate', SG_POPUP_TEXT_DOMAIN); ?>">
132
+ </div>
133
+ </div>
134
+ </form>
135
+ </div>
136
+ </div>
137
+ </div>
138
+ </div>
139
+ </div>
140
+ <?php
141
+ }
142
+
143
+ private function isPluginsScreen() {
144
+ return in_array(get_current_screen()->id, array('plugins', 'plugins-network'));
145
+ }
146
+ }
com/classes/Filters.php CHANGED
@@ -1,873 +1,873 @@
1
- <?php
2
- namespace sgpb;
3
- use \WP_Query;
4
- use \SgpbPopupConfig;
5
- use sgpb\PopupBuilderActivePackage;
6
- use sgpb\SGPopup;
7
-
8
- class Filters
9
- {
10
- private $activePopupsQueryString = '';
11
-
12
- public function setQueryString($activePopupsQueryString)
13
- {
14
- $this->activePopupsQueryString = $activePopupsQueryString;
15
- }
16
-
17
- public function getQueryString()
18
- {
19
- return $this->activePopupsQueryString;
20
- }
21
-
22
- public function __construct()
23
- {
24
- $this->init();
25
- }
26
-
27
- public function init()
28
- {
29
- add_filter('admin_url', array($this, 'addNewPostUrl'), 10, 2);
30
- add_filter('wpseo_sitemap_exclude_post_type', array($this, 'excludeSitemapsYoast'), 10, 2);
31
- add_filter('admin_menu', array($this, 'removeAddNewSubmenu'), 10, 2);
32
- add_filter('manage_'.SG_POPUP_POST_TYPE.'_posts_columns', array($this, 'popupsTableColumns'));
33
- add_filter('post_row_actions', array($this, 'quickRowLinksManager'), 10, 2);
34
- add_filter('sgpbAdminJs', array($this, 'adminJsFilter'), 1, 1);
35
- add_filter('sgpbAdminCssFiles', array($this, 'sgpbAdminCssFiles'), 1, 1);
36
- add_filter('sgpbPopupContentLoadToPage', array($this, 'filterPopupContent'), 10, 2);
37
- add_filter('the_content', array($this, 'clearContentPreviewMode'), 10, 1);
38
- // The priority of this action should be higher than the extensions' init priority.
39
- add_action('init', array($this, 'excludePostToShowPrepare'), 99999999);
40
- add_filter('preview_post_link', array($this, 'editPopupPreviewLink'), 10, 2);
41
- add_filter('upgrader_pre_download', array($this, 'maybeShortenEddFilename'), 10, 4);
42
- add_filter('sgpbSavedPostData', array($this, 'savedPostData'), 10, 1);
43
- add_filter('sgpbPopupEvents', array($this, 'popupEvents'), 10, 1);
44
- add_filter('sgpbAdditionalMetaboxes', array($this, 'metaboxes'), 10, 1);
45
- add_filter('sgpbOptionAvailable', array($this, 'filterOption'), 10, 1);
46
- add_filter('export_wp_filename', array($this, 'exportFileName'), 10, 1);
47
- add_filter('sgpbAdvancedOptionsDefaultValues', array($this, 'defaultAdvancedOptionsValues'), 10, 1);
48
- add_filter('sgpbPopupContentLoadToPage', array($this, 'popupContentLoadToPage'), 10, 2);
49
- add_filter('sgpbExtraNotifications', array($this, 'sgpbExtraNotifications'), 10, 1);
50
- add_filter('sgpbSystemInformation', array($this, 'systemInformation'), 10, 1);
51
- add_filter('plugin_action_links', array($this, 'pluginActionLinks'), 10, 4);
52
- add_filter('plugin_row_meta', array( $this, 'pluginRowMetas'), 10, 4);
53
- add_filter('rank_math/sitemap/exclude_post_type', array($this, 'excludeRankMath'), 10, 2);
54
- add_filter('sgpbUserSelectionQuery', array($this, 'userSelectionQueryAddExtraAttributes'), 100, 1);
55
- add_filter('sgpbFilterOptionsBeforeSaving', array($this, 'filterOptionsBeforeSaving'), 100, 1);
56
- add_filter('sgpbPopupExtraData', array($this, 'popupExtraDataRender'), 100, 2);
57
- add_filter('wpml_link_to_translation', array($this, 'linkToTranslationWpml'), 30, 4);
58
- add_filter('pll_get_post_types', array($this, 'enablePBpostTypeForTranslating'), 10, 2);
59
- }
60
-
61
- public function enablePBpostTypeForTranslating($postTypes, $isSettings)
62
- {
63
- $postTypes[SG_POPUP_POST_TYPE] = SG_POPUP_POST_TYPE;
64
-
65
- return $postTypes;
66
- }
67
-
68
- public function linkToTranslationWpml($link, $postId, $lang, $trid)
69
- {
70
- if (strpos($link, SG_POPUP_POST_TYPE) && strpos($link, 'source_lang') && isset($trid)) {
71
-
72
- $popupType = 'html';
73
- $popup = SGPopup::find($postId);
74
- if (!empty($popup) || !is_object($popup)) {
75
- $popupType = $popup->getType();
76
- }
77
- $link .= '&sgpb_type='.$popupType;
78
- }
79
-
80
- return $link;
81
- }
82
-
83
- public function popupExtraDataRender($popupId = 0, $popupOptions = array())
84
- {
85
- $floatingButton = '';
86
- if (empty($popupOptions['sgpb-enable-floating-button'])) {
87
- return $floatingButton;
88
- }
89
- $buttonStyles = 'z-index:99999999999;';
90
- $buttonClass = 'sgpb-'.$popupOptions['sgpb-floating-button-style'].'-'.$popupOptions['sgpb-floating-button-position'];
91
-
92
- if (isset($popupOptions['sgpb-floating-button-style']) && $popupOptions['sgpb-floating-button-style'] == 'basic' && strstr($popupOptions['sgpb-floating-button-position'], 'center')) {
93
- if (strstr($popupOptions['sgpb-floating-button-position'], 'top')) {
94
- $buttonStyles .= 'top: 0%;';
95
- $buttonStyles .= 'right: '.$popupOptions['sgpb-floating-button-position-right'].'%;';
96
- }
97
- else if (strstr($popupOptions['sgpb-floating-button-position'], 'bottom')) {
98
- $buttonStyles .= 'bottom: 0%;';
99
- $buttonStyles .= 'right: '.$popupOptions['sgpb-floating-button-position-right'].'%;';
100
- }
101
- else if (strstr($popupOptions['sgpb-floating-button-position'], 'left') || strstr($popupOptions['sgpb-floating-button-position'], 'right')) {
102
- $buttonStyles .= 'top: '.$popupOptions['sgpb-floating-button-position-top'].'%;';
103
- }
104
- }
105
-
106
- if (isset($popupOptions['sgpb-floating-button-font-size'])) {
107
- $buttonStyles .= 'font-size: '.$popupOptions['sgpb-floating-button-font-size'].'px;';
108
- }
109
- if (isset($popupOptions['sgpb-floating-button-border-size'])) {
110
- $buttonStyles .= 'border-width: '.$popupOptions['sgpb-floating-button-border-size'].'px;';
111
- $buttonStyles .= 'border-style: solid;';
112
- }
113
- if (isset($popupOptions['sgpb-floating-button-border-radius'])) {
114
- $buttonStyles .= 'border-radius: '.$popupOptions['sgpb-floating-button-border-radius'].'px;';
115
- }
116
- if (isset($popupOptions['sgpb-floating-button-border-color'])) {
117
- $buttonStyles .= 'border-color: '.$popupOptions['sgpb-floating-button-border-color'].';';
118
- }
119
- if (isset($popupOptions['sgpb-floating-button-bg-color'])) {
120
- $buttonStyles .= 'background-color: '.$popupOptions['sgpb-floating-button-bg-color'].';';
121
- }
122
- if (isset($popupOptions['sgpb-floating-button-text-color'])) {
123
- $buttonStyles .= 'color: '.$popupOptions['sgpb-floating-button-text-color'].';';
124
- }
125
-
126
- /*
127
- * We first hide to make all CSS load then we will show once document is ready
128
- * SgpbEventListener.eventsListenerAfterDocumentReady -> showFloatingButton
129
- */
130
- $buttonStyles .= 'display: none;';
131
-
132
- $floatingButton = '<div class="'.$buttonClass.' sgpb-floating-button sg-popup-id-'.$popupId.'" style="'.$buttonStyles.'"><span class="sgpb-'.$popupOptions['sgpb-floating-button-style'].'-floating-button-text">'.$popupOptions['sgpb-floating-button-text'].'</span></div>';
133
-
134
- return $floatingButton;
135
- }
136
-
137
- public function filterOptionsBeforeSaving($unfilteredData = array())
138
- {
139
- $externalOptions = array(
140
- 'icl_post_language' => 'sgpb-icl_post_language'
141
- );
142
-
143
- foreach ($externalOptions as $optionKey => $value) {
144
- if (isset($unfilteredData[$optionKey])) {
145
- $unfilteredData[$value] = $unfilteredData[$optionKey];
146
- // there is no need to unset the old index value, because in the next step we'll take only the values from indexes started with "sgpb"
147
- }
148
- }
149
-
150
- return $unfilteredData;
151
- }
152
-
153
- public function userSelectionQueryAddExtraAttributes($query)
154
- {
155
- $query .= ' status = 0 and unsubscribed = 0';
156
-
157
- return $query;
158
- }
159
-
160
- public function excludeRankMath($exclude, $type)
161
- {
162
- if ($type == SG_POPUP_POST_TYPE) {
163
- $exclude = true;
164
- }
165
-
166
- return $exclude;
167
- }
168
-
169
- public function pluginRowMetas($pluginMeta, $pluginFile, $pluginData, $status)
170
- {
171
- if (empty($pluginFile)) {
172
- return $pluginMeta;
173
- }
174
-
175
- $allExtensions = \SgpbDataConfig::allExtensionsKeys();
176
- $allExtensions = wp_list_pluck($allExtensions, 'pluginKey');
177
- $allExtensions[] = SG_POPUP_FILE_NAME;
178
-
179
- $rowMeta = array(
180
- 'rateus' => '<a href="'.SG_POPUP_RATE_US_URL.'" target="_blank">'.esc_html__('Rate us', SG_POPUP_TEXT_DOMAIN).'</a>',
181
- 'support' => '<a href="'.SG_POPUP_SUPPORT_URL.'" target="_blank">'.esc_html__('Support', SG_POPUP_TEXT_DOMAIN).'</a>'
182
- );
183
-
184
- if (in_array($pluginFile, $allExtensions)) {
185
- $pluginMeta = array_merge($pluginMeta, $rowMeta);
186
- }
187
-
188
- return $pluginMeta;
189
- }
190
-
191
- public function pluginActionLinks($actions, $pluginFile, $pluginData, $context)
192
- {
193
- if (empty($pluginFile)) {
194
- return $actions;
195
- }
196
-
197
- $allExtensions = \SgpbDataConfig::allExtensionsKeys();
198
- $allExtensions = wp_list_pluck($allExtensions, 'pluginKey');
199
- $allExtensions[] = SG_POPUP_FILE_NAME;
200
-
201
- $settingPageUrl = admin_url().'edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SG_POPUP_SETTINGS_PAGE;
202
-
203
- $links = array(
204
- 'settings' => '<a href="'.$settingPageUrl.'" target="_blank">'.esc_html__('Settings', SG_POPUP_TEXT_DOMAIN).'</a>',
205
- 'docs' => '<a href="'.SG_POPUP_TICKET_URL.'" target="_blank">'.esc_html__('Docs', SG_POPUP_TEXT_DOMAIN).'</a>'
206
- );
207
-
208
- if (in_array($pluginFile, $allExtensions)) {
209
- if ($pluginFile == SG_POPUP_FILE_NAME) {
210
- $getActiveExtensions = AdminHelper::getAllExtensions();
211
- if (empty($getActiveExtensions['active'])) {
212
- $links['upgrade'] = '<a style="color: #4364eb;" href="'.SG_POPUP_BUNDLE_URL.'" target="_blank">'.esc_html__('Upgrade', SG_POPUP_TEXT_DOMAIN).'</a>';
213
- }
214
- }
215
- $actions = array_merge($links, $actions);
216
- }
217
-
218
- return $actions;
219
- }
220
-
221
- public function systemInformation($infoContent)
222
- {
223
-
224
- $infoContent .= 'Platform: '.@$platform . "\n";
225
- $infoContent .= 'Browser Name: '.@$bname . "\n";
226
- $infoContent .= 'Browser Version: '.@$version . "\n";
227
- $infoContent .= 'User Agent: '.@$uAgent . "\n";
228
-
229
- return $infoContent;
230
- }
231
-
232
- public function popupContentLoadToPage($content, $popupId)
233
- {
234
- $customScripts = AdminHelper::renderCustomScripts($popupId);
235
- $content .= $customScripts;
236
-
237
- return $content;
238
- }
239
-
240
- public function sgpbExtraNotifications($notifications = array())
241
- {
242
- $license = self::licenseNotification();
243
- if (!empty($license)) {
244
- $notifications[] = $license;
245
- }
246
-
247
- $promotional = self::promotionalNotifications();
248
- if (!empty($promotional)) {
249
- $notifications[] = $promotional;
250
- }
251
-
252
- $supportBanner = self::supportBannerNotifcations();
253
- if (!empty($supportBanner)) {
254
- $notifications[] = $supportBanner;
255
- }
256
-
257
- return $notifications;
258
- }
259
-
260
- public static function supportBannerNotifcations()
261
- {
262
- $hideSupportBanner = get_option('sgpb-hide-support-banner');
263
- if (!empty($hideSupportBanner)) {
264
- return array();
265
- }
266
- $message = AdminHelper::supportBannerNotification();
267
- $notification['id'] = SGPB_SUPPORT_BANNER_NOTIFICATION_ID;
268
- $notification['priority'] = 1;
269
- $notification['type'] = 1;
270
- $notification['message'] = $message;
271
-
272
- return $notification;
273
- }
274
-
275
- public static function promotionalNotifications()
276
- {
277
- $alreadyDone = get_option('SGPBCloseReviewPopup-notification');
278
- if (!empty($alreadyDone)) {
279
- return array();
280
- }
281
- $id = SGPB_RATE_US_NOTIFICATION_ID;
282
- $type = 1;
283
- $priority = 1;
284
-
285
- $maxOpenPopupStatus = AdminHelper::shouldOpenForMaxOpenPopupMessage();
286
- // popup opening count notification
287
- if ($maxOpenPopupStatus) {
288
- $message = AdminHelper::getMaxOpenPopupsMessage();
289
- }
290
-
291
- $shouldOpenForDays = AdminHelper::shouldOpenReviewPopupForDays();
292
- if ($shouldOpenForDays && !$maxOpenPopupStatus) {
293
- $message = AdminHelper::getMaxOpenDaysMessage();
294
- }
295
- if (empty($message)) {
296
- return array();
297
- }
298
-
299
- $alternateNotification['priority'] = $priority;
300
- $alternateNotification['type'] = $type;
301
- $alternateNotification['id'] = $id;
302
- $alternateNotification['message'] = $message;
303
-
304
- return $alternateNotification;
305
- }
306
-
307
- public function licenseNotification()
308
- {
309
- $inactiveExtensionNotice = array();
310
- $dontShowLicenseBanner = get_option('sgpb-hide-license-notice-banner');
311
- if ($dontShowLicenseBanner) {
312
- return $notifications;
313
- }
314
-
315
- $inactive = AdminHelper::getOption('SGPB_INACTIVE_EXTENSIONS');
316
- $hasInactiveExtensions = AdminHelper::hasInactiveExtensions();
317
-
318
- if (!$inactive) {
319
- AdminHelper::updateOption('SGPB_INACTIVE_EXTENSIONS', 1);
320
- if ($hasInactiveExtensions) {
321
- AdminHelper::updateOption('SGPB_INACTIVE_EXTENSIONS', 'inactive');
322
- $inactive = 'inactive';
323
- }
324
-
325
- }
326
-
327
- if ($hasInactiveExtensions && $inactive == 'inactive') {
328
- $licenseSectionUrl = menu_page_url(SGPB_POPUP_LICENSE, false);
329
- $partOfContent = '<br><br>'.__('<a href="'.$licenseSectionUrl.'">Follow the link</a> to finalize the activation.', SG_POPUP_TEXT_DOMAIN);
330
- $message = '<b>'.__('Thank you for choosing our plugin!', SG_POPUP_TEXT_DOMAIN).'</b>';
331
- $message .= '<br>';
332
- $message .= '<br>';
333
- $message .= '<b>'.__('You have activated Popup Builder extension(s). Please, don\'t forget to activate the license key(s) as well.', SG_POPUP_TEXT_DOMAIN).'</b>';
334
- $message .= '<b>'.$partOfContent.'</b>';
335
-
336
- $inactiveExtensionNotice['priority'] = 1;
337
- $inactiveExtensionNotice['type'] = 2;
338
- $inactiveExtensionNotice['id'] = 'sgpbMainActiveInactiveLicense';
339
- $inactiveExtensionNotice['message'] = $message;
340
- }
341
-
342
- return $inactiveExtensionNotice;
343
- }
344
-
345
- public function excludeSitemapsYoast($exclude, $postType)
346
- {
347
- $postTypeObject = get_post_type_object($postType);
348
- if (!is_object($postTypeObject)) {
349
- return $exclude;
350
- }
351
-
352
- if ($postTypeObject->public === false || $postType == SG_POPUP_POST_TYPE) {
353
- return true;
354
- }
355
-
356
- return $exclude;
357
- }
358
-
359
- public function defaultAdvancedOptionsValues($options = array())
360
- {
361
- $enablePopupOverlay = PopupBuilderActivePackage::canUseOption('sgpb-enable-popup-overlay');
362
- if (!$enablePopupOverlay) {
363
- $options['sgpb-enable-popup-overlay'] = 'on';
364
- }
365
-
366
- return $options;
367
- }
368
-
369
- public function excludePostToShowPrepare()
370
- {
371
- SgpbPopupConfig::popupTypesInit();
372
- $queryString = SGPopup::getActivePopupsQueryString();
373
- $this->setQueryString($queryString);
374
- add_filter('posts_where' , array($this, 'excludePostsToShow'), 10, 1);
375
- }
376
-
377
- public function exportFileName($fileName)
378
- {
379
- if (!empty($_GET['sgpbExportAction'])) {
380
- return SGPB_POPUP_EXPORT_FILE_NAME;
381
- }
382
-
383
- return $fileName;
384
- }
385
-
386
- public function filterOption($filterOption)
387
- {
388
- $extensionOptionsData = AdminHelper::getExtensionAvaliabilityOptions();
389
-
390
- if (empty($extensionOptionsData)) {
391
- return $filterOption;
392
- }
393
-
394
- foreach ($extensionOptionsData as $extensionKey => $extensionOptions) {
395
- $isAdvancedClosingActive = is_plugin_active($extensionKey);
396
- if (isset($filterOption['name']) && !$isAdvancedClosingActive) {
397
- $name = $filterOption['name'];
398
-
399
- if (in_array($name, $extensionOptions)) {
400
- $filterOption['status'] = false;
401
- }
402
- }
403
- }
404
-
405
- return $filterOption;
406
- }
407
-
408
- public function metaboxes($metaboxes)
409
- {
410
- $otherConditionsProLabel = '';
411
- $otherConditionsCanBeUsed = PopupBuilderActivePackage::canUseSection('popupOtherConditionsSection');
412
- if (!$otherConditionsCanBeUsed) {
413
- $otherConditionsProLabel .= '<a href="'.SG_POPUP_SCHEDULING_URL.'" target="_blank" class="sgpb-pro-label-metabox">';
414
- $otherConditionsProLabel .= __('UNLOCK OPTION', SG_POPUP_TEXT_DOMAIN).'</a>';
415
- }
416
- $metaboxes['allMetaboxesView'] = array(
417
- 'key' => 'allMetaboxesView',
418
- 'displayName' => 'Main Options',
419
- 'short_description' => 'main options',
420
- 'filePath' => SG_POPUP_VIEWS_PATH.'allMetaboxesView.php',
421
- 'priority' => 'high'
422
- );
423
-
424
- $metaboxes['targetMetaboxView'] = array(
425
- 'key' => 'targetMetaboxView',
426
- 'displayName' => 'Display Rules',
427
- 'short_description' => 'Select where on the website to trigger the popup',
428
- 'filePath' => SG_POPUP_VIEWS_PATH.'targetView.php',
429
- 'priority' => 'high'
430
- );
431
-
432
- $metaboxes['eventsMetaboxView'] = array(
433
- 'key' => 'eventsMetaboxView',
434
- 'displayName' => 'Events',
435
- 'short_description' => 'Select the specific actions that will trigger the popup, default event is on load',
436
- 'filePath' => SG_POPUP_VIEWS_PATH.'eventsView.php',
437
- 'priority' => 'high'
438
- );
439
-
440
- $metaboxes['conditionsMetaboxView'] = array(
441
- 'key' => 'conditionsMetaboxView',
442
- 'displayName' => 'Conditions',
443
- 'short_description' => 'Select advanced conditions for more professional targeting',
444
- 'filePath' => SG_POPUP_VIEWS_PATH.'conditionsView.php',
445
- 'priority' => 'high'
446
- );
447
-
448
- $metaboxes['behaviorAfterSpecialEventsMetaboxView'] = array(
449
- 'key' => 'behaviorAfterSpecialEventsMetaboxView',
450
- 'displayName' => 'Behavior After Special Events',
451
- 'short_description' => 'Select special events that will trigger the popup',
452
- 'filePath' => SG_POPUP_VIEWS_PATH.'behaviorAfterSpecialEventsView.php',
453
- 'priority' => 'high'
454
- );
455
-
456
- $metaboxes['popupDesignMetaBoxView'] = array(
457
- 'key' => 'popupDesignMetaBoxView',
458
- 'displayName' => 'Design',
459
- 'short_description' => 'Customize design, background and overlay of the popup',
460
- 'filePath' => SG_POPUP_VIEWS_PATH.'popupDesignView.php',
461
- 'priority' => 'high'
462
- );
463
-
464
- $metaboxes['closeSettings'] = array(
465
- 'key' => 'closeSettings',
466
- 'displayName' => 'Closing',
467
- 'short_description' => 'Select the desired popup closing method, customize close button',
468
- 'filePath' => SG_POPUP_VIEWS_PATH.'closeSettingsView.php',
469
- 'priority' => 'high'
470
- );
471
-
472
- $metaboxes['dimensions'] = array(
473
- 'key' => 'dimensions',
474
- 'displayName' => 'Dimensions',
475
- 'short_description' => 'Make your popup mobile friendly and responsive for all devices',
476
- 'filePath' => SG_POPUP_VIEWS_PATH.'dimensionsView.php',
477
- 'priority' => 'high'
478
- );
479
-
480
- $metaboxes['optionsMetaboxView'] = array(
481
- 'key' => 'optionsMetaboxView',
482
- 'displayName' => 'Advanced',
483
- 'short_description' => 'Use advanced features for popup animations, opening and closing actions',
484
- 'filePath' => SG_POPUP_VIEWS_PATH.'optionsView.php',
485
- 'priority' => 'high'
486
- );
487
-
488
- $metaboxes['otherConditionsMetaBoxView'] = array(
489
- 'key' => 'otherConditionsMetaBoxView',
490
- 'displayName' => 'Scheduling'.$otherConditionsProLabel,
491
- 'short_description' => 'Schedule your popup for a particular day or for a selected timeframe',
492
- 'filePath' => SG_POPUP_VIEWS_PATH.'otherConditionsView.php',
493
- 'priority' => 'high'
494
- );
495
-
496
- $metaboxes['floatingButton'] = array(
497
- 'key' => 'floatingButton',
498
- 'displayName' => 'Floating Button',
499
- 'short_description' => 'Set the popup to appear on a scrollable call to action button',
500
- 'filePath' => SG_POPUP_VIEWS_PATH.'floatingButton.php',
501
- 'context' => 'side',
502
- 'priority' => 'high'
503
- );
504
-
505
- $metaboxes['popupOpeningCounter'] = array(
506
- 'key' => 'popupOpeningCounter',
507
- 'displayName' => 'Statistics',
508
- 'short_description' => 'Enable or disable the counts of the popup',
509
- 'filePath' => SG_POPUP_VIEWS_PATH.'popupOpeningCounter.php',
510
- 'context' => 'side',
511
- 'priority' => 'low'
512
- );
513
-
514
- $metaboxes['customCssJs'] = array(
515
- 'key' => 'customCssJs',
516
- 'displayName' => 'Custom JS or CSS',
517
- 'short_description' => 'Add custom JS and/or CSS code for extra control',
518
- 'filePath' => SG_POPUP_VIEWS_PATH.'customEditor.php',
519
- 'priority' => 'low'
520
- );
521
-
522
- $metaboxes = apply_filters('sgpbPopupTypeMainViewMetaboxes', $metaboxes);
523
-
524
- return $metaboxes;
525
- }
526
-
527
- public function popupEvents($events)
528
- {
529
- foreach ($events as $eventKey => $eventData) {
530
- if (isset($eventData['param'])) {
531
- if ($eventData['param'] == SGPB_CSS_CLASS_ACTIONS_KEY) {
532
- unset($events[$eventKey]);
533
- $events[] = array('param' => 'click');
534
- $events[] = array('param' => 'hover');
535
- $events[] = array('param' => 'confirm');
536
- }
537
- else if ($eventData['param'] == SGPB_CLICK_ACTION_KEY) {
538
- $events[$eventKey]['param'] = 'click';
539
- }
540
- else if ($eventData['param'] == SGPB_HOVER_ACTION_KEY) {
541
- $events[$eventKey]['param'] = 'hover';
542
- }
543
- }
544
- }
545
-
546
- return $events;
547
- }
548
-
549
- public function savedPostData($postData)
550
- {
551
- // for old popups here we change already saved old popup id
552
- if (isset($postData['sgpb-mailchimp-success-popup'])) {
553
- // sgpGetCorrectPopupId it's a temporary function and it will be removed in future
554
- if (function_exists(__NAMESPACE__.'\sgpGetCorrectPopupId')) {
555
- $postData['sgpb-mailchimp-success-popup'] = sgpGetCorrectPopupId($postData['sgpb-mailchimp-success-popup']);
556
- }
557
- }
558
- // for old popups here we change already saved old popup id
559
- if (isset($postData['sgpb-aweber-success-popup'])) {
560
- if (function_exists(__NAMESPACE__.'\sgpGetCorrectPopupId')) {
561
- $postData['sgpb-aweber-success-popup'] = sgpGetCorrectPopupId($postData['sgpb-aweber-success-popup']);
562
- }
563
- }
564
-
565
- return $postData;
566
- }
567
-
568
- public function removeAddNewSubmenu()
569
- {
570
- //we don't need the default add new, since we are using our custom page for it
571
- $page = remove_submenu_page(
572
- 'edit.php?post_type='.SG_POPUP_POST_TYPE,
573
- 'post-new.php?post_type='.SG_POPUP_POST_TYPE
574
- );
575
- }
576
-
577
- public function maybeShortenEddFilename($return, $package)
578
- {
579
- if (strpos($package, SG_POPUP_STORE_URL) !== false) {
580
- add_filter('wp_unique_filename', array($this, 'shortenEddFilename'), 100, 2);
581
- }
582
- return $return;
583
- }
584
-
585
- public function shortenEddFilename($filename, $ext)
586
- {
587
- $filename = substr($filename, 0, 20).$ext;
588
- remove_filter('wp_unique_filename', array($this, 'shortenEddFilename'), 10);
589
- return $filename;
590
- }
591
-
592
- public function editPopupPreviewLink($previewLink = '', $post = array())
593
- {
594
- if (!empty($post) && $post->post_type == SG_POPUP_POST_TYPE) {
595
- $popupId = $post->ID;
596
- $targets = get_post_meta($popupId, 'sg_popup_target_preview', true);
597
- if (empty($targets['sgpb-target'][0])) {
598
- return $previewLink .= '/?sg_popup_preview_id='.$popupId;
599
- }
600
- $targetParams = @$targets['sgpb-target'][0][0]['param'];
601
- if ((!empty($targetParams) && $targetParams == 'not_rule') || empty($targetParams)) {
602
- $previewLink = home_url();
603
- $previewLink .= '/?sg_popup_preview_id='.$popupId;
604
-
605
- return $previewLink;
606
- }
607
- foreach ($targets['sgpb-target'][0] as $targetKey => $targetValue) {
608
- if (!isset($targetValue['operator']) || $targetValue['operator'] == '!=') {
609
- continue;
610
- }
611
- $previewLink = self::getPopupPreviewLink($targetValue, $popupId);
612
- $previewLink .= '/?sg_popup_preview_id='.$popupId;
613
- }
614
- }
615
-
616
- return $previewLink;
617
- }
618
-
619
- public static function getPopupPreviewLink($targetData, $popupId)
620
- {
621
- $previewLink = home_url();
622
-
623
- if (empty($targetData['param'])) {
624
- return $previewLink;
625
- }
626
- $targetParam = $targetData['param'];
627
-
628
- if ($targetParam == 'everywhere') {
629
- return $previewLink;
630
- }
631
-
632
- $args = array(
633
- 'orderby' => 'rand'
634
- );
635
-
636
- // posts
637
- if (strpos($targetData['param'], '_all')) {
638
- if ($targetData['param'] == 'post_all') {
639
- $args['post_type'] = 'post';
640
- }
641
- if ($targetData['param'] == 'page_all') {
642
- $args['post_type'] = 'page';
643
- }
644
- }
645
- if ($targetData['param'] == 'post_type' && !empty($targetData['value'])) {
646
- $args['post_type'] = $targetData['value'];
647
- }
648
- if ($targetData['param'] == 'page_type' && !empty($targetData['value'])) {
649
- $pageTypes = $targetData['value'];
650
- foreach ($pageTypes as $pageType) {
651
-
652
- if ($pageType == 'is_home_page') {
653
- if (is_front_page() && is_home()) {
654
- // default homepage
655
- return get_home_url();
656
- }
657
- else if (is_front_page()) {
658
- // static homepage
659
- return get_home_url();
660
- }
661
- }
662
- else if (function_exists($pageType)) {
663
- if ($pageType == 'is_home') {
664
- return get_home_url();
665
- }
666
- else if ($pageType == 'is_search') {
667
- return get_search_link();
668
- }
669
- else if ($pageType == 'is_shop') {
670
- return get_home_url().'/shop/';
671
- }
672
- }
673
- }
674
- }
675
- if (isset($args['post_type'])) {
676
- $the_query = new WP_Query($args);
677
- foreach ($the_query->posts as $post) {
678
- $postId = $post->ID;
679
- if (get_permalink($postId)) {
680
- return get_permalink($postId);
681
- }
682
- }
683
- }
684
- // selected post/page/custom_post_types...
685
- if (strpos($targetData['param'], '_selected') && !empty($targetData['value'])) {
686
- $value = array_keys($targetData['value']);
687
- if (!empty($value[0])) {
688
- if (get_permalink($value[0])) {
689
- return get_permalink($value[0]);
690
- }
691
- }
692
- }
693
- if (strpos($targetData['param'], '_archive') && !empty($targetData['value'])) {
694
- $value = array_keys($targetData['value']);
695
- if (!empty($value[0])) {
696
- if (get_permalink($value[0])) {
697
- return get_permalink($value[0]);
698
- }
699
- }
700
- }
701
-
702
- return $previewLink;
703
- }
704
-
705
- public function excludePostsToShow($where)
706
- {
707
- if (function_exists('is_admin') && is_admin()) {
708
- if (!function_exists('get_current_screen')) {
709
- return $where;
710
- }
711
-
712
- $screen = get_current_screen();
713
- if (empty($screen)) {
714
- return $where;
715
- }
716
-
717
- $postType = $screen->post_type;
718
- if ($postType == SG_POPUP_POST_TYPE &&
719
- $screen instanceof \WP_Screen &&
720
- $screen->id === 'edit-popupbuilder') {
721
- if (class_exists('sgpb\SGPopup')) {
722
- $activePopupsQuery = $this->getQueryString();
723
- if ($activePopupsQuery && $activePopupsQuery != '') {
724
- $where .= $activePopupsQuery;
725
- }
726
- }
727
- }
728
- }
729
-
730
- return $where;
731
- }
732
-
733
- public function clearContentPreviewMode($content)
734
- {
735
- global $post_type;
736
-
737
- if (is_preview() && $post_type == SG_POPUP_POST_TYPE) {
738
- $content = '';
739
- }
740
-
741
- return $content;
742
- }
743
-
744
- public function filterPopupContent($content, $popupId)
745
- {
746
- preg_match_all('/<iframe.*?src="(.*?)".*?<\/iframe>/', $content, $matches);
747
- /*$finalContent = '';*/
748
- // $matches[0] array contain iframes stings
749
- // $matches[1] array contain iframes URLs
750
- if (empty($matches) && empty($matches[0]) && empty($matches[1])) {
751
- return $content;
752
- }
753
- $urls = $matches[1];
754
-
755
- foreach ($matches[0] as $key => $iframe) {
756
- if (empty($urls[$key])) {
757
- continue;
758
- }
759
-
760
- $pos = strpos($iframe, $urls[$key]);
761
-
762
- if ($pos === false) {
763
- continue;
764
- }
765
-
766
- $content = str_replace(' src="'.$urls[$key].'"', ' src="" data-attr-src="'.esc_attr($urls[$key]).'"', $content);
767
- }
768
- if (function_exists('do_blocks')) {
769
- $content = do_blocks($content);
770
- }
771
-
772
- return do_shortcode($content);
773
- }
774
-
775
- public function addNewPostUrl($url, $path)
776
- {
777
- if ($path == 'post-new.php?post_type='.SG_POPUP_POST_TYPE) {
778
- $url = str_replace('post-new.php?post_type='.SG_POPUP_POST_TYPE, 'edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SG_POPUP_POST_TYPE, $url);
779
- }
780
-
781
- return $url;
782
- }
783
-
784
- public function popupsTableColumns($columns)
785
- {
786
- unset($columns['date']);
787
-
788
- $additionalItems = array();
789
- $additionalItems['counter'] = __('Views', SG_POPUP_TEXT_DOMAIN);
790
- $additionalItems['onOff'] = __('Status', SG_POPUP_TEXT_DOMAIN);
791
- $filterColumnsDisplaySettings = apply_filters('sgpbAddRandomColumnIntoAllPopupsViewTable', $additionalItems);
792
-
793
- if (isset($filterColumnsDisplaySettings['sgpbIsRandomEnabled'])){
794
- $additionalItems = $filterColumnsDisplaySettings;
795
- }
796
-
797
- $additionalItems['type'] = __('Type', SG_POPUP_TEXT_DOMAIN);
798
- $additionalItems['shortcode'] = __('Shortcode', SG_POPUP_TEXT_DOMAIN);
799
- $additionalItems['className'] = __('Class', SG_POPUP_TEXT_DOMAIN);
800
- $additionalItems['options'] = __('Actions', SG_POPUP_TEXT_DOMAIN);
801
-
802
- return $columns + $additionalItems;
803
- }
804
-
805
- /**
806
- * Function to add/hide links from popups dataTable row
807
- */
808
- public function quickRowLinksManager($actions, $post)
809
- {
810
- global $post_type;
811
-
812
- if ($post_type != SG_POPUP_POST_TYPE) {
813
- return $actions;
814
- }
815
- // remove quick edit link
816
- unset($actions['inline hide-if-no-js']);
817
- // remove view link
818
- unset($actions['view']);
819
- $url = AdminHelper::popupGetClonePostLink($post->ID , 'display', false);
820
-
821
- $actions['clone'] = '<a href="'.$url.'" title="';
822
- $actions['clone'] .= esc_attr__("Clone this item", SG_POPUP_TEXT_DOMAIN);
823
- $actions['clone'] .= '">'. esc_html__('Clone', SG_POPUP_TEXT_DOMAIN).'</a>';
824
-
825
- return $actions;
826
- }
827
-
828
- /* media button scripts */
829
- public function adminJsFilter($jsFiles)
830
- {
831
- $allowToShow = MediaButton::allowToShow();
832
- if ($allowToShow) {
833
- $jsFiles['jsFiles'][] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'select2.min.js');
834
- $jsFiles['jsFiles'][] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'sgpbSelect2.js');
835
- $jsFiles['jsFiles'][] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Popup.js');
836
- $jsFiles['jsFiles'][] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'PopupConfig.js');
837
- $jsFiles['jsFiles'][] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'MediaButton.js');
838
-
839
- $jsFiles['localizeData'][] = array(
840
- 'handle' => 'Popup.js',
841
- 'name' => 'sgpbPublicUrl',
842
- 'data' => SG_POPUP_PUBLIC_URL
843
- );
844
-
845
- $jsFiles['localizeData'][] = array(
846
- 'handle' => 'MediaButton.js',
847
- 'name' => 'mediaButtonParams',
848
- 'data' => array(
849
- 'currentPostType' => get_post_type(),
850
- 'popupBuilderPostType' => SG_POPUP_POST_TYPE,
851
- 'ajaxUrl' => admin_url('admin-ajax.php'),
852
- 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
853
- )
854
- );
855
- }
856
-
857
- return $jsFiles;
858
- }
859
-
860
- /* media button styles */
861
- public function sgpbAdminCssFiles($cssFiles)
862
- {
863
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'sgbp-bootstrap.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
864
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'select2.min.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
865
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'popupAdminStyles.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
866
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'newDesignFromBuild.css', 'dep' => array(), 'ver' => rand(1, 10000), 'inFooter' => false);
867
-
868
- return $cssFiles;
869
- }
870
-
871
- }
872
-
873
-
1
+ <?php
2
+ namespace sgpb;
3
+ use \WP_Query;
4
+ use \SgpbPopupConfig;
5
+ use sgpb\PopupBuilderActivePackage;
6
+ use sgpb\SGPopup;
7
+
8
+ class Filters
9
+ {
10
+ private $activePopupsQueryString = '';
11
+
12
+ public function setQueryString($activePopupsQueryString)
13
+ {
14
+ $this->activePopupsQueryString = $activePopupsQueryString;
15
+ }
16
+
17
+ public function getQueryString()
18
+ {
19
+ return $this->activePopupsQueryString;
20
+ }
21
+
22
+ public function __construct()
23
+ {
24
+ $this->init();
25
+ }
26
+
27
+ public function init()
28
+ {
29
+ add_filter('admin_url', array($this, 'addNewPostUrl'), 10, 2);
30
+ add_filter('wpseo_sitemap_exclude_post_type', array($this, 'excludeSitemapsYoast'), 10, 2);
31
+ add_filter('admin_menu', array($this, 'removeAddNewSubmenu'), 10, 2);
32
+ add_filter('manage_'.SG_POPUP_POST_TYPE.'_posts_columns', array($this, 'popupsTableColumns'));
33
+ add_filter('post_row_actions', array($this, 'quickRowLinksManager'), 10, 2);
34
+ add_filter('sgpbAdminJs', array($this, 'adminJsFilter'), 1, 1);
35
+ add_filter('sgpbAdminCssFiles', array($this, 'sgpbAdminCssFiles'), 1, 1);
36
+ add_filter('sgpbPopupContentLoadToPage', array($this, 'filterPopupContent'), 10, 2);
37
+ add_filter('the_content', array($this, 'clearContentPreviewMode'), 10, 1);
38
+ // The priority of this action should be higher than the extensions' init priority.
39
+ add_action('init', array($this, 'excludePostToShowPrepare'), 99999999);
40
+ add_filter('preview_post_link', array($this, 'editPopupPreviewLink'), 10, 2);
41
+ add_filter('upgrader_pre_download', array($this, 'maybeShortenEddFilename'), 10, 4);
42
+ add_filter('sgpbSavedPostData', array($this, 'savedPostData'), 10, 1);
43
+ add_filter('sgpbPopupEvents', array($this, 'popupEvents'), 10, 1);
44
+ add_filter('sgpbAdditionalMetaboxes', array($this, 'metaboxes'), 10, 1);
45
+ add_filter('sgpbOptionAvailable', array($this, 'filterOption'), 10, 1);
46
+ add_filter('export_wp_filename', array($this, 'exportFileName'), 10, 1);
47
+ add_filter('sgpbAdvancedOptionsDefaultValues', array($this, 'defaultAdvancedOptionsValues'), 10, 1);
48
+ add_filter('sgpbPopupContentLoadToPage', array($this, 'popupContentLoadToPage'), 10, 2);
49
+ add_filter('sgpbExtraNotifications', array($this, 'sgpbExtraNotifications'), 10, 1);
50
+ add_filter('sgpbSystemInformation', array($this, 'systemInformation'), 10, 1);
51
+ add_filter('plugin_action_links', array($this, 'pluginActionLinks'), 10, 4);
52
+ add_filter('plugin_row_meta', array( $this, 'pluginRowMetas'), 10, 4);
53
+ add_filter('rank_math/sitemap/exclude_post_type', array($this, 'excludeRankMath'), 10, 2);
54
+ add_filter('sgpbUserSelectionQuery', array($this, 'userSelectionQueryAddExtraAttributes'), 100, 1);
55
+ add_filter('sgpbFilterOptionsBeforeSaving', array($this, 'filterOptionsBeforeSaving'), 100, 1);
56
+ add_filter('sgpbPopupExtraData', array($this, 'popupExtraDataRender'), 100, 2);
57
+ add_filter('wpml_link_to_translation', array($this, 'linkToTranslationWpml'), 30, 4);
58
+ add_filter('pll_get_post_types', array($this, 'enablePBpostTypeForTranslating'), 10, 2);
59
+ }
60
+
61
+ public function enablePBpostTypeForTranslating($postTypes, $isSettings)
62
+ {
63
+ $postTypes[SG_POPUP_POST_TYPE] = SG_POPUP_POST_TYPE;
64
+
65
+ return $postTypes;
66
+ }
67
+
68
+ public function linkToTranslationWpml($link, $postId, $lang, $trid)
69
+ {
70
+ if (strpos($link, SG_POPUP_POST_TYPE) && strpos($link, 'source_lang') && isset($trid)) {
71
+
72
+ $popupType = 'html';
73
+ $popup = SGPopup::find($postId);
74
+ if (!empty($popup) || !is_object($popup)) {
75
+ $popupType = $popup->getType();
76
+ }
77
+ $link .= '&sgpb_type='.$popupType;
78
+ }
79
+
80
+ return $link;
81
+ }
82
+
83
+ public function popupExtraDataRender($popupId = 0, $popupOptions = array())
84
+ {
85
+ $floatingButton = '';
86
+ if (empty($popupOptions['sgpb-enable-floating-button'])) {
87
+ return $floatingButton;
88
+ }
89
+ $buttonStyles = 'z-index:99999999999;';
90
+ $buttonClass = 'sgpb-'.$popupOptions['sgpb-floating-button-style'].'-'.$popupOptions['sgpb-floating-button-position'];
91
+
92
+ if (isset($popupOptions['sgpb-floating-button-style']) && $popupOptions['sgpb-floating-button-style'] == 'basic' && strstr($popupOptions['sgpb-floating-button-position'], 'center')) {
93
+ if (strstr($popupOptions['sgpb-floating-button-position'], 'top')) {
94
+ $buttonStyles .= 'top: 0%;';
95
+ $buttonStyles .= 'right: '.$popupOptions['sgpb-floating-button-position-right'].'%;';
96
+ }
97
+ else if (strstr($popupOptions['sgpb-floating-button-position'], 'bottom')) {
98
+ $buttonStyles .= 'bottom: 0%;';
99
+ $buttonStyles .= 'right: '.$popupOptions['sgpb-floating-button-position-right'].'%;';
100
+ }
101
+ else if (strstr($popupOptions['sgpb-floating-button-position'], 'left') || strstr($popupOptions['sgpb-floating-button-position'], 'right')) {
102
+ $buttonStyles .= 'top: '.$popupOptions['sgpb-floating-button-position-top'].'%;';
103
+ }
104
+ }
105
+
106
+ if (isset($popupOptions['sgpb-floating-button-font-size'])) {
107
+ $buttonStyles .= 'font-size: '.$popupOptions['sgpb-floating-button-font-size'].'px;';
108
+ }
109
+ if (isset($popupOptions['sgpb-floating-button-border-size'])) {
110
+ $buttonStyles .= 'border-width: '.$popupOptions['sgpb-floating-button-border-size'].'px;';
111
+ $buttonStyles .= 'border-style: solid;';
112
+ }
113
+ if (isset($popupOptions['sgpb-floating-button-border-radius'])) {
114
+ $buttonStyles .= 'border-radius: '.$popupOptions['sgpb-floating-button-border-radius'].'px;';
115
+ }
116
+ if (isset($popupOptions['sgpb-floating-button-border-color'])) {
117
+ $buttonStyles .= 'border-color: '.$popupOptions['sgpb-floating-button-border-color'].';';
118
+ }
119
+ if (isset($popupOptions['sgpb-floating-button-bg-color'])) {
120
+ $buttonStyles .= 'background-color: '.$popupOptions['sgpb-floating-button-bg-color'].';';
121
+ }
122
+ if (isset($popupOptions['sgpb-floating-button-text-color'])) {
123
+ $buttonStyles .= 'color: '.$popupOptions['sgpb-floating-button-text-color'].';';
124
+ }
125
+
126
+ /*
127
+ * We first hide to make all CSS load then we will show once document is ready
128
+ * SgpbEventListener.eventsListenerAfterDocumentReady -> showFloatingButton
129
+ */
130
+ $buttonStyles .= 'display: none;';
131
+
132
+ $floatingButton = '<div class="'.$buttonClass.' sgpb-floating-button sg-popup-id-'.$popupId.'" style="'.$buttonStyles.'"><span class="sgpb-'.$popupOptions['sgpb-floating-button-style'].'-floating-button-text">'.$popupOptions['sgpb-floating-button-text'].'</span></div>';
133
+
134
+ return $floatingButton;
135
+ }
136
+
137
+ public function filterOptionsBeforeSaving($unfilteredData = array())
138
+ {
139
+ $externalOptions = array(
140
+ 'icl_post_language' => 'sgpb-icl_post_language'
141
+ );
142
+
143
+ foreach ($externalOptions as $optionKey => $value) {
144
+ if (isset($unfilteredData[$optionKey])) {
145
+ $unfilteredData[$value] = $unfilteredData[$optionKey];
146
+ // there is no need to unset the old index value, because in the next step we'll take only the values from indexes started with "sgpb"
147
+ }
148
+ }
149
+
150
+ return $unfilteredData;
151
+ }
152
+
153
+ public function userSelectionQueryAddExtraAttributes($query)
154
+ {
155
+ $query .= ' status = 0 and unsubscribed = 0';
156
+
157
+ return $query;
158
+ }
159
+
160
+ public function excludeRankMath($exclude, $type)
161
+ {
162
+ if ($type == SG_POPUP_POST_TYPE) {
163
+ $exclude = true;
164
+ }
165
+
166
+ return $exclude;
167
+ }
168
+
169
+ public function pluginRowMetas($pluginMeta, $pluginFile, $pluginData, $status)
170
+ {
171
+ if (empty($pluginFile)) {
172
+ return $pluginMeta;
173
+ }
174
+
175
+ $allExtensions = \SgpbDataConfig::allExtensionsKeys();
176
+ $allExtensions = wp_list_pluck($allExtensions, 'pluginKey');
177
+ $allExtensions[] = SG_POPUP_FILE_NAME;
178
+
179
+ $rowMeta = array(
180
+ 'rateus' => '<a href="'.SG_POPUP_RATE_US_URL.'" target="_blank">'.esc_html__('Rate us', SG_POPUP_TEXT_DOMAIN).'</a>',
181
+ 'support' => '<a href="'.SG_POPUP_SUPPORT_URL.'" target="_blank">'.esc_html__('Support', SG_POPUP_TEXT_DOMAIN).'</a>'
182
+ );
183
+
184
+ if (in_array($pluginFile, $allExtensions)) {
185
+ $pluginMeta = array_merge($pluginMeta, $rowMeta);
186
+ }
187
+
188
+ return $pluginMeta;
189
+ }
190
+
191
+ public function pluginActionLinks($actions, $pluginFile, $pluginData, $context)
192
+ {
193
+ if (empty($pluginFile)) {
194
+ return $actions;
195
+ }
196
+
197
+ $allExtensions = \SgpbDataConfig::allExtensionsKeys();
198
+ $allExtensions = wp_list_pluck($allExtensions, 'pluginKey');
199
+ $allExtensions[] = SG_POPUP_FILE_NAME;
200
+
201
+ $settingPageUrl = admin_url().'edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SG_POPUP_SETTINGS_PAGE;
202
+
203
+ $links = array(
204
+ 'settings' => '<a href="'.$settingPageUrl.'" target="_blank">'.esc_html__('Settings', SG_POPUP_TEXT_DOMAIN).'</a>',
205
+ 'docs' => '<a href="'.SG_POPUP_TICKET_URL.'" target="_blank">'.esc_html__('Docs', SG_POPUP_TEXT_DOMAIN).'</a>'
206
+ );
207
+
208
+ if (in_array($pluginFile, $allExtensions)) {
209
+ if ($pluginFile == SG_POPUP_FILE_NAME) {
210
+ $getActiveExtensions = AdminHelper::getAllExtensions();
211
+ if (empty($getActiveExtensions['active'])) {
212
+ $links['upgrade'] = '<a style="color: #4364eb;" href="'.SG_POPUP_BUNDLE_URL.'" target="_blank">'.esc_html__('Upgrade', SG_POPUP_TEXT_DOMAIN).'</a>';
213
+ }
214
+ }
215
+ $actions = array_merge($links, $actions);
216
+ }
217
+
218
+ return $actions;
219
+ }
220
+
221
+ public function systemInformation($infoContent)
222
+ {
223
+
224
+ $infoContent .= 'Platform: '.@$platform . "\n";
225
+ $infoContent .= 'Browser Name: '.@$bname . "\n";
226
+ $infoContent .= 'Browser Version: '.@$version . "\n";
227
+ $infoContent .= 'User Agent: '.@$uAgent . "\n";
228
+
229
+ return $infoContent;
230
+ }
231
+
232
+ public function popupContentLoadToPage($content, $popupId)
233
+ {
234
+ $customScripts = AdminHelper::renderCustomScripts($popupId);
235
+ $content .= $customScripts;
236
+
237
+ return $content;
238
+ }
239
+
240
+ public function sgpbExtraNotifications($notifications = array())
241
+ {
242
+ $license = self::licenseNotification();
243
+ if (!empty($license)) {
244
+ $notifications[] = $license;
245
+ }
246
+
247
+ $promotional = self::promotionalNotifications();
248
+ if (!empty($promotional)) {
249
+ $notifications[] = $promotional;
250
+ }
251
+
252
+ $supportBanner = self::supportBannerNotifcations();
253
+ if (!empty($supportBanner)) {
254
+ $notifications[] = $supportBanner;
255
+ }
256
+
257
+ return $notifications;
258
+ }
259
+
260
+ public static function supportBannerNotifcations()
261
+ {
262
+ $hideSupportBanner = get_option('sgpb-hide-support-banner');
263
+ if (!empty($hideSupportBanner)) {
264
+ return array();
265
+ }
266
+ $message = AdminHelper::supportBannerNotification();
267
+ $notification['id'] = SGPB_SUPPORT_BANNER_NOTIFICATION_ID;
268
+ $notification['priority'] = 1;
269
+ $notification['type'] = 1;
270
+ $notification['message'] = $message;
271
+
272
+ return $notification;
273
+ }
274
+
275
+ public static function promotionalNotifications()
276
+ {
277
+ $alreadyDone = get_option('SGPBCloseReviewPopup-notification');
278
+ if (!empty($alreadyDone)) {
279
+ return array();
280
+ }
281
+ $id = SGPB_RATE_US_NOTIFICATION_ID;
282
+ $type = 1;
283
+ $priority = 1;
284
+
285
+ $maxOpenPopupStatus = AdminHelper::shouldOpenForMaxOpenPopupMessage();
286
+ // popup opening count notification
287
+ if ($maxOpenPopupStatus) {
288
+ $message = AdminHelper::getMaxOpenPopupsMessage();
289
+ }
290
+
291
+ $shouldOpenForDays = AdminHelper::shouldOpenReviewPopupForDays();
292
+ if ($shouldOpenForDays && !$maxOpenPopupStatus) {
293
+ $message = AdminHelper::getMaxOpenDaysMessage();
294
+ }
295
+ if (empty($message)) {
296
+ return array();
297
+ }
298
+
299
+ $alternateNotification['priority'] = $priority;
300
+ $alternateNotification['type'] = $type;
301
+ $alternateNotification['id'] = $id;
302
+ $alternateNotification['message'] = $message;
303
+
304
+ return $alternateNotification;
305
+ }
306
+
307
+ public function licenseNotification()
308
+ {
309
+ $inactiveExtensionNotice = array();
310
+ $dontShowLicenseBanner = get_option('sgpb-hide-license-notice-banner');
311
+ if ($dontShowLicenseBanner) {
312
+ return $notifications;
313
+ }
314
+
315
+ $inactive = AdminHelper::getOption('SGPB_INACTIVE_EXTENSIONS');
316
+ $hasInactiveExtensions = AdminHelper::hasInactiveExtensions();
317
+
318
+ if (!$inactive) {
319
+ AdminHelper::updateOption('SGPB_INACTIVE_EXTENSIONS', 1);
320
+ if ($hasInactiveExtensions) {
321
+ AdminHelper::updateOption('SGPB_INACTIVE_EXTENSIONS', 'inactive');
322
+ $inactive = 'inactive';
323
+ }
324
+
325
+ }
326
+
327
+ if ($hasInactiveExtensions && $inactive == 'inactive') {
328
+ $licenseSectionUrl = menu_page_url(SGPB_POPUP_LICENSE, false);
329
+ $partOfContent = '<br><br>'.__('<a href="'.$licenseSectionUrl.'">Follow the link</a> to finalize the activation.', SG_POPUP_TEXT_DOMAIN);
330
+ $message = '<b>'.__('Thank you for choosing our plugin!', SG_POPUP_TEXT_DOMAIN).'</b>';
331
+ $message .= '<br>';
332
+ $message .= '<br>';
333
+ $message .= '<b>'.__('You have activated Popup Builder extension(s). Please, don\'t forget to activate the license key(s) as well.', SG_POPUP_TEXT_DOMAIN).'</b>';
334
+ $message .= '<b>'.$partOfContent.'</b>';
335
+
336
+ $inactiveExtensionNotice['priority'] = 1;
337
+ $inactiveExtensionNotice['type'] = 2;
338
+ $inactiveExtensionNotice['id'] = 'sgpbMainActiveInactiveLicense';
339
+ $inactiveExtensionNotice['message'] = $message;
340
+ }
341
+
342
+ return $inactiveExtensionNotice;
343
+ }
344
+
345
+ public function excludeSitemapsYoast($exclude, $postType)
346
+ {
347
+ $postTypeObject = get_post_type_object($postType);
348
+ if (!is_object($postTypeObject)) {
349
+ return $exclude;
350
+ }
351
+
352
+ if ($postTypeObject->public === false || $postType == SG_POPUP_POST_TYPE) {
353
+ return true;
354
+ }
355
+
356
+ return $exclude;
357
+ }
358
+
359
+ public function defaultAdvancedOptionsValues($options = array())
360
+ {
361
+ $enablePopupOverlay = PopupBuilderActivePackage::canUseOption('sgpb-enable-popup-overlay');
362
+ if (!$enablePopupOverlay) {
363
+ $options['sgpb-enable-popup-overlay'] = 'on';
364
+ }
365
+
366
+ return $options;
367
+ }
368
+
369
+ public function excludePostToShowPrepare()
370
+ {
371
+ SgpbPopupConfig::popupTypesInit();
372
+ $queryString = SGPopup::getActivePopupsQueryString();
373
+ $this->setQueryString($queryString);
374
+ add_filter('posts_where' , array($this, 'excludePostsToShow'), 10, 1);
375
+ }
376
+
377
+ public function exportFileName($fileName)
378
+ {
379
+ if (!empty($_GET['sgpbExportAction'])) {
380
+ return SGPB_POPUP_EXPORT_FILE_NAME;
381
+ }
382
+
383
+ return $fileName;
384
+ }
385
+
386
+ public function filterOption($filterOption)
387
+ {
388
+ $extensionOptionsData = AdminHelper::getExtensionAvaliabilityOptions();
389
+
390
+ if (empty($extensionOptionsData)) {
391
+ return $filterOption;
392
+ }
393
+
394
+ foreach ($extensionOptionsData as $extensionKey => $extensionOptions) {
395
+ $isAdvancedClosingActive = is_plugin_active($extensionKey);
396
+ if (isset($filterOption['name']) && !$isAdvancedClosingActive) {
397
+ $name = $filterOption['name'];
398
+
399
+ if (in_array($name, $extensionOptions)) {
400
+ $filterOption['status'] = false;
401
+ }
402
+ }
403
+ }
404
+
405
+ return $filterOption;
406
+ }
407
+
408
+ public function metaboxes($metaboxes)
409
+ {
410
+ $otherConditionsProLabel = '';
411
+ $otherConditionsCanBeUsed = PopupBuilderActivePackage::canUseSection('popupOtherConditionsSection');
412
+ if (!$otherConditionsCanBeUsed) {
413
+ $otherConditionsProLabel .= '<a href="'.SG_POPUP_SCHEDULING_URL.'" target="_blank" class="sgpb-pro-label-metabox">';
414
+ $otherConditionsProLabel .= __('UNLOCK OPTION', SG_POPUP_TEXT_DOMAIN).'</a>';
415
+ }
416
+ $metaboxes['allMetaboxesView'] = array(
417
+ 'key' => 'allMetaboxesView',
418
+ 'displayName' => 'Main Options',
419
+ 'short_description' => 'main options',
420
+ 'filePath' => SG_POPUP_VIEWS_PATH.'allMetaboxesView.php',
421
+ 'priority' => 'high'
422
+ );
423
+
424
+ $metaboxes['targetMetaboxView'] = array(
425
+ 'key' => 'targetMetaboxView',
426
+ 'displayName' => 'Display Rules',
427
+ 'short_description' => 'Select where on the website to trigger the popup',
428
+ 'filePath' => SG_POPUP_VIEWS_PATH.'targetView.php',
429
+ 'priority' => 'high'
430
+ );
431
+
432
+ $metaboxes['eventsMetaboxView'] = array(
433
+ 'key' => 'eventsMetaboxView',
434
+ 'displayName' => 'Events',
435
+ 'short_description' => 'Select the specific actions that will trigger the popup, default event is on load',
436
+ 'filePath' => SG_POPUP_VIEWS_PATH.'eventsView.php',
437
+ 'priority' => 'high'
438
+ );
439
+
440
+ $metaboxes['conditionsMetaboxView'] = array(
441
+ 'key' => 'conditionsMetaboxView',
442
+ 'displayName' => 'Conditions',
443
+ 'short_description' => 'Select advanced conditions for more professional targeting',
444
+ 'filePath' => SG_POPUP_VIEWS_PATH.'conditionsView.php',
445
+ 'priority' => 'high'
446
+ );
447
+
448
+ $metaboxes['behaviorAfterSpecialEventsMetaboxView'] = array(
449
+ 'key' => 'behaviorAfterSpecialEventsMetaboxView',
450
+ 'displayName' => 'Behavior After Special Events',
451
+ 'short_description' => 'Select special events that will trigger the popup',
452
+ 'filePath' => SG_POPUP_VIEWS_PATH.'behaviorAfterSpecialEventsView.php',
453
+ 'priority' => 'high'
454
+ );
455
+
456
+ $metaboxes['popupDesignMetaBoxView'] = array(
457
+ 'key' => 'popupDesignMetaBoxView',
458
+ 'displayName' => 'Design',
459
+ 'short_description' => 'Customize design, background and overlay of the popup',
460
+ 'filePath' => SG_POPUP_VIEWS_PATH.'popupDesignView.php',
461
+ 'priority' => 'high'
462
+ );
463
+
464
+ $metaboxes['closeSettings'] = array(
465
+ 'key' => 'closeSettings',
466
+ 'displayName' => 'Closing',
467
+ 'short_description' => 'Select the desired popup closing method, customize close button',
468
+ 'filePath' => SG_POPUP_VIEWS_PATH.'closeSettingsView.php',
469
+ 'priority' => 'high'
470
+ );
471
+
472
+ $metaboxes['dimensions'] = array(
473
+ 'key' => 'dimensions',
474
+ 'displayName' => 'Dimensions',
475
+ 'short_description' => 'Make your popup mobile friendly and responsive for all devices',
476
+ 'filePath' => SG_POPUP_VIEWS_PATH.'dimensionsView.php',
477
+ 'priority' => 'high'
478
+ );
479
+
480
+ $metaboxes['optionsMetaboxView'] = array(
481
+ 'key' => 'optionsMetaboxView',
482
+ 'displayName' => 'Advanced',
483
+ 'short_description' => 'Use advanced features for popup animations, opening and closing actions',
484
+ 'filePath' => SG_POPUP_VIEWS_PATH.'optionsView.php',
485
+ 'priority' => 'high'
486
+ );
487
+
488
+ $metaboxes['otherConditionsMetaBoxView'] = array(
489
+ 'key' => 'otherConditionsMetaBoxView',
490
+ 'displayName' => 'Scheduling'.$otherConditionsProLabel,
491
+ 'short_description' => 'Schedule your popup for a particular day or for a selected timeframe',
492
+ 'filePath' => SG_POPUP_VIEWS_PATH.'otherConditionsView.php',
493
+ 'priority' => 'high'
494
+ );
495
+
496
+ $metaboxes['floatingButton'] = array(
497
+ 'key' => 'floatingButton',
498
+ 'displayName' => 'Floating Button',
499
+ 'short_description' => 'Set the popup to appear on a scrollable call to action button',
500
+ 'filePath' => SG_POPUP_VIEWS_PATH.'floatingButton.php',
501
+ 'context' => 'side',
502
+ 'priority' => 'high'
503
+ );
504
+
505
+ $metaboxes['popupOpeningCounter'] = array(
506
+ 'key' => 'popupOpeningCounter',
507
+ 'displayName' => 'Statistics',
508
+ 'short_description' => 'Enable or disable the counts of the popup',
509
+ 'filePath' => SG_POPUP_VIEWS_PATH.'popupOpeningCounter.php',
510
+ 'context' => 'side',
511
+ 'priority' => 'low'
512
+ );
513
+
514
+ $metaboxes['customCssJs'] = array(
515
+ 'key' => 'customCssJs',
516
+ 'displayName' => 'Custom JS or CSS',
517
+ 'short_description' => 'Add custom JS and/or CSS code for extra control',
518
+ 'filePath' => SG_POPUP_VIEWS_PATH.'customEditor.php',
519
+ 'priority' => 'low'
520
+ );
521
+
522
+ $metaboxes = apply_filters('sgpbPopupTypeMainViewMetaboxes', $metaboxes);
523
+
524
+ return $metaboxes;
525
+ }
526
+
527
+ public function popupEvents($events)
528
+ {
529
+ foreach ($events as $eventKey => $eventData) {
530
+ if (isset($eventData['param'])) {
531
+ if ($eventData['param'] == SGPB_CSS_CLASS_ACTIONS_KEY) {
532
+ unset($events[$eventKey]);
533
+ $events[] = array('param' => 'click');
534
+ $events[] = array('param' => 'hover');
535
+ $events[] = array('param' => 'confirm');
536
+ }
537
+ else if ($eventData['param'] == SGPB_CLICK_ACTION_KEY) {
538
+ $events[$eventKey]['param'] = 'click';
539
+ }
540
+ else if ($eventData['param'] == SGPB_HOVER_ACTION_KEY) {
541
+ $events[$eventKey]['param'] = 'hover';
542
+ }
543
+ }
544
+ }
545
+
546
+ return $events;
547
+ }
548
+
549
+ public function savedPostData($postData)
550
+ {
551
+ // for old popups here we change already saved old popup id
552
+ if (isset($postData['sgpb-mailchimp-success-popup'])) {
553
+ // sgpGetCorrectPopupId it's a temporary function and it will be removed in future
554
+ if (function_exists(__NAMESPACE__.'\sgpGetCorrectPopupId')) {
555
+ $postData['sgpb-mailchimp-success-popup'] = sgpGetCorrectPopupId($postData['sgpb-mailchimp-success-popup']);
556
+ }
557
+ }
558
+ // for old popups here we change already saved old popup id
559
+ if (isset($postData['sgpb-aweber-success-popup'])) {
560
+ if (function_exists(__NAMESPACE__.'\sgpGetCorrectPopupId')) {
561
+ $postData['sgpb-aweber-success-popup'] = sgpGetCorrectPopupId($postData['sgpb-aweber-success-popup']);
562
+ }
563
+ }
564
+
565
+ return $postData;
566
+ }
567
+
568
+ public function removeAddNewSubmenu()
569
+ {
570
+ //we don't need the default add new, since we are using our custom page for it
571
+ $page = remove_submenu_page(
572
+ 'edit.php?post_type='.SG_POPUP_POST_TYPE,
573
+ 'post-new.php?post_type='.SG_POPUP_POST_TYPE
574
+ );
575
+ }
576
+
577
+ public function maybeShortenEddFilename($return, $package)
578
+ {
579
+ if (strpos($package, SG_POPUP_STORE_URL) !== false) {
580
+ add_filter('wp_unique_filename', array($this, 'shortenEddFilename'), 100, 2);
581
+ }
582
+ return $return;
583
+ }
584
+
585
+ public function shortenEddFilename($filename, $ext)
586
+ {
587
+ $filename = substr($filename, 0, 20).$ext;
588
+ remove_filter('wp_unique_filename', array($this, 'shortenEddFilename'), 10);
589
+ return $filename;
590
+ }
591
+
592
+ public function editPopupPreviewLink($previewLink = '', $post = array())
593
+ {
594
+ if (!empty($post) && $post->post_type == SG_POPUP_POST_TYPE) {
595
+ $popupId = $post->ID;
596
+ $targets = get_post_meta($popupId, 'sg_popup_target_preview', true);
597
+ if (empty($targets['sgpb-target'][0])) {
598
+ return $previewLink .= '/?sg_popup_preview_id='.$popupId;
599
+ }
600
+ $targetParams = @$targets['sgpb-target'][0][0]['param'];
601
+ if ((!empty($targetParams) && $targetParams == 'not_rule') || empty($targetParams)) {
602
+ $previewLink = home_url();
603
+ $previewLink .= '/?sg_popup_preview_id='.$popupId;
604
+
605
+ return $previewLink;
606
+ }
607
+ foreach ($targets['sgpb-target'][0] as $targetKey => $targetValue) {
608
+ if (!isset($targetValue['operator']) || $targetValue['operator'] == '!=') {
609
+ continue;
610
+ }
611
+ $previewLink = self::getPopupPreviewLink($targetValue, $popupId);
612
+ $previewLink .= '/?sg_popup_preview_id='.$popupId;
613
+ }
614
+ }
615
+
616
+ return $previewLink;
617
+ }
618
+
619
+ public static function getPopupPreviewLink($targetData, $popupId)
620
+ {
621
+ $previewLink = home_url();
622
+
623
+ if (empty($targetData['param'])) {
624
+ return $previewLink;
625
+ }
626
+ $targetParam = $targetData['param'];
627
+
628
+ if ($targetParam == 'everywhere') {
629
+ return $previewLink;
630
+ }
631
+
632
+ $args = array(
633
+ 'orderby' => 'rand'
634
+ );
635
+
636
+ // posts
637
+ if (strpos($targetData['param'], '_all')) {
638
+ if ($targetData['param'] == 'post_all') {
639
+ $args['post_type'] = 'post';
640
+ }
641
+ if ($targetData['param'] == 'page_all') {
642
+ $args['post_type'] = 'page';
643
+ }
644
+ }
645
+ if ($targetData['param'] == 'post_type' && !empty($targetData['value'])) {
646
+ $args['post_type'] = $targetData['value'];
647
+ }
648
+ if ($targetData['param'] == 'page_type' && !empty($targetData['value'])) {
649
+ $pageTypes = $targetData['value'];
650
+ foreach ($pageTypes as $pageType) {
651
+
652
+ if ($pageType == 'is_home_page') {
653
+ if (is_front_page() && is_home()) {
654
+ // default homepage
655
+ return get_home_url();
656
+ }
657
+ else if (is_front_page()) {
658
+ // static homepage
659
+ return get_home_url();
660
+ }
661
+ }
662
+ else if (function_exists($pageType)) {
663
+ if ($pageType == 'is_home') {
664
+ return get_home_url();
665
+ }
666
+ else if ($pageType == 'is_search') {
667
+ return get_search_link();
668
+ }
669
+ else if ($pageType == 'is_shop') {
670
+ return get_home_url().'/shop/';
671
+ }
672
+ }
673
+ }
674
+ }
675
+ if (isset($args['post_type'])) {
676
+ $the_query = new WP_Query($args);
677
+ foreach ($the_query->posts as $post) {
678
+ $postId = $post->ID;
679
+ if (get_permalink($postId)) {
680
+ return get_permalink($postId);
681
+ }
682
+ }
683
+ }
684
+ // selected post/page/custom_post_types...
685
+ if (strpos($targetData['param'], '_selected') && !empty($targetData['value'])) {
686
+ $value = array_keys($targetData['value']);
687
+ if (!empty($value[0])) {
688
+ if (get_permalink($value[0])) {
689
+ return get_permalink($value[0]);
690
+ }
691
+ }
692
+ }
693
+ if (strpos($targetData['param'], '_archive') && !empty($targetData['value'])) {
694
+ $value = array_keys($targetData['value']);
695
+ if (!empty($value[0])) {
696
+ if (get_permalink($value[0])) {
697
+ return get_permalink($value[0]);
698
+ }
699
+ }
700
+ }
701
+
702
+ return $previewLink;
703
+ }
704
+
705
+ public function excludePostsToShow($where)
706
+ {
707
+ if (function_exists('is_admin') && is_admin()) {
708
+ if (!function_exists('get_current_screen')) {
709
+ return $where;
710
+ }
711
+
712
+ $screen = get_current_screen();
713
+ if (empty($screen)) {
714
+ return $where;
715
+ }
716
+
717
+ $postType = $screen->post_type;
718
+ if ($postType == SG_POPUP_POST_TYPE &&
719
+ $screen instanceof \WP_Screen &&
720
+ $screen->id === 'edit-popupbuilder') {
721
+ if (class_exists('sgpb\SGPopup')) {
722
+ $activePopupsQuery = $this->getQueryString();
723
+ if ($activePopupsQuery && $activePopupsQuery != '') {
724
+ $where .= $activePopupsQuery;
725
+ }
726
+ }
727
+ }
728
+ }
729
+
730
+ return $where;
731
+ }
732
+
733
+ public function clearContentPreviewMode($content)
734
+ {
735
+ global $post_type;
736
+
737
+ if (is_preview() && $post_type == SG_POPUP_POST_TYPE) {
738
+ $content = '';
739
+ }
740
+
741
+ return $content;
742
+ }
743
+
744
+ public function filterPopupContent($content, $popupId)
745
+ {
746
+ preg_match_all('/<iframe.*?src="(.*?)".*?<\/iframe>/', $content, $matches);
747
+ /*$finalContent = '';*/
748
+ // $matches[0] array contain iframes stings
749
+ // $matches[1] array contain iframes URLs
750
+ if (empty($matches) && empty($matches[0]) && empty($matches[1])) {
751
+ return $content;
752
+ }
753
+ $urls = $matches[1];
754
+
755
+ foreach ($matches[0] as $key => $iframe) {
756
+ if (empty($urls[$key])) {
757
+ continue;
758
+ }
759
+
760
+ $pos = strpos($iframe, $urls[$key]);
761
+
762
+ if ($pos === false) {
763
+ continue;
764
+ }
765
+
766
+ $content = str_replace(' src="'.$urls[$key].'"', ' src="" data-attr-src="'.esc_attr($urls[$key]).'"', $content);
767
+ }
768
+ if (function_exists('do_blocks')) {
769
+ $content = do_blocks($content);
770
+ }
771
+
772
+ return do_shortcode($content);
773
+ }
774
+
775
+ public function addNewPostUrl($url, $path)
776
+ {
777
+ if ($path == 'post-new.php?post_type='.SG_POPUP_POST_TYPE) {
778
+ $url = str_replace('post-new.php?post_type='.SG_POPUP_POST_TYPE, 'edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SG_POPUP_POST_TYPE, $url);
779
+ }
780
+
781
+ return $url;
782
+ }
783
+
784
+ public function popupsTableColumns($columns)
785
+ {
786
+ unset($columns['date']);
787
+
788
+ $additionalItems = array();
789
+ $additionalItems['counter'] = __('Views', SG_POPUP_TEXT_DOMAIN);
790
+ $additionalItems['onOff'] = __('Status', SG_POPUP_TEXT_DOMAIN);
791
+ $filterColumnsDisplaySettings = apply_filters('sgpbAddRandomColumnIntoAllPopupsViewTable', $additionalItems);
792
+
793
+ if (isset($filterColumnsDisplaySettings['sgpbIsRandomEnabled'])){
794
+ $additionalItems = $filterColumnsDisplaySettings;
795
+ }
796
+
797
+ $additionalItems['type'] = __('Type', SG_POPUP_TEXT_DOMAIN);
798
+ $additionalItems['shortcode'] = __('Shortcode', SG_POPUP_TEXT_DOMAIN);
799
+ $additionalItems['className'] = __('Class', SG_POPUP_TEXT_DOMAIN);
800
+ $additionalItems['options'] = __('Actions', SG_POPUP_TEXT_DOMAIN);
801
+
802
+ return $columns + $additionalItems;
803
+ }
804
+
805
+ /**
806
+ * Function to add/hide links from popups dataTable row
807
+ */
808
+ public function quickRowLinksManager($actions, $post)
809
+ {
810
+ global $post_type;
811
+
812
+ if ($post_type != SG_POPUP_POST_TYPE) {
813
+ return $actions;
814
+ }
815
+ // remove quick edit link
816
+ unset($actions['inline hide-if-no-js']);
817
+ // remove view link
818
+ unset($actions['view']);
819
+ $url = AdminHelper::popupGetClonePostLink($post->ID , 'display', false);
820
+
821
+ $actions['clone'] = '<a href="'.$url.'" title="';
822
+ $actions['clone'] .= esc_attr__("Clone this item", SG_POPUP_TEXT_DOMAIN);
823
+ $actions['clone'] .= '">'. esc_html__('Clone', SG_POPUP_TEXT_DOMAIN).'</a>';
824
+
825
+ return $actions;
826
+ }
827
+
828
+ /* media button scripts */
829
+ public function adminJsFilter($jsFiles)
830
+ {
831
+ $allowToShow = MediaButton::allowToShow();
832
+ if ($allowToShow) {
833
+ $jsFiles['jsFiles'][] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'select2.min.js');
834
+ $jsFiles['jsFiles'][] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'sgpbSelect2.js');
835
+ $jsFiles['jsFiles'][] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Popup.js');
836
+ $jsFiles['jsFiles'][] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'PopupConfig.js');
837
+ $jsFiles['jsFiles'][] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'MediaButton.js');
838
+
839
+ $jsFiles['localizeData'][] = array(
840
+ 'handle' => 'Popup.js',
841
+ 'name' => 'sgpbPublicUrl',
842
+ 'data' => SG_POPUP_PUBLIC_URL
843
+ );
844
+
845
+ $jsFiles['localizeData'][] = array(
846
+ 'handle' => 'MediaButton.js',
847
+ 'name' => 'mediaButtonParams',
848
+ 'data' => array(
849
+ 'currentPostType' => get_post_type(),
850
+ 'popupBuilderPostType' => SG_POPUP_POST_TYPE,
851
+ 'ajaxUrl' => admin_url('admin-ajax.php'),
852
+ 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
853
+ )
854
+ );
855
+ }
856
+
857
+ return $jsFiles;
858
+ }
859
+
860
+ /* media button styles */
861
+ public function sgpbAdminCssFiles($cssFiles)
862
+ {
863
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'sgbp-bootstrap.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
864
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'select2.min.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
865
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'popupAdminStyles.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
866
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'newDesignFromBuild.css', 'dep' => array(), 'ver' => rand(1, 10000), 'inFooter' => false);
867
+
868
+ return $cssFiles;
869
+ }
870
+
871
+ }
872
+
873
+
com/classes/Installer.php CHANGED
@@ -1,331 +1,331 @@
1
- <?php
2
- namespace sgpb;
3
- use \SgpbPopupExtensionRegister;
4
-
5
- class Installer
6
- {
7
- public static function createTables($tables, $blogId = '')
8
- {
9
- global $wpdb;
10
- if (empty($tables)) {
11
- return false;
12
- }
13
-
14
- foreach ($tables as $table) {
15
- $createTable = 'CREATE TABLE IF NOT EXISTS ';
16
- $createTable .= $wpdb->prefix.$blogId;
17
- $createTable .= $table;
18
- $wpdb->query($createTable);
19
- }
20
-
21
- return true;
22
- }
23
-
24
- private static function getAllNeededTables()
25
- {
26
- $tables = array();
27
- global $SGPB_POPUP_TYPES;
28
- $popupTypes = $SGPB_POPUP_TYPES['typeName'];
29
-
30
- if (empty($popupTypes)) {
31
- return $tables;
32
- }
33
-
34
- foreach ($popupTypes as $popupTypeKey => $popupTypeLevel) {
35
- if (SGPB_POPUP_PKG >= $popupTypeLevel) {
36
- $className = ucfirst($popupTypeKey).'Popup';
37
-
38
- if (file_exists(SG_POPUP_CLASSES_POPUPS_PATH.$className.'.php')) {
39
-
40
- require_once(SG_POPUP_CLASSES_POPUPS_PATH.$className.'.php');
41
-
42
- $className = __NAMESPACE__.'\\'.$className;
43
-
44
- $popupTables = $className::getTablesSql();
45
-
46
- if (empty($popupTables)) {
47
- continue;
48
- }
49
-
50
- foreach ($popupTables as $tableSql) {
51
- $tables[] = $tableSql;
52
- }
53
- }
54
- }
55
-
56
- }
57
-
58
- return $tables;
59
- }
60
-
61
- public static function install()
62
- {
63
- $tables = self::getAllNeededTables();
64
- $filteredTables = apply_filters('sgpbTablesInstall', $tables);
65
-
66
- if (get_option('sgpb-dont-delete-data') === false) {
67
- // Initial option insert
68
- update_option('sgpb-dont-delete-data', 1);
69
- }
70
-
71
- self::createTables($filteredTables);
72
-
73
- self::setupInstallationsDateConfig($filteredTables);
74
-
75
- // get_current_blog_id() == 1 When plugin activated inside the child of multisite instance
76
- if (is_multisite() && get_current_blog_id() == 1) {
77
- global $wp_version;
78
-
79
- if ($wp_version > '4.6.0') {
80
- $sites = get_sites();
81
- }
82
- else {
83
- $sites = wp_get_sites();
84
- }
85
-
86
- foreach ($sites as $site) {
87
-
88
- if ($wp_version > '4.6.0') {
89
- $blogId = $site->blog_id.'_';
90
- }
91
- else {
92
- $blogId = $site['blog_id'].'_';
93
- }
94
- // blog Id 1 for multisite main site
95
- if ($blogId != 1) {
96
- self::createTables($filteredTables, $blogId);
97
- }
98
- }
99
- }
100
-
101
- // install extensions
102
- if (SGPB_POPUP_PKG != SGPB_POPUP_PKG_FREE) {
103
- $obj = new PopupExtensionActivator();
104
- $obj->install();
105
- }
106
- }
107
-
108
- public static function setupInstallationsDateConfig()
109
- {
110
- update_option('sgpbUnsubscribeColumnFixed', 1);
111
- $usageDays = get_option('SGPBUsageDays');
112
- if (!$usageDays) {
113
- update_option('SGPBUsageDays', 0);
114
-
115
- $timeDate = new \DateTime('now');
116
- $installTime = strtotime($timeDate->format('Y-m-d H:i:s'));
117
- update_option('SGPBInstallDate', $installTime);
118
- $timeDate->modify('+'.SGPB_REVIEW_POPUP_PERIOD.' day');
119
-
120
- $timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
121
- update_option('SGPBOpenNextTime', $timeNow);
122
- }
123
-
124
- $maxPopupCount = get_option('SGPBMaxOpenCount');
125
- if (!$maxPopupCount) {
126
- update_option('SGPBMaxOpenCount', SGPB_ASK_REVIEW_POPUP_COUNT);
127
- }
128
- }
129
-
130
- public static function uninstall()
131
- {
132
- delete_option('sgpb-user-roles');
133
-
134
- // When don't delete data if don't delete data option was unchecked
135
- if (!get_option('sgpb-dont-delete-data')) {
136
- return false;
137
- }
138
- delete_option('sgpb-dont-delete-data');
139
- delete_option('sgpb-new-subscriber');
140
- delete_option('sgpbUnsubscribeColumnFixed');
141
- delete_option('sgpbActivateExtensions');
142
- delete_option('sgpbExtensionsInfo');
143
- delete_option('sgpb-enable-debug-mode');
144
- delete_option('sgpb-disable-analytics-general');
145
-
146
- // Trigger popup data delete action
147
- do_action('sgpbDeletePopupData');
148
-
149
- self::deletePopups();
150
- self::deleteCustomTables();
151
-
152
- if (is_multisite()) {
153
- global $wp_version;
154
- if ($wp_version > '4.6.0') {
155
- $sites = get_sites();
156
- }
157
- else {
158
- $sites = wp_get_sites();
159
- }
160
-
161
- foreach ($sites as $site) {
162
- if ($wp_version > '4.6.0') {
163
- $blogId = $site->blog_id.'_';
164
- }
165
- else {
166
- $blogId = $site['blog_id'].'_';
167
- }
168
- self::deleteCustomTables($blogId);
169
- }
170
- }
171
-
172
- return true;
173
- }
174
-
175
- /**
176
- * Delete Taxonomy by name
177
- *
178
- * @since 1.0.0
179
- *
180
- * @param string $taxonomy
181
- *
182
- * @return void
183
- */
184
- public static function deleteCustomTerms($taxonomy)
185
- {
186
- global $wpdb;
187
-
188
- $customTermsQuery = 'SELECT t.name, t.term_id
189
- FROM '.$wpdb->terms . ' AS t
190
- INNER JOIN ' . $wpdb->term_taxonomy . ' AS tt
191
- ON t.term_id = tt.term_id
192
- WHERE tt.taxonomy = "'.esc_sql($taxonomy).'"';
193
-
194
- $terms = $wpdb->get_results($customTermsQuery);
195
-
196
- $terms = apply_filters('sgpbDeleteTerms', $terms);
197
-
198
- foreach ($terms as $term) {
199
- if (empty($term)) {
200
- continue;
201
- }
202
- wp_delete_term($term->term_id, $taxonomy);
203
- }
204
- }
205
-
206
- /**
207
- * Delete all popup builder post types posts
208
- *
209
- * @since 1.0.0
210
- *
211
- * @return void
212
- *
213
- */
214
- private static function deletePopups()
215
- {
216
- $popups = get_posts(
217
- array(
218
- 'post_type' => SG_POPUP_POST_TYPE,
219
- 'post_status' => array(
220
- 'publish',
221
- 'pending',
222
- 'draft',
223
- 'auto-draft',
224
- 'future',
225
- 'private',
226
- 'inherit',
227
- 'trash'
228
- )
229
- )
230
- );
231
- $popups = apply_filters('sgpbDeletePopups', $popups);
232
-
233
- foreach ($popups as $popup) {
234
- if (empty($popup)) {
235
- continue;
236
- }
237
- wp_delete_post($popup->ID, true);
238
- }
239
- }
240
-
241
- private static function deleteCustomTables($blogId = '')
242
- {
243
- $allTableNames = self::getAllTableNames();
244
-
245
- if (empty($allTableNames)) {
246
- return false;
247
- }
248
- global $wpdb;
249
-
250
- foreach ($allTableNames as $tableName) {
251
- $deleteTable = $wpdb->prefix.$blogId.$tableName;
252
- $deleteTableSql = 'DROP TABLE '.$deleteTable;
253
-
254
- $wpdb->query($deleteTableSql);
255
- }
256
-
257
- return true;
258
- }
259
-
260
- /**
261
- * It's acquire all popup types installed table names
262
- *
263
- * @since 1.0.0
264
- *
265
- * @return array $popup types table names
266
- *
267
- */
268
- private static function getAllTableNames()
269
- {
270
- $tables = array();
271
- global $SGPB_POPUP_TYPES;
272
- $popupTypes = $SGPB_POPUP_TYPES['typeName'];
273
-
274
- if (empty($popupTypes)) {
275
- return $tables;
276
- }
277
-
278
- require_once(SG_POPUP_CONFIG_PATH.'configPackage.php');
279
-
280
- foreach ($popupTypes as $popupTypeKey => $popupTypeLevel) {
281
- if (SGPB_POPUP_PKG >= $popupTypeLevel) {
282
- $className = ucfirst($popupTypeKey).'Popup';
283
-
284
- if (file_exists(SG_POPUP_CLASSES_POPUPS_PATH.$className.'.php')) {
285
-
286
- require_once(SG_POPUP_CLASSES_POPUPS_PATH.$className.'.php');
287
-
288
- $className = __NAMESPACE__.'\\'.$className;
289
-
290
- $popupTables = $className::getTableNames();
291
-
292
- if (empty($popupTables)) {
293
- continue;
294
- }
295
-
296
- foreach ($popupTables as $tableName) {
297
- $tables[] = $tableName;
298
- }
299
- }
300
- }
301
-
302
- }
303
-
304
- return $tables;
305
- }
306
-
307
- public static function registerPlugin()
308
- {
309
- $pluginName = SG_POPUP_FILE_NAME;
310
- $classPath = SG_POPUP_EXTENSION_PATH.'SgpbPopupExtension.php';
311
- $className = 'SgpbPopupExtension';
312
- $options = array();
313
-
314
- if (SGPB_POPUP_PKG != SGPB_POPUP_PKG_FREE) {
315
- $options = array(
316
- 'licence' => array(
317
- 'key' => SG_POPUP_KEY,
318
- 'storeURL' => SG_POPUP_STORE_URL,
319
- 'file' => SG_POPUP_FILE_NAME,
320
- 'itemId' => SGPB_ITEM_ID,
321
- 'itemName' => __('Popup Builder', SG_POPUP_TEXT_DOMAIN),
322
- 'autor' => SG_POPUP_AUTHOR,
323
- 'boxLabel' => __('Popup Builder License', SG_POPUP_TEXT_DOMAIN)
324
- )
325
- );
326
- $options = apply_filters('sgpbRegisterOptions', $options);
327
- }
328
-
329
- @SgpbPopupExtensionRegister::register($pluginName, $classPath, $className, $options);
330
- }
331
- }
1
+ <?php
2
+ namespace sgpb;
3
+ use \SgpbPopupExtensionRegister;
4
+
5
+ class Installer
6
+ {
7
+ public static function createTables($tables, $blogId = '')
8
+ {
9
+ global $wpdb;
10
+ if (empty($tables)) {
11
+ return false;
12
+ }
13
+
14
+ foreach ($tables as $table) {
15
+ $createTable = 'CREATE TABLE IF NOT EXISTS ';
16
+ $createTable .= $wpdb->prefix.$blogId;
17
+ $createTable .= $table;
18
+ $wpdb->query($createTable);
19
+ }
20
+
21
+ return true;
22
+ }
23
+
24
+ private static function getAllNeededTables()
25
+ {
26
+ $tables = array();
27
+ global $SGPB_POPUP_TYPES;
28
+ $popupTypes = $SGPB_POPUP_TYPES['typeName'];
29
+
30
+ if (empty($popupTypes)) {
31
+ return $tables;
32
+ }
33
+
34
+ foreach ($popupTypes as $popupTypeKey => $popupTypeLevel) {
35
+ if (SGPB_POPUP_PKG >= $popupTypeLevel) {
36
+ $className = ucfirst($popupTypeKey).'Popup';
37
+
38
+ if (file_exists(SG_POPUP_CLASSES_POPUPS_PATH.$className.'.php')) {
39
+
40
+ require_once(SG_POPUP_CLASSES_POPUPS_PATH.$className.'.php');
41
+
42
+ $className = __NAMESPACE__.'\\'.$className;
43
+
44
+ $popupTables = $className::getTablesSql();
45
+
46
+ if (empty($popupTables)) {
47
+ continue;
48
+ }
49
+
50
+ foreach ($popupTables as $tableSql) {
51
+ $tables[] = $tableSql;
52
+ }
53
+ }
54
+ }
55
+
56
+ }
57
+
58
+ return $tables;
59
+ }
60
+
61
+ public static function install()
62
+ {
63
+ $tables = self::getAllNeededTables();
64
+ $filteredTables = apply_filters('sgpbTablesInstall', $tables);
65
+
66
+ if (get_option('sgpb-dont-delete-data') === false) {
67
+ // Initial option insert
68
+ update_option('sgpb-dont-delete-data', 1);
69
+ }
70
+
71
+ self::createTables($filteredTables);
72
+
73
+ self::setupInstallationsDateConfig($filteredTables);
74
+
75
+ // get_current_blog_id() == 1 When plugin activated inside the child of multisite instance
76
+ if (is_multisite() && get_current_blog_id() == 1) {
77
+ global $wp_version;
78
+
79
+ if ($wp_version > '4.6.0') {
80
+ $sites = get_sites();
81
+ }
82
+ else {
83
+ $sites = wp_get_sites();
84
+ }
85
+
86
+ foreach ($sites as $site) {
87
+
88
+ if ($wp_version > '4.6.0') {
89
+ $blogId = $site->blog_id.'_';
90
+ }
91
+ else {
92
+ $blogId = $site['blog_id'].'_';
93
+ }
94
+ // blog Id 1 for multisite main site
95
+ if ($blogId != 1) {
96
+ self::createTables($filteredTables, $blogId);
97
+ }
98
+ }
99
+ }
100
+
101
+ // install extensions
102
+ if (SGPB_POPUP_PKG != SGPB_POPUP_PKG_FREE) {
103
+ $obj = new PopupExtensionActivator();
104
+ $obj->install();
105
+ }
106
+ }
107
+
108
+ public static function setupInstallationsDateConfig()
109
+ {
110
+ update_option('sgpbUnsubscribeColumnFixed', 1);
111
+ $usageDays = get_option('SGPBUsageDays');
112
+ if (!$usageDays) {
113
+ update_option('SGPBUsageDays', 0);
114
+
115
+ $timeDate = new \DateTime('now');
116
+ $installTime = strtotime($timeDate->format('Y-m-d H:i:s'));
117
+ update_option('SGPBInstallDate', $installTime);
118
+ $timeDate->modify('+'.SGPB_REVIEW_POPUP_PERIOD.' day');
119
+
120
+ $timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
121
+ update_option('SGPBOpenNextTime', $timeNow);
122
+ }
123
+
124
+ $maxPopupCount = get_option('SGPBMaxOpenCount');
125
+ if (!$maxPopupCount) {
126
+ update_option('SGPBMaxOpenCount', SGPB_ASK_REVIEW_POPUP_COUNT);
127
+ }
128
+ }
129
+
130
+ public static function uninstall()
131
+ {
132
+ delete_option('sgpb-user-roles');
133
+
134
+ // When don't delete data if don't delete data option was unchecked
135
+ if (!get_option('sgpb-dont-delete-data')) {
136
+ return false;
137
+ }
138
+ delete_option('sgpb-dont-delete-data');
139
+ delete_option('sgpb-new-subscriber');
140
+ delete_option('sgpbUnsubscribeColumnFixed');
141
+ delete_option('sgpbActivateExtensions');
142
+ delete_option('sgpbExtensionsInfo');
143
+ delete_option('sgpb-enable-debug-mode');
144
+ delete_option('sgpb-disable-analytics-general');
145
+
146
+ // Trigger popup data delete action
147
+ do_action('sgpbDeletePopupData');
148
+
149
+ self::deletePopups();
150
+ self::deleteCustomTables();
151
+
152
+ if (is_multisite()) {
153
+ global $wp_version;
154
+ if ($wp_version > '4.6.0') {
155
+ $sites = get_sites();
156
+ }
157
+ else {
158
+ $sites = wp_get_sites();
159
+ }
160
+
161
+ foreach ($sites as $site) {
162
+ if ($wp_version > '4.6.0') {
163
+ $blogId = $site->blog_id.'_';
164
+ }
165
+ else {
166
+ $blogId = $site['blog_id'].'_';
167
+ }
168
+ self::deleteCustomTables($blogId);
169
+ }
170
+ }
171
+
172
+ return true;
173
+ }
174
+
175
+ /**
176
+ * Delete Taxonomy by name
177
+ *
178
+ * @since 1.0.0
179
+ *
180
+ * @param string $taxonomy
181
+ *
182
+ * @return void
183
+ */
184
+ public static function deleteCustomTerms($taxonomy)
185
+ {
186
+ global $wpdb;
187
+
188
+ $customTermsQuery = 'SELECT t.name, t.term_id
189
+ FROM '.$wpdb->terms . ' AS t
190
+ INNER JOIN ' . $wpdb->term_taxonomy . ' AS tt
191
+ ON t.term_id = tt.term_id
192
+ WHERE tt.taxonomy = "'.esc_sql($taxonomy).'"';
193
+
194
+ $terms = $wpdb->get_results($customTermsQuery);
195
+
196
+ $terms = apply_filters('sgpbDeleteTerms', $terms);
197
+
198
+ foreach ($terms as $term) {
199
+ if (empty($term)) {
200
+ continue;
201
+ }
202
+ wp_delete_term($term->term_id, $taxonomy);
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Delete all popup builder post types posts
208
+ *
209
+ * @since 1.0.0
210
+ *
211
+ * @return void
212
+ *
213
+ */
214
+ private static function deletePopups()
215
+ {
216
+ $popups = get_posts(
217
+ array(
218
+ 'post_type' => SG_POPUP_POST_TYPE,
219
+ 'post_status' => array(
220
+ 'publish',
221
+ 'pending',
222
+ 'draft',
223
+ 'auto-draft',
224
+ 'future',
225
+ 'private',
226
+ 'inherit',
227
+ 'trash'
228
+ )
229
+ )
230
+ );
231
+ $popups = apply_filters('sgpbDeletePopups', $popups);
232
+
233
+ foreach ($popups as $popup) {
234
+ if (empty($popup)) {
235
+ continue;
236
+ }
237
+ wp_delete_post($popup->ID, true);
238
+ }
239
+ }
240
+
241
+ private static function deleteCustomTables($blogId = '')
242
+ {
243
+ $allTableNames = self::getAllTableNames();
244
+
245
+ if (empty($allTableNames)) {
246
+ return false;
247
+ }
248
+ global $wpdb;
249
+
250
+ foreach ($allTableNames as $tableName) {
251
+ $deleteTable = $wpdb->prefix.$blogId.$tableName;
252
+ $deleteTableSql = 'DROP TABLE '.$deleteTable;
253
+
254
+ $wpdb->query($deleteTableSql);
255
+ }
256
+
257
+ return true;
258
+ }
259
+
260
+ /**
261
+ * It's acquire all popup types installed table names
262
+ *
263
+ * @since 1.0.0
264
+ *
265
+ * @return array $popup types table names
266
+ *
267
+ */
268
+ private static function getAllTableNames()
269
+ {
270
+ $tables = array();
271
+ global $SGPB_POPUP_TYPES;
272
+ $popupTypes = $SGPB_POPUP_TYPES['typeName'];
273
+
274
+ if (empty($popupTypes)) {
275
+ return $tables;
276
+ }
277
+
278
+ require_once(SG_POPUP_CONFIG_PATH.'configPackage.php');
279
+
280
+ foreach ($popupTypes as $popupTypeKey => $popupTypeLevel) {
281
+ if (SGPB_POPUP_PKG >= $popupTypeLevel) {
282
+ $className = ucfirst($popupTypeKey).'Popup';
283
+
284
+ if (file_exists(SG_POPUP_CLASSES_POPUPS_PATH.$className.'.php')) {
285
+
286
+ require_once(SG_POPUP_CLASSES_POPUPS_PATH.$className.'.php');
287
+
288
+ $className = __NAMESPACE__.'\\'.$className;
289
+
290
+ $popupTables = $className::getTableNames();
291
+
292
+ if (empty($popupTables)) {
293
+ continue;
294
+ }
295
+
296
+ foreach ($popupTables as $tableName) {
297
+ $tables[] = $tableName;
298
+ }
299
+ }
300
+ }
301
+
302
+ }
303
+
304
+ return $tables;
305
+ }
306
+
307
+ public static function registerPlugin()
308
+ {
309
+ $pluginName = SG_POPUP_FILE_NAME;
310
+ $classPath = SG_POPUP_EXTENSION_PATH.'SgpbPopupExtension.php';
311
+ $className = 'SgpbPopupExtension';
312
+ $options = array();
313
+
314
+ if (SGPB_POPUP_PKG != SGPB_POPUP_PKG_FREE) {
315
+ $options = array(
316
+ 'licence' => array(
317
+ 'key' => SG_POPUP_KEY,
318
+ 'storeURL' => SG_POPUP_STORE_URL,
319
+ 'file' => SG_POPUP_FILE_NAME,
320
+ 'itemId' => SGPB_ITEM_ID,
321
+ 'itemName' => __('Popup Builder', SG_POPUP_TEXT_DOMAIN),
322
+ 'autor' => SG_POPUP_AUTHOR,
323
+ 'boxLabel' => __('Popup Builder License', SG_POPUP_TEXT_DOMAIN)
324
+ )
325
+ );
326
+ $options = apply_filters('sgpbRegisterOptions', $options);
327
+ }
328
+
329
+ @SgpbPopupExtensionRegister::register($pluginName, $classPath, $className, $options);
330
+ }
331
+ }
com/classes/Javascript.php CHANGED
@@ -1,133 +1,133 @@
1
- <?php
2
- namespace sgpb;
3
- /**
4
- * Popup Builder Style
5
- *
6
- * @since 2.5.6
7
- *
8
- * detect and include popup styles to the admin pages
9
- *
10
- */
11
- class Javascript
12
- {
13
- public static function enqueueScripts($hook)
14
- {
15
- global $wp_version;
16
- $pageName = $hook;
17
- $scripts = array();
18
- $popupType = AdminHelper::getCurrentPopupType();
19
- $currentPostType = AdminHelper::getCurrentPostType();
20
-
21
- if($hook == SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_POST_TYPE) {
22
- $pageName = 'popupType';
23
- }
24
- else if(($hook == 'post-new.php' || $hook == 'post.php') && $currentPostType == SG_POPUP_POST_TYPE) {
25
- $pageName = 'editpage';
26
- }
27
- else if($hook == 'edit.php' && !empty($currentPostType) && $currentPostType == SG_POPUP_POST_TYPE) {
28
- $pageName = 'popupspage';
29
- }
30
- else if ($hook == SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_SUBSCRIBERS_PAGE) {
31
- $pageName = SG_POPUP_SUBSCRIBERS_PAGE;
32
- }
33
-
34
- $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
35
-
36
- if(!$registeredPlugins) {
37
- return;
38
- }
39
- $registeredPlugins = json_decode($registeredPlugins, true);
40
-
41
- if(empty($registeredPlugins)) {
42
- return;
43
- }
44
-
45
- wp_enqueue_media();
46
-
47
- foreach($registeredPlugins as $pluginName => $pluginData) {
48
-
49
- if (!is_plugin_active($pluginName)) {
50
- continue;
51
- }
52
-
53
- if (empty($pluginData['classPath']) || empty($pluginData['className'])) {
54
- continue;
55
- }
56
- $classPath = $pluginData['classPath'];
57
- $classPath = SG_POPUP_PLUGIN_PATH.$classPath;
58
-
59
- if (!file_exists($classPath)) {
60
- continue;
61
- }
62
-
63
- require_once($classPath);
64
-
65
- if (!class_exists($pluginData['className'])) {
66
- continue;
67
- }
68
-
69
- $classObj = new $pluginData['className']();
70
-
71
- if(!$classObj instanceof \SgpbIPopupExtension) {
72
- continue;
73
- }
74
- $args = array(
75
- 'popupType' => $popupType
76
- );
77
- $scriptData = $classObj->getScripts($pageName , $args);
78
-
79
- $scripts[] = $scriptData;
80
- }
81
-
82
- if(empty($scripts)) {
83
- return;
84
- }
85
-
86
- foreach($scripts as $script) {
87
- if(empty($script['jsFiles'])) {
88
- continue;
89
- }
90
-
91
- foreach($script['jsFiles'] as $jsFile) {
92
-
93
- if(empty($jsFile['folderUrl'])) {
94
- wp_enqueue_script($jsFile['filename']);
95
- continue;
96
- }
97
-
98
- $dirUrl = $jsFile['folderUrl'];
99
- $dep = (!empty($jsFile['dep'])) ? $jsFile['dep'] : '';
100
- $ver = (!empty($jsFile['ver'])) ? $jsFile['ver'] : '';
101
- $inFooter = (!empty($jsFile['inFooter'])) ? $jsFile['inFooter'] : '';
102
-
103
- ScriptsIncluder::registerScript($jsFile['filename'], array(
104
- 'dirUrl'=> $dirUrl,
105
- 'dep' => $dep,
106
- 'ver' => $ver,
107
- 'inFooter' => $inFooter
108
- )
109
- );
110
- ScriptsIncluder::enqueueScript($jsFile['filename']);
111
- }
112
-
113
- if(empty($script['localizeData'])) {
114
- continue;
115
- }
116
-
117
- $localizeDatas = $script['localizeData'];
118
-
119
- foreach($localizeDatas as $localizeData) {
120
- if (!is_array($localizeData['data'])) {
121
- $localizeData['data'] = (array)$localizeData['data'];
122
- }
123
- if (version_compare($wp_version, '4.5', '>')){
124
- /* after wp 4.5 version */
125
- ScriptsIncluder::addInlineScripts($localizeData['handle'], 'var '.$localizeData['name'].' = ' .json_encode($localizeData['data']).';' );
126
- } else {
127
- /* since wp 4.5 version */
128
- ScriptsIncluder::localizeScript($localizeData['handle'], $localizeData['name'], $localizeData['data']);
129
- }
130
- }
131
- }
132
- }
133
- }
1
+ <?php
2
+ namespace sgpb;
3
+ /**
4
+ * Popup Builder Style
5
+ *
6
+ * @since 2.5.6
7
+ *
8
+ * detect and include popup styles to the admin pages
9
+ *
10
+ */
11
+ class Javascript
12
+ {
13
+ public static function enqueueScripts($hook)
14
+ {
15
+ global $wp_version;
16
+ $pageName = $hook;
17
+ $scripts = array();
18
+ $popupType = AdminHelper::getCurrentPopupType();
19
+ $currentPostType = AdminHelper::getCurrentPostType();
20
+
21
+ if($hook == SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_POST_TYPE) {
22
+ $pageName = 'popupType';
23
+ }
24
+ else if(($hook == 'post-new.php' || $hook == 'post.php') && $currentPostType == SG_POPUP_POST_TYPE) {
25
+ $pageName = 'editpage';
26
+ }
27
+ else if($hook == 'edit.php' && !empty($currentPostType) && $currentPostType == SG_POPUP_POST_TYPE) {
28
+ $pageName = 'popupspage';
29
+ }
30
+ else if ($hook == SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_SUBSCRIBERS_PAGE) {
31
+ $pageName = SG_POPUP_SUBSCRIBERS_PAGE;
32
+ }
33
+
34
+ $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
35
+
36
+ if(!$registeredPlugins) {
37
+ return;
38
+ }
39
+ $registeredPlugins = json_decode($registeredPlugins, true);
40
+
41
+ if(empty($registeredPlugins)) {
42
+ return;
43
+ }
44
+
45
+ wp_enqueue_media();
46
+
47
+ foreach($registeredPlugins as $pluginName => $pluginData) {
48
+
49
+ if (!is_plugin_active($pluginName)) {
50
+ continue;
51
+ }
52
+
53
+ if (empty($pluginData['classPath']) || empty($pluginData['className'])) {
54
+ continue;
55
+ }
56
+ $classPath = $pluginData['classPath'];
57
+ $classPath = SG_POPUP_PLUGIN_PATH.$classPath;
58
+
59
+ if (!file_exists($classPath)) {
60
+ continue;
61
+ }
62
+
63
+ require_once($classPath);
64
+
65
+ if (!class_exists($pluginData['className'])) {
66
+ continue;
67
+ }
68
+
69
+ $classObj = new $pluginData['className']();
70
+
71
+ if(!$classObj instanceof \SgpbIPopupExtension) {
72
+ continue;
73
+ }
74
+ $args = array(
75
+ 'popupType' => $popupType
76
+ );
77
+ $scriptData = $classObj->getScripts($pageName , $args);
78
+
79
+ $scripts[] = $scriptData;
80
+ }
81
+
82
+ if(empty($scripts)) {
83
+ return;
84
+ }
85
+
86
+ foreach($scripts as $script) {
87
+ if(empty($script['jsFiles'])) {
88
+ continue;
89
+ }
90
+
91
+ foreach($script['jsFiles'] as $jsFile) {
92
+
93
+ if(empty($jsFile['folderUrl'])) {
94
+ wp_enqueue_script($jsFile['filename']);
95
+ continue;
96
+ }
97
+
98
+ $dirUrl = $jsFile['folderUrl'];
99
+ $dep = (!empty($jsFile['dep'])) ? $jsFile['dep'] : '';
100
+ $ver = (!empty($jsFile['ver'])) ? $jsFile['ver'] : '';
101
+ $inFooter = (!empty($jsFile['inFooter'])) ? $jsFile['inFooter'] : '';
102
+
103
+ ScriptsIncluder::registerScript($jsFile['filename'], array(
104
+ 'dirUrl'=> $dirUrl,
105
+ 'dep' => $dep,
106
+ 'ver' => $ver,
107
+ 'inFooter' => $inFooter
108
+ )
109
+ );
110
+ ScriptsIncluder::enqueueScript($jsFile['filename']);
111
+ }
112
+
113
+ if(empty($script['localizeData'])) {
114
+ continue;
115
+ }
116
+
117
+ $localizeDatas = $script['localizeData'];
118
+
119
+ foreach($localizeDatas as $localizeData) {
120
+ if (!is_array($localizeData['data'])) {
121
+ $localizeData['data'] = (array)$localizeData['data'];
122
+ }
123
+ if (version_compare($wp_version, '4.5', '>')){
124
+ /* after wp 4.5 version */
125
+ ScriptsIncluder::addInlineScripts($localizeData['handle'], 'var '.$localizeData['name'].' = ' .json_encode($localizeData['data']).';' );
126
+ } else {
127
+ /* since wp 4.5 version */
128
+ ScriptsIncluder::localizeScript($localizeData['handle'], $localizeData['name'], $localizeData['data']);
129
+ }
130
+ }
131
+ }
132
+ }
133
+ }
com/classes/MediaButton.php CHANGED
@@ -1,114 +1,114 @@
1
- <?php
2
- namespace sgpb;
3
-
4
- class MediaButton
5
- {
6
- private $hideMediaButton = true;
7
-
8
- public function __toString()
9
- {
10
- return $this->render();
11
- }
12
-
13
- public function __construct($hideMediaButton = true)
14
- {
15
- $this->hideMediaButton = $hideMediaButton;
16
- }
17
-
18
- public static function allowToShow()
19
- {
20
- global $pagenow, $typenow;
21
-
22
- $allowToShow = false;
23
- $pages = array(
24
- 'page.php',
25
- 'post-new.php',
26
- 'post-edit.php',
27
- 'widgets.php'
28
- );
29
-
30
- $checkPage = in_array(
31
- $pagenow,
32
- $pages
33
- );
34
-
35
- // for show in plugins page when package is pro
36
- if (SGPB_POPUP_PKG !== SGPB_POPUP_PKG_FREE) {
37
- array_push($pages, 'post.php');
38
- }
39
-
40
- return ($pages && $typenow != 'download');
41
- }
42
-
43
- private function allowToShowJsVariable()
44
- {
45
- return get_post_type() == SG_POPUP_POST_TYPE;
46
- }
47
-
48
- public function render()
49
- {
50
- if (!$this->hideMediaButton && $this->allowToShowJsVariable()) {
51
- return '';
52
- }
53
- $output = $this->mediaButton();
54
- $output .= $this->insertJsVariable();
55
-
56
- return $output;
57
- }
58
-
59
- private function insertJsVariable()
60
- {
61
- if (!$this->allowToShowJsVariable()){
62
- return '';
63
- }
64
-
65
- $buttonTitle = __('Insert custom JS variable', SG_POPUP_TEXT_DOMAIN);
66
- ob_start();
67
- @include(SG_POPUP_VIEWS_PATH.'jsVariableView.php');
68
- $jsVariableContent = ob_get_contents();
69
- ob_end_clean();
70
-
71
- $img = '<span class="dashicons dashicons-welcome-widgets-menus" style="padding: 3px 2px 0px 0px"></span>';
72
- $output = '<a data-id="sgpb-js-variable-wrapper" href="javascript:void(0);" class="button sgpb-insert-js-variable" title="'.$buttonTitle.'" style="padding-left: .4em;">'. $img.$buttonTitle.'</a>';
73
- if (!$this->hideMediaButton) {
74
- $output = '';
75
- }
76
-
77
- return $output.$jsVariableContent;
78
- }
79
-
80
- private function mediaButton()
81
- {
82
- $allowToShow = MediaButton::allowToShow();
83
- if (!$allowToShow) {
84
- $output = '';
85
- return $output;
86
- }
87
- $currentPostType = AdminHelper::getCurrentPostType();
88
- if (!empty($currentPostType) && $currentPostType == SG_POPUP_POST_TYPE) {
89
- add_action('admin_footer', function() {
90
- require_once(SG_POPUP_VIEWS_PATH.'htmlCustomButtonElement.php');
91
- });
92
- }
93
-
94
- ob_start();
95
- @include(SG_POPUP_VIEWS_PATH.'mediaButton.php');
96
- $mediaButtonContent = ob_get_contents();
97
- ob_end_clean();
98
-
99
- $showCurrentUser = AdminHelper::showMenuForCurrentUser();
100
-
101
- if (!$showCurrentUser) {
102
- return '';
103
- }
104
- $buttonTitle = __('Insert popup', SG_POPUP_TEXT_DOMAIN);
105
-
106
- $img = '<span class="dashicons dashicons-welcome-widgets-menus" style="padding: 3px 2px 0px 0px"></span>';
107
- $output = '<a data-id="sgpb-hidden-media-popup" href="javascript:void(0);" class="button sgpb-insert-media-button-js" title="'.$buttonTitle.'" style="padding-left: .4em;">'. $img.$buttonTitle.'</a>';
108
- if (!$this->hideMediaButton) {
109
- $output = '';
110
- }
111
-
112
- return $output.$mediaButtonContent;
113
- }
114
- }
1
+ <?php
2
+ namespace sgpb;
3
+
4
+ class MediaButton
5
+ {
6
+ private $hideMediaButton = true;
7
+
8
+ public function __toString()
9
+ {
10
+ return $this->render();
11
+ }
12
+
13
+ public function __construct($hideMediaButton = true)
14
+ {
15
+ $this->hideMediaButton = $hideMediaButton;
16
+ }
17
+
18
+ public static function allowToShow()
19
+ {
20
+ global $pagenow, $typenow;
21
+
22
+ $allowToShow = false;
23
+ $pages = array(
24
+ 'page.php',
25
+ 'post-new.php',
26
+ 'post-edit.php',
27
+ 'widgets.php'
28
+ );
29
+
30
+ $checkPage = in_array(
31
+ $pagenow,
32
+ $pages
33
+ );
34
+
35
+ // for show in plugins page when package is pro
36
+ if (SGPB_POPUP_PKG !== SGPB_POPUP_PKG_FREE) {
37
+ array_push($pages, 'post.php');
38
+ }
39
+
40
+ return ($pages && $typenow != 'download');
41
+ }
42
+
43
+ private function allowToShowJsVariable()
44
+ {
45
+ return get_post_type() == SG_POPUP_POST_TYPE;
46
+ }
47
+
48
+ public function render()
49
+ {
50
+ if (!$this->hideMediaButton && $this->allowToShowJsVariable()) {
51
+ return '';
52
+ }
53
+ $output = $this->mediaButton();
54
+ $output .= $this->insertJsVariable();
55
+
56
+ return $output;
57
+ }
58
+
59
+ private function insertJsVariable()
60
+ {
61
+ if (!$this->allowToShowJsVariable()){
62
+ return '';
63
+ }
64
+
65
+ $buttonTitle = __('Insert custom JS variable', SG_POPUP_TEXT_DOMAIN);
66
+ ob_start();
67
+ @include(SG_POPUP_VIEWS_PATH.'jsVariableView.php');
68
+ $jsVariableContent = ob_get_contents();
69
+ ob_end_clean();
70
+
71
+ $img = '<span class="dashicons dashicons-welcome-widgets-menus" style="padding: 3px 2px 0px 0px"></span>';
72
+ $output = '<a data-id="sgpb-js-variable-wrapper" href="javascript:void(0);" class="button sgpb-insert-js-variable" title="'.$buttonTitle.'" style="padding-left: .4em;">'. $img.$buttonTitle.'</a>';
73
+ if (!$this->hideMediaButton) {
74
+ $output = '';
75
+ }
76
+
77
+ return $output.$jsVariableContent;
78
+ }
79
+
80
+ private function mediaButton()
81
+ {
82
+ $allowToShow = MediaButton::allowToShow();
83
+ if (!$allowToShow) {
84
+ $output = '';
85
+ return $output;
86
+ }
87
+ $currentPostType = AdminHelper::getCurrentPostType();
88
+ if (!empty($currentPostType) && $currentPostType == SG_POPUP_POST_TYPE) {
89
+ add_action('admin_footer', function() {
90
+ require_once(SG_POPUP_VIEWS_PATH.'htmlCustomButtonElement.php');
91
+ });
92
+ }
93
+
94
+ ob_start();
95
+ @include(SG_POPUP_VIEWS_PATH.'mediaButton.php');
96
+ $mediaButtonContent = ob_get_contents();
97
+ ob_end_clean();
98
+
99
+ $showCurrentUser = AdminHelper::showMenuForCurrentUser();
100
+
101
+ if (!$showCurrentUser) {
102
+ return '';
103
+ }
104
+ $buttonTitle = __('Insert popup', SG_POPUP_TEXT_DOMAIN);
105
+
106
+ $img = '<span class="dashicons dashicons-welcome-widgets-menus" style="padding: 3px 2px 0px 0px"></span>';
107
+ $output = '<a data-id="sgpb-hidden-media-popup" href="javascript:void(0);" class="button sgpb-insert-media-button-js" title="'.$buttonTitle.'" style="padding-left: .4em;">'. $img.$buttonTitle.'</a>';
108
+ if (!$this->hideMediaButton) {
109
+ $output = '';
110
+ }
111
+
112
+ return $output.$mediaButtonContent;
113
+ }
114
+ }
com/classes/Notification.php CHANGED
@@ -1,94 +1,94 @@
1
- <?php
2
- namespace sgpb;
3
-
4
- class Notification
5
- {
6
- public $id;
7
- public $type;// notification, warning etc.
8
- public $priority;
9
- public $message;
10
-
11
- public function setId($id)
12
- {
13
- $this->id = $id;
14
- }
15
-
16
- public function getId()
17
- {
18
- return $this->id;
19
- }
20
-
21
- public function setType($type)
22
- {
23
- $this->type = $type;
24
- }
25
-
26
- public function getType()
27
- {
28
- return $this->type;
29
- }
30
-
31
- public function setPriority($priority)
32
- {
33
- $this->priority = $priority;
34
- }
35
-
36
- public function getPriority()
37
- {
38
- return $this->priority;
39
- }
40
-
41
- public function setMessage($message)
42
- {
43
- $this->message = $message;
44
- }
45
-
46
- public function getMessage()
47
- {
48
- return $this->message;
49
- }
50
-
51
- public function render()
52
- {
53
- $id = $this->getId();
54
- $type = $this->getType();
55
- $color = '';
56
- switch ($type) {
57
- case 1:
58
- $color = '#01B9FF !important';
59
- break;
60
- case 2:
61
- $color = '#28a745 !important';
62
- break;
63
- case 3:
64
- $color = '#dc3545 !important';
65
- break;
66
- }
67
-
68
- $style = 'style="border-color:'.$color.';"';
69
- $priority = $this->getPriority();
70
- $message = $this->getMessage();
71
- $btnHtml = $this->getCloseBtnById($id);
72
- $content = '<div class="sgpb-single-notification-wrapper">
73
- <div class="sgpb-single-notification"'.$style.'>
74
- <span class="dashicons dashicons-no-alt sgpb-hide-notification-at-all" data-id="'.$id.'"></span>
75
- '.$message.'
76
- </div>
77
- <div class="sgpb-single-notification-close-btn">
78
- '.$btnHtml.'
79
- </div>
80
- </div>';
81
-
82
- return $content;
83
- }
84
-
85
- public function getCloseBtnById($id)
86
- {
87
- $dismissedNotification = SGPBNotificationCenter::getAllDismissedNotifications();
88
- if (isset($dismissedNotification[$id])) {
89
- return '<button data-id="'.$id.'" class="button dismiss sgpb-activate-notification-js"><span class="dashicons dashicons-hidden"></span></button>';
90
- }
91
-
92
- return '<button data-id="'.$id.'" class="button dismiss sgpb-dismiss-notification-js"><span class="dashicons dashicons-visibility"></span></button>';
93
- }
94
- }
1
+ <?php
2
+ namespace sgpb;
3
+
4
+ class Notification
5
+ {
6
+ public $id;
7
+ public $type;// notification, warning etc.
8
+ public $priority;
9
+ public $message;
10
+
11
+ public function setId($id)
12
+ {
13
+ $this->id = $id;
14
+ }
15
+
16
+ public function getId()
17
+ {
18
+ return $this->id;
19
+ }
20
+
21
+ public function setType($type)
22
+ {
23
+ $this->type = $type;
24
+ }
25
+
26
+ public function getType()
27
+ {
28
+ return $this->type;
29
+ }
30
+
31
+ public function setPriority($priority)
32
+ {
33
+ $this->priority = $priority;
34
+ }
35
+
36
+ public function getPriority()
37
+ {
38
+ return $this->priority;
39
+ }
40
+
41
+ public function setMessage($message)
42
+ {
43
+ $this->message = $message;
44
+ }
45
+
46
+ public function getMessage()
47
+ {
48
+ return $this->message;
49
+ }
50
+
51
+ public function render()
52
+ {
53
+ $id = $this->getId();
54
+ $type = $this->getType();
55
+ $color = '';
56
+ switch ($type) {
57
+ case 1:
58
+ $color = '#01B9FF !important';
59
+ break;
60
+ case 2:
61
+ $color = '#28a745 !important';
62
+ break;
63
+ case 3:
64
+ $color = '#dc3545 !important';
65
+ break;
66
+ }
67
+
68
+ $style = 'style="border-color:'.$color.';"';
69
+ $priority = $this->getPriority();
70
+ $message = $this->getMessage();
71
+ $btnHtml = $this->getCloseBtnById($id);
72
+ $content = '<div class="sgpb-single-notification-wrapper">
73
+ <div class="sgpb-single-notification"'.$style.'>
74
+ <span class="dashicons dashicons-no-alt sgpb-hide-notification-at-all" data-id="'.$id.'"></span>
75
+ '.$message.'
76
+ </div>
77
+ <div class="sgpb-single-notification-close-btn">
78
+ '.$btnHtml.'
79
+ </div>
80
+ </div>';
81
+
82
+ return $content;
83
+ }
84
+
85
+ public function getCloseBtnById($id)
86
+ {
87
+ $dismissedNotification = SGPBNotificationCenter::getAllDismissedNotifications();
88
+ if (isset($dismissedNotification[$id])) {
89
+ return '<button data-id="'.$id.'" class="button dismiss sgpb-activate-notification-js"><span class="dashicons dashicons-hidden"></span></button>';
90
+ }
91
+
92
+ return '<button data-id="'.$id.'" class="button dismiss sgpb-dismiss-notification-js"><span class="dashicons dashicons-visibility"></span></button>';
93
+ }
94
+ }
com/classes/NotificationCenter.php CHANGED
@@ -1,292 +1,292 @@
1
- <?php
2
- namespace sgpb;
3
- use sgpb\AdminHelper;
4
-
5
- class SGPBNotificationCenter
6
- {
7
- private $requestUrl = SG_POPUP_BUILDER_NOTIFICATIONS_URL;
8
- private $cronTimeout = 'daily';
9
-
10
- public function __construct()
11
- {
12
- $this->addActions();
13
- $this->activateCron();
14
- }
15
-
16
- public function addActions()
17
- {
18
- add_filter('sgpbCronTimeoutSettings', array($this, 'cronAddMinutes'), 10, 1);
19
- add_action('sgpbGetNotifications', array($this, 'updateNotificationsArray'));
20
- add_action('wp_ajax_sgpb_dismiss_notification', array($this, 'dismissNotification'));
21
- add_action('wp_ajax_sgpb_remove_notification', array($this, 'removeNotification'));
22
- add_action('wp_ajax_sgpb_reactivate_notification', array($this, 'reactivateNotification'));
23
- add_action('admin_head', array($this, 'menuItemCounter'));
24
- }
25
-
26
- public function menuItemCounter()
27
- {
28
- $count = count(self::getAllActiveNotifications(true));
29
- $hidden = '';
30
- if (empty($count)) {
31
- $hidden = ' sgpb-hide-add-button';
32
- }
33
- echo "<script>
34
- jQuery(document).ready(function() {
35
- jQuery('.sgpb-menu-item-notification').remove();
36
- jQuery('.dashicons-menu-icon-sgpb').next().append('<span class=\"sgpb-menu-item-notification".$hidden."\">".$count."</span>');
37
- });
38
- </script>";
39
- }
40
-
41
- public function setCronTimeout($cronTimeout)
42
- {
43
- $this->cronTimeout = $cronTimeout;
44
- }
45
-
46
- public function getCronTimeout()
47
- {
48
- return $this->cronTimeout;
49
- }
50
-
51
- public function setRequestUrl($requestUrl)
52
- {
53
- $this->requestUrl = $requestUrl;
54
- }
55
-
56
- public function getRequestUrl()
57
- {
58
- return $this->requestUrl;
59
- }
60
-
61
- public function updateNotificationsArray()
62
- {
63
- $requestUrl = $this->getRequestUrl();
64
- $content = AdminHelper::getFileFromURL($requestUrl);
65
- $content = json_decode($content, true);
66
- $content = apply_filters('sgpbExtraNotifications', $content);
67
- // check later
68
- /*if (empty($content)) {
69
- update_option('sgpb-all-dismissed-notifications', array());
70
- }*/
71
- $content = json_encode($content);
72
- update_option('sgpb-all-notifications-data', $content);
73
- }
74
-
75
- public function sortNotifications($allNotifications)
76
- {
77
- $allNotifications = json_decode($allNotifications, true);
78
- if (empty($allNotifications)) {
79
- $allNotifications = array();
80
- }
81
- $dismissed = self::getAllDismissedNotifications();
82
- // for the first time dismissed and active arrays should be empty
83
- if (empty($dismissed) && empty($active)) {
84
- $notifications = array();
85
- foreach ($allNotifications as $notification) {
86
- $id = $notification['id'];
87
- $notifications[$id] = $id;
88
- }
89
- update_option('sgpb-all-active-notifications', json_encode($notifications));
90
- }
91
- }
92
-
93
- public function cronAddMinutes($schedules)
94
- {
95
- $schedules['sgpb_notifications'] = array(
96
- 'interval' => SGPB_NOTIFICATIONS_CRON_REPEAT_INTERVAL * 3600,
97
- 'display' => __('Twice Daily', SG_POPUP_TEXT_DOMAIN)
98
- );
99
-
100
- return $schedules;
101
- }
102
-
103
- public static function getAllActiveNotifications($hideDismissed = false)
104
- {
105
- $activeNotifications = array();
106
- $notifications = get_option('sgpb-all-notifications-data');
107
- $notifications = json_decode($notifications, true);
108
- if (empty($notifications)) {
109
- return array();
110
- }
111
- asort($notifications);
112
-
113
- $dismissedNotifications = get_option('sgpb-all-dismissed-notifications');
114
- $dismissedNotifications = json_decode($dismissedNotifications, true);
115
- $extensions = AdminHelper::getAllExtensions();
116
- $extensionsKeys = wp_list_pluck($extensions['active'], 'key');
117
- foreach ($notifications as $notification) {
118
- $id = @$notification['id'];
119
-
120
- if (isset($notification['hideFor'])) {
121
- $hideForExtensions = explode(',', $notification['hideFor']);
122
- $arraysIntersect = array_intersect($extensionsKeys, $hideForExtensions);
123
-
124
- // If only one condition -> free, single extension, bundle
125
- if (count($hideForExtensions) == 1) {
126
- // Free
127
- if ($notification['hideFor'] == SGPB_POPUP_PKG_FREE && empty($extensionsKeys) && !class_exists('SGPBActivatorPlugin')) {
128
- continue;
129
- }
130
- // Single extension
131
- else if (in_array($notification['hideFor'], $extensionsKeys)) {
132
- continue;
133
- }
134
- // Pro, if it is a free user
135
- else if ($notification['hideFor'] == 'pro' && count($extensionsKeys) >= 1) {
136
- continue;
137
- }
138
- // Bundle
139
- else if ($notification['hideFor'] == 'bundle') {
140
- if (class_exists('SGPBActivatorPlugin') || count($extensionsKeys) >= 10) {
141
- continue;
142
- }
143
- }
144
- }
145
- // if there is even one detected extension, don’t show notification
146
- else if (count($arraysIntersect) > 0) {
147
- continue;
148
- }
149
- }
150
-
151
- if ($hideDismissed && isset($dismissedNotifications[$id])) {
152
- continue;
153
- }
154
-
155
- $activeNotifications[] = $notification;
156
- }
157
- $removedNotifications = get_option('sgpb-all-removed-notifications');
158
- $removedNotifications = json_decode($removedNotifications, true);
159
- if (empty($removedNotifications)) {
160
- return $activeNotifications;
161
- }
162
- foreach ($removedNotifications as $removedNotificationId) {
163
- foreach ($activeNotifications as $key => $activeNotification) {
164
- if ($activeNotification['id'] == $removedNotificationId) {
165
- unset($activeNotifications[$key]);
166
- }
167
- }
168
- }
169
-
170
- return $activeNotifications;
171
- }
172
-
173
- public static function getAllDismissedNotifications()
174
- {
175
- $notifications = get_option('sgpb-all-dismissed-notifications');
176
- if (empty($notifications)) {
177
- $notifications = '';
178
- }
179
-
180
- return json_decode($notifications, true);
181
- }
182
-
183
- public static function getAllRemovedNotifications()
184
- {
185
- $notifications = get_option('sgpb-all-removed-notifications');
186
- if (empty($notifications)) {
187
- $notifications = '';
188
- }
189
-
190
- return json_decode($notifications, true);
191
- }
192
-
193
- public static function displayNotifications($withoutWrapper = false)
194
- {
195
- $content = '';
196
- $allNotifications = self::getAllActiveNotifications();
197
- if (empty($allNotifications)) {
198
- return $content;
199
- }
200
-
201
- $count = count(self::getAllActiveNotifications(true));
202
-
203
- foreach ($allNotifications as $notification) {
204
- $newNotification = new Notification();
205
- $newNotification->setId($notification['id']);
206
- $newNotification->setType($notification['type']);
207
- $newNotification->setPriority($notification['priority']);
208
- $newNotification->setMessage($notification['message']);
209
- $content .= $newNotification->render();
210
- }
211
- $count = '(<span class="sgpb-notifications-count-span">'.$count.'</span>)';
212
-
213
- if ($withoutWrapper) {
214
- return $content;
215
- }
216
-
217
- $content = self::prepareHtml($content, $count);
218
-
219
- return $content;
220
- }
221
-
222
- public static function prepareHtml($content = '', $count = 0)
223
- {
224
- $content = '<div class="sgpb-each-notification-wrapper-js">'.$content.'</div>';
225
- $content = '<div class="sgpb-notification-center-wrapper">
226
- <h3><span class="dashicons dashicons-flag"></span> Notifications '.$count.'</h3>'.$content.'
227
- </div>';
228
-
229
- return $content;
230
- }
231
-
232
- public function dismissNotification()
233
- {
234
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
235
-
236
- $notificationId = sanitize_text_field($_POST['id']);
237
- $allDismissedNotifications = self::getAllDismissedNotifications();
238
- $allDismissedNotifications[$notificationId] = $notificationId;
239
- $allDismissedNotifications = json_encode($allDismissedNotifications);
240
-
241
- update_option('sgpb-all-dismissed-notifications', $allDismissedNotifications);
242
- $result = array();
243
- $result['content'] = self::displayNotifications(true);
244
- $result['count'] = count(self::getAllActiveNotifications(true));
245
-
246
- echo json_encode($result);
247
- wp_die();
248
- }
249
-
250
- public function removeNotification()
251
- {
252
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
253
-
254
- $notificationId = sanitize_text_field($_POST['id']);
255
- $allRemovedNotifications = self::getAllRemovedNotifications();
256
- $allRemovedNotifications[$notificationId] = $notificationId;
257
- $allRemovedNotifications = json_encode($allRemovedNotifications);
258
-
259
- update_option('sgpb-all-removed-notifications', $allRemovedNotifications);
260
-
261
- wp_die(true);
262
- }
263
-
264
- public function reactivateNotification()
265
- {
266
- check_ajax_referer(SG_AJAX_NONCE, 'nonce');
267
-
268
- $notificationId = sanitize_text_field($_POST['id']);
269
- $allDismissedNotifications = self::getAllDismissedNotifications();
270
- if (isset($allDismissedNotifications[$notificationId])) {
271
- unset($allDismissedNotifications[$notificationId]);
272
- }
273
- $allDismissedNotifications = json_encode($allDismissedNotifications);
274
-
275
- update_option('sgpb-all-dismissed-notifications', $allDismissedNotifications);
276
- $result = array();
277
- $result['content'] = self::displayNotifications(true);
278
- $result['count'] = count(self::getAllActiveNotifications(true));
279
-
280
- echo json_encode($result);
281
- wp_die();
282
- }
283
-
284
- public function activateCron()
285
- {
286
- if (!wp_next_scheduled('sgpbGetNotifications')) {
287
- wp_schedule_event(time(), 'daily', 'sgpbGetNotifications');
288
- }
289
- }
290
- }
291
-
292
- new SGPBNotificationCenter();
1
+ <?php
2
+ namespace sgpb;
3
+ use sgpb\AdminHelper;
4
+
5
+ class SGPBNotificationCenter
6
+ {
7
+ private $requestUrl = SG_POPUP_BUILDER_NOTIFICATIONS_URL;
8
+ private $cronTimeout = 'daily';
9
+
10
+ public function __construct()
11
+ {
12
+ $this->addActions();
13
+ $this->activateCron();
14
+ }
15
+
16
+ public function addActions()
17
+ {
18
+ add_filter('sgpbCronTimeoutSettings', array($this, 'cronAddMinutes'), 10, 1);
19
+ add_action('sgpbGetNotifications', array($this, 'updateNotificationsArray'));
20
+ add_action('wp_ajax_sgpb_dismiss_notification', array($this, 'dismissNotification'));
21
+ add_action('wp_ajax_sgpb_remove_notification', array($this, 'removeNotification'));
22
+ add_action('wp_ajax_sgpb_reactivate_notification', array($this, 'reactivateNotification'));
23
+ add_action('admin_head', array($this, 'menuItemCounter'));
24
+ }
25
+
26
+ public function menuItemCounter()
27
+ {
28
+ $count = count(self::getAllActiveNotifications(true));
29
+ $hidden = '';
30
+ if (empty($count)) {
31
+ $hidden = ' sgpb-hide-add-button';
32
+ }
33
+ echo "<script>
34
+ jQuery(document).ready(function() {
35
+ jQuery('.sgpb-menu-item-notification').remove();
36
+ jQuery('.dashicons-menu-icon-sgpb').next().append('<span class=\"sgpb-menu-item-notification".$hidden."\">".$count."</span>');
37
+ });
38
+ </script>";
39
+ }
40
+
41
+ public function setCronTimeout($cronTimeout)
42
+ {
43
+ $this->cronTimeout = $cronTimeout;
44
+ }
45
+
46
+ public function getCronTimeout()
47
+ {
48
+ return $this->cronTimeout;
49
+ }
50
+
51
+ public function setRequestUrl($requestUrl)
52
+ {
53
+ $this->requestUrl = $requestUrl;
54
+ }
55
+
56
+ public function getRequestUrl()
57
+ {
58
+ return $this->requestUrl;
59
+ }
60
+
61
+ public function updateNotificationsArray()
62
+ {
63
+ $requestUrl = $this->getRequestUrl();
64
+ $content = AdminHelper::getFileFromURL($requestUrl);
65
+ $content = json_decode($content, true);
66
+ $content = apply_filters('sgpbExtraNotifications', $content);
67
+ // check later
68
+ /*if (empty($content)) {
69
+ update_option('sgpb-all-dismissed-notifications', array());
70
+ }*/
71
+ $content = json_encode($content);
72
+ update_option('sgpb-all-notifications-data', $content);
73
+ }
74
+
75
+ public function sortNotifications($allNotifications)
76
+ {
77
+ $allNotifications = json_decode($allNotifications, true);
78
+ if (empty($allNotifications)) {
79
+ $allNotifications = array();
80
+ }
81
+ $dismissed = self::getAllDismissedNotifications();
82
+ // for the first time dismissed and active arrays should be empty
83
+ if (empty($dismissed) && empty($active)) {
84
+ $notifications = array();
85
+ foreach ($allNotifications as $notification) {
86
+ $id = $notification['id'];
87
+ $notifications[$id] = $id;
88
+ }
89
+ update_option('sgpb-all-active-notifications', json_encode($notifications));
90
+ }
91
+ }
92
+
93
+ public function cronAddMinutes($schedules)
94
+ {
95
+ $schedules['sgpb_notifications'] = array(
96
+ 'interval' => SGPB_NOTIFICATIONS_CRON_REPEAT_INTERVAL * 3600,
97
+ 'display' => __('Twice Daily', SG_POPUP_TEXT_DOMAIN)
98
+ );
99
+
100
+ return $schedules;
101
+ }
102
+
103
+ public static function getAllActiveNotifications($hideDismissed = false)
104
+ {
105
+ $activeNotifications = array();
106
+ $notifications = get_option('sgpb-all-notifications-data');
107
+ $notifications = json_decode($notifications, true);
108
+ if (empty($notifications)) {
109
+ return array();
110
+ }
111
+ asort($notifications);
112
+
113
+ $dismissedNotifications = get_option('sgpb-all-dismissed-notifications');
114
+ $dismissedNotifications = json_decode($dismissedNotifications, true);
115
+ $extensions = AdminHelper::getAllExtensions();
116
+ $extensionsKeys = wp_list_pluck($extensions['active'], 'key');
117
+ foreach ($notifications as $notification) {
118
+ $id = @$notification['id'];
119
+
120
+ if (isset($notification['hideFor'])) {
121
+ $hideForExtensions = explode(',', $notification['hideFor']);
122
+ $arraysIntersect = array_intersect($extensionsKeys, $hideForExtensions);
123
+
124
+ // If only one condition -> free, single extension, bundle
125
+ if (count($hideForExtensions) == 1) {
126
+ // Free
127
+ if ($notification['hideFor'] == SGPB_POPUP_PKG_FREE && empty($extensionsKeys) && !class_exists('SGPBActivatorPlugin')) {
128
+ continue;
129
+ }
130
+ // Single extension
131
+ else if (in_array($notification['hideFor'], $extensionsKeys)) {
132
+ continue;
133
+ }
134
+ // Pro, if it is a free user
135
+ else if ($notification['hideFor'] == 'pro' && count($extensionsKeys) >= 1) {
136
+ continue;
137
+ }
138
+ // Bundle
139
+ else if ($notification['hideFor'] == 'bundle') {
140
+ if (class_exists('SGPBActivatorPlugin') || count($extensionsKeys) >= 10) {
141
+ continue;
142
+ }
143
+ }
144
+ }
145
+ // if there is even one detected extension, don’t show notification
146
+ else if (count($arraysIntersect) > 0) {
147
+ continue;
148
+ }
149
+ }
150
+
151
+ if ($hideDismissed && isset($dismissedNotifications[$id])) {
152
+ continue;
153
+ }
154
+
155
+ $activeNotifications[] = $notification;
156
+ }
157
+ $removedNotifications = get_option('sgpb-all-removed-notifications');
158
+ $removedNotifications = json_decode($removedNotifications, true);
159
+ if (empty($removedNotifications)) {
160
+ return $activeNotifications;
161
+ }
162
+ foreach ($removedNotifications as $removedNotificationId) {
163
+ foreach ($activeNotifications as $key => $activeNotification) {
164
+ if ($activeNotification['id'] == $removedNotificationId) {
165
+ unset($activeNotifications[$key]);
166
+ }
167
+ }
168
+ }
169
+
170
+ return $activeNotifications;
171
+ }
172
+
173
+ public static function getAllDismissedNotifications()
174
+ {
175
+ $notifications = get_option('sgpb-all-dismissed-notifications');
176
+ if (empty($notifications)) {
177
+ $notifications = '';
178
+ }
179
+
180
+ return json_decode($notifications, true);
181
+ }
182
+
183
+ public static function getAllRemovedNotifications()
184
+ {
185
+ $notifications = get_option('sgpb-all-removed-notifications');
186
+ if (empty($notifications)) {
187
+ $notifications = '';
188
+ }
189
+
190
+ return json_decode($notifications, true);
191
+ }
192
+
193
+ public static function displayNotifications($withoutWrapper = false)
194
+ {
195
+ $content = '';
196
+ $allNotifications = self::getAllActiveNotifications();
197
+ if (empty($allNotifications)) {
198
+ return $content;
199
+ }
200
+
201
+ $count = count(self::getAllActiveNotifications(true));
202
+
203
+ foreach ($allNotifications as $notification) {
204
+ $newNotification = new Notification();
205
+ $newNotification->setId($notification['id']);
206
+ $newNotification->setType($notification['type']);
207
+ $newNotification->setPriority($notification['priority']);
208
+ $newNotification->setMessage($notification['message']);
209
+ $content .= $newNotification->render();
210
+ }
211
+ $count = '(<span class="sgpb-notifications-count-span">'.$count.'</span>)';
212
+
213
+ if ($withoutWrapper) {
214
+ return $content;
215
+ }
216
+
217
+ $content = self::prepareHtml($content, $count);
218
+
219
+ return $content;
220
+ }
221
+
222
+ public static function prepareHtml($content = '', $count = 0)
223
+ {
224
+ $content = '<div class="sgpb-each-notification-wrapper-js">'.$content.'</div>';
225
+ $content = '<div class="sgpb-notification-center-wrapper">
226
+ <h3><span class="dashicons dashicons-flag"></span> Notifications '.$count.'</h3>'.$content.'
227
+ </div>';
228
+
229
+ return $content;
230
+ }
231
+
232
+ public function dismissNotification()
233
+ {
234
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
235
+
236
+ $notificationId = sanitize_text_field($_POST['id']);
237
+ $allDismissedNotifications = self::getAllDismissedNotifications();
238
+ $allDismissedNotifications[$notificationId] = $notificationId;
239
+ $allDismissedNotifications = json_encode($allDismissedNotifications);
240
+
241
+ update_option('sgpb-all-dismissed-notifications', $allDismissedNotifications);
242
+ $result = array();
243
+ $result['content'] = self::displayNotifications(true);
244
+ $result['count'] = count(self::getAllActiveNotifications(true));
245
+
246
+ echo json_encode($result);
247
+ wp_die();
248
+ }
249
+
250
+ public function removeNotification()
251
+ {
252
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
253
+
254
+ $notificationId = sanitize_text_field($_POST['id']);
255
+ $allRemovedNotifications = self::getAllRemovedNotifications();
256
+ $allRemovedNotifications[$notificationId] = $notificationId;
257
+ $allRemovedNotifications = json_encode($allRemovedNotifications);
258
+
259
+ update_option('sgpb-all-removed-notifications', $allRemovedNotifications);
260
+
261
+ wp_die(true);
262
+ }
263
+
264
+ public function reactivateNotification()
265
+ {
266
+ check_ajax_referer(SG_AJAX_NONCE, 'nonce');
267
+
268
+ $notificationId = sanitize_text_field($_POST['id']);
269
+ $allDismissedNotifications = self::getAllDismissedNotifications();
270
+ if (isset($allDismissedNotifications[$notificationId])) {
271
+ unset($allDismissedNotifications[$notificationId]);
272
+ }
273
+ $allDismissedNotifications = json_encode($allDismissedNotifications);
274
+
275
+ update_option('sgpb-all-dismissed-notifications', $allDismissedNotifications);
276
+ $result = array();
277
+ $result['content'] = self::displayNotifications(true);
278
+ $result['count'] = count(self::getAllActiveNotifications(true));
279
+
280
+ echo json_encode($result);
281
+ wp_die();
282
+ }
283
+
284
+ public function activateCron()
285
+ {
286
+ if (!wp_next_scheduled('sgpbGetNotifications')) {
287
+ wp_schedule_event(time(), 'daily', 'sgpbGetNotifications');
288
+ }
289
+ }
290
+ }
291
+
292
+ new SGPBNotificationCenter();
com/classes/PopupChecker.php CHANGED
@@ -1,673 +1,673 @@
1
- <?php
2
- namespace sgpb;
3
- use \DateTime;
4
- use \DateTimeZone;
5
- use \ConfigDataHelper;
6
-
7
- /**
8
- * Popup checker class to check if the popup must be loaded on the current page
9
- *
10
- * @since 1.0.0
11
- *
12
- */
13
- class PopupChecker
14
- {
15
- private static $instance;
16
- private $popup;
17
- private $isGeoAjaxModeEnabled;
18
- private $post;
19
- private $isAjaxCall;
20
-
21
- public static function instance()
22
- {
23
- if (!isset(self::$instance)) {
24
- self::$instance = new self;
25
- }
26
-
27
- return self::$instance;
28
- }
29
-
30
- public function setPopup($popup)
31
- {
32
- $this->popup = $popup;
33
- }
34
-
35
- public function getPopup()
36
- {
37
- return $this->popup;
38
- }
39
-
40
- public function setPost($post)
41
- {
42
- $this->post = $post;
43
- }
44
-
45
- public function getPost()
46
- {
47
- return $this->post;
48
- }
49
-
50
- public function setPopupGeoAjaxModeActive($ajaxMode)
51
- {
52
- $this->isGeoAjaxModeEnabled = $ajaxMode;
53
- }
54
-
55
- public function getPopupGeoAjaxMode()
56
- {
57
- return $this->isGeoAjaxModeEnabled;
58
- }
59
-
60
- public function setIsAjaxCall($isAjax)
61
- {
62
- $this->isAjaxCall = $isAjax;
63
- }
64
-
65
- public function getIsAjaxCall()
66
- {
67
- return $this->isAjaxCall;
68
- }
69
-
70
- /**
71
- * It checks whether popup should be loaded on the current page.
72
- *
73
- * @since 1.0.0
74
- *
75
- * @param int $popupId popup id
76
- * @param object $post page post data
77
- * @param boolean $isAjax
78
- *
79
- * @return bool
80
- *
81
- */
82
- public function isLoadable($popup, $post, $isAjax = false)
83
- {
84
- $this->setPopup($popup);
85
- $this->setPost($post);
86
-
87
- $this->setPopupGeoAjaxModeActive($popup->getOptionValue('sgpb-enable-geo-ajax-mode'));
88
- $this->setIsAjaxCall($isAjax);
89
-
90
- $popupOptions = $popup->getOptions();
91
- $isActive = $popup->getOptionValue('sgpb-is-active', true);
92
- $saveMode = $popup->getSaveMode();
93
- $allowToLoad = $this->allowToLoad();
94
-
95
- if ($saveMode) {
96
- $allowToLoad['option_event'] = false;
97
- return $allowToLoad;
98
- }
99
-
100
- if (isset($popupOptions['sgpb-is-active'])) {
101
- $isActive = $popupOptions['sgpb-is-active'];
102
- if ($isActive) {
103
- $popup->setReportData($popup->getId());
104
- }
105
- }
106
-
107
- if (!$isActive) {
108
- $allowToLoad['option_event'] = false;
109
- }
110
-
111
- return $allowToLoad;
112
- }
113
-
114
- /**
115
- * Decides whether popup data should be loaded or not
116
- *
117
- * @since 1.0.0
118
- *
119
- * @return array
120
- *
121
- */
122
- private function allowToLoad()
123
- {
124
- $isCustomInserted = $this->isCustomInserted();
125
-
126
- $insertedModes = array(
127
- 'attr_event' => false,
128
- 'option_event' => false
129
- );
130
-
131
- if ($isCustomInserted) {
132
- $insertedModes['attr_event'] = true;
133
- }
134
-
135
- $target = $this->divideTargetData();
136
- $isPostInForbidden = $this->isPostInForbidden($target);
137
-
138
- if ($isPostInForbidden) {
139
- return $insertedModes;
140
- }
141
-
142
- if (!empty($target['forbidden']) && empty($target['permissive'])) {
143
- $conditions = $this->divideConditionsData();
144
- $conditions = apply_filters('sgpbFilterDividedConditions', $conditions);
145
- $isSatisfyForConditions = $this->isSatisfyForConditions($conditions);
146
-
147
- if ($isSatisfyForConditions === false) {
148
- return $insertedModes;
149
- }
150
- if ($this->isSatisfyForOtherConditions() === false) {
151
- return $insertedModes;
152
- }
153
- $insertedModes['option_event'] = true;
154
- }
155
-
156
- $isPermissive = $this->isPermissive($target);
157
-
158
- //If permissive for current page check conditions
159
- if ($isPermissive) {
160
- $conditions = $this->divideConditionsData();
161
- $conditions = apply_filters('sgpbFilterDividedConditions', $conditions);
162
- $isSatisfyForConditions = $this->isSatisfyForConditions($conditions);
163
-
164
- if ($isSatisfyForConditions === false) {
165
- return $insertedModes;
166
- }
167
- if ($this->isSatisfyForOtherConditions() === false) {
168
- return $insertedModes;
169
- }
170
- $insertedModes['option_event'] = $isPermissive;
171
- }
172
-
173
- return $insertedModes;
174
- }
175
-
176
- /**
177
- * check is Satisfy popup conditions
178
- *
179
- * @since 1.0.0
180
- *
181
- * @param array $conditions assoc array
182
- *
183
- * @return bool
184
- *
185
- */
186
- private function isSatisfyForConditions($conditions)
187
- {
188
- // proStartSilver
189
- // this case when selected IS NOT operator
190
- $forbiddenConditions = $conditions['forbidden'];
191
- if (!empty($forbiddenConditions)) {
192
- if (!$this->getIsAjaxCall() && $this->getPopupGeoAjaxMode()) {
193
- return false;
194
- }
195
- foreach ($forbiddenConditions as $forbiddenCondition) {
196
- $isForbiddenConditions = $this->isSatisfyForConditionsOptions($forbiddenCondition);
197
- if ($isForbiddenConditions) {
198
- return false;
199
- } else {
200
- return true;
201
- }
202
- }
203
- }
204
-
205
- // this case when selected IS operator
206
- $permissiveOptions = $conditions['permissive'];
207
- if (!empty($permissiveOptions)) {
208
- if (!$this->getIsAjaxCall() && $this->getPopupGeoAjaxMode()) {
209
- return false;
210
- }
211
- foreach ($permissiveOptions as $permissiveOption) {
212
- $isPermissiveConditions = $this->isSatisfyForConditionsOptions($permissiveOption);
213
- return $isPermissiveConditions;
214
- }
215
- }
216
- if ($this->getIsAjaxCall() && $this->getPopupGeoAjaxMode()) {
217
- return false;
218
- }
219
- return true;
220
- }
221
-
222
- private function isSatisfyForConditionsOptions($option)
223
- {
224
- global $post;
225
- $paramName = $option['param'];
226
- $defaultStatus = false;
227
- $isAllowedConditionFilters = array();
228
- if ($paramName == 'select_role') {
229
- return true;
230
- }
231
- if (!$defaultStatus && do_action('isAllowedForConditions', $option, $post)) {
232
- $defaultStatus = true;
233
- }
234
- $isAllowedConditionFilters = apply_filters('isAllowedConditionFilters', array($option));
235
-
236
- if (isset($isAllowedConditionFilters['status']) && $isAllowedConditionFilters['status'] === true) {
237
- $defaultStatus = true;
238
- }
239
-
240
- return $defaultStatus;
241
- }
242
-
243
- /**
244
- * Check is popup inserted via short code or class attribute
245
- *
246
- * @since 1.0.0
247
- *
248
- * @param
249
- *
250
- * @return bool
251
- *
252
- */
253
- private function isCustomInserted()
254
- {
255
- $customInsertData = $this->getCustomInsertedData();
256
- $popup = $this->getPopup();
257
- // When popup object is empty it's mean popup is not custom inserted
258
- if (empty($popup)) {
259
- return false;
260
- }
261
- $popupId = $popup->getId();
262
-
263
- return in_array($popupId, $customInsertData);
264
- }
265
-
266
- /**
267
- * Should load data in the current page
268
- *
269
- * @since 1.0.0
270
- *
271
- * @param array $target popup saved target data
272
- *
273
- * @return bool $isPermissive true => allow false => don't allow
274
- *
275
- */
276
- private function isPermissive($target)
277
- {
278
- $isPermissive = false;
279
-
280
- if (empty($target['permissive'])) {
281
- $isPermissive = false;
282
- return $isPermissive;
283
- }
284
-
285
- foreach ($target['permissive'] as $targetData) {
286
- if ($this->isSatisfyForParam($targetData)) {
287
- $isPermissive = true;
288
- break;
289
- }
290
- }
291
-
292
- return $isPermissive;
293
- }
294
-
295
- /**
296
- * Check whether the target data disallows loading the popup data on the current page
297
- *
298
- * @since 1.0.0
299
- *
300
- * @param array $target popup saved target data
301
- *
302
- * @return bool $isForbidden true => don't allow false => allow
303
- *
304
- */
305
- private function isPostInForbidden($target)
306
- {
307
- $isForbidden = false;
308
-
309
- if (empty($target['forbidden'])) {
310
- return $isForbidden;
311
- }
312
-
313
- foreach ($target['forbidden'] as $targetData) {
314
- if ($this->isSatisfyForParam($targetData)) {
315
- $isForbidden = true;
316
- break;
317
- }
318
- }
319
-
320
- return $isForbidden;
321
- }
322
-
323
- /**
324
- * Check whether the current page is corresponding to the saved target data
325
- *
326
- * @since 1.0.0
327
- *
328
- * @param array $targetData popup saved target data
329
- *
330
- * @return bool $isSatisfy
331
- *
332
- */
333
- private function isSatisfyForParam($targetData)
334
- {
335
- $isSatisfy = false;
336
- $postId = get_queried_object_id();
337
-
338
- if (empty($targetData['param'])) {
339
- return $isSatisfy;
340
- }
341
- $targetParam = $targetData['param'];
342
- $post = $this->getPost();
343
- if (isset($post) && empty($postId)) {
344
- $postId = $post->ID;
345
- }
346
-
347
- if ($targetParam == 'everywhere') {
348
- return true;
349
- }
350
- if (strpos($targetData['param'], '_all')) {
351
- $endIndex = strpos($targetData['param'], '_all');
352
- $postType = substr($targetData['param'], 0, $endIndex);
353
- $currentPostType = get_post_type($postId);
354
-
355
- if ($postType == $currentPostType) {
356
- $isSatisfy = true;
357
- }
358
- }
359
- else if (strpos($targetData['param'], '_archive')) {
360
- $currentPostType = get_post_type();
361
- if ($targetData['param'] == $currentPostType.'_archive') {
362
- if (is_post_type_archive($currentPostType)) {
363
- $isSatisfy = true;
364
- }
365
- }
366
- }
367
- else if (strpos($targetData['param'], '_selected')) {
368
- $values = array();
369
-
370
- if (!empty($targetData['value'])) {
371
- $values = array_keys($targetData['value']);
372
- }
373
-
374
- if (in_array($postId, $values)) {
375
- $isSatisfy = true;
376
- }
377
- }
378
- else if (strpos($targetData['param'], '_categories')) {
379
- $values = array();
380
- $isSatisfy = false;
381
-
382
- if (!empty($targetData['value'])) {
383
- $values = array_values($targetData['value']);
384
- }
385
-
386
- global $post;
387
- // get current all taxonomies of the current post
388
- $taxonomies = get_post_taxonomies($post);
389
- foreach ($taxonomies as $taxonomy) {
390
- // get current post all categories
391
- $terms = get_the_terms($post->ID, $taxonomy);
392
- if (!empty($terms)) {
393
- foreach ($terms as $term) {
394
- if (empty($term)) {
395
- continue;
396
- }
397
- if (in_array($term->term_id, $values)) {
398
- $isSatisfy = true;
399
- break;
400
- }
401
- }
402
- }
403
- }
404
- }
405
- else if ($targetData['param'] == 'post_type' && !empty($targetData['value'])) {
406
- $selectedCustomPostTypes = array_values($targetData['value']);
407
- $currentPostType = get_post_type($postId);
408
-
409
- if (in_array($currentPostType, $selectedCustomPostTypes)) {
410
- $isSatisfy = true;
411
- }
412
- }
413
- else if ($targetData['param'] == 'post_category' && !empty($targetData['value'])) {
414
- $values = $targetData['value'];
415
- $currentPostCategories = get_the_category($postId);
416
- $currentPostType = get_post_type($postId);
417
- if (empty($currentPostCategories) && $currentPostType == 'product') {
418
- $currentPostCategories = get_the_terms($postId, 'product_cat');
419
- }
420
-
421
- foreach ($currentPostCategories as $categoryName) {
422
- if (in_array($categoryName->term_id, $values)) {
423
- $isSatisfy = true;
424
- break;
425
- }
426
-
427
- }
428
- }
429
- else if ($targetData['param'] == 'page_type' && !empty($targetData['value'])) {
430
- $postTypes = $targetData['value'];
431
- foreach ($postTypes as $postType) {
432
-
433
- if ($postType == 'is_home_page') {
434
- if (is_front_page() && is_home()) {
435
- // Default homepage
436
- $isSatisfy = true;
437
- break;
438
- } else if ( is_front_page() ) {
439
- // static homepage
440
- $isSatisfy = true;
441
- break;
442
- }
443
- }
444
- else if (function_exists($postType) && $postType()) {
445
- $isSatisfy = true;
446
- break;
447
- }
448
- }
449
- }
450
- else if ($targetData['param'] == 'page_template' && !empty($targetData['value'])) {
451
- $currentPageTemplate = basename(get_page_template());
452
- if (in_array($currentPageTemplate, $targetData['value'])) {
453
- $isSatisfy = true;
454
- }
455
- }
456
- else if ($targetData['param'] == 'post_tags') {
457
- if (has_tag()) {
458
- $isSatisfy = true;
459
- }
460
- }
461
- else if ($targetData['param'] == 'post_tags_ids') {
462
- $tagsObj = wp_get_post_tags($postId);
463
- $postTagsValues = (array)@$targetData['value'];
464
- $selectedTags = array_values($postTagsValues);
465
-
466
- foreach ($tagsObj as $tagObj) {
467
- if (in_array($tagObj->slug, $selectedTags)) {
468
- $isSatisfy = true;
469
- break;
470
- }
471
- }
472
- }
473
-
474
- if (!$isSatisfy && do_action('isAllowedForTarget', $targetData, $post)) {
475
- $isSatisfy = true;
476
- }
477
-
478
- return $isSatisfy;
479
- }
480
-
481
- /**
482
- * Divide conditions data to Permissive and Forbidden
483
- *
484
- * @since 1.0.0
485
- *
486
- * @return array $popupTargetData
487
- *
488
- */
489
- private function divideConditionsData()
490
- {
491
- $popup = $this->getPopup();
492
- $conditions = $popup->getConditions();
493
- $conditions = $this->divideIntoPermissiveAndForbidden($conditions);
494
-
495
- return $conditions;
496
- }
497
- /**
498
- * Divide target data to Permissive and Forbidden
499
- *
500
- * @since 1.0.0
501
- *
502
- * @return array $popupTargetData
503
- *
504
- */
505
- public function divideTargetData()
506
- {
507
- $popup = $this->getPopup();
508
- $targetData = $popup->getTarget();
509
- return $this->divideIntoPermissiveAndForbidden($targetData);
510
- }
511
-
512
- /**
513
- * Divide the Popup target data into Permissive And Forbidden assoc array
514
- *
515
- * @since 1.0.0
516
- *
517
- * @param array $postMetaData popup saved target data
518
- *
519
- * @return array $postMetaDivideData
520
- *
521
- */
522
- public function divideIntoPermissiveAndForbidden($targetData)
523
- {
524
- $permissive = array();
525
- $forbidden = array();
526
- $permissiveOperators = array('==');
527
- $forbiddenOperators = array('!=');
528
- $permissiveOperators = apply_filters('sgpbAdditionalPermissiveOperators', $permissiveOperators);
529
- $forbiddenOperators = apply_filters('sgpbAdditionalForbiddenOperators', $forbiddenOperators);
530
- if (!empty($targetData)) {
531
- foreach ($targetData as $data) {
532
- if (empty($data['operator']) && $data['param'] != 'everywhere' && !strpos($data['param'], '_all') && $data['param'] != 'post_tags') {
533
- break;
534
- }
535
- // set by default '==' (is) value for all not specific conditions like all pages/posts/other_custom_post_types for future correct detection
536
- if ($data['param'] == 'everywhere' || strpos($data['param'], '_all') || $data['param'] == 'post_tags') {
537
- $data['operator'] = '==';
538
- }
539
- if ((isset($data['operator']) && in_array($data['operator'], $permissiveOperators))) {
540
- $permissive[] = $data;
541
- }
542
- else if (in_array($data['operator'], $forbiddenOperators)) {
543
- $forbidden[] = $data;
544
- }
545
- }
546
- }
547
-
548
- $postMetaDivideData = array(
549
- 'permissive' => $permissive,
550
- 'forbidden' => $forbidden
551
- );
552
-
553
- return $postMetaDivideData;
554
- }
555
-
556
- /**
557
- * Get custom inserted data
558
- *
559
- * @since 1.0.0
560
- *
561
- * @return array $insertedData
562
- */
563
- public function getCustomInsertedData()
564
- {
565
- $post = $this->getPost();
566
- $insertedData = array();
567
-
568
- if (isset($post)) {
569
- $insertedData = SGPopup::getCustomInsertedDataByPostId($this->getPost()->ID);
570
- }
571
-
572
- return $insertedData;
573
- }
574
-
575
- /**
576
- * Check Popup conditions
577
- *
578
- * @since 1.0.0
579
- *
580
- * @return array
581
- *
582
- */
583
- private function isSatisfyForOtherConditions()
584
- {
585
- $popup = $this->getPopup();
586
- $popupOptions = $popup->getOptions();
587
- $popupId = $popup->getId();
588
-
589
- $dontAlowOpenPopup = apply_filters('sgpbOtherConditions', array('id' => $popupId, 'popupOptions' => $popupOptions, 'popupObj' => $popup));
590
-
591
- return $dontAlowOpenPopup['status'];
592
- }
593
-
594
- public static function checkUserStatus($savedStatus)
595
- {
596
- $equalStatus = true;
597
-
598
- /*When current user status and saved options does not matched popup must not open*/
599
- if (is_user_logged_in() != (int)$savedStatus) {
600
- $equalStatus = false;
601
- }
602
-
603
- return $equalStatus;
604
- }
605
-
606
- public static function checkLanguage($popupLanguage = '')
607
- {
608
- global $post;
609
-
610
- $postId = $post->ID;
611
- if (!function_exists('wpml_get_language_information')) {
612
- return true;
613
- }
614
- $postLanguage = wpml_get_language_information($postId);
615
- if (is_wp_error($postLanguage)) {
616
- return true;
617
- }
618
- if (!empty($_GET['lang']) && ($_GET['lang'] == $popupLanguage)) {
619
- return true;
620
- }
621
- if ($postLanguage['language_code'] != $popupLanguage) {
622
- return false;
623
- }
624
-
625
- return true;
626
- }
627
-
628
- public static function checkOtherConditionsActions($args)
629
- {
630
- if (empty($args['id']) || empty($args['popupOptions'])) {
631
- return false;
632
- }
633
-
634
- $popupOptions = $args['popupOptions'];
635
-
636
- if (!empty($popupOptions['sgpb-icl_post_language'])) {
637
- $languageCompatibilty = PopupChecker::checkLanguage($popupOptions['sgpb-icl_post_language']);
638
-
639
- if ($languageCompatibilty === false) {
640
- return $languageCompatibilty;
641
- }
642
- }
643
-
644
-
645
- // proStartSilver
646
- //User status check
647
- if (!empty($popupOptions['sgpb-user-status'])) {
648
- $restrictUserStatus = PopupChecker::checkUserStatus($popupOptions['sgpb-loggedin-user']);
649
-
650
- if ($restrictUserStatus === false) {
651
- return $restrictUserStatus;
652
- }
653
- }
654
-
655
- // proEndSilver
656
-
657
- // proStartPlatinum
658
- // proEndPlatinum
659
-
660
- // checking by popup type
661
- if (!empty($popupOptions['sgpb-type'])) {
662
- $popupClassName = SGPopup::getPopupClassNameFormType($popupOptions['sgpb-type']);
663
- $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
664
-
665
- if (method_exists($popupClassName, 'allowToOpen')) {
666
- $allowToOpen = $popupClassName::allowToOpen($popupOptions, $args);
667
- return $allowToOpen;
668
- }
669
- }
670
-
671
- return apply_filters('checkOtherConditions', true);
672
- }
673
- }
1
+ <?php
2
+ namespace sgpb;
3
+ use \DateTime;
4
+ use \DateTimeZone;
5
+ use \ConfigDataHelper;
6
+
7
+ /**
8
+ * Popup checker class to check if the popup must be loaded on the current page
9
+ *
10
+ * @since 1.0.0
11
+ *
12
+ */
13
+ class PopupChecker
14
+ {
15
+ private static $instance;
16
+ private $popup;
17
+ private $isGeoAjaxModeEnabled;
18
+ private $post;
19
+ private $isAjaxCall;
20
+
21
+ public static function instance()
22
+ {
23
+ if (!isset(self::$instance)) {
24
+ self::$instance = new self;
25
+ }
26
+
27
+ return self::$instance;
28
+ }
29
+
30
+ public function setPopup($popup)
31
+ {
32
+ $this->popup = $popup;
33
+ }
34
+
35
+ public function getPopup()
36
+ {
37
+ return $this->popup;
38
+ }
39
+
40
+ public function setPost($post)
41
+ {
42
+ $this->post = $post;
43
+ }
44
+
45
+ public function getPost()
46
+ {
47
+ return $this->post;
48
+ }
49
+
50
+ public function setPopupGeoAjaxModeActive($ajaxMode)
51
+ {
52
+ $this->isGeoAjaxModeEnabled = $ajaxMode;
53
+ }
54
+
55
+ public function getPopupGeoAjaxMode()
56
+ {
57
+ return $this->isGeoAjaxModeEnabled;
58
+ }
59
+
60
+ public function setIsAjaxCall($isAjax)
61
+ {
62
+ $this->isAjaxCall = $isAjax;
63
+ }
64
+
65
+ public function getIsAjaxCall()
66
+ {
67
+ return $this->isAjaxCall;
68
+ }
69
+
70
+ /**
71
+ * It checks whether popup should be loaded on the current page.
72
+ *
73
+ * @since 1.0.0
74
+ *
75
+ * @param int $popupId popup id
76
+ * @param object $post page post data
77
+ * @param boolean $isAjax
78
+ *
79
+ * @return bool
80
+ *
81
+ */
82
+ public function isLoadable($popup, $post, $isAjax = false)
83
+ {
84
+ $this->setPopup($popup);
85
+ $this->setPost($post);
86
+
87
+ $this->setPopupGeoAjaxModeActive($popup->getOptionValue('sgpb-enable-geo-ajax-mode'));
88
+ $this->setIsAjaxCall($isAjax);
89
+
90
+ $popupOptions = $popup->getOptions();
91
+ $isActive = $popup->getOptionValue('sgpb-is-active', true);
92
+ $saveMode = $popup->getSaveMode();
93
+ $allowToLoad = $this->allowToLoad();
94
+
95
+ if ($saveMode) {
96
+ $allowToLoad['option_event'] = false;
97
+ return $allowToLoad;
98
+ }
99
+
100
+ if (isset($popupOptions['sgpb-is-active'])) {
101
+ $isActive = $popupOptions['sgpb-is-active'];
102
+ if ($isActive) {
103
+ $popup->setReportData($popup->getId());
104
+ }
105
+ }
106
+
107
+ if (!$isActive) {
108
+ $allowToLoad['option_event'] = false;
109
+ }
110
+
111
+ return $allowToLoad;
112
+ }
113
+
114
+ /**
115
+ * Decides whether popup data should be loaded or not
116
+ *
117
+ * @since 1.0.0
118
+ *
119
+ * @return array
120
+ *
121
+ */
122
+ private function allowToLoad()
123
+ {
124
+ $isCustomInserted = $this->isCustomInserted();
125
+
126
+ $insertedModes = array(
127
+ 'attr_event' => false,
128
+ 'option_event' => false
129
+ );
130
+
131
+ if ($isCustomInserted) {
132
+ $insertedModes['attr_event'] = true;
133
+ }
134
+
135
+ $target = $this->divideTargetData();
136
+ $isPostInForbidden = $this->isPostInForbidden($target);
137
+
138
+ if ($isPostInForbidden) {
139
+ return $insertedModes;
140
+ }
141
+
142
+ if (!empty($target['forbidden']) && empty($target['permissive'])) {
143
+ $conditions = $this->divideConditionsData();
144
+ $conditions = apply_filters('sgpbFilterDividedConditions', $conditions);
145
+ $isSatisfyForConditions = $this->isSatisfyForConditions($conditions);
146
+
147
+ if ($isSatisfyForConditions === false) {
148
+ return $insertedModes;
149
+ }
150
+ if ($this->isSatisfyForOtherConditions() === false) {
151
+ return $insertedModes;
152
+ }
153
+ $insertedModes['option_event'] = true;
154
+ }
155
+
156
+ $isPermissive = $this->isPermissive($target);
157
+
158
+ //If permissive for current page check conditions
159
+ if ($isPermissive) {
160
+ $conditions = $this->divideConditionsData();
161
+ $conditions = apply_filters('sgpbFilterDividedConditions', $conditions);
162
+ $isSatisfyForConditions = $this->isSatisfyForConditions($conditions);
163
+
164
+ if ($isSatisfyForConditions === false) {
165
+ return $insertedModes;
166
+ }
167
+ if ($this->isSatisfyForOtherConditions() === false) {
168
+ return $insertedModes;
169
+ }
170
+ $insertedModes['option_event'] = $isPermissive;
171
+ }
172
+
173
+ return $insertedModes;
174
+ }
175
+
176
+ /**
177
+ * check is Satisfy popup conditions
178
+ *
179
+ * @since 1.0.0
180
+ *
181
+ * @param array $conditions assoc array
182
+ *
183
+ * @return bool
184
+ *
185
+ */
186
+ private function isSatisfyForConditions($conditions)
187
+ {
188
+ // proStartSilver
189
+ // this case when selected IS NOT operator
190
+ $forbiddenConditions = $conditions['forbidden'];
191
+ if (!empty($forbiddenConditions)) {
192
+ if (!$this->getIsAjaxCall() && $this->getPopupGeoAjaxMode()) {
193
+ return false;
194
+ }
195
+ foreach ($forbiddenConditions as $forbiddenCondition) {
196
+ $isForbiddenConditions = $this->isSatisfyForConditionsOptions($forbiddenCondition);
197
+ if ($isForbiddenConditions) {
198
+ return false;
199
+ } else {
200
+ return true;
201
+ }
202
+ }
203
+ }
204
+
205
+ // this case when selected IS operator
206
+ $permissiveOptions = $conditions['permissive'];
207
+ if (!empty($permissiveOptions)) {
208
+ if (!$this->getIsAjaxCall() && $this->getPopupGeoAjaxMode()) {
209
+ return false;
210
+ }
211
+ foreach ($permissiveOptions as $permissiveOption) {
212
+ $isPermissiveConditions = $this->isSatisfyForConditionsOptions($permissiveOption);
213
+ return $isPermissiveConditions;
214
+ }
215
+ }
216
+ if ($this->getIsAjaxCall() && $this->getPopupGeoAjaxMode()) {
217
+ return false;
218
+ }
219
+ return true;
220
+ }
221
+
222
+ private function isSatisfyForConditionsOptions($option)
223
+ {
224
+ global $post;
225
+ $paramName = $option['param'];
226
+ $defaultStatus = false;
227
+ $isAllowedConditionFilters = array();
228
+ if ($paramName == 'select_role') {
229
+ return true;
230
+ }
231
+ if (!$defaultStatus && do_action('isAllowedForConditions', $option, $post)) {
232
+ $defaultStatus = true;
233
+ }
234
+ $isAllowedConditionFilters = apply_filters('isAllowedConditionFilters', array($option));
235
+
236
+ if (isset($isAllowedConditionFilters['status']) && $isAllowedConditionFilters['status'] === true) {
237
+ $defaultStatus = true;
238
+ }
239
+
240
+ return $defaultStatus;
241
+ }
242
+
243
+ /**
244
+ * Check is popup inserted via short code or class attribute
245
+ *
246
+ * @since 1.0.0
247
+ *
248
+ * @param
249
+ *
250
+ * @return bool
251
+ *
252
+ */
253
+ private function isCustomInserted()
254
+ {
255
+ $customInsertData = $this->getCustomInsertedData();
256
+ $popup = $this->getPopup();
257
+ // When popup object is empty it's mean popup is not custom inserted
258
+ if (empty($popup)) {
259
+ return false;
260
+ }
261
+ $popupId = $popup->getId();
262
+
263
+ return in_array($popupId, $customInsertData);
264
+ }
265
+
266
+ /**
267
+ * Should load data in the current page
268
+ *
269
+ * @since 1.0.0
270
+ *
271
+ * @param array $target popup saved target data
272
+ *
273
+ * @return bool $isPermissive true => allow false => don't allow
274
+ *
275
+ */
276
+ private function isPermissive($target)
277
+ {
278
+ $isPermissive = false;
279
+
280
+ if (empty($target['permissive'])) {
281
+ $isPermissive = false;
282
+ return $isPermissive;
283
+ }
284
+
285
+ foreach ($target['permissive'] as $targetData) {
286
+ if ($this->isSatisfyForParam($targetData)) {
287
+ $isPermissive = true;
288
+ break;
289
+ }
290
+ }
291
+
292
+ return $isPermissive;
293
+ }
294
+
295
+ /**
296
+ * Check whether the target data disallows loading the popup data on the current page
297
+ *
298
+ * @since 1.0.0
299
+ *
300
+ * @param array $target popup saved target data
301
+ *
302
+ * @return bool $isForbidden true => don't allow false => allow
303
+ *
304
+ */
305
+ private function isPostInForbidden($target)
306
+ {
307
+ $isForbidden = false;
308
+
309
+ if (empty($target['forbidden'])) {
310
+ return $isForbidden;
311
+ }
312
+
313
+ foreach ($target['forbidden'] as $targetData) {
314
+ if ($this->isSatisfyForParam($targetData)) {
315
+ $isForbidden = true;
316
+ break;
317
+ }
318
+ }
319
+
320
+ return $isForbidden;
321
+ }
322
+
323
+ /**
324
+ * Check whether the current page is corresponding to the saved target data
325
+ *
326
+ * @since 1.0.0
327
+ *
328
+ * @param array $targetData popup saved target data
329
+ *
330
+ * @return bool $isSatisfy
331
+ *
332
+ */
333
+ private function isSatisfyForParam($targetData)
334
+ {
335
+ $isSatisfy = false;
336
+ $postId = get_queried_object_id();
337
+
338
+ if (empty($targetData['param'])) {
339
+ return $isSatisfy;
340
+ }
341
+ $targetParam = $targetData['param'];
342
+ $post = $this->getPost();
343
+ if (isset($post) && empty($postId)) {
344
+ $postId = $post->ID;
345
+ }
346
+
347
+ if ($targetParam == 'everywhere') {
348
+ return true;
349
+ }
350
+ if (strpos($targetData['param'], '_all')) {
351
+ $endIndex = strpos($targetData['param'], '_all');
352
+ $postType = substr($targetData['param'], 0, $endIndex);
353
+ $currentPostType = get_post_type($postId);
354
+
355
+ if ($postType == $currentPostType) {
356
+ $isSatisfy = true;
357
+ }
358
+ }
359
+ else if (strpos($targetData['param'], '_archive')) {
360
+ $currentPostType = get_post_type();
361
+ if ($targetData['param'] == $currentPostType.'_archive') {
362
+ if (is_post_type_archive($currentPostType)) {
363
+ $isSatisfy = true;
364
+ }
365
+ }
366
+ }
367
+ else if (strpos($targetData['param'], '_selected')) {
368
+ $values = array();
369
+
370
+ if (!empty($targetData['value'])) {
371
+ $values = array_keys($targetData['value']);
372
+ }
373
+
374
+ if (in_array($postId, $values)) {
375
+ $isSatisfy = true;
376
+ }
377
+ }
378
+ else if (strpos($targetData['param'], '_categories')) {
379
+ $values = array();
380
+ $isSatisfy = false;
381
+
382
+ if (!empty($targetData['value'])) {
383
+ $values = array_values($targetData['value']);
384
+ }
385
+
386
+ global $post;
387
+ // get current all taxonomies of the current post
388
+ $taxonomies = get_post_taxonomies($post);
389
+ foreach ($taxonomies as $taxonomy) {
390
+ // get current post all categories
391
+ $terms = get_the_terms($post->ID, $taxonomy);
392
+ if (!empty($terms)) {
393
+ foreach ($terms as $term) {
394
+ if (empty($term)) {
395
+ continue;
396
+ }
397
+ if (in_array($term->term_id, $values)) {
398
+ $isSatisfy = true;
399
+ break;
400
+ }
401
+ }
402
+ }
403
+ }
404
+ }
405
+ else if ($targetData['param'] == 'post_type' && !empty($targetData['value'])) {
406
+ $selectedCustomPostTypes = array_values($targetData['value']);
407
+ $currentPostType = get_post_type($postId);
408
+
409
+ if (in_array($currentPostType, $selectedCustomPostTypes)) {
410
+ $isSatisfy = true;
411
+ }
412
+ }
413
+ else if ($targetData['param'] == 'post_category' && !empty($targetData['value'])) {
414
+ $values = $targetData['value'];
415
+ $currentPostCategories = get_the_category($postId);
416
+ $currentPostType = get_post_type($postId);
417
+ if (empty($currentPostCategories) && $currentPostType == 'product') {
418
+ $currentPostCategories = get_the_terms($postId, 'product_cat');
419
+ }
420
+
421
+ foreach ($currentPostCategories as $categoryName) {
422
+ if (in_array($categoryName->term_id, $values)) {
423
+ $isSatisfy = true;
424
+ break;
425
+ }
426
+
427
+ }
428
+ }
429
+ else if ($targetData['param'] == 'page_type' && !empty($targetData['value'])) {
430
+ $postTypes = $targetData['value'];
431
+ foreach ($postTypes as $postType) {
432
+
433
+ if ($postType == 'is_home_page') {
434
+ if (is_front_page() && is_home()) {
435
+ // Default homepage
436
+ $isSatisfy = true;
437
+ break;
438
+ } else if ( is_front_page() ) {
439
+ // static homepage
440
+ $isSatisfy = true;
441
+ break;
442
+ }
443
+ }
444
+ else if (function_exists($postType) && $postType()) {
445
+ $isSatisfy = true;
446
+ break;
447
+ }
448
+ }
449
+ }
450
+ else if ($targetData['param'] == 'page_template' && !empty($targetData['value'])) {
451
+ $currentPageTemplate = basename(get_page_template());
452
+ if (in_array($currentPageTemplate, $targetData['value'])) {
453
+ $isSatisfy = true;
454
+ }
455
+ }
456
+ else if ($targetData['param'] == 'post_tags') {
457
+ if (has_tag()) {
458
+ $isSatisfy = true;
459
+ }
460
+ }
461
+ else if ($targetData['param'] == 'post_tags_ids') {
462
+ $tagsObj = wp_get_post_tags($postId);
463
+ $postTagsValues = (array)@$targetData['value'];
464
+ $selectedTags = array_values($postTagsValues);
465
+
466
+ foreach ($tagsObj as $tagObj) {
467
+ if (in_array($tagObj->slug, $selectedTags)) {
468
+ $isSatisfy = true;
469
+ break;
470
+ }
471
+ }
472
+ }
473
+
474
+ if (!$isSatisfy && do_action('isAllowedForTarget', $targetData, $post)) {
475
+ $isSatisfy = true;
476
+ }
477
+
478
+ return $isSatisfy;
479
+ }
480
+
481
+ /**
482
+ * Divide conditions data to Permissive and Forbidden
483
+ *
484
+ * @since 1.0.0
485
+ *
486
+ * @return array $popupTargetData
487
+ *
488
+ */
489
+ private function divideConditionsData()
490
+ {
491
+ $popup = $this->getPopup();
492
+ $conditions = $popup->getConditions();
493
+ $conditions = $this->divideIntoPermissiveAndForbidden($conditions);
494
+
495
+ return $conditions;
496
+ }
497
+ /**
498
+ * Divide target data to Permissive and Forbidden
499
+ *
500
+ * @since 1.0.0
501
+ *
502
+ * @return array $popupTargetData
503
+ *
504
+ */
505
+ public function divideTargetData()
506
+ {
507
+ $popup = $this->getPopup();
508
+ $targetData = $popup->getTarget();
509
+ return $this->divideIntoPermissiveAndForbidden($targetData);
510
+ }
511
+
512
+ /**
513
+ * Divide the Popup target data into Permissive And Forbidden assoc array
514
+ *
515
+ * @since 1.0.0
516
+ *
517
+ * @param array $postMetaData popup saved target data
518
+ *
519
+ * @return array $postMetaDivideData
520
+ *
521
+ */
522
+ public function divideIntoPermissiveAndForbidden($targetData)
523
+ {
524
+ $permissive = array();
525
+ $forbidden = array();
526
+ $permissiveOperators = array('==');
527
+ $forbiddenOperators = array('!=');
528
+ $permissiveOperators = apply_filters('sgpbAdditionalPermissiveOperators', $permissiveOperators);
529
+ $forbiddenOperators = apply_filters('sgpbAdditionalForbiddenOperators', $forbiddenOperators);
530
+ if (!empty($targetData)) {
531
+ foreach ($targetData as $data) {
532
+ if (empty($data['operator']) && $data['param'] != 'everywhere' && !strpos($data['param'], '_all') && $data['param'] != 'post_tags') {
533
+ break;
534
+ }
535
+ // set by default '==' (is) value for all not specific conditions like all pages/posts/other_custom_post_types for future correct detection
536
+ if ($data['param'] == 'everywhere' || strpos($data['param'], '_all') || $data['param'] == 'post_tags') {
537
+ $data['operator'] = '==';
538
+ }
539
+ if ((isset($data['operator']) && in_array($data['operator'], $permissiveOperators))) {
540
+ $permissive[] = $data;
541
+ }
542
+ else if (in_array($data['operator'], $forbiddenOperators)) {
543
+ $forbidden[] = $data;
544
+ }
545
+ }
546
+ }
547
+
548
+ $postMetaDivideData = array(
549
+ 'permissive' => $permissive,
550
+ 'forbidden' => $forbidden
551
+ );
552
+
553
+ return $postMetaDivideData;
554
+ }
555
+
556
+ /**
557
+ * Get custom inserted data
558
+ *
559
+ * @since 1.0.0
560
+ *
561
+ * @return array $insertedData
562
+ */
563
+ public function getCustomInsertedData()
564
+ {
565
+ $post = $this->getPost();
566
+ $insertedData = array();
567
+
568
+ if (isset($post)) {
569
+ $insertedData = SGPopup::getCustomInsertedDataByPostId($this->getPost()->ID);
570
+ }
571
+
572
+ return $insertedData;
573
+ }
574
+
575
+ /**
576
+ * Check Popup conditions
577
+ *
578
+ * @since 1.0.0
579
+ *
580
+ * @return array
581
+ *
582
+ */
583
+ private function isSatisfyForOtherConditions()
584
+ {
585
+ $popup = $this->getPopup();
586
+ $popupOptions = $popup->getOptions();
587
+ $popupId = $popup->getId();
588
+
589
+ $dontAlowOpenPopup = apply_filters('sgpbOtherConditions', array('id' => $popupId, 'popupOptions' => $popupOptions, 'popupObj' => $popup));
590
+
591
+ return $dontAlowOpenPopup['status'];
592
+ }
593
+
594
+ public static function checkUserStatus($savedStatus)
595
+ {
596
+ $equalStatus = true;
597
+
598
+ /*When current user status and saved options does not matched popup must not open*/
599
+ if (is_user_logged_in() != (int)$savedStatus) {
600
+ $equalStatus = false;
601
+ }
602
+
603
+ return $equalStatus;
604
+ }
605
+
606
+ public static function checkLanguage($popupLanguage = '')
607
+ {
608
+ global $post;
609
+
610
+ $postId = $post->ID;
611
+ if (!function_exists('wpml_get_language_information')) {
612
+ return true;
613
+ }
614
+ $postLanguage = wpml_get_language_information($postId);
615
+ if (is_wp_error($postLanguage)) {
616
+ return true;
617
+ }
618
+ if (!empty($_GET['lang']) && ($_GET['lang'] == $popupLanguage)) {
619
+ return true;
620
+ }
621
+ if ($postLanguage['language_code'] != $popupLanguage) {
622
+ return false;
623
+ }
624
+
625
+ return true;
626
+ }
627
+
628
+ public static function checkOtherConditionsActions($args)
629
+ {
630
+ if (empty($args['id']) || empty($args['popupOptions'])) {
631
+ return false;
632
+ }
633
+
634
+ $popupOptions = $args['popupOptions'];
635
+
636
+ if (!empty($popupOptions['sgpb-icl_post_language'])) {
637
+ $languageCompatibilty = PopupChecker::checkLanguage($popupOptions['sgpb-icl_post_language']);
638
+
639
+ if ($languageCompatibilty === false) {
640
+ return $languageCompatibilty;
641
+ }
642
+ }
643
+
644
+
645
+ // proStartSilver
646
+ //User status check
647
+ if (!empty($popupOptions['sgpb-user-status'])) {
648
+ $restrictUserStatus = PopupChecker::checkUserStatus($popupOptions['sgpb-loggedin-user']);
649
+
650
+ if ($restrictUserStatus === false) {
651
+ return $restrictUserStatus;
652
+ }
653
+ }
654
+
655
+ // proEndSilver
656
+
657
+ // proStartPlatinum
658
+ // proEndPlatinum
659
+
660
+ // checking by popup type
661
+ if (!empty($popupOptions['sgpb-type'])) {
662
+ $popupClassName = SGPopup::getPopupClassNameFormType($popupOptions['sgpb-type']);
663
+ $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
664
+
665
+ if (method_exists($popupClassName, 'allowToOpen')) {
666
+ $allowToOpen = $popupClassName::allowToOpen($popupOptions, $args);
667
+ return $allowToOpen;
668
+ }
669
+ }
670
+
671
+ return apply_filters('checkOtherConditions', true);
672
+ }
673
+ }
com/classes/PopupGroupFilter.php CHANGED
@@ -1,193 +1,193 @@
1
- <?php
2
- namespace sgpb;
3
-
4
- class PopupGroupFilter
5
- {
6
- private $popups = array();
7
- private $popupGroups = array();
8
- private $hasSubPopups = array('subscription', 'contactForm');
9
-
10
- public function getHasSubPopups()
11
- {
12
- return apply_filters('sgpbHasSubPopups', $this->hasSubPopups);
13
- }
14
-
15
- public function setGroups($popupGroups)
16
- {
17
- $this->popupGroups = $popupGroups;
18
- }
19
-
20
- public function getGroups()
21
- {
22
- return $this->popupGroups;
23
- }
24
-
25
- public function insertGroup($groupName,$group)
26
- {
27
- $this->popupGroups[$groupName] = $group;
28
- }
29
-
30
- public function setPopups($popups)
31
- {
32
- $this->popups = $popups;
33
- }
34
-
35
- public function getPopups()
36
- {
37
- return $this->popups;
38
- }
39
-
40
- public function filter()
41
- {
42
- $splitedGroups = $this->splitToGroups();
43
-
44
- // When does not have any groups, then there is no need do filter
45
- if (empty($splitedGroups)) {
46
- return $this->filteredResults();
47
- }
48
- $groups = $this->filterGroups();
49
-
50
- if (empty($groups)) {
51
- return $this->filteredResults();
52
- }
53
- $unionPopups = $this->unionGroups();
54
-
55
- if (empty($unionPopups)) {
56
- return $this->filteredResults();
57
- }
58
- $this->extendPopups();
59
-
60
- return $this->filteredResults();
61
- }
62
-
63
- private function filteredResults()
64
- {
65
- $popups = $this->getPopups();
66
-
67
- if (empty($popups)) {
68
- return $popups;
69
- }
70
- $filteredResults = $this->filterByOrder();
71
-
72
- return $filteredResults;
73
- }
74
-
75
- public function filterByOrder()
76
- {
77
- $popups = $this->getPopups();
78
- $popupsByKeyOrder = array();
79
-
80
- foreach ($popups as $popup) {
81
- if (!$popup instanceof SGPopup) {
82
- continue;
83
- }
84
- $orderId = $popup->getOptionValue('sgpb-popup-order');
85
- $popupsByKeyOrder[$orderId][] = $popup;
86
- }
87
- krsort($popupsByKeyOrder);
88
- $orderPopups = array();
89
- foreach ($popupsByKeyOrder as $value) {
90
- $size = sizeof($value);
91
- if ($size == 1) {
92
- $orderPopups[] = $value[0];
93
- continue;
94
- }
95
-
96
- foreach ($value as $insideValue) {
97
- $orderPopups[] = $insideValue;
98
- }
99
-
100
- }
101
- $orderPopups = array_values($orderPopups);
102
-
103
- $this->setPopups($orderPopups);
104
-
105
- return $orderPopups;
106
- }
107
-
108
- public function splitToGroups()
109
- {
110
- $popups = $this->getPopups();
111
- $groups = array();
112
-
113
- if (empty($popups)) {
114
- return $popups;
115
- }
116
-
117
- $staticPopups = $popups;
118
-
119
- $groups['staticPopups'] = $staticPopups;
120
-
121
- $this->setGroups($groups);
122
-
123
- return $popups;
124
- }
125
-
126
- private function filterGroups()
127
- {
128
- $groups = $this->getGroups();
129
-
130
- $this->setGroups($groups);
131
-
132
- return $groups;
133
- }
134
-
135
- private function filterRandomPopups($groups)
136
- {
137
- $randomPopups = $groups['randomPopups'];
138
- $randomPopupKey = array_rand($randomPopups, 1);
139
- $randomPopup = $randomPopups[$randomPopupKey];
140
- // $randomPopup converted to array
141
- $groups['randomPopups'] = array($randomPopup);
142
-
143
- return $groups;
144
- }
145
-
146
- public function unionGroups()
147
- {
148
- $groups = $this->getGroups();
149
- $popups = array();
150
-
151
- $groupsPopups = array_values($groups);
152
- foreach ($groupsPopups as $groupsPopup) {
153
- $popups = array_merge($popups, $groupsPopup);
154
- }
155
-
156
- $this->setPopups($popups);
157
-
158
- return $popups;
159
- }
160
-
161
- private function extendPopups()
162
- {
163
- $popups = $this->getPopups();
164
- $insidePopups = array();
165
-
166
- if (empty($popups)) {
167
- return $popups;
168
- }
169
-
170
- $hasSubPopups = $this->getHasSubPopups();
171
-
172
- foreach ($popups as $popup) {
173
- if (empty($popup)) {
174
- continue;
175
- }
176
- $popupType = $popup->getType();
177
- $insidePopups = $popup->popupShortcodesInsidePopup();
178
- if (!empty($insidePopups)) {
179
- $popups = array_merge($popups, $insidePopups);
180
- }
181
-
182
- $subPopups = $popup->getSubPopupObj();
183
-
184
- if (!empty($subPopups)) {
185
- $popups = array_merge($popups, $subPopups);
186
- }
187
- }
188
-
189
- $this->setPopups($popups);
190
-
191
- return $popups;
192
- }
193
- }
1
+ <?php
2
+ namespace sgpb;
3
+
4
+ class PopupGroupFilter
5
+ {
6
+ private $popups = array();
7
+ private $popupGroups = array();
8
+ private $hasSubPopups = array('subscription', 'contactForm');
9
+
10
+ public function getHasSubPopups()
11
+ {
12
+ return apply_filters('sgpbHasSubPopups', $this->hasSubPopups);
13
+ }
14
+
15
+ public function setGroups($popupGroups)
16
+ {
17
+ $this->popupGroups = $popupGroups;
18
+ }
19
+
20
+ public function getGroups()
21
+ {
22
+ return $this->popupGroups;
23
+ }
24
+
25
+ public function insertGroup($groupName,$group)
26
+ {
27
+ $this->popupGroups[$groupName] = $group;
28
+ }
29
+
30
+ public function setPopups($popups)
31
+ {
32
+ $this->popups = $popups;
33
+ }
34
+
35
+ public function getPopups()
36
+ {
37
+ return $this->popups;
38
+ }
39
+
40
+ public function filter()
41
+ {
42
+ $splitedGroups = $this->splitToGroups();
43
+
44
+ // When does not have any groups, then there is no need do filter
45
+ if (empty($splitedGroups)) {
46
+ return $this->filteredResults();
47
+ }
48
+ $groups = $this->filterGroups();
49
+
50
+ if (empty($groups)) {
51
+ return $this->filteredResults();
52
+ }
53
+ $unionPopups = $this->unionGroups();
54
+
55
+ if (empty($unionPopups)) {
56
+ return $this->filteredResults();
57
+ }
58
+ $this->extendPopups();
59
+
60
+ return $this->filteredResults();
61
+ }
62
+
63
+ private function filteredResults()
64
+ {
65
+ $popups = $this->getPopups();
66
+
67
+ if (empty($popups)) {
68
+ return $popups;
69
+ }
70
+ $filteredResults = $this->filterByOrder();
71
+
72
+ return $filteredResults;
73
+ }
74
+
75
+ public function filterByOrder()
76
+ {
77
+ $popups = $this->getPopups();
78
+ $popupsByKeyOrder = array();
79
+
80
+ foreach ($popups as $popup) {
81
+ if (!$popup instanceof SGPopup) {
82
+ continue;
83
+ }
84
+ $orderId = $popup->getOptionValue('sgpb-popup-order');
85
+ $popupsByKeyOrder[$orderId][] = $popup;
86
+ }
87
+ krsort($popupsByKeyOrder);
88
+ $orderPopups = array();
89
+ foreach ($popupsByKeyOrder as $value) {
90
+ $size = sizeof($value);
91
+ if ($size == 1) {
92
+ $orderPopups[] = $value[0];
93
+ continue;
94
+ }
95
+
96
+ foreach ($value as $insideValue) {
97
+ $orderPopups[] = $insideValue;
98
+ }
99
+
100
+ }
101
+ $orderPopups = array_values($orderPopups);
102
+
103
+ $this->setPopups($orderPopups);
104
+
105
+ return $orderPopups;
106
+ }
107
+
108
+ public function splitToGroups()
109
+ {
110
+ $popups = $this->getPopups();
111
+ $groups = array();
112
+
113
+ if (empty($popups)) {
114
+ return $popups;
115
+ }
116
+
117
+ $staticPopups = $popups;
118
+
119
+ $groups['staticPopups'] = $staticPopups;
120
+
121
+ $this->setGroups($groups);
122
+
123
+ return $popups;
124
+ }
125
+
126
+ private function filterGroups()
127
+ {
128
+ $groups = $this->getGroups();
129
+
130
+ $this->setGroups($groups);
131
+
132
+ return $groups;
133
+ }
134
+
135
+ private function filterRandomPopups($groups)
136
+ {
137
+ $randomPopups = $groups['randomPopups'];
138
+ $randomPopupKey = array_rand($randomPopups, 1);
139
+ $randomPopup = $randomPopups[$randomPopupKey];
140
+ // $randomPopup converted to array
141
+ $groups['randomPopups'] = array($randomPopup);
142
+
143
+ return $groups;
144
+ }
145
+
146
+ public function unionGroups()
147
+ {
148
+ $groups = $this->getGroups();
149
+ $popups = array();
150
+
151
+ $groupsPopups = array_values($groups);
152
+ foreach ($groupsPopups as $groupsPopup) {
153
+ $popups = array_merge($popups, $groupsPopup);
154
+ }
155
+
156
+ $this->setPopups($popups);
157
+
158
+ return $popups;
159
+ }
160
+
161
+ private function extendPopups()
162
+ {
163
+ $popups = $this->getPopups();
164
+ $insidePopups = array();
165
+
166
+ if (empty($popups)) {
167
+ return $popups;
168
+ }
169
+
170
+ $hasSubPopups = $this->getHasSubPopups();
171
+
172
+ foreach ($popups as $popup) {
173
+ if (empty($popup)) {
174
+ continue;
175
+ }
176
+ $popupType = $popup->getType();
177
+ $insidePopups = $popup->popupShortcodesInsidePopup();
178
+ if (!empty($insidePopups)) {
179
+ $popups = array_merge($popups, $insidePopups);
180
+ }
181
+
182
+ $subPopups = $popup->getSubPopupObj();
183
+
184
+ if (!empty($subPopups)) {
185
+ $popups = array_merge($popups, $subPopups);
186
+ }
187
+ }
188
+
189
+ $this->setPopups($popups);
190
+
191
+ return $popups;
192
+ }
193
+ }
com/classes/PopupInstaller.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
- namespace sgpb;
3
- class PopupInstaller
4
- {
5
-
6
  }
1
+ <?php
2
+ namespace sgpb;
3
+ class PopupInstaller
4
+ {
5
+
6
  }
com/classes/PopupLoader.php CHANGED
@@ -1,181 +1,181 @@
1
- <?php
2
- namespace sgpb;
3
- use \WP_Query;
4
-
5
- class PopupLoader
6
- {
7
- private static $instance;
8
- private $loadablePopups = array();
9
- private $loadablePopupsIds = array();
10
-
11
- private function __construct()
12
- {
13
- require_once(ABSPATH.'wp-admin/includes/plugin.php');
14
- }
15
-
16
- public static function instance() {
17
-
18
- if (!isset(self::$instance)) {
19
- self::$instance = new self;
20
- }
21
-
22
- return self::$instance;
23
- }
24
-
25
- public function setLoadablePopupsIds($loadablePopupsIds)
26
- {
27
- $this->loadablePopupsIds = $loadablePopupsIds;
28
- }
29
-
30
- public function getLoadablePopupsIds()
31
- {
32
- return $this->loadablePopupsIds;
33
- }
34
-
35
- public function addLoadablePopup($popupObj)
36
- {
37
- $this->loadablePopups[] = $popupObj;
38
- }
39
-
40
- public function setLoadablePopups($loadablePopups)
41
- {
42
- $this->loadablePopups = $loadablePopups;
43
- }
44
-
45
- public function getLoadablePopups()
46
- {
47
- return $this->loadablePopups;
48
- }
49
-
50
- public function addPopupFromUrl($popupsToLoad)
51
- {
52
- global $wp;
53
- $currentUrl = home_url( $wp->request );
54
- $currentUrl = strpos($currentUrl, '/popupbuilder/');
55
- if (isset($_GET['sg_popup_id']) || isset($_GET['sg_popup_preview_id']) || $currentUrl !== false) {
56
- $args = array();
57
- $previewPopups = array();
58
- $getterId = isset($_GET['sg_popup_id']) ? (int)$_GET['sg_popup_id'] : 0;
59
- $previewedPopupId = isset($_GET['sg_popup_preview_id']) ? (int)$_GET['sg_popup_preview_id'] : 0;
60
- if (isset($_GET['sg_popup_preview_id'])) {
61
- $getterId = $previewedPopupId;
62
- $args['is-preview'] = true;
63
- }
64
- if (function_exists('sgpb\sgpGetCorrectPopupId')) {
65
- $getterId = sgpGetCorrectPopupId($getterId);
66
- }
67
- if ($currentUrl !== false) {
68
- $getterId = $previewedPopupId;
69
- if (isset($_GET['preview_id'])) {
70
- $getterId = (int)$_GET['preview_id'];
71
- }
72
- }
73
-
74
- $popupFromUrl = SGPopup::find($getterId, $args);
75
- if (!empty($popupFromUrl)) {
76
- global $SGPB_DATA_CONFIG_ARRAY;
77
- $defaultEvent = array();
78
- $customDelay = $popupFromUrl->getOptionValue('sgpb-popup-delay');
79
- $defaultEvent[] = $SGPB_DATA_CONFIG_ARRAY['events']['initialData'][0];
80
- $defaultEvent[0]['value'] = 0;
81
- if ($customDelay) {
82
- $defaultEvent[0]['value'] = $customDelay;
83
- }
84
- $popupFromUrl->setEvents($defaultEvent);
85
- $popupsToLoad[] = $popupFromUrl;
86
- $previewPopups[] = $popupFromUrl;
87
- if (isset($_GET['sg_popup_preview_id'])) {
88
- $popupsToLoad = $previewPopups;
89
- }
90
- }
91
- }
92
-
93
- return $popupsToLoad;
94
- }
95
-
96
- public function loadPopups()
97
- {
98
- $foundPopup = array();
99
- if (is_preview()) {
100
- global $post;
101
- $foundPopup = $post;
102
- }
103
- if (!empty($foundPopup)) {
104
- global $SGPB_DATA_CONFIG_ARRAY;
105
- if (@$foundPopup->post_type == SG_POPUP_POST_TYPE) {
106
- $events = $SGPB_DATA_CONFIG_ARRAY['events']['initialData'][0];
107
- $targets = array($SGPB_DATA_CONFIG_ARRAY['target']['initialData']);
108
- // for any targets preview popup should open
109
- if (!empty($targets[0][0])) {
110
- $targets[0][0]['param'] = 'post_all';
111
- }
112
-
113
- $popup = SGPopup::find($foundPopup);
114
- if (empty($popup)) {
115
- return;
116
- }
117
- $popup->setTarget($targets);
118
- $popup->setEvents($events);
119
-
120
- $this->addLoadablePopup($popup);
121
- $this->doGroupFiltersPopups();
122
- $popups = $this->getLoadablePopups();
123
- $scriptsLoader = new ScriptsLoader();
124
- $scriptsLoader->setLoadablePopups($popups);
125
- $scriptsLoader->loadToFooter();
126
- return;
127
-
128
- }
129
- }
130
-
131
- $popupBuilderPosts = new WP_Query(
132
- array(
133
- 'post_type' => SG_POPUP_POST_TYPE,
134
- 'posts_per_page' => -1
135
- )
136
- );
137
-
138
- // We check all the popups one by one to realize whether they might be loaded or not.
139
- while ($popupBuilderPosts->have_posts()) {
140
- $popupBuilderPosts->next_post();
141
- $popupPost = $popupBuilderPosts->post;
142
- $popup = SGPopup::find($popupPost);
143
- if (empty($popup) || !is_object($popup)) {
144
- continue;
145
- }
146
-
147
- if (($popup->getOptions()['sgpb-is-active'] && $popup->allowToLoad()) || (is_preview() && get_post_type() == SG_POPUP_POST_TYPE)) {
148
- $this->addLoadablePopup($popup);
149
- }
150
- }
151
-
152
- $this->doGroupFiltersPopups();
153
- $popups = $this->getLoadablePopups();
154
-
155
- $scriptsLoader = new ScriptsLoader();
156
- $scriptsLoader->setLoadablePopups($popups);
157
- $scriptsLoader->loadToFooter();
158
- }
159
- public function loadPopupAjax($popup)
160
- {
161
- $scriptsLoader = new ScriptsLoader();
162
- $scriptsLoader->setLoadablePopups([$popup]);
163
- $scriptsLoader->setIsAjax(true);
164
- $scriptsLoader->loadToFooter(true);
165
- $data = [
166
- 'scriptsAndStyles' => $scriptsLoader->getScriptsAndStylesForAjax(),
167
- 'footerContent' => $scriptsLoader->getFooterContentAjax(),
168
- ];
169
- return $data;
170
- }
171
-
172
- private function doGroupFiltersPopups()
173
- {
174
- $popups = $this->getLoadablePopups();
175
- $popups = $this->addPopupFromUrl($popups);
176
- $groupObj = new PopupGroupFilter();
177
- $groupObj->setPopups($popups);
178
- $popups = $groupObj->filter();
179
- $this->setLoadablePopups($popups);
180
- }
181
- }
1
+ <?php
2
+ namespace sgpb;
3
+ use \WP_Query;
4
+
5
+ class PopupLoader
6
+ {
7
+ private static $instance;
8
+ private $loadablePopups = array();
9
+ private $loadablePopupsIds = array();
10
+
11
+ private function __construct()
12
+ {
13
+ require_once(ABSPATH.'wp-admin/includes/plugin.php');
14
+ }
15
+
16
+ public static function instance() {
17
+
18
+ if (!isset(self::$instance)) {
19
+ self::$instance = new self;
20
+ }
21
+
22
+ return self::$instance;
23
+ }
24
+
25
+ public function setLoadablePopupsIds($loadablePopupsIds)
26
+ {
27
+ $this->loadablePopupsIds = $loadablePopupsIds;
28
+ }
29
+
30
+ public function getLoadablePopupsIds()
31
+ {
32
+ return $this->loadablePopupsIds;
33
+ }
34
+
35
+ public function addLoadablePopup($popupObj)
36
+ {
37
+ $this->loadablePopups[] = $popupObj;
38
+ }
39
+
40
+ public function setLoadablePopups($loadablePopups)
41
+ {
42
+ $this->loadablePopups = $loadablePopups;
43
+ }
44
+
45
+ public function getLoadablePopups()
46
+ {
47
+ return $this->loadablePopups;
48
+ }
49
+
50
+ public function addPopupFromUrl($popupsToLoad)
51
+ {
52
+ global $wp;
53
+ $currentUrl = home_url( $wp->request );
54
+ $currentUrl = strpos($currentUrl, '/popupbuilder/');
55
+ if (isset($_GET['sg_popup_id']) || isset($_GET['sg_popup_preview_id']) || $currentUrl !== false) {
56
+ $args = array();
57
+ $previewPopups = array();
58
+ $getterId = isset($_GET['sg_popup_id']) ? (int)$_GET['sg_popup_id'] : 0;
59
+ $previewedPopupId = isset($_GET['sg_popup_preview_id']) ? (int)$_GET['sg_popup_preview_id'] : 0;
60
+ if (isset($_GET['sg_popup_preview_id'])) {
61
+ $getterId = $previewedPopupId;
62
+ $args['is-preview'] = true;
63
+ }
64
+ if (function_exists('sgpb\sgpGetCorrectPopupId')) {
65
+ $getterId = sgpGetCorrectPopupId($getterId);
66
+ }
67
+ if ($currentUrl !== false) {
68
+ $getterId = $previewedPopupId;
69
+ if (isset($_GET['preview_id'])) {
70
+ $getterId = (int)$_GET['preview_id'];
71
+ }
72
+ }
73
+
74
+ $popupFromUrl = SGPopup::find($getterId, $args);
75
+ if (!empty($popupFromUrl)) {
76
+ global $SGPB_DATA_CONFIG_ARRAY;
77
+ $defaultEvent = array();
78
+ $customDelay = $popupFromUrl->getOptionValue('sgpb-popup-delay');
79
+ $defaultEvent[] = $SGPB_DATA_CONFIG_ARRAY['events']['initialData'][0];
80
+ $defaultEvent[0]['value'] = 0;
81
+ if ($customDelay) {
82
+ $defaultEvent[0]['value'] = $customDelay;
83
+ }
84
+ $popupFromUrl->setEvents($defaultEvent);
85
+ $popupsToLoad[] = $popupFromUrl;
86
+ $previewPopups[] = $popupFromUrl;
87
+ if (isset($_GET['sg_popup_preview_id'])) {
88
+ $popupsToLoad = $previewPopups;
89
+ }
90
+ }
91
+ }
92
+
93
+ return $popupsToLoad;
94
+ }
95
+
96
+ public function loadPopups()
97
+ {
98
+ $foundPopup = array();
99
+ if (is_preview()) {
100
+ global $post;
101
+ $foundPopup = $post;
102
+ }
103
+ if (!empty($foundPopup)) {
104
+ global $SGPB_DATA_CONFIG_ARRAY;
105
+ if (@$foundPopup->post_type == SG_POPUP_POST_TYPE) {
106
+ $events = $SGPB_DATA_CONFIG_ARRAY['events']['initialData'][0];
107
+ $targets = array($SGPB_DATA_CONFIG_ARRAY['target']['initialData']);
108
+ // for any targets preview popup should open
109
+ if (!empty($targets[0][0])) {
110
+ $targets[0][0]['param'] = 'post_all';
111
+ }
112
+
113
+ $popup = SGPopup::find($foundPopup);
114
+ if (empty($popup)) {
115
+ return;
116
+ }
117
+ $popup->setTarget($targets);
118
+ $popup->setEvents($events);
119
+
120
+ $this->addLoadablePopup($popup);
121
+ $this->doGroupFiltersPopups();
122
+ $popups = $this->getLoadablePopups();
123
+ $scriptsLoader = new ScriptsLoader();
124
+ $scriptsLoader->setLoadablePopups($popups);
125
+ $scriptsLoader->loadToFooter();
126
+ return;
127
+
128
+ }
129
+ }
130
+
131
+ $popupBuilderPosts = new WP_Query(
132
+ array(
133
+ 'post_type' => SG_POPUP_POST_TYPE,
134
+ 'posts_per_page' => -1
135
+ )
136
+ );
137
+
138
+ // We check all the popups one by one to realize whether they might be loaded or not.
139
+ while ($popupBuilderPosts->have_posts()) {
140
+ $popupBuilderPosts->next_post();
141
+ $popupPost = $popupBuilderPosts->post;
142
+ $popup = SGPopup::find($popupPost);
143
+ if (empty($popup) || !is_object($popup)) {
144
+ continue;
145
+ }
146
+
147
+ if (($popup->getOptions()['sgpb-is-active'] && $popup->allowToLoad()) || (is_preview() && get_post_type() == SG_POPUP_POST_TYPE)) {
148
+ $this->addLoadablePopup($popup);
149
+ }
150
+ }
151
+
152
+ $this->doGroupFiltersPopups();
153
+ $popups = $this->getLoadablePopups();
154
+
155
+ $scriptsLoader = new ScriptsLoader();
156
+ $scriptsLoader->setLoadablePopups($popups);
157
+ $scriptsLoader->loadToFooter();
158
+ }
159
+ public function loadPopupAjax($popup)
160
+ {
161
+ $scriptsLoader = new ScriptsLoader();
162
+ $scriptsLoader->setLoadablePopups([$popup]);
163
+ $scriptsLoader->setIsAjax(true);
164
+ $scriptsLoader->loadToFooter(true);
165
+ $data = [
166
+ 'scriptsAndStyles' => $scriptsLoader->getScriptsAndStylesForAjax(),
167
+ 'footerContent' => $scriptsLoader->getFooterContentAjax(),
168
+ ];
169
+ return $data;
170
+ }
171
+
172
+ private function doGroupFiltersPopups()
173
+ {
174
+ $popups = $this->getLoadablePopups();
175
+ $popups = $this->addPopupFromUrl($popups);
176
+ $groupObj = new PopupGroupFilter();
177
+ $groupObj->setPopups($popups);
178
+ $popups = $groupObj->filter();
179
+ $this->setLoadablePopups($popups);
180
+ }
181
+ }
com/classes/PopupType.php CHANGED
@@ -1,37 +1,37 @@
1
- <?php
2
- namespace sgpb;
3
- class PopupType
4
- {
5
- private $available = false;
6
- private $name = '';
7
- private $accessLevel = 1;
8
-
9
- public function setName($name)
10
- {
11
- $this->name = $name;
12
- }
13
- public function getName()
14
- {
15
- return $this->name;
16
- }
17
-
18
- public function setAvailable($available)
19
- {
20
- $this->available = $available;
21
- }
22
-
23
- public function isAvailable()
24
- {
25
- return $this->available;
26
- }
27
-
28
- public function setAccessLevel($accessLevel)
29
- {
30
- $this->accessLevel = $accessLevel;
31
- }
32
-
33
- public function getAccessLevel()
34
- {
35
- return $this->accessLevel;
36
- }
37
  }
1
+ <?php
2
+ namespace sgpb;
3
+ class PopupType
4
+ {
5
+ private $available = false;
6
+ private $name = '';
7
+ private $accessLevel = 1;
8
+
9
+ public function setName($name)
10
+ {
11
+ $this->name = $name;
12
+ }
13
+ public function getName()
14
+ {
15
+ return $this->name;
16
+ }
17
+
18
+ public function setAvailable($available)
19
+ {
20
+ $this->available = $available;
21
+ }
22
+
23
+ public function isAvailable()
24
+ {
25
+ return $this->available;
26
+ }
27
+
28
+ public function setAccessLevel($accessLevel)
29
+ {
30
+ $this->accessLevel = $accessLevel;
31
+ }
32
+
33
+ public function getAccessLevel()
34
+ {
35
+ return $this->accessLevel;
36
+ }
37
  }
com/classes/RegisterPostType.php CHANGED
@@ -1,478 +1,478 @@
1
- <?php
2
- namespace sgpb;
3
- use \SgpbDataConfig;
4
- use \SgpbPopupConfig;
5
- class RegisterPostType
6
- {
7
- private $popupTypeObj;
8
- private $popupType;
9
- private $popupId;
10
-
11
- public function setPopupType($popupType)
12
- {
13
- $this->popupType = $popupType;
14
- }
15
-
16
- public function getPopupType()
17
- {
18
- return $this->popupType;
19
- }
20
-
21
- public function setPopupId($popupId)
22
- {
23
- $this->popupId = $popupId;
24
- }
25
-
26
- public function getPopupId()
27
- {
28
- return $this->popupId;
29
- }
30
-
31
- public function __construct()
32
- {
33
- if (!AdminHelper::showMenuForCurrentUser()) {
34
- return false;
35
- }
36
- // its need here to an apply filters for add popup types needed data
37
- SgpbPopupConfig::popupTypesInit();
38
- $this->init();
39
- // Call init data configs apply filters
40
- SgpbDataConfig::init();
41
-
42
- return true;
43
- }
44
-
45
- public function setPopupTypeObj($popupTypeObj)
46
- {
47
- $this->popupTypeObj = $popupTypeObj;
48
- }
49
-
50
- public function getPopupTypeObj()
51
- {
52
- return $this->popupTypeObj;
53
- }
54
-
55
- public function getPostTypeArgs()
56
- {
57
- $labels = $this->getPostTypeLabels();
58
-
59
- $args = array(
60
- 'labels' => $labels,
61
- 'description' => __('Description.', 'your-plugin-textdomain'),
62
- // Exclude_from_search
63
- 'exclude_from_search' => true,
64
- 'public' => true,
65
- 'has_archive' => false,
66
- // Where to show the post type in the admin menu
67
- 'show_ui' => true,
68
- 'query_var' => false,
69
- 'rewrite' => array('slug' => SG_POPUP_POST_TYPE),
70
- 'map_meta_cap' => true,
71
- 'capability_type' => array('sgpb_popup', 'sgpb_popups'),
72
- 'menu_position' => 10,
73
- 'supports' => apply_filters('sgpbPostTypeSupport', array('title', 'editor')),
74
- 'menu_icon' => 'dashicons-menu-icon-sgpb',
75
- 'show_in_rest' => true
76
- );
77
-
78
- if (is_admin()) {
79
- $args['capability_type'] = 'post';
80
- }
81
-
82
- return $args;
83
- }
84
-
85
- public function getPostTypeLabels()
86
- {
87
- $count = SGPBNotificationCenter::getAllActiveNotifications();
88
- $count = '';
89
- $labels = array(
90
- 'name' => _x('Popup Builder', 'post type general name', SG_POPUP_TEXT_DOMAIN),
91
- 'singular_name' => _x('Popup', 'post type singular name', SG_POPUP_TEXT_DOMAIN),
92
- 'menu_name' => _x('Popup Builder', 'admin menu', SG_POPUP_TEXT_DOMAIN).$count,
93
- 'name_admin_bar' => _x('Popup', 'add new on admin bar', SG_POPUP_TEXT_DOMAIN),
94
- 'add_new' => _x('Add New', 'Popup', SG_POPUP_TEXT_DOMAIN),
95
- 'add_new_item' => __('Add New Popup', SG_POPUP_TEXT_DOMAIN),
96
- 'new_item' => __('New Popup', SG_POPUP_TEXT_DOMAIN),
97
- 'edit_item' => __('Edit Popup', SG_POPUP_TEXT_DOMAIN),
98
- 'view_item' => __('View Popup', SG_POPUP_TEXT_DOMAIN),
99
- 'all_items' => __('All Popups', SG_POPUP_TEXT_DOMAIN),
100
- 'search_items' => __('Search', SG_POPUP_TEXT_DOMAIN),
101
- 'parent_item_colon' => __('Parent Popups:', SG_POPUP_TEXT_DOMAIN),
102
- 'not_found' => __('No popups found.', SG_POPUP_TEXT_DOMAIN),
103
- 'not_found_in_trash' => __('No popups found in Trash.', SG_POPUP_TEXT_DOMAIN)
104
- );
105
-
106
- return $labels;
107
- }
108
-
109
- public function postTypeSupportForPopupTypes($supports)
110
- {
111
- $popupType = $this->getPopupTypeName();
112
- $typePath = $this->getPopupTypePathFormPopupType($popupType);
113
- $popupClassName = $this->getPopupClassNameFromPopupType($popupType);
114
-
115
- if (!file_exists($typePath.$popupClassName.'.php')) {
116
- return $supports;
117
- }
118
-
119
- require_once($typePath.$popupClassName.'.php');
120
- $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
121
-
122
- // We need to remove wyswyg editor for some popup types and that’s why we are doing this check.
123
- if (method_exists($popupClassName, 'getPopupTypeSupports')) {
124
- $supports = $popupClassName::getPopupTypeSupports();
125
- }
126
-
127
- return $supports;
128
- }
129
-
130
- public function init()
131
- {
132
- add_filter('sgpbPostTypeSupport', array($this, 'postTypeSupportForPopupTypes'), 1, 1);
133
- $postType = SG_POPUP_POST_TYPE;
134
- $args = $this->getPostTypeArgs();
135
-
136
- register_post_type($postType, $args);
137
-
138
- $this->createPopupObjFromPopupType();
139
- }
140
-
141
- private function createPopupObjFromPopupType()
142
- {
143
- $popupId = 0;
144
-
145
- if (!empty($_GET['post'])) {
146
- $popupId = (int)$_GET['post'];
147
- }
148
-
149
- $popupType = $this->getPopupTypeName();
150
- $this->setPopupType($popupType);
151
- $this->setPopupId($popupId);
152
-
153
- $this->createPopupObj();
154
- }
155
-
156
- private function getPopupTypeName()
157
- {
158
- $popupType = 'html';
159
-
160
- /*
161
- * First, we try to find the popup type with the post id then,
162
- * if the post id doesn't exist, we try to find it with $_GET['sgpb_type']
163
- */
164
- if (!empty($_GET['post'])) {
165
- $popupId = (int)$_GET['post'];
166
- $popupOptionsData = SGPopup::getPopupOptionsById($popupId);
167
- if (!empty($popupOptionsData['sgpb-type'])) {
168
- $popupType = $popupOptionsData['sgpb-type'];
169
- }
170
- }
171
- else if (!empty($_GET['sgpb_type'])) {
172
- $popupType = sanitize_text_field($_GET['sgpb_type']);
173
- }
174
-
175
- return $popupType;
176
- }
177
-
178
- private function getPopupClassNameFromPopupType($popupType)
179
- {
180
- $popupName = ucfirst(strtolower($popupType));
181
- $popupClassName = $popupName.'Popup';
182
-
183
- return $popupClassName;
184
- }
185
-
186
- private function getPopupTypePathFormPopupType($popupType)
187
- {
188
- global $SGPB_POPUP_TYPES;
189
- $typePath = '';
190
-
191
- if (!empty($SGPB_POPUP_TYPES['typePath'][$popupType])) {
192
- $typePath = $SGPB_POPUP_TYPES['typePath'][$popupType];
193
- }
194
-
195
- return $typePath;
196
- }
197
-
198
- public function createPopupObj()
199
- {
200
- $popupId = $this->getPopupId();
201
- $popupType = $this->getPopupType();
202
- $typePath = $this->getPopupTypePathFormPopupType($popupType);
203
- $popupClassName = $this->getPopupClassNameFromPopupType($popupType);
204
-
205
- if (!file_exists($typePath.$popupClassName.'.php')) {
206
- die(__('Popup class does not exist', SG_POPUP_TEXT_DOMAIN));
207
- }
208
- require_once($typePath.$popupClassName.'.php');
209
- $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
210
- $popupTypeObj = new $popupClassName();
211
- $popupTypeObj->setId($popupId);
212
- $popupTypeObj->setType($popupType);
213
- $this->setPopupTypeObj($popupTypeObj);
214
-
215
- $popupTypeMainView = $popupTypeObj->getPopupTypeMainView();
216
- $popupTypeViewData = $popupTypeObj->getPopupTypeOptionsView();
217
-
218
- if (!empty($popupTypeMainView)) {
219
- add_filter('sgpbAdditionalMetaboxes', array($this, 'sgpbPopupTypeMainViewMetaboxes'), 1, 1);
220
- //add_action('add_meta_boxes', array($this, 'popupTypeMain'));
221
- }
222
- if (!empty($popupTypeViewData)) {
223
- //add_action('add_meta_boxes', array($this, 'popupTypeOptions'));
224
- add_filter('sgpbAdditionalMetaboxes', array($this, 'sgpbPopupTypeOptionsViewMetaboxes'), 1, 1);
225
- }
226
- if ($popupType == 'subscription') {
227
- add_action('add_meta_boxes', array($this, 'rightBannerMetabox'));
228
- }
229
- }
230
-
231
- public function rightBannerMetabox()
232
- {
233
- $banner = AdminHelper::getRightMetaboxBannerText();
234
- $isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
235
- if ($banner == '' || $isSubscriptionPlusActive) {
236
- return;
237
- }
238
- add_meta_box(
239
- 'popupTypeRightBannerView',
240
- __('News', SG_POPUP_TEXT_DOMAIN),
241
- array($this, 'popupTypeRightBannerView'),
242
- SG_POPUP_POST_TYPE,
243
- 'side',
244
- 'low'
245
- );
246
- }
247
-
248
- public function sgpbPopupTypeMainViewMetaboxes($metaboxes)
249
- {
250
- $popupTypeObj = $this->getPopupTypeObj();
251
- $optionsView = $popupTypeObj->getPopupTypeMainView();
252
- $typeView = array();
253
-
254
- $metaboxes['popupTypeMainView'] = array(
255
- 'key' => 'popupTypeMainView',
256
- 'displayName' => __($optionsView['metaboxTitle'], SG_POPUP_TEXT_DOMAIN),
257
- 'filePath' => $optionsView['filePath'],
258
- 'short_description' => $optionsView['short_description'],
259
- SG_POPUP_POST_TYPE,
260
- 'normal',
261
- 'high'
262
- );
263
-
264
- return $metaboxes;
265
- }
266
-
267
- public function popupTypeMain()
268
- {
269
- $popupTypeObj = $this->getPopupTypeObj();
270
- $optionsView = $popupTypeObj->getPopupTypeMainView();
271
- add_meta_box(
272
- 'popupTypeMainView',
273
- __($optionsView['metaboxTitle'], SG_POPUP_TEXT_DOMAIN),
274
- array($this, 'popupTypeMainView'),
275
- SG_POPUP_POST_TYPE,
276
- 'normal',
277
- 'high'
278
- );
279
- }
280
-
281
- public function sgpbPopupTypeOptionsViewMetaboxes($metaboxes)
282
- {
283
- $popupTypeObj = $this->getPopupTypeObj();
284
- $optionsView = $popupTypeObj->getPopupTypeOptionsView();
285
-
286
- $metaboxes['popupTypeOptionsView'] = array(
287
- 'key' => 'popupTypeOptionsView',
288
- 'displayName' => __($optionsView['metaboxTitle'], SG_POPUP_TEXT_DOMAIN),
289
- 'short_description' => $optionsView['short_description'],
290
- 'filePath' => $optionsView['filePath'],
291
- SG_POPUP_POST_TYPE,
292
- 'normal',
293
- 'high'
294
- );
295
-
296
- return $metaboxes;
297
- }
298
-
299
- public function popupTypeOptions()
300
- {
301
- $popupTypeObj = $this->getPopupTypeObj();
302
- $optionsView = $popupTypeObj->getPopupTypeOptionsView();
303
- add_meta_box(
304
- 'popupTypeOptionsView',
305
- __($optionsView['metaboxTitle'], SG_POPUP_TEXT_DOMAIN),
306
- array($this, 'popupTypeOptionsView'),
307
- SG_POPUP_POST_TYPE,
308
- 'normal',
309
- 'high'
310
- );
311
- }
312
-
313
- public function supportLinks()
314
- {
315
- add_submenu_page(
316
- 'edit.php?post_type='.SG_POPUP_POST_TYPE,
317
- __('Settings', SG_POPUP_TEXT_DOMAIN),
318
- __('Settings', SG_POPUP_TEXT_DOMAIN),
319
- 'manage_options',
320
- SG_POPUP_SETTINGS_PAGE,
321
- array($this, 'settings')
322
- );
323
-
324
- add_submenu_page(
325
- 'edit.php?post_type='.SG_POPUP_POST_TYPE,
326
- __('Extend', SG_POPUP_TEXT_DOMAIN),
327
- __('Extend', SG_POPUP_TEXT_DOMAIN),
328
- 'sgpb_manage_options',
329
- SG_POPUP_EXTEND_PAGE,
330
- array($this, 'extendLink')
331
- );
332
-
333
- add_submenu_page(
334
- 'edit.php?post_type='.SG_POPUP_POST_TYPE,
335
- __('Support', SG_POPUP_TEXT_DOMAIN),
336
- __('Support', SG_POPUP_TEXT_DOMAIN),
337
- 'sgpb_manage_options',
338
- SG_POPUP_SUPPORT_PAGE,
339
- array($this, 'supportLink')
340
- );
341
- }
342
-
343
- public function addSubMenu()
344
- {
345
- add_submenu_page(
346
- 'edit.php?post_type='.SG_POPUP_POST_TYPE,
347
- __('Add New', SG_POPUP_TEXT_DOMAIN),
348
- __('Add New', SG_POPUP_TEXT_DOMAIN),
349
- 'sgpb_manage_options',
350
- SG_POPUP_POST_TYPE,
351
- array($this, 'popupTypesPage')
352
- );
353
-
354
- add_submenu_page(
355
- 'edit.php?post_type='.SG_POPUP_POST_TYPE,
356
- __('All Subscribers', SG_POPUP_TEXT_DOMAIN),
357
- __('All Subscribers', SG_POPUP_TEXT_DOMAIN),
358
- 'sgpb_manage_options',
359
- SG_POPUP_SUBSCRIBERS_PAGE,
360
- array($this, 'subscribersPage')
361
- );
362
-
363
- add_submenu_page(
364
- 'edit.php?post_type='.SG_POPUP_POST_TYPE,
365
- __('Newsletter', SG_POPUP_TEXT_DOMAIN),
366
- __('Newsletter', SG_POPUP_TEXT_DOMAIN),
367
- 'sgpb_manage_options',
368
- SG_POPUP_NEWSLETTER_PAGE,
369
- array($this, 'newsletter')
370
- );
371
- }
372
-
373
- public function supportLink()
374
- {
375
- wp_redirect(SG_POPUP_SUPPORT_URL);
376
- }
377
-
378
- public function extendLink()
379
- {
380
- wp_redirect(SG_POPUP_EXTENSIONS_URL);
381
- }
382
-
383
- public function addOptionsMetaBox()
384
- {
385
- add_meta_box(
386
- 'optionsMetaboxView',
387
- __('Advanced', SG_POPUP_TEXT_DOMAIN),
388
- array($this, 'optionsMetaboxView'),
389
- SG_POPUP_POST_TYPE,
390
- 'normal',
391
- 'low'
392
- );
393
- }
394
-
395
- public function addPopupMetaboxes()
396
- {
397
- $additionalMetaboxes = apply_filters('sgpbAdditionalMetaboxes', array());
398
-
399
- if (empty($additionalMetaboxes)) {
400
- return false;
401
- }
402
-
403
-
404
- $context = 'normal';
405
- $priority = 'high';
406
- $key = 'allMetaboxesView';
407
- $metabox = $additionalMetaboxes['allMetaboxesView'];
408
- $popupTypeObj = $this->getPopupTypeObj();
409
- $filepath = $metabox['filePath'];
410
-
411
- add_meta_box(
412
- $key,
413
- __($metabox['displayName'], SG_POPUP_TEXT_DOMAIN),
414
- function() use ($filepath, $popupTypeObj) {
415
- require_once $filepath;
416
- },
417
- SG_POPUP_POST_TYPE,
418
- $context,
419
- $priority
420
- );
421
-
422
- remove_meta_box('popup-categoriesdiv', SG_POPUP_POST_TYPE, 'side');
423
-
424
- return true;
425
- }
426
-
427
- public function popupTypesPage()
428
- {
429
- if (file_exists(SG_POPUP_VIEWS_PATH.'popupTypes.php')) {
430
- require_once(SG_POPUP_VIEWS_PATH.'popupTypes.php');
431
- }
432
- }
433
-
434
- public function subscribersPage()
435
- {
436
- if (file_exists(SG_POPUP_VIEWS_PATH.'subscribers.php')) {
437
- require_once(SG_POPUP_VIEWS_PATH . 'subscribers.php');
438
- }
439
- }
440
-
441
- public function settings()
442
- {
443
- if (file_exists(SG_POPUP_VIEWS_PATH.'settings.php')) {
444
- require_once(SG_POPUP_VIEWS_PATH.'settings.php');
445
- }
446
- }
447
-
448
- public function newsletter()
449
- {
450
- if (file_exists(SG_POPUP_VIEWS_PATH.'newsletter.php')) {
451
- require_once(SG_POPUP_VIEWS_PATH.'newsletter.php');
452
- }
453
- }
454
-
455
- public function popupTypeOptionsView()
456
- {
457
- $popupTypeObj = $this->getPopupTypeObj();
458
- $optionsView = $popupTypeObj->getPopupTypeOptionsView();
459
- if (file_exists($optionsView['filePath'])) {
460
- require_once($optionsView['filePath']);
461
- }
462
- }
463
-
464
- public function popupTypeMainView()
465
- {
466
- $popupTypeObj = $this->getPopupTypeObj();
467
- $optionsView = $popupTypeObj->getPopupTypeMainView();
468
- if (file_exists($optionsView['filePath'])) {
469
- require_once($optionsView['filePath']);
470
- }
471
- }
472
-
473
- public function popupTypeRightBannerView()
474
- {
475
- $banner = AdminHelper::getRightMetaboxBannerText();
476
- echo $banner;
477
- }
478
- }
1
+ <?php
2
+ namespace sgpb;
3
+ use \SgpbDataConfig;
4
+ use \SgpbPopupConfig;
5
+ class RegisterPostType
6
+ {
7
+ private $popupTypeObj;
8
+ private $popupType;
9
+ private $popupId;
10
+
11
+ public function setPopupType($popupType)
12
+ {
13
+ $this->popupType = $popupType;
14
+ }
15
+
16
+ public function getPopupType()
17
+ {
18
+ return $this->popupType;
19
+ }
20
+
21
+ public function setPopupId($popupId)
22
+ {
23
+ $this->popupId = $popupId;
24
+ }
25
+
26
+ public function getPopupId()
27
+ {
28
+ return $this->popupId;
29
+ }
30
+
31
+ public function __construct()
32
+ {
33
+ if (!AdminHelper::showMenuForCurrentUser()) {
34
+ return false;
35
+ }
36
+ // its need here to an apply filters for add popup types needed data
37
+ SgpbPopupConfig::popupTypesInit();
38
+ $this->init();
39
+ // Call init data configs apply filters
40
+ SgpbDataConfig::init();
41
+
42
+ return true;
43
+ }
44
+
45
+ public function setPopupTypeObj($popupTypeObj)
46
+ {
47
+ $this->popupTypeObj = $popupTypeObj;
48
+ }
49
+
50
+ public function getPopupTypeObj()
51
+ {
52
+ return $this->popupTypeObj;
53
+ }
54
+
55
+ public function getPostTypeArgs()
56
+ {
57
+ $labels = $this->getPostTypeLabels();
58
+
59
+ $args = array(
60
+ 'labels' => $labels,
61
+ 'description' => __('Description.', 'your-plugin-textdomain'),
62
+ // Exclude_from_search
63
+ 'exclude_from_search' => true,
64
+ 'public' => true,
65
+ 'has_archive' => false,
66
+ // Where to show the post type in the admin menu
67
+ 'show_ui' => true,
68
+ 'query_var' => false,
69
+ 'rewrite' => array('slug' => SG_POPUP_POST_TYPE),
70
+ 'map_meta_cap' => true,
71
+ 'capability_type' => array('sgpb_popup', 'sgpb_popups'),
72
+ 'menu_position' => 10,
73
+ 'supports' => apply_filters('sgpbPostTypeSupport', array('title', 'editor')),
74
+ 'menu_icon' => 'dashicons-menu-icon-sgpb',
75
+ 'show_in_rest' => true
76
+ );
77
+
78
+ if (is_admin()) {
79
+ $args['capability_type'] = 'post';
80
+ }
81
+
82
+ return $args;
83
+ }
84
+
85
+ public function getPostTypeLabels()
86
+ {
87
+ $count = SGPBNotificationCenter::getAllActiveNotifications();
88
+ $count = '';
89
+ $labels = array(
90
+ 'name' => _x('Popup Builder', 'post type general name', SG_POPUP_TEXT_DOMAIN),
91
+ 'singular_name' => _x('Popup', 'post type singular name', SG_POPUP_TEXT_DOMAIN),
92
+ 'menu_name' => _x('Popup Builder', 'admin menu', SG_POPUP_TEXT_DOMAIN).$count,
93
+ 'name_admin_bar' => _x('Popup', 'add new on admin bar', SG_POPUP_TEXT_DOMAIN),
94
+ 'add_new' => _x('Add New', 'Popup', SG_POPUP_TEXT_DOMAIN),
95
+ 'add_new_item' => __('Add New Popup', SG_POPUP_TEXT_DOMAIN),
96
+ 'new_item' => __('New Popup', SG_POPUP_TEXT_DOMAIN),
97
+ 'edit_item' => __('Edit Popup', SG_POPUP_TEXT_DOMAIN),
98
+ 'view_item' => __('View Popup', SG_POPUP_TEXT_DOMAIN),
99
+ 'all_items' => __('All Popups', SG_POPUP_TEXT_DOMAIN),
100
+ 'search_items' => __('Search', SG_POPUP_TEXT_DOMAIN),
101
+ 'parent_item_colon' => __('Parent Popups:', SG_POPUP_TEXT_DOMAIN),
102
+ 'not_found' => __('No popups found.', SG_POPUP_TEXT_DOMAIN),
103
+ 'not_found_in_trash' => __('No popups found in Trash.', SG_POPUP_TEXT_DOMAIN)
104
+ );
105
+
106
+ return $labels;
107
+ }
108
+
109
+ public function postTypeSupportForPopupTypes($supports)
110
+ {
111
+ $popupType = $this->getPopupTypeName();
112
+ $typePath = $this->getPopupTypePathFormPopupType($popupType);
113
+ $popupClassName = $this->getPopupClassNameFromPopupType($popupType);
114
+
115
+ if (!file_exists($typePath.$popupClassName.'.php')) {
116
+ return $supports;
117
+ }
118
+
119
+ require_once($typePath.$popupClassName.'.php');
120
+ $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
121
+
122
+ // We need to remove wyswyg editor for some popup types and that’s why we are doing this check.
123
+ if (method_exists($popupClassName, 'getPopupTypeSupports')) {
124
+ $supports = $popupClassName::getPopupTypeSupports();
125
+ }
126
+
127
+ return $supports;
128
+ }
129
+
130
+ public function init()
131
+ {
132
+ add_filter('sgpbPostTypeSupport', array($this, 'postTypeSupportForPopupTypes'), 1, 1);
133
+ $postType = SG_POPUP_POST_TYPE;
134
+ $args = $this->getPostTypeArgs();
135
+
136
+ register_post_type($postType, $args);
137
+
138
+ $this->createPopupObjFromPopupType();
139
+ }
140
+
141
+ private function createPopupObjFromPopupType()
142
+ {
143
+ $popupId = 0;
144
+
145
+ if (!empty($_GET['post'])) {
146
+ $popupId = (int)$_GET['post'];
147
+ }
148
+
149
+ $popupType = $this->getPopupTypeName();
150
+ $this->setPopupType($popupType);
151
+ $this->setPopupId($popupId);
152
+
153
+ $this->createPopupObj();
154
+ }
155
+
156
+ private function getPopupTypeName()
157
+ {
158
+ $popupType = 'html';
159
+
160
+ /*
161
+ * First, we try to find the popup type with the post id then,
162
+ * if the post id doesn't exist, we try to find it with $_GET['sgpb_type']
163
+ */
164
+ if (!empty($_GET['post'])) {
165
+ $popupId = (int)$_GET['post'];
166
+ $popupOptionsData = SGPopup::getPopupOptionsById($popupId);
167
+ if (!empty($popupOptionsData['sgpb-type'])) {
168
+ $popupType = $popupOptionsData['sgpb-type'];
169
+ }
170
+ }
171
+ else if (!empty($_GET['sgpb_type'])) {
172
+ $popupType = sanitize_text_field($_GET['sgpb_type']);
173
+ }
174
+
175
+ return $popupType;
176
+ }
177
+
178
+ private function getPopupClassNameFromPopupType($popupType)
179
+ {
180
+ $popupName = ucfirst(strtolower($popupType));
181
+ $popupClassName = $popupName.'Popup';
182
+
183
+ return $popupClassName;
184
+ }
185
+
186
+ private function getPopupTypePathFormPopupType($popupType)
187
+ {
188
+ global $SGPB_POPUP_TYPES;
189
+ $typePath = '';
190
+
191
+ if (!empty($SGPB_POPUP_TYPES['typePath'][$popupType])) {
192
+ $typePath = $SGPB_POPUP_TYPES['typePath'][$popupType];
193
+ }
194
+
195
+ return $typePath;
196
+ }
197
+
198
+ public function createPopupObj()
199
+ {
200
+ $popupId = $this->getPopupId();
201
+ $popupType = $this->getPopupType();
202
+ $typePath = $this->getPopupTypePathFormPopupType($popupType);
203
+ $popupClassName = $this->getPopupClassNameFromPopupType($popupType);
204
+
205
+ if (!file_exists($typePath.$popupClassName.'.php')) {
206
+ die(__('Popup class does not exist', SG_POPUP_TEXT_DOMAIN));
207
+ }
208
+ require_once($typePath.$popupClassName.'.php');
209
+ $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
210
+ $popupTypeObj = new $popupClassName();
211
+ $popupTypeObj->setId($popupId);
212
+ $popupTypeObj->setType($popupType);
213
+ $this->setPopupTypeObj($popupTypeObj);
214
+
215
+ $popupTypeMainView = $popupTypeObj->getPopupTypeMainView();
216
+ $popupTypeViewData = $popupTypeObj->getPopupTypeOptionsView();
217
+
218
+ if (!empty($popupTypeMainView)) {
219
+ add_filter('sgpbAdditionalMetaboxes', array($this, 'sgpbPopupTypeMainViewMetaboxes'), 1, 1);
220
+ //add_action('add_meta_boxes', array($this, 'popupTypeMain'));
221
+ }
222
+ if (!empty($popupTypeViewData)) {
223
+ //add_action('add_meta_boxes', array($this, 'popupTypeOptions'));
224
+ add_filter('sgpbAdditionalMetaboxes', array($this, 'sgpbPopupTypeOptionsViewMetaboxes'), 1, 1);
225
+ }
226
+ if ($popupType == 'subscription') {
227
+ add_action('add_meta_boxes', array($this, 'rightBannerMetabox'));
228
+ }
229
+ }
230
+
231
+ public function rightBannerMetabox()
232
+ {
233
+ $banner = AdminHelper::getRightMetaboxBannerText();
234
+ $isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
235
+ if ($banner == '' || $isSubscriptionPlusActive) {
236
+ return;
237
+ }
238
+ add_meta_box(
239
+ 'popupTypeRightBannerView',
240
+ __('News', SG_POPUP_TEXT_DOMAIN),
241
+ array($this, 'popupTypeRightBannerView'),
242
+ SG_POPUP_POST_TYPE,
243
+ 'side',
244
+ 'low'
245
+ );
246
+ }
247
+
248
+ public function sgpbPopupTypeMainViewMetaboxes($metaboxes)
249
+ {
250
+ $popupTypeObj = $this->getPopupTypeObj();
251
+ $optionsView = $popupTypeObj->getPopupTypeMainView();
252
+ $typeView = array();
253
+
254
+ $metaboxes['popupTypeMainView'] = array(
255
+ 'key' => 'popupTypeMainView',
256
+ 'displayName' => __($optionsView['metaboxTitle'], SG_POPUP_TEXT_DOMAIN),
257
+ 'filePath' => $optionsView['filePath'],
258
+ 'short_description' => $optionsView['short_description'],
259
+ SG_POPUP_POST_TYPE,
260
+ 'normal',
261
+ 'high'
262
+ );
263
+
264
+ return $metaboxes;
265
+ }
266
+
267
+ public function popupTypeMain()
268
+ {
269
+ $popupTypeObj = $this->getPopupTypeObj();
270
+ $optionsView = $popupTypeObj->getPopupTypeMainView();
271
+ add_meta_box(
272
+ 'popupTypeMainView',
273
+ __($optionsView['metaboxTitle'], SG_POPUP_TEXT_DOMAIN),
274
+ array($this, 'popupTypeMainView'),
275
+ SG_POPUP_POST_TYPE,
276
+ 'normal',
277
+ 'high'
278
+ );
279
+ }
280
+
281
+ public function sgpbPopupTypeOptionsViewMetaboxes($metaboxes)
282
+ {
283
+ $popupTypeObj = $this->getPopupTypeObj();
284
+ $optionsView = $popupTypeObj->getPopupTypeOptionsView();
285
+
286
+ $metaboxes['popupTypeOptionsView'] = array(
287
+ 'key' => 'popupTypeOptionsView',
288
+ 'displayName' => __($optionsView['metaboxTitle'], SG_POPUP_TEXT_DOMAIN),
289
+ 'short_description' => $optionsView['short_description'],
290
+ 'filePath' => $optionsView['filePath'],
291
+ SG_POPUP_POST_TYPE,
292
+ 'normal',
293
+ 'high'
294
+ );
295
+
296
+ return $metaboxes;
297
+ }
298
+
299
+ public function popupTypeOptions()
300
+ {
301
+ $popupTypeObj = $this->getPopupTypeObj();
302
+ $optionsView = $popupTypeObj->getPopupTypeOptionsView();
303
+ add_meta_box(
304
+ 'popupTypeOptionsView',
305
+ __($optionsView['metaboxTitle'], SG_POPUP_TEXT_DOMAIN),
306
+ array($this, 'popupTypeOptionsView'),
307
+ SG_POPUP_POST_TYPE,
308
+ 'normal',
309
+ 'high'
310
+ );
311
+ }
312
+
313
+ public function supportLinks()
314
+ {
315
+ add_submenu_page(
316
+ 'edit.php?post_type='.SG_POPUP_POST_TYPE,
317
+ __('Settings', SG_POPUP_TEXT_DOMAIN),
318
+ __('Settings', SG_POPUP_TEXT_DOMAIN),
319
+ 'manage_options',
320
+ SG_POPUP_SETTINGS_PAGE,
321
+ array($this, 'settings')
322
+ );
323
+
324
+ add_submenu_page(
325
+ 'edit.php?post_type='.SG_POPUP_POST_TYPE,
326
+ __('Extend', SG_POPUP_TEXT_DOMAIN),
327
+ __('Extend', SG_POPUP_TEXT_DOMAIN),
328
+ 'sgpb_manage_options',
329
+ SG_POPUP_EXTEND_PAGE,
330
+ array($this, 'extendLink')
331
+ );
332
+
333
+ add_submenu_page(
334
+ 'edit.php?post_type='.SG_POPUP_POST_TYPE,
335
+ __('Support', SG_POPUP_TEXT_DOMAIN),
336
+ __('Support', SG_POPUP_TEXT_DOMAIN),
337
+ 'sgpb_manage_options',
338
+ SG_POPUP_SUPPORT_PAGE,
339
+ array($this, 'supportLink')
340
+ );
341
+ }
342
+
343
+ public function addSubMenu()
344
+ {
345
+ add_submenu_page(
346
+ 'edit.php?post_type='.SG_POPUP_POST_TYPE,
347
+ __('Add New', SG_POPUP_TEXT_DOMAIN),
348
+ __('Add New', SG_POPUP_TEXT_DOMAIN),
349
+ 'sgpb_manage_options',
350
+ SG_POPUP_POST_TYPE,
351
+ array($this, 'popupTypesPage')
352
+ );
353
+
354
+ add_submenu_page(
355
+ 'edit.php?post_type='.SG_POPUP_POST_TYPE,
356
+ __('All Subscribers', SG_POPUP_TEXT_DOMAIN),
357
+ __('All Subscribers', SG_POPUP_TEXT_DOMAIN),
358
+ 'sgpb_manage_options',
359
+ SG_POPUP_SUBSCRIBERS_PAGE,
360
+ array($this, 'subscribersPage')
361
+ );
362
+
363
+ add_submenu_page(
364
+ 'edit.php?post_type='.SG_POPUP_POST_TYPE,
365
+ __('Newsletter', SG_POPUP_TEXT_DOMAIN),
366
+ __('Newsletter', SG_POPUP_TEXT_DOMAIN),
367
+ 'sgpb_manage_options',
368
+ SG_POPUP_NEWSLETTER_PAGE,
369
+ array($this, 'newsletter')
370
+ );
371
+ }
372
+
373
+ public function supportLink()
374
+ {
375
+ wp_redirect(SG_POPUP_SUPPORT_URL);
376
+ }
377
+
378
+ public function extendLink()
379
+ {
380
+ wp_redirect(SG_POPUP_EXTENSIONS_URL);
381
+ }
382
+
383
+ public function addOptionsMetaBox()
384
+ {
385
+ add_meta_box(
386
+ 'optionsMetaboxView',
387
+ __('Advanced', SG_POPUP_TEXT_DOMAIN),
388
+ array($this, 'optionsMetaboxView'),
389
+ SG_POPUP_POST_TYPE,
390
+ 'normal',
391
+ 'low'
392
+ );
393
+ }
394
+
395
+ public function addPopupMetaboxes()
396
+ {
397
+ $additionalMetaboxes = apply_filters('sgpbAdditionalMetaboxes', array());
398
+
399
+ if (empty($additionalMetaboxes)) {
400
+ return false;
401
+ }
402
+
403
+
404
+ $context = 'normal';
405
+ $priority = 'high';
406
+ $key = 'allMetaboxesView';
407
+ $metabox = $additionalMetaboxes['allMetaboxesView'];
408
+ $popupTypeObj = $this->getPopupTypeObj();
409
+ $filepath = $metabox['filePath'];
410
+
411
+ add_meta_box(
412
+ $key,
413
+ __($metabox['displayName'], SG_POPUP_TEXT_DOMAIN),
414
+ function() use ($filepath, $popupTypeObj) {
415
+ require_once $filepath;
416
+ },
417
+ SG_POPUP_POST_TYPE,
418
+ $context,
419
+ $priority
420
+ );
421
+
422
+ remove_meta_box('popup-categoriesdiv', SG_POPUP_POST_TYPE, 'side');
423
+
424
+ return true;
425
+ }
426
+
427
+ public function popupTypesPage()
428
+ {
429
+ if (file_exists(SG_POPUP_VIEWS_PATH.'popupTypes.php')) {
430
+ require_once(SG_POPUP_VIEWS_PATH.'popupTypes.php');
431
+ }
432
+ }
433
+
434
+ public function subscribersPage()
435
+ {
436
+ if (file_exists(SG_POPUP_VIEWS_PATH.'subscribers.php')) {
437
+ require_once(SG_POPUP_VIEWS_PATH . 'subscribers.php');
438
+ }
439
+ }
440
+
441
+ public function settings()
442
+ {
443
+ if (file_exists(SG_POPUP_VIEWS_PATH.'settings.php')) {
444
+ require_once(SG_POPUP_VIEWS_PATH.'settings.php');
445
+ }
446
+ }
447
+
448
+ public function newsletter()
449
+ {
450
+ if (file_exists(SG_POPUP_VIEWS_PATH.'newsletter.php')) {
451
+ require_once(SG_POPUP_VIEWS_PATH.'newsletter.php');
452
+ }
453
+ }
454
+
455
+ public function popupTypeOptionsView()
456
+ {
457
+ $popupTypeObj = $this->getPopupTypeObj();
458
+ $optionsView = $popupTypeObj->getPopupTypeOptionsView();
459
+ if (file_exists($optionsView['filePath'])) {
460
+ require_once($optionsView['filePath']);
461
+ }
462
+ }
463
+
464
+ public function popupTypeMainView()
465
+ {
466
+ $popupTypeObj = $this->getPopupTypeObj();
467
+ $optionsView = $popupTypeObj->getPopupTypeMainView();
468
+ if (file_exists($optionsView['filePath'])) {
469
+ require_once($optionsView['filePath']);
470
+ }
471
+ }
472
+
473
+ public function popupTypeRightBannerView()
474
+ {
475
+ $banner = AdminHelper::getRightMetaboxBannerText();
476
+ echo $banner;
477
+ }
478
+ }
com/classes/SGPBRequirementsChecker.php CHANGED
@@ -1,16 +1,16 @@
1
- <?php
2
- class SGPBRequirementsChecker
3
- {
4
- public static function init()
5
- {
6
- self::checkPhpVersion();
7
- }
8
-
9
- public static function checkPhpVersion()
10
- {
11
- if (version_compare(PHP_VERSION, SG_POPUP_MINIMUM_PHP_VERSION, '<')) {
12
- wp_die('Popup Builder plugin requires PHP version >= '.SG_POPUP_MINIMUM_PHP_VERSION.' version required. You server using PHP version = '.PHP_VERSION);
13
- }
14
- }
15
- }
16
-
1
+ <?php
2
+ class SGPBRequirementsChecker
3
+ {
4
+ public static function init()
5
+ {
6
+ self::checkPhpVersion();
7
+ }
8
+
9
+ public static function checkPhpVersion()
10
+ {
11
+ if (version_compare(PHP_VERSION, SG_POPUP_MINIMUM_PHP_VERSION, '<')) {
12
+ wp_die('Popup Builder plugin requires PHP version >= '.SG_POPUP_MINIMUM_PHP_VERSION.' version required. You server using PHP version = '.PHP_VERSION);
13
+ }
14
+ }
15
+ }
16
+
com/classes/ScriptsLoader.php CHANGED
@@ -1,406 +1,406 @@
1
- <?php
2
-
3
- namespace sgpb;
4
-
5
- // load popups data's from popups object
6
- class ScriptsLoader
7
- {
8
- // all loadable popups objects
9
- private $loadablePopups = array();
10
- private $isAdmin = false;
11
- private $isAjax = false;
12
- private $scriptsAndStylesForAjax;
13
- private $footerContentAjax;
14
- private static $alreadyLoadedPopups = array();
15
-
16
- public function setLoadablePopups($loadablePopups)
17
- {
18
- $this->loadablePopups = $loadablePopups;
19
- }
20
-
21
- public function getLoadablePopups()
22
- {
23
- return apply_filters('sgpbLoadablePopups', $this->loadablePopups);
24
- }
25
-
26
- public function setIsAdmin($isAdmin)
27
- {
28
- $this->isAdmin = $isAdmin;
29
- }
30
-
31
- public function getIsAdmin()
32
- {
33
- return $this->isAdmin;
34
- }
35
-
36
- /* for ajax calls */
37
- public function setIsAjax($isAjax)
38
- {
39
- $this->isAjax = $isAjax;
40
- }
41
-
42
- public function getIsAjax()
43
- {
44
- return $this->isAjax;
45
- }
46
-
47
- public function setFooterContentAjax($footerContentAjax)
48
- {
49
- $this->footerContentAjax = $footerContentAjax;
50
- }
51
-
52
- public function getFooterContentAjax()
53
- {
54
- return $this->footerContentAjax;
55
- }
56
-
57
- /**
58
- * Get encoded popup options
59
- *
60
- * @since 3.0.4
61
- *
62
- * @param object $popup
63
- *
64
- * @return array|mixed|string|void $popupOptions
65
- */
66
- private function getEncodedOptionsFromPopup($popup)
67
- {
68
- $extraOptions = $popup->getExtraRenderOptions();
69
- $popupOptions = $popup->getOptions();
70
- $popupOptions = apply_filters('sgpbPopupRenderOptions', $popupOptions);
71
- $popupCondition = $popup->getConditions();
72
-
73
- $popupOptions = array_merge($popupOptions, $extraOptions);
74
- $popupOptions['sgpbConditions'] = apply_filters('sgpbRenderCondtions', $popupCondition);
75
- // These two lines have been added in order to not use the json_econde and to support PHP 5.3 version.
76
- $popupOptions = AdminHelper::serializeData($popupOptions);
77
- $popupOptions = base64_encode($popupOptions);
78
-
79
- return $popupOptions;
80
- }
81
-
82
- // load popup scripts and styles and add popup data to the footer
83
- public function loadToFooter($isFromAjax = false)
84
- {
85
- $popups = $this->getLoadablePopups();
86
- $currentPostType = AdminHelper::getCurrentPostType();
87
- global $wp;
88
- $currentUrl = home_url( $wp->request );
89
- $currentUrl = strpos($currentUrl, '/popupbuilder/');
90
-
91
- // during preview wp request is empty that is why we check query_string
92
- if (is_preview()) {
93
- $currentUrl = strrpos($wp->query_string, 'popupbuilder');
94
- }
95
-
96
- if ($currentPostType == SG_POPUP_POST_TYPE && $currentUrl === false) {
97
- return false;
98
- }
99
-
100
- if (empty($popups)) {
101
- return false;
102
- }
103
-
104
- global $post;
105
- $postId = 0;
106
-
107
- if (!empty($post)) {
108
- $postId = $post->ID;
109
- }
110
-
111
- if ($this->getIsAdmin()) {
112
- $this->loadToAdmin();
113
- return true;
114
- }
115
- $footerContentAjax = '';
116
-
117
- foreach ($popups as $popup) {
118
- $isActive = $popup->isActive();
119
- if (!$isActive) {
120
- continue;
121
- }
122
-
123
- $popupId = $popup->getId();
124
-
125
- $popupContent = apply_filters('sgpbPopupContentLoadToPage', $popup->getPopupTypeContent(), $popupId);
126
-
127
- $events = $popup->getPopupAllEvents($postId, $popupId, $popup);
128
-
129
- // if popup's data has already loaded into the page with the same event
130
- if (isset(self::$alreadyLoadedPopups[$popupId])) {
131
- if (self::$alreadyLoadedPopups[$popupId] == $events) {
132
- continue;
133
- }
134
- }
135
- foreach ($events as $event) {
136
- if (isset($event['param'])) {
137
- if (isset(self::$alreadyLoadedPopups[$popupId])) {
138
- if (self::$alreadyLoadedPopups[$popupId] == $event['param']) {
139
- continue;
140
- }
141
- }
142
- }
143
- }
144
-
145
- self::$alreadyLoadedPopups[$popupId] = $events;
146
- $events = json_encode($events);
147
- $currentUseOptions = $popup->getOptions();
148
- $extraContent = apply_filters('sgpbPopupExtraData', $popupId, $currentUseOptions);
149
-
150
- $popupOptions = $this->getEncodedOptionsFromPopup($popup);
151
- $popupOptions = apply_filters('sgpbLoadToFooterOptions', $popupOptions);
152
- if ($isFromAjax) {
153
- $footerPopupContent = '<div class="sgpb-main-popup-data-container-'.$popupId.'" style="position:fixed;opacity: 0;filter: opacity(0%);transform: scale(0);">
154
- <div class="sg-popup-builder-content" id="sg-popup-content-wrapper-'.$popupId.'" data-id="'.esc_attr($popupId).'" data-events="'.esc_attr($events).'" data-options="'.esc_attr($popupOptions).'">
155
- <div class="sgpb-popup-builder-content-'.esc_attr($popupId).' sgpb-popup-builder-content-html">'.$popupContent.'</div>
156
- </div>
157
- </div>';
158
- $footerPopupContent .= $extraContent;
159
- $footerContentAjax .= $footerPopupContent;
160
- } else {
161
- add_action('wp_footer', function() use ($popupId, $events, $popupOptions, $popupContent, $extraContent) {
162
- $footerPopupContent = '<div class="sgpb-main-popup-data-container-'.$popupId.'" style="position:fixed;opacity: 0;filter: opacity(0%);transform: scale(0);">
163
- <div class="sg-popup-builder-content" id="sg-popup-content-wrapper-'.$popupId.'" data-id="'.esc_attr($popupId).'" data-events="'.esc_attr($events).'" data-options="'.esc_attr($popupOptions).'">
164
- <div class="sgpb-popup-builder-content-'.esc_attr($popupId).' sgpb-popup-builder-content-html">'.$popupContent.'</div>
165
- </div>
166
- </div>';
167
- $footerPopupContent .= $extraContent;
168
- echo $footerPopupContent;
169
- });
170
- }
171
- }
172
-
173
- $this->includeScripts();
174
- $this->includeStyles();
175
- if ($isFromAjax){
176
- $this->setFooterContentAjax($footerContentAjax);
177
- }
178
- }
179
-
180
- public function loadToAdmin()
181
- {
182
- $popups = $this->getLoadablePopups();
183
-
184
- foreach ($popups as $popup) {
185
- $popupId = $popup->getId();
186
-
187
- $events = array();
188
-
189
- $events = json_encode($events);
190
-
191
- $popupOptions = $this->getEncodedOptionsFromPopup($popup);
192
-
193
- $popupContent = apply_filters('sgpbPopupContentLoadToPage', $popup->getPopupTypeContent(), $popupId);
194
-
195
- add_action('admin_footer', function() use ($popupId, $events, $popupOptions, $popupContent) {
196
- $footerPopupContent = '<div style="position:absolute;top: -999999999999999999999px;">
197
- <div class="sg-popup-builder-content" id="sg-popup-content-wrapper-'.$popupId.'" data-id="'.esc_attr($popupId).'" data-events="'.esc_attr($events).'" data-options="'.esc_attr($popupOptions).'">
198
- <div class="sgpb-popup-builder-content-'.esc_attr($popupId).' sgpb-popup-builder-content-html">'.$popupContent.'</div>
199
- </div>
200
- </div>';
201
-
202
- echo $footerPopupContent;
203
- });
204
- }
205
- $this->includeScripts();
206
- $this->includeStyles();
207
-
208
- }
209
-
210
- private function includeScripts()
211
- {
212
- global $post;
213
- global $wp_version;
214
- $popups = $this->getLoadablePopups();
215
- $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
216
-
217
- if (!$registeredPlugins) {
218
- return;
219
- }
220
- $registeredPlugins = json_decode($registeredPlugins, true);
221
-
222
- if (empty($registeredPlugins)) {
223
- return;
224
- }
225
-
226
- foreach ($registeredPlugins as $pluginName => $pluginData) {
227
-
228
- if (!is_plugin_active($pluginName)) {
229
- continue;
230
- }
231
-
232
- if (empty($pluginData['classPath']) || empty($pluginData['className'])) {
233
- continue;
234
- }
235
- $classPath = $pluginData['classPath'];
236
- $classPath = SG_POPUP_PLUGIN_PATH.$classPath;
237
-
238
- if (!file_exists($classPath)) {
239
- continue;
240
- }
241
-
242
- require_once($classPath);
243
-
244
- $classObj = new $pluginData['className']();
245
-
246
- if (!$classObj instanceof \SgpbIPopupExtension) {
247
- continue;
248
- }
249
-
250
- $scriptData = $classObj->getFrontendScripts(
251
- $post, array(
252
- 'popups' => $popups
253
- )
254
- );
255
-
256
- $scripts[] = $scriptData;
257
- }
258
-
259
- if (empty($scripts)) {
260
- return;
261
- }
262
- if ($this->getIsAjax()){
263
- $this->scriptsAndStylesForAjax['scripts'] = $scripts;
264
- }
265
- foreach ($scripts as $script) {
266
- if (empty($script['jsFiles'])) {
267
- continue;
268
- }
269
-
270
- foreach ($script['jsFiles'] as $jsFile) {
271
-
272
- if (empty($jsFile['folderUrl'])) {
273
- wp_enqueue_script(@$jsFile['filename']);
274
- continue;
275
- }
276
-
277
- $dirUrl = $jsFile['folderUrl'];
278
- $dep = (!empty($jsFile['dep'])) ? $jsFile['dep'] : '';
279
- $ver = (!empty($jsFile['ver'])) ? $jsFile['ver'] : '';
280
- $inFooter = (!empty($jsFile['inFooter'])) ? $jsFile['inFooter'] : '';
281
-
282
- ScriptsIncluder::registerScript($jsFile['filename'], array(
283
- 'dirUrl' => $dirUrl,
284
- 'dep' => $dep,
285
- 'ver' => $ver,
286
- 'inFooter' => $inFooter
287
- )
288
- );
289
- ScriptsIncluder::enqueueScript($jsFile['filename']);
290
- }
291
-
292
- if (empty($script['localizeData'])) {
293
- continue;
294
- }
295
-
296
- $localizeData = $script['localizeData'];
297
-
298
- if (!empty($localizeData[0])) {
299
- foreach ($localizeData as $valueData) {
300
- if (empty($valueData)) {
301
- continue;
302
-
303
- }
304
- if (version_compare($wp_version, '4.5', '>')){
305
- /* after wp 4.5 version */
306
- ScriptsIncluder::addInlineScripts($valueData['handle'], 'var '.$valueData['name'].' = ' .json_encode($valueData['data']).';');
307
- } else {
308
- /* since wp 4.5 version */
309
- ScriptsIncluder::localizeScript($valueData['handle'], $valueData['name'], $valueData['data']);
310
- }
311
-
312
- }
313
- }
314
- }
315
- }
316
-
317
- private function includeStyles()
318
- {
319
- global $post;
320
- $styles = array();
321
- $popups = $this->getLoadablePopups();
322
- $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
323
-
324
- if (!$registeredPlugins) {
325
- return;
326
- }
327
- $registeredPlugins = json_decode($registeredPlugins, true);
328
-
329
- if (empty($registeredPlugins)) {
330
- return;
331
- }
332
-
333
- foreach ($registeredPlugins as $pluginName => $pluginData) {
334
-
335
- if (!is_plugin_active($pluginName)) {
336
- continue;
337
- }
338
-
339
- if (empty($pluginData['classPath']) || empty($pluginData['className'])) {
340
- continue;
341
- }
342
-
343
- $classPath = $pluginData['classPath'];
344
- $classPath = SG_POPUP_PLUGIN_PATH.$classPath;
345
-
346
- if (!file_exists($classPath)) {
347
- continue;
348
- }
349
-
350
- require_once($classPath);
351
-
352
- $classObj = new $pluginData['className']();
353
-
354
- if (!$classObj instanceof \SgpbIPopupExtension) {
355
- continue;
356
- }
357
-
358
- $scriptData = $classObj->getFrontendStyles(
359
- $post , array(
360
- 'popups' => $popups
361
- )
362
- );
363
-
364
- $styles[] = $scriptData;
365
- }
366
-
367
- if (empty($styles)) {
368
- return;
369
- }
370
- if ($this->getIsAjax()){
371
- $this->scriptsAndStylesForAjax['styles'] = $styles;
372
- }
373
- foreach ($styles as $style) {
374
-
375
- if (empty($style['cssFiles'])) {
376
- continue;
377
- }
378
-
379
- foreach ($style['cssFiles'] as $cssFile) {
380
-
381
- if (empty($cssFile['folderUrl'])) {
382
- ScriptsIncluder::enqueueStyle($cssFile['filename']);
383
- continue;
384
- }
385
-
386
- $dirUrl = $cssFile['folderUrl'];
387
- $dep = (!empty($cssFile['dep'])) ? $cssFile['dep'] : '';
388
- $ver = (!empty($cssFile['ver'])) ? $cssFile['ver'] : '';
389
- $inFooter = (!empty($cssFile['inFooter'])) ? $cssFile['inFooter'] : '';
390
-
391
- ScriptsIncluder::registerStyle($cssFile['filename'], array(
392
- 'dirUrl' => $dirUrl,
393
- 'dep' => $dep,
394
- 'ver' => $ver,
395
- 'inFooter' => $inFooter
396
- )
397
- );
398
- ScriptsIncluder::enqueueStyle($cssFile['filename']);
399
- }
400
- }
401
- }
402
-
403
- public function getScriptsAndStylesForAjax() {
404
- return $this->scriptsAndStylesForAjax;
405
- }
406
- }
1
+ <?php
2
+
3
+ namespace sgpb;
4
+
5
+ // load popups data's from popups object
6
+ class ScriptsLoader
7
+ {
8
+ // all loadable popups objects
9
+ private $loadablePopups = array();
10
+ private $isAdmin = false;
11
+ private $isAjax = false;
12
+ private $scriptsAndStylesForAjax;
13
+ private $footerContentAjax;
14
+ private static $alreadyLoadedPopups = array();
15
+
16
+ public function setLoadablePopups($loadablePopups)
17
+ {
18
+ $this->loadablePopups = $loadablePopups;
19
+ }
20
+
21
+ public function getLoadablePopups()
22
+ {
23
+ return apply_filters('sgpbLoadablePopups', $this->loadablePopups);
24
+ }
25
+
26
+ public function setIsAdmin($isAdmin)
27
+ {
28
+ $this->isAdmin = $isAdmin;
29
+ }
30
+
31
+ public function getIsAdmin()
32
+ {
33
+ return $this->isAdmin;
34
+ }
35
+
36
+ /* for ajax calls */
37
+ public function setIsAjax($isAjax)
38
+ {
39
+ $this->isAjax = $isAjax;
40
+ }
41
+
42
+ public function getIsAjax()
43
+ {
44
+ return $this->isAjax;
45
+ }
46
+
47
+ public function setFooterContentAjax($footerContentAjax)
48
+ {
49
+ $this->footerContentAjax = $footerContentAjax;
50
+ }
51
+
52
+ public function getFooterContentAjax()
53
+ {
54
+ return $this->footerContentAjax;
55
+ }
56
+
57
+ /**
58
+ * Get encoded popup options
59
+ *
60
+ * @since 3.0.4
61
+ *
62
+ * @param object $popup
63
+ *
64
+ * @return array|mixed|string|void $popupOptions
65
+ */
66
+ private function getEncodedOptionsFromPopup($popup)
67
+ {
68
+ $extraOptions = $popup->getExtraRenderOptions();
69
+ $popupOptions = $popup->getOptions();
70
+ $popupOptions = apply_filters('sgpbPopupRenderOptions', $popupOptions);
71
+ $popupCondition = $popup->getConditions();
72
+
73
+ $popupOptions = array_merge($popupOptions, $extraOptions);
74
+ $popupOptions['sgpbConditions'] = apply_filters('sgpbRenderCondtions', $popupCondition);
75
+ // These two lines have been added in order to not use the json_econde and to support PHP 5.3 version.
76
+ $popupOptions = AdminHelper::serializeData($popupOptions);
77
+ $popupOptions = base64_encode($popupOptions);
78
+
79
+ return $popupOptions;
80
+ }
81
+
82
+ // load popup scripts and styles and add popup data to the footer
83
+ public function loadToFooter($isFromAjax = false)
84
+ {
85
+ $popups = $this->getLoadablePopups();
86
+ $currentPostType = AdminHelper::getCurrentPostType();
87
+ global $wp;
88
+ $currentUrl = home_url( $wp->request );
89
+ $currentUrl = strpos($currentUrl, '/popupbuilder/');
90
+
91
+ // during preview wp request is empty that is why we check query_string
92
+ if (is_preview()) {
93
+ $currentUrl = strrpos($wp->query_string, 'popupbuilder');
94
+ }
95
+
96
+ if ($currentPostType == SG_POPUP_POST_TYPE && $currentUrl === false) {
97
+ return false;
98
+ }
99
+
100
+ if (empty($popups)) {
101
+ return false;
102
+ }
103
+
104
+ global $post;
105
+ $postId = 0;
106
+
107
+ if (!empty($post)) {
108
+ $postId = $post->ID;
109
+ }
110
+
111
+ if ($this->getIsAdmin()) {
112
+ $this->loadToAdmin();
113
+ return true;
114
+ }
115
+ $footerContentAjax = '';
116
+
117
+ foreach ($popups as $popup) {
118
+ $isActive = $popup->isActive();
119
+ if (!$isActive) {
120
+ continue;
121
+ }
122
+
123
+ $popupId = $popup->getId();
124
+
125
+ $popupContent = apply_filters('sgpbPopupContentLoadToPage', $popup->getPopupTypeContent(), $popupId);
126
+
127
+ $events = $popup->getPopupAllEvents($postId, $popupId, $popup);
128
+
129
+ // if popup's data has already loaded into the page with the same event
130
+ if (isset(self::$alreadyLoadedPopups[$popupId])) {
131
+ if (self::$alreadyLoadedPopups[$popupId] == $events) {
132
+ continue;
133
+ }
134
+ }
135
+ foreach ($events as $event) {
136
+ if (isset($event['param'])) {
137
+ if (isset(self::$alreadyLoadedPopups[$popupId])) {
138
+ if (self::$alreadyLoadedPopups[$popupId] == $event['param']) {
139
+ continue;
140
+ }
141
+ }
142
+ }
143
+ }
144
+
145
+ self::$alreadyLoadedPopups[$popupId] = $events;
146
+ $events = json_encode($events);
147
+ $currentUseOptions = $popup->getOptions();
148
+ $extraContent = apply_filters('sgpbPopupExtraData', $popupId, $currentUseOptions);
149
+
150
+ $popupOptions = $this->getEncodedOptionsFromPopup($popup);
151
+ $popupOptions = apply_filters('sgpbLoadToFooterOptions', $popupOptions);
152
+ if ($isFromAjax) {
153
+ $footerPopupContent = '<div class="sgpb-main-popup-data-container-'.$popupId.'" style="position:fixed;opacity: 0;filter: opacity(0%);transform: scale(0);">
154
+ <div class="sg-popup-builder-content" id="sg-popup-content-wrapper-'.$popupId.'" data-id="'.esc_attr($popupId).'" data-events="'.esc_attr($events).'" data-options="'.esc_attr($popupOptions).'">
155
+ <div class="sgpb-popup-builder-content-'.esc_attr($popupId).' sgpb-popup-builder-content-html">'.$popupContent.'</div>
156
+ </div>
157
+ </div>';
158
+ $footerPopupContent .= $extraContent;
159
+ $footerContentAjax .= $footerPopupContent;
160
+ } else {
161
+ add_action('wp_footer', function() use ($popupId, $events, $popupOptions, $popupContent, $extraContent) {
162
+ $footerPopupContent = '<div class="sgpb-main-popup-data-container-'.$popupId.'" style="position:fixed;opacity: 0;filter: opacity(0%);transform: scale(0);">
163
+ <div class="sg-popup-builder-content" id="sg-popup-content-wrapper-'.$popupId.'" data-id="'.esc_attr($popupId).'" data-events="'.esc_attr($events).'" data-options="'.esc_attr($popupOptions).'">
164
+ <div class="sgpb-popup-builder-content-'.esc_attr($popupId).' sgpb-popup-builder-content-html">'.$popupContent.'</div>
165
+ </div>
166
+ </div>';
167
+ $footerPopupContent .= $extraContent;
168
+ echo $footerPopupContent;
169
+ });
170
+ }
171
+ }
172
+
173
+ $this->includeScripts();
174
+ $this->includeStyles();
175
+ if ($isFromAjax){
176
+ $this->setFooterContentAjax($footerContentAjax);
177
+ }
178
+ }
179
+
180
+ public function loadToAdmin()
181
+ {
182
+ $popups = $this->getLoadablePopups();
183
+
184
+ foreach ($popups as $popup) {
185
+ $popupId = $popup->getId();
186
+
187
+ $events = array();
188
+
189
+ $events = json_encode($events);
190
+
191
+ $popupOptions = $this->getEncodedOptionsFromPopup($popup);
192
+
193
+ $popupContent = apply_filters('sgpbPopupContentLoadToPage', $popup->getPopupTypeContent(), $popupId);
194
+
195
+ add_action('admin_footer', function() use ($popupId, $events, $popupOptions, $popupContent) {
196
+ $footerPopupContent = '<div style="position:absolute;top: -999999999999999999999px;">
197
+ <div class="sg-popup-builder-content" id="sg-popup-content-wrapper-'.$popupId.'" data-id="'.esc_attr($popupId).'" data-events="'.esc_attr($events).'" data-options="'.esc_attr($popupOptions).'">
198
+ <div class="sgpb-popup-builder-content-'.esc_attr($popupId).' sgpb-popup-builder-content-html">'.$popupContent.'</div>
199
+ </div>
200
+ </div>';
201
+
202
+ echo $footerPopupContent;
203
+ });
204
+ }
205
+ $this->includeScripts();
206
+ $this->includeStyles();
207
+
208
+ }
209
+
210
+ private function includeScripts()
211
+ {
212
+ global $post;
213
+ global $wp_version;
214
+ $popups = $this->getLoadablePopups();
215
+ $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
216
+
217
+ if (!$registeredPlugins) {
218
+ return;
219
+ }
220
+ $registeredPlugins = json_decode($registeredPlugins, true);
221
+
222
+ if (empty($registeredPlugins)) {
223
+ return;
224
+ }
225
+
226
+ foreach ($registeredPlugins as $pluginName => $pluginData) {
227
+
228
+ if (!is_plugin_active($pluginName)) {
229
+ continue;
230
+ }
231
+
232
+ if (empty($pluginData['classPath']) || empty($pluginData['className'])) {
233
+ continue;
234
+ }
235
+ $classPath = $pluginData['classPath'];
236
+ $classPath = SG_POPUP_PLUGIN_PATH.$classPath;
237
+
238
+ if (!file_exists($classPath)) {
239
+ continue;
240
+ }
241
+
242
+ require_once($classPath);
243
+
244
+ $classObj = new $pluginData['className']();
245
+
246
+ if (!$classObj instanceof \SgpbIPopupExtension) {
247
+ continue;
248
+ }
249
+
250
+ $scriptData = $classObj->getFrontendScripts(
251
+ $post, array(
252
+ 'popups' => $popups
253
+ )
254
+ );
255
+
256
+ $scripts[] = $scriptData;
257
+ }
258
+
259
+ if (empty($scripts)) {
260
+ return;
261
+ }
262
+ if ($this->getIsAjax()){
263
+ $this->scriptsAndStylesForAjax['scripts'] = $scripts;
264
+ }
265
+ foreach ($scripts as $script) {
266
+ if (empty($script['jsFiles'])) {
267
+ continue;
268
+ }
269
+
270
+ foreach ($script['jsFiles'] as $jsFile) {
271
+
272
+ if (empty($jsFile['folderUrl'])) {
273
+ wp_enqueue_script(@$jsFile['filename']);
274
+ continue;
275
+ }
276
+
277
+ $dirUrl = $jsFile['folderUrl'];
278
+ $dep = (!empty($jsFile['dep'])) ? $jsFile['dep'] : '';
279
+ $ver = (!empty($jsFile['ver'])) ? $jsFile['ver'] : '';
280
+ $inFooter = (!empty($jsFile['inFooter'])) ? $jsFile['inFooter'] : '';
281
+
282
+ ScriptsIncluder::registerScript($jsFile['filename'], array(
283
+ 'dirUrl' => $dirUrl,
284
+ 'dep' => $dep,
285
+ 'ver' => $ver,
286
+ 'inFooter' => $inFooter
287
+ )
288
+ );
289
+ ScriptsIncluder::enqueueScript($jsFile['filename']);
290
+ }
291
+
292
+ if (empty($script['localizeData'])) {
293
+ continue;
294
+ }
295
+
296
+ $localizeData = $script['localizeData'];
297
+
298
+ if (!empty($localizeData[0])) {
299
+ foreach ($localizeData as $valueData) {
300
+ if (empty($valueData)) {
301
+ continue;
302
+
303
+ }
304
+ if (version_compare($wp_version, '4.5', '>')){
305
+ /* after wp 4.5 version */
306
+ ScriptsIncluder::addInlineScripts($valueData['handle'], 'var '.$valueData['name'].' = ' .json_encode($valueData['data']).';');
307
+ } else {
308
+ /* since wp 4.5 version */
309
+ ScriptsIncluder::localizeScript($valueData['handle'], $valueData['name'], $valueData['data']);
310
+ }
311
+
312
+ }
313
+ }
314
+ }
315
+ }
316
+
317
+ private function includeStyles()
318
+ {
319
+ global $post;
320
+ $styles = array();
321
+ $popups = $this->getLoadablePopups();
322
+ $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
323
+
324
+ if (!$registeredPlugins) {
325
+ return;
326
+ }
327
+ $registeredPlugins = json_decode($registeredPlugins, true);
328
+
329
+ if (empty($registeredPlugins)) {
330
+ return;
331
+ }
332
+
333
+ foreach ($registeredPlugins as $pluginName => $pluginData) {
334
+
335
+ if (!is_plugin_active($pluginName)) {
336
+ continue;
337
+ }
338
+
339
+ if (empty($pluginData['classPath']) || empty($pluginData['className'])) {
340
+ continue;
341
+ }
342
+
343
+ $classPath = $pluginData['classPath'];
344
+ $classPath = SG_POPUP_PLUGIN_PATH.$classPath;
345
+
346
+ if (!file_exists($classPath)) {
347
+ continue;
348
+ }
349
+
350
+ require_once($classPath);
351
+
352
+ $classObj = new $pluginData['className']();
353
+
354
+ if (!$classObj instanceof \SgpbIPopupExtension) {
355
+ continue;
356
+ }
357
+
358
+ $scriptData = $classObj->getFrontendStyles(
359
+ $post , array(
360
+ 'popups' => $popups
361
+ )
362
+ );
363
+
364
+ $styles[] = $scriptData;
365
+ }
366
+
367
+ if (empty($styles)) {
368
+ return;
369
+ }
370
+ if ($this->getIsAjax()){
371
+ $this->scriptsAndStylesForAjax['styles'] = $styles;
372
+ }
373
+ foreach ($styles as $style) {
374
+
375
+ if (empty($style['cssFiles'])) {
376
+ continue;
377
+ }
378
+
379
+ foreach ($style['cssFiles'] as $cssFile) {
380
+
381
+ if (empty($cssFile['folderUrl'])) {
382
+ ScriptsIncluder::enqueueStyle($cssFile['filename']);
383
+ continue;
384
+ }
385
+
386
+ $dirUrl = $cssFile['folderUrl'];
387
+ $dep = (!empty($cssFile['dep'])) ? $cssFile['dep'] : '';
388
+ $ver = (!empty($cssFile['ver'])) ? $cssFile['ver'] : '';
389
+ $inFooter = (!empty($cssFile['inFooter'])) ? $cssFile['inFooter'] : '';
390
+
391
+ ScriptsIncluder::registerStyle($cssFile['filename'], array(
392
+ 'dirUrl' => $dirUrl,
393
+ 'dep' => $dep,
394
+ 'ver' => $ver,
395
+ 'inFooter' => $inFooter
396
+ )
397
+ );
398
+ ScriptsIncluder::enqueueStyle($cssFile['filename']);
399
+ }
400
+ }
401
+ }
402
+
403
+ public function getScriptsAndStylesForAjax() {
404
+ return $this->scriptsAndStylesForAjax;
405
+ }
406
+ }
com/classes/Style.php CHANGED
@@ -1,120 +1,120 @@
1
- <?php
2
- namespace sgpb;
3
- /**
4
- * Popup Builder Style
5
- *
6
- * @since 2.5.6
7
- *
8
- * detect and include popup styles to the admin pages
9
- *
10
- */
11
- class Style
12
- {
13
- public static function enqueueStyles($hook)
14
- {
15
- global $post;
16
- global $post_type;
17
- $pageName = $hook;
18
- $styles = array();
19
- $popupType = AdminHelper::getCurrentPopupType();
20
- $currentPostType = AdminHelper::getCurrentPostType();
21
-
22
- if($hook == SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_POST_TYPE) {
23
- $pageName = 'popupType';
24
- }
25
- else if (($hook == 'post-new.php' || $hook == 'post.php') && $currentPostType == SG_POPUP_POST_TYPE) {
26
- $pageName = 'editpage';
27
- }
28
- else if ($hook == 'edit.php' && !empty($currentPostType) && $currentPostType == SG_POPUP_POST_TYPE) {
29
- $pageName = 'popupspage';
30
- }
31
- else if ($hook == SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_SUBSCRIBERS_PAGE) {
32
- $pageName = SG_POPUP_SUBSCRIBERS_PAGE;
33
- }
34
-
35
- $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
36
-
37
- if (!$registeredPlugins) {
38
- return;
39
- }
40
-
41
- $registeredPlugins = json_decode($registeredPlugins, true);
42
-
43
- if (empty($registeredPlugins)) {
44
- return;
45
- }
46
-
47
- foreach ($registeredPlugins as $pluginName => $pluginData) {
48
-
49
- if (!is_plugin_active($pluginName)) {
50
- continue;
51
- }
52
-
53
- if (empty($pluginData['classPath']) || empty($pluginData['className'])) {
54
- continue;
55
- }
56
-
57
- $classPath = $pluginData['classPath'];
58
- $classPath = SG_POPUP_PLUGIN_PATH.$classPath;
59
-
60
- if (!file_exists($classPath)) {
61
- continue;
62
- }
63
- require_once($classPath);
64
-
65
- if (!class_exists($pluginData['className'])) {
66
- continue;
67
- }
68
-
69
- $classObj = new $pluginData['className']();
70
-
71
- if (!$classObj instanceof \SgpbIPopupExtension) {
72
- continue;
73
- }
74
- $args = array(
75
- 'popupType' => $popupType
76
- );
77
- $styleData = $classObj->getStyles($pageName , $args);
78
- if (!empty($styleData['cssFiles'])) {
79
- $styles[] = $styleData;
80
- }
81
- }
82
-
83
- if (empty($styles)) {
84
- return;
85
- }
86
-
87
- foreach ($styles as $style) {
88
-
89
- if (empty($style['cssFiles'])) {
90
- continue;
91
- }
92
-
93
- foreach ($style['cssFiles'] as $cssFile) {
94
-
95
- if (empty($cssFile['folderUrl'])) {
96
- ScriptsIncluder::enqueueStyle($cssFile['filename']);
97
- continue;
98
- }
99
-
100
- $dirUrl = $cssFile['folderUrl'];
101
- $dep = (!empty($cssFile['dep'])) ? $cssFile['dep'] : '';
102
- $ver = (!empty($cssFile['ver'])) ? $cssFile['ver'] : '';
103
- $inFooter = (!empty($cssFile['inFooter'])) ? $cssFile['inFooter'] : '';;
104
-
105
- ScriptsIncluder::registerStyle($cssFile['filename'], array(
106
- 'dirUrl'=> $dirUrl,
107
- 'dep' => $dep,
108
- 'ver' => $ver,
109
- 'inFooter' => $inFooter
110
- )
111
- );
112
- ScriptsIncluder::enqueueStyle($cssFile['filename']);
113
- }
114
- }
115
-
116
- if ($hook == SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_POST_TYPE) {
117
- ScriptsIncluder::enqueueStyle('popupAdminStyles.css');
118
- }
119
- }
120
- }
1
+ <?php
2
+ namespace sgpb;
3
+ /**
4
+ * Popup Builder Style
5
+ *
6
+ * @since 2.5.6
7
+ *
8
+ * detect and include popup styles to the admin pages
9
+ *
10
+ */
11
+ class Style
12
+ {
13
+ public static function enqueueStyles($hook)
14
+ {
15
+ global $post;
16
+ global $post_type;
17
+ $pageName = $hook;
18
+ $styles = array();
19
+ $popupType = AdminHelper::getCurrentPopupType();
20
+ $currentPostType = AdminHelper::getCurrentPostType();
21
+
22
+ if($hook == SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_POST_TYPE) {
23
+ $pageName = 'popupType';
24
+ }
25
+ else if (($hook == 'post-new.php' || $hook == 'post.php') && $currentPostType == SG_POPUP_POST_TYPE) {
26
+ $pageName = 'editpage';
27
+ }
28
+ else if ($hook == 'edit.php' && !empty($currentPostType) && $currentPostType == SG_POPUP_POST_TYPE) {
29
+ $pageName = 'popupspage';
30
+ }
31
+ else if ($hook == SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_SUBSCRIBERS_PAGE) {
32
+ $pageName = SG_POPUP_SUBSCRIBERS_PAGE;
33
+ }
34
+
35
+ $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
36
+
37
+ if (!$registeredPlugins) {
38
+ return;
39
+ }
40
+
41
+ $registeredPlugins = json_decode($registeredPlugins, true);
42
+
43
+ if (empty($registeredPlugins)) {
44
+ return;
45
+ }
46
+
47
+ foreach ($registeredPlugins as $pluginName => $pluginData) {
48
+
49
+ if (!is_plugin_active($pluginName)) {
50
+ continue;
51
+ }
52
+
53
+ if (empty($pluginData['classPath']) || empty($pluginData['className'])) {
54
+ continue;
55
+ }
56
+
57
+ $classPath = $pluginData['classPath'];
58
+ $classPath = SG_POPUP_PLUGIN_PATH.$classPath;
59
+
60
+ if (!file_exists($classPath)) {
61
+ continue;
62
+ }
63
+ require_once($classPath);
64
+
65
+ if (!class_exists($pluginData['className'])) {
66
+ continue;
67
+ }
68
+
69
+ $classObj = new $pluginData['className']();
70
+
71
+ if (!$classObj instanceof \SgpbIPopupExtension) {
72
+ continue;
73
+ }
74
+ $args = array(
75
+ 'popupType' => $popupType
76
+ );
77
+ $styleData = $classObj->getStyles($pageName , $args);
78
+ if (!empty($styleData['cssFiles'])) {
79
+ $styles[] = $styleData;
80
+ }
81
+ }
82
+
83
+ if (empty($styles)) {
84
+ return;
85
+ }
86
+
87
+ foreach ($styles as $style) {
88
+
89
+ if (empty($style['cssFiles'])) {
90
+ continue;
91
+ }
92
+
93
+ foreach ($style['cssFiles'] as $cssFile) {
94
+
95
+ if (empty($cssFile['folderUrl'])) {
96
+ ScriptsIncluder::enqueueStyle($cssFile['filename']);
97
+ continue;
98
+ }
99
+
100
+ $dirUrl = $cssFile['folderUrl'];
101
+ $dep = (!empty($cssFile['dep'])) ? $cssFile['dep'] : '';
102
+ $ver = (!empty($cssFile['ver'])) ? $cssFile['ver'] : '';
103
+ $inFooter = (!empty($cssFile['inFooter'])) ? $cssFile['inFooter'] : '';;
104
+
105
+ ScriptsIncluder::registerStyle($cssFile['filename'], array(
106
+ 'dirUrl'=> $dirUrl,
107
+ 'dep' => $dep,
108
+ 'ver' => $ver,
109
+ 'inFooter' => $inFooter
110
+ )
111
+ );
112
+ ScriptsIncluder::enqueueStyle($cssFile['filename']);
113
+ }
114
+ }
115
+
116
+ if ($hook == SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_POST_TYPE) {
117
+ ScriptsIncluder::enqueueStyle('popupAdminStyles.css');
118
+ }
119
+ }
120
+ }
com/classes/Updates.php CHANGED
@@ -1,181 +1,181 @@
1
- <?php
2
- namespace sgpb;
3
-
4
- /* TODO change the domain name before production */
5
-
6
- class Updates
7
- {
8
- private $licenses = array();
9
- private $licenseClass;
10
-
11
- public function setLicenses($licenses)
12
- {
13
- $this->licenses = $licenses;
14
- }
15
-
16
- public function getLicenses()
17
- {
18
- return $this->licenses;
19
- }
20
-
21
- public function __construct()
22
- {
23
- $this->licenseClass = new License();
24
- $this->init();
25
- }
26
-
27
- private function init()
28
- {
29
- $this->setLicenses($this->licenseClass->getLicenses());
30
- $licenses = $this->getLicenses();
31
-
32
- if (empty($licenses)) {
33
- return false;
34
- }
35
- add_action('admin_menu', array($this, 'menu'), 22);
36
- add_action('admin_init', array($this, 'sgpbActivateLicense'));
37
- add_action('admin_notices', array($this, 'sgpbAdminNotices'));
38
-
39
- return true;
40
- }
41
-
42
- public function menu()
43
- {
44
- add_submenu_page('edit.php?post_type='.SG_POPUP_POST_TYPE, __('License', SG_POPUP_TEXT_DOMAIN), __('License', SG_POPUP_TEXT_DOMAIN), 'sgpb_manage_options', SGPB_POPUP_LICENSE, array($this, 'pluginLicense'));
45
- }
46
-
47
- public function sanitizeLicense($new)
48
- {
49
- $old = get_option('sgpb-license-key-'.$this->licenseKey);
50
-
51
- if ($old && $old != $new) {
52
- delete_option('sgpb-license-status-'.$this->licenseKey); // new license has been entered, so must reactivate
53
- }
54
- update_option('sgpb-license-key-'.$this->licenseKey, $new);
55
-
56
- return $new;
57
- }
58
-
59
- public function pluginLicense()
60
- {
61
- require_once(SG_POPUP_VIEWS_PATH.'license.php');
62
- }
63
-
64
- private function activateLicense($license, $itemId)
65
- {
66
- $params = array(
67
- 'woo_sl_action' => 'activate',
68
- 'licence_key' => $license,
69
- 'product_unique_id' => $itemId,
70
- 'domain' => home_url()
71
- );
72
-
73
- $requestUri = 'https://popup-builder.com/index.php?'.http_build_query($params);
74
-
75
- return wp_remote_get($requestUri);
76
- }
77
-
78
- private function deactivateLicense($license, $itemId)
79
- {
80
- $params = array(
81
- 'woo_sl_action' => 'deactivate',
82
- 'licence_key' => $license,
83
- 'product_unique_id' => $itemId,
84
- 'domain' => home_url()
85
- );
86
-
87
- $requestUri = 'https://popup-builder.com/index.php?'.http_build_query($params);
88
-
89
- return wp_remote_get($requestUri);
90
- }
91
-
92
- public function sgpbActivateLicense()
93
- {
94
- $licenses = $this->getLicenses();
95
-
96
- foreach ($licenses as $license) {
97
- $key = @$license['key'];
98
- $itemId = @$license['itemId'];
99
- $this->licenseKey = $key;
100
-
101
- if (isset($_POST['sgpb-license-key-'.$key])) {
102
- $this->sanitizeLicense($_POST['sgpb-license-key-'.$key]);
103
- }
104
-
105
- // listen for our activate button to be clicked
106
- if (isset($_POST['sgpb-license-activate-'.$key])) {
107
- // run a quick security check
108
- if (!check_admin_referer('sgpb_nonce', 'sgpb_nonce')) {
109
- return; // get out if we didn't click the Activate button
110
- }
111
- // retrieve the license from the database
112
- $license = trim(get_option('sgpb-license-key-'.$key));
113
- $data = $this->activateLicense($license, $itemId);
114
- if (!is_wp_error($data) && $data['response']['code'] == 200) {
115
- $dataBody = json_decode($data['body']);
116
- if (isset($dataBody[0]->status)) {
117
- if ($dataBody[0]->status == 'success' && ($dataBody[0]->status_code == 's100' || $dataBody[0]->status_code == 's101')) {
118
- update_option('sgpb-license-status-'.$key, 'valid');
119
- $hasInactiveExtensions = AdminHelper::hasInactiveExtensions();
120
-
121
- if (empty($hasInactiveExtensions)) {
122
- delete_option('SGPB_INACTIVE_EXTENSIONS', 'inactive');
123
- }
124
-
125
- wp_redirect(admin_url('edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SGPB_POPUP_LICENSE));
126
- exit();
127
- }
128
- }
129
- }
130
-
131
- $message = __('An error occurred, please try again.', SG_POPUP_TEXT_DOMAIN);
132
- $baseUrl = admin_url('edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SGPB_POPUP_LICENSE);
133
- $redirect = add_query_arg(array('sl_activation' => 'false', 'message' => urlencode($message)), $baseUrl);
134
- wp_redirect($redirect);
135
- exit();
136
- }
137
-
138
- if (isset($_POST['sgpb-license-deactivate'.$key])) {
139
- $license = trim(get_option('sgpb-license-key-'.$key));
140
- // data to send in our API request
141
- $response = $this->deactivateLicense($license, $itemId);
142
- if (is_wp_error($response) || 200 !== wp_remote_retrieve_response_code($response)) {
143
- $message = __('An error occurred, please try again.', SG_POPUP_TEXT_DOMAIN);
144
- $baseUrl = admin_url('edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SGPB_POPUP_LICENSE);
145
- $redirect = add_query_arg(array('message' => urlencode($message)), $baseUrl);
146
- wp_redirect($redirect);
147
- exit();
148
- }
149
- else {
150
- $status = false;
151
- $licenseData = json_decode(wp_remote_retrieve_body($response));
152
- if (isset($licenseData->success)) {
153
- $status = $licenseData->success;
154
- }
155
- update_option('sgpb-license-status-'.$key, $status);
156
- update_option('SGPB_INACTIVE_EXTENSIONS', 'inactive');
157
- wp_redirect(admin_url('edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SGPB_POPUP_LICENSE));
158
- exit();
159
- }
160
- }
161
- }
162
- }
163
-
164
- public function sgpbAdminNotices()
165
- {
166
- if (isset($_GET['sl_activation']) && !empty($_GET['message'])) {
167
- switch ($_GET['sl_activation']) {
168
- case 'false':
169
- $message = urldecode($_GET['message']);
170
- ?>
171
- <div class="error">
172
- <h3><?php echo $message; ?></h3>
173
- </div>
174
- <?php
175
- break;
176
- case 'true':
177
- break;
178
- }
179
- }
180
- }
181
- }
1
+ <?php
2
+ namespace sgpb;
3
+
4
+ /* TODO change the domain name before production */
5
+
6
+ class Updates
7
+ {
8
+ private $licenses = array();
9
+ private $licenseClass;
10
+
11
+ public function setLicenses($licenses)
12
+ {
13
+ $this->licenses = $licenses;
14
+ }
15
+
16
+ public function getLicenses()
17
+ {
18
+ return $this->licenses;
19
+ }
20
+
21
+ public function __construct()
22
+ {
23
+ $this->licenseClass = new License();
24
+ $this->init();
25
+ }
26
+
27
+ private function init()
28
+ {
29
+ $this->setLicenses($this->licenseClass->getLicenses());
30
+ $licenses = $this->getLicenses();
31
+
32
+ if (empty($licenses)) {
33
+ return false;
34
+ }
35
+ add_action('admin_menu', array($this, 'menu'), 22);
36
+ add_action('admin_init', array($this, 'sgpbActivateLicense'));
37
+ add_action('admin_notices', array($this, 'sgpbAdminNotices'));
38
+
39
+ return true;
40
+ }
41
+
42
+ public function menu()
43
+ {
44
+ add_submenu_page('edit.php?post_type='.SG_POPUP_POST_TYPE, __('License', SG_POPUP_TEXT_DOMAIN), __('License', SG_POPUP_TEXT_DOMAIN), 'sgpb_manage_options', SGPB_POPUP_LICENSE, array($this, 'pluginLicense'));
45
+ }
46
+
47
+ public function sanitizeLicense($new)
48
+ {
49
+ $old = get_option('sgpb-license-key-'.$this->licenseKey);
50
+
51
+ if ($old && $old != $new) {
52
+ delete_option('sgpb-license-status-'.$this->licenseKey); // new license has been entered, so must reactivate
53
+ }
54
+ update_option('sgpb-license-key-'.$this->licenseKey, $new);
55
+
56
+ return $new;
57
+ }
58
+
59
+ public function pluginLicense()
60
+ {
61
+ require_once(SG_POPUP_VIEWS_PATH.'license.php');
62
+ }
63
+
64
+ private function activateLicense($license, $itemId)
65
+ {
66
+ $params = array(
67
+ 'woo_sl_action' => 'activate',
68
+ 'licence_key' => $license,
69
+ 'product_unique_id' => $itemId,
70
+ 'domain' => home_url()
71
+ );
72
+
73
+ $requestUri = 'https://popup-builder.com/index.php?'.http_build_query($params);
74
+
75
+ return wp_remote_get($requestUri);
76
+ }
77
+
78
+ private function deactivateLicense($license, $itemId)
79
+ {
80
+ $params = array(
81
+ 'woo_sl_action' => 'deactivate',
82
+ 'licence_key' => $license,
83
+ 'product_unique_id' => $itemId,
84
+ 'domain' => home_url()
85
+ );
86
+
87
+ $requestUri = 'https://popup-builder.com/index.php?'.http_build_query($params);
88
+
89
+ return wp_remote_get($requestUri);
90
+ }
91
+
92
+ public function sgpbActivateLicense()
93
+ {
94
+ $licenses = $this->getLicenses();
95
+
96
+ foreach ($licenses as $license) {
97
+ $key = @$license['key'];
98
+ $itemId = @$license['itemId'];
99
+ $this->licenseKey = $key;
100
+
101
+ if (isset($_POST['sgpb-license-key-'.$key])) {
102
+ $this->sanitizeLicense($_POST['sgpb-license-key-'.$key]);
103
+ }
104
+
105
+ // listen for our activate button to be clicked
106
+ if (isset($_POST['sgpb-license-activate-'.$key])) {
107
+ // run a quick security check
108
+ if (!check_admin_referer('sgpb_nonce', 'sgpb_nonce')) {
109
+ return; // get out if we didn't click the Activate button
110
+ }
111
+ // retrieve the license from the database
112
+ $license = trim(get_option('sgpb-license-key-'.$key));
113
+ $data = $this->activateLicense($license, $itemId);
114
+ if (!is_wp_error($data) && $data['response']['code'] == 200) {
115
+ $dataBody = json_decode($data['body']);
116
+ if (isset($dataBody[0]->status)) {
117
+ if ($dataBody[0]->status == 'success' && ($dataBody[0]->status_code == 's100' || $dataBody[0]->status_code == 's101')) {
118
+ update_option('sgpb-license-status-'.$key, 'valid');
119
+ $hasInactiveExtensions = AdminHelper::hasInactiveExtensions();
120
+
121
+ if (empty($hasInactiveExtensions)) {
122
+ delete_option('SGPB_INACTIVE_EXTENSIONS', 'inactive');
123
+ }
124
+
125
+ wp_redirect(admin_url('edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SGPB_POPUP_LICENSE));
126
+ exit();
127
+ }
128
+ }
129
+ }
130
+
131
+ $message = __('An error occurred, please try again.', SG_POPUP_TEXT_DOMAIN);
132
+ $baseUrl = admin_url('edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SGPB_POPUP_LICENSE);
133
+ $redirect = add_query_arg(array('sl_activation' => 'false', 'message' => urlencode($message)), $baseUrl);
134
+ wp_redirect($redirect);
135
+ exit();
136
+ }
137
+
138
+ if (isset($_POST['sgpb-license-deactivate'.$key])) {
139
+ $license = trim(get_option('sgpb-license-key-'.$key));
140
+ // data to send in our API request
141
+ $response = $this->deactivateLicense($license, $itemId);
142
+ if (is_wp_error($response) || 200 !== wp_remote_retrieve_response_code($response)) {
143
+ $message = __('An error occurred, please try again.', SG_POPUP_TEXT_DOMAIN);
144
+ $baseUrl = admin_url('edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SGPB_POPUP_LICENSE);
145
+ $redirect = add_query_arg(array('message' => urlencode($message)), $baseUrl);
146
+ wp_redirect($redirect);
147
+ exit();
148
+ }
149
+ else {
150
+ $status = false;
151
+ $licenseData = json_decode(wp_remote_retrieve_body($response));
152
+ if (isset($licenseData->success)) {
153
+ $status = $licenseData->success;
154
+ }
155
+ update_option('sgpb-license-status-'.$key, $status);
156
+ update_option('SGPB_INACTIVE_EXTENSIONS', 'inactive');
157
+ wp_redirect(admin_url('edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SGPB_POPUP_LICENSE));
158
+ exit();
159
+ }
160
+ }
161
+ }
162
+ }
163
+
164
+ public function sgpbAdminNotices()
165
+ {
166
+ if (isset($_GET['sl_activation']) && !empty($_GET['message'])) {
167
+ switch ($_GET['sl_activation']) {
168
+ case 'false':
169
+ $message = urldecode($_GET['message']);
170
+ ?>
171
+ <div class="error">
172
+ <h3><?php echo $message; ?></h3>
173
+ </div>
174
+ <?php
175
+ break;
176
+ case 'true':
177
+ break;
178
+ }
179
+ }
180
+ }
181
+ }
com/classes/_detection/SgpbPopupVersionDetection.php CHANGED
@@ -1,136 +1,136 @@
1
- <?php
2
-
3
- namespace sgpb;
4
-
5
-
6
- class SgpbPopupVersionDetection
7
- {
8
- public static function compareVersions()
9
- {
10
- if(!self::checkIfIsOnPopupPage()) // check if user is in popup builder page (only admin pages)
11
- {
12
- return [];
13
- }
14
- wp_update_plugins(); // Check for plugin updates.
15
- $plugin_info = get_site_transient("update_plugins"); // get plugins to update
16
- $registeredPlugins = AdminHelper::getAllExtensions(); // getting active PopupBuilder plugins
17
- $hasOldPlugin = [];
18
-
19
- foreach($registeredPlugins["active"] as $plugin) {
20
- $pluginData = get_plugin_data(WP_PLUGIN_DIR.'/'.$plugin["pluginKey"]); // getting plugin registered data
21
- $plugin["name"] = $pluginData["Name"]; // setting name in plugin array! this is for frontend to show full name
22
- $plugin_slug = null;
23
- if ($plugin["pluginKey"] === 'popupbuilder-edd/PopupBuilderEdd.php') {
24
- if (empty($plugin_info->response[$plugin["pluginKey"]])) {
25
- $plugin["pluginKey"] = str_replace("\\","/",WP_PLUGIN_DIR).'/'.$plugin["pluginKey"];
26
- }
27
- }
28
- if(isset($plugin_info->response[$plugin["pluginKey"]])) {
29
- $plugin_slug = $plugin_info->response[$plugin["pluginKey"]]->slug; // getting current slug generated by wordpress without slug will not update the plugin
30
- }
31
- /* this logic will work only < stable versions */
32
- if(version_compare($plugin["stable_version"], $pluginData["Version"], ">")) {
33
- $hasLicense = self::getLicenseOfPlugin($plugin);
34
- $hasOldPlugin[] = [
35
- "plugin" => $plugin,
36
- "message" => self::pluginUpdateMessage("extensions"),
37
- "license" => $hasLicense,
38
- "slug" => $plugin_slug,
39
- ];
40
- }
41
- }
42
- $filteredByLicense = self::pluginUpdateMessage(self::filterPluginsByLicense($hasOldPlugin));
43
-
44
- return $filteredByLicense;
45
- }
46
-
47
- private static function pluginUpdateMessage($filteredByLicense)
48
- {
49
- if(empty($filteredByLicense)) {
50
- return [];
51
- }
52
- $headerMessage = empty($filteredByLicense["autoUpdate"]) ? 'You use major updated version of Popup Builder' : 'Updating active Popup Builder extensions';
53
- $adminLicenseUrl = admin_url("edit.php?post_type=".SG_POPUP_POST_TYPE."&page=".SGPB_POPUP_LICENSE);
54
-
55
- $modalData = [
56
- "header" => '<h3 class="sgpb-modal-detection-header">'.$headerMessage.'</h3>',
57
- "logo" => SG_POPUP_IMG_URL.'sgpbLogo.png',
58
- "manualMessage" => '<p class="sgpb-text-center">As you don’t have updates for the extensions listed below, you will have issues using the plugin.
59
- <br>Please do the following in order to use the plugin properly:</p>
60
- <p class="sgpb-margin-top-10 sgpb-text-center" style="font-style: italic">If you don’t have an active license, purchase a new one.</p>
61
- <p class="sgpb-text-center">OR</p>
62
- <p class="sgpb-text-center" style="font-style: italic">If you have an active license, add its license code <a href="'.$adminLicenseUrl.'">here</a>.</p>',
63
- "footerMessage" => '<p class="sgpb-modal-footer-message sgpb-margin-top-30 sgpb-text-center" style="font-style: italic">You can download the previous version of Popup Builder Plugin from <a href="https://downloads.wordpress.org/plugin/popup-builder.3.83.zip">here</a>.</p>'
64
- ];
65
-
66
- return array(
67
- "modalData" => $modalData,
68
- "autoUpdate" => empty($filteredByLicense['autoUpdate']) ? [] : $filteredByLicense['autoUpdate'],
69
- "manualUpdate" => empty($filteredByLicense['manualUpdate']) ? [] : $filteredByLicense['manualUpdate'],
70
- );
71
- }
72
-
73
- private static function checkIfIsOnPopupPage()
74
- {
75
- if("popupbuilder_page_license" === get_current_screen()->id) {
76
- return false;
77
- }
78
- switch(get_current_screen()->post_type) {
79
- case SG_POPUP_POST_TYPE:
80
- case "sgpbtemplate":
81
- case "sgpbautoresponder":
82
- return true;
83
- default:
84
- return false;
85
- }
86
- }
87
-
88
- private static function getLicenseOfPlugin($oldPlugins)
89
- {
90
-
91
- $licenseClass = new License();
92
- $licenses = $licenseClass->getLicenses();
93
-
94
- foreach($licenses as $license) {
95
- if(false === array_search($license['file'], $oldPlugins) && 'POPUP_EDD' !== $license['key']) {
96
- continue;
97
- }
98
- if ('POPUP_EDD' !== $license['key'] && false === array_search(str_replace("\\","/",$license['file']), $oldPlugins)) {
99
- continue;
100
- }
101
-
102
- $key = @$license["key"];
103
- $licenseKey = trim(get_option("sgpb-license-key-".$key));
104
- $status = get_option("sgpb-license-status-".$key);
105
- $license["option_key"] = $licenseKey;
106
- $license["option_status"] = $status;
107
- if($status == false || $status != "valid") {
108
- return false;
109
- }
110
-
111
- return $license;
112
- }
113
-
114
- return false;
115
- }
116
-
117
- private static function filterPluginsByLicense($extensions)
118
- {
119
- if(empty($extensions)) {
120
- return [];
121
- }
122
- $extensionsToUpdateNow = array_filter($extensions, function($extension){
123
- return $extension["license"] !== false;
124
- });
125
- $extensionsToUpdate = array_filter($extensions, function($extension){
126
- return $extension["license"] == false;
127
- });
128
-
129
- wp_enqueue_script("updates");
130
-
131
- return [
132
- "autoUpdate" => array_values($extensionsToUpdateNow),
133
- "manualUpdate" => array_values($extensionsToUpdate)
134
- ];
135
- }
136
- }
1
+ <?php
2
+
3
+ namespace sgpb;
4
+
5
+
6
+ class SgpbPopupVersionDetection
7
+ {
8
+ public static function compareVersions()
9
+ {
10
+ if(!self::checkIfIsOnPopupPage()) // check if user is in popup builder page (only admin pages)
11
+ {
12
+ return [];
13
+ }
14
+ wp_update_plugins(); // Check for plugin updates.
15
+ $plugin_info = get_site_transient("update_plugins"); // get plugins to update
16
+ $registeredPlugins = AdminHelper::getAllExtensions(); // getting active PopupBuilder plugins
17
+ $hasOldPlugin = [];
18
+
19
+ foreach($registeredPlugins["active"] as $plugin) {
20
+ $pluginData = get_plugin_data(WP_PLUGIN_DIR.'/'.$plugin["pluginKey"]); // getting plugin registered data
21
+ $plugin["name"] = $pluginData["Name"]; // setting name in plugin array! this is for frontend to show full name
22
+ $plugin_slug = null;
23
+ if ($plugin["pluginKey"] === 'popupbuilder-edd/PopupBuilderEdd.php') {
24
+ if (empty($plugin_info->response[$plugin["pluginKey"]])) {
25
+ $plugin["pluginKey"] = str_replace("\\","/",WP_PLUGIN_DIR).'/'.$plugin["pluginKey"];
26
+ }
27
+ }
28
+ if(isset($plugin_info->response[$plugin["pluginKey"]])) {
29
+ $plugin_slug = $plugin_info->response[$plugin["pluginKey"]]->slug; // getting current slug generated by wordpress without slug will not update the plugin
30
+ }
31
+ /* this logic will work only < stable versions */
32
+ if(version_compare($plugin["stable_version"], $pluginData["Version"], ">")) {
33
+ $hasLicense = self::getLicenseOfPlugin($plugin);
34
+ $hasOldPlugin[] = [
35
+ "plugin" => $plugin,
36
+ "message" => self::pluginUpdateMessage("extensions"),
37
+ "license" => $hasLicense,
38
+ "slug" => $plugin_slug,
39
+ ];
40
+ }
41
+ }
42
+ $filteredByLicense = self::pluginUpdateMessage(self::filterPluginsByLicense($hasOldPlugin));
43
+
44
+ return $filteredByLicense;
45
+ }
46
+
47
+ private static function pluginUpdateMessage($filteredByLicense)
48
+ {
49
+ if(empty($filteredByLicense)) {
50
+ return [];
51
+ }
52
+ $headerMessage = empty($filteredByLicense["autoUpdate"]) ? 'You use major updated version of Popup Builder' : 'Updating active Popup Builder extensions';
53
+ $adminLicenseUrl = admin_url("edit.php?post_type=".SG_POPUP_POST_TYPE."&page=".SGPB_POPUP_LICENSE);
54
+
55
+ $modalData = [
56
+ "header" => '<h3 class="sgpb-modal-detection-header">'.$headerMessage.'</h3>',
57
+ "logo" => SG_POPUP_IMG_URL.'sgpbLogo.png',
58
+ "manualMessage" => '<p class="sgpb-text-center">As you don’t have updates for the extensions listed below, you will have issues using the plugin.
59
+ <br>Please do the following in order to use the plugin properly:</p>
60
+ <p class="sgpb-margin-top-10 sgpb-text-center" style="font-style: italic">If you don’t have an active license, purchase a new one.</p>
61
+ <p class="sgpb-text-center">OR</p>
62
+ <p class="sgpb-text-center" style="font-style: italic">If you have an active license, add its license code <a href="'.$adminLicenseUrl.'">here</a>.</p>',
63
+ "footerMessage" => '<p class="sgpb-modal-footer-message sgpb-margin-top-30 sgpb-text-center" style="font-style: italic">You can download the previous version of Popup Builder Plugin from <a href="https://downloads.wordpress.org/plugin/popup-builder.3.83.zip">here</a>.</p>'
64
+ ];
65
+
66
+ return array(
67
+ "modalData" => $modalData,
68
+ "autoUpdate" => empty($filteredByLicense['autoUpdate']) ? [] : $filteredByLicense['autoUpdate'],
69
+ "manualUpdate" => empty($filteredByLicense['manualUpdate']) ? [] : $filteredByLicense['manualUpdate'],
70
+ );
71
+ }
72
+
73
+ private static function checkIfIsOnPopupPage()
74
+ {
75
+ if("popupbuilder_page_license" === get_current_screen()->id) {
76
+ return false;
77
+ }
78
+ switch(get_current_screen()->post_type) {
79
+ case SG_POPUP_POST_TYPE:
80
+ case "sgpbtemplate":
81
+ case "sgpbautoresponder":
82
+ return true;
83
+ default:
84
+ return false;
85
+ }
86
+ }
87
+
88
+ private static function getLicenseOfPlugin($oldPlugins)
89
+ {
90
+
91
+ $licenseClass = new License();
92
+ $licenses = $licenseClass->getLicenses();
93
+
94
+ foreach($licenses as $license) {
95
+ if(false === array_search($license['file'], $oldPlugins) && 'POPUP_EDD' !== $license['key']) {
96
+ continue;
97
+ }
98
+ if ('POPUP_EDD' !== $license['key'] && false === array_search(str_replace("\\","/",$license['file']), $oldPlugins)) {
99
+ continue;
100
+ }
101
+
102
+ $key = @$license["key"];
103
+ $licenseKey = trim(get_option("sgpb-license-key-".$key));
104
+ $status = get_option("sgpb-license-status-".$key);
105
+ $license["option_key"] = $licenseKey;
106
+ $license["option_status"] = $status;
107
+ if($status == false || $status != "valid") {
108
+ return false;
109
+ }
110
+
111
+ return $license;
112
+ }
113
+
114
+ return false;
115
+ }
116
+
117
+ private static function filterPluginsByLicense($extensions)
118
+ {
119
+ if(empty($extensions)) {
120
+ return [];
121
+ }
122
+ $extensionsToUpdateNow = array_filter($extensions, function($extension){
123
+ return $extension["license"] !== false;
124
+ });
125
+ $extensionsToUpdate = array_filter($extensions, function($extension){
126
+ return $extension["license"] == false;
127
+ });
128
+
129
+ wp_enqueue_script("updates");
130
+
131
+ return [
132
+ "autoUpdate" => array_values($extensionsToUpdateNow),
133
+ "manualUpdate" => array_values($extensionsToUpdate)
134
+ ];
135
+ }
136
+ }
com/classes/components/Menu.php CHANGED
@@ -1,232 +1,232 @@
1
- <?php
2
-
3
- namespace sgpb;
4
-
5
- /**
6
- * Class SGPBMenu
7
- * @package sgpb
8
- */
9
- class SGPBMenu
10
- {
11
- /**
12
- * Singleton variable to save menu locations.
13
- * @var
14
- */
15
- public static $navMenuLocations;
16
-
17
- /**
18
- * Singleton variable to save menu items on which popup is set.
19
- * @var
20
- */
21
- public static $navMenuItems;
22
-
23
- /**
24
- * Menu constructor.
25
- */
26
- public function __construct()
27
- {
28
- $this->init();
29
- }
30
-
31
- /**
32
- * Initialize actions and filters.
33
- */
34
- public function init()
35
- {
36
- add_action('wp_nav_menu_item_custom_fields', array($this, 'fields'), 10, 4);
37
- add_action('wp_update_nav_menu_item', array($this, 'save'), 10, 2);
38
-
39
- add_filter('nav_menu_css_class', array($this, 'addPopupTriggeringClass'), 10, 2);
40
- add_filter('wp_setup_nav_menu_item', array($this, 'addCustomNavFields'));
41
- add_filter('sgpbLoadablePopups', array($this, 'addPopupToLoad'));
42
- }
43
-
44
- /**
45
- * @param $classes
46
- * @param $menuItem
47
- * @return mixed
48
- */
49
- public function addPopupTriggeringClass($classes, $menuItem)
50
- {
51
- $popupId = $menuItem->sgpbPopupId;
52
- if ($popupId && !in_array('sg-popup-id-'.$popupId, $classes)) {
53
- array_push($classes, 'sg-popup-id-'.$popupId);
54
- }
55
-
56
- return $classes;
57
- }
58
-
59
- /**
60
- * @param $popups
61
- * @return mixed
62
- */
63
- public function addPopupToLoad($popups) {
64
- $registeredMenus = $this->getNavMenuLocations();
65
- /* Will only return menu items on which popup is set */
66
- $menuItems = $this->getNavMenuItemsWithPopup($registeredMenus);
67
-
68
- foreach ($menuItems as $menuItem) {
69
- $menuPopupId = (int)$menuItem->sgpbPopupId;
70
-
71
- /* As $menuItems contains only menu items on which popup is set
72
- we can check if the popup should load on current page or not */
73
- $popup = $this->shouldLoadPopupForMenuItem($menuPopupId, $popups);
74
- if (!$popup) {
75
- $popup = SGPopup::find($menuPopupId);
76
- if (!$popup instanceof SGPopup) continue;
77
- /* We could set param everywhere as popup was not suppose to load on current page.
78
- We could also load popup to current requested page but to avoid any confusion
79
- it will be better to use everywhere */
80
- // $popup->setTarget(array(
81
- // array('param' => 'everywhere')
82
- // ));
83
- $popups[] = $popup;
84
- }
85
-
86
- $popupOpeningEvents = $popup->getEvents();
87
-
88
- /* If the popup is setup inside the menu but there is no onclick event we will add manually */
89
- if (!$this->inMultiDimArray('click', $popupOpeningEvents)) {
90
- $popup->setEvents(array('param' => 'click', 'value' => ''));
91
- }
92
- /* if the popup is set on menu item we don't need any limitation */
93
- //$this->disablePopupLimitation($popup);
94
- }
95
-
96
- return $popups;
97
- }
98
-
99
- /**
100
- * @param $popup
101
- */
102
- private function disablePopupLimitation(&$popup)
103
- {
104
- $popupOptions = $popup->getOptions();
105
- unset($popupOptions['sgpb-show-popup-same-user']);
106
- $popup->setOptions($popupOptions);
107
- }
108
-
109
- /**
110
- * @param $item
111
- * @param $array
112
- * @return false|int
113
- */
114
- private function inMultiDimArray($item , $array){
115
- return preg_match('/"'.preg_quote($item, '/').'"/i' , json_encode($array));
116
- }
117
-
118
- /**
119
- * @param $menuPopupId
120
- * @param $popups
121
- * @return false|mixed
122
- */
123
- private function shouldLoadPopupForMenuItem($menuPopupId, &$popups) {
124
- foreach ($popups as $popup) {
125
- $popupId = $popup->getId();
126
- /* Menu item contains popup with current id and the popup is loaded */
127
- if ($menuPopupId == $popupId) {
128
- return $popup;
129
- }
130
- }
131
- return false;
132
- }
133
-
134
- /**
135
- * @param false $forceUpdate
136
- * @return array
137
- */
138
- public function getNavMenuLocations($forceUpdate = false)
139
- {
140
- if (!isset(self::$navMenuLocations) && !$forceUpdate) {
141
- self::$navMenuLocations = get_nav_menu_locations();
142
- }
143
-
144
- return isset(self::$navMenuLocations) ? self::$navMenuLocations : array();
145
- }
146
-
147
- /**
148
- * @param array $navMenuLocations
149
- * @param false $forceUpdate
150
- * @return array of menu items where popup is set
151
- */
152
- public function getNavMenuItemsWithPopup($navMenuLocations = array(), $forceUpdate = false)
153
- {
154
- if (!isset(self::$navMenuItems) && !$forceUpdate) {
155
- foreach ($navMenuLocations as $menuName => $menuId) {
156
- $menuItems = wp_get_nav_menu_items($menuId);
157
-
158
- if (!empty($menuItems)) {
159
- foreach ($menuItems as $menuItem) {
160
- $popupId = $menuItem->sgpbPopupId;
161
- if ($popupId > 0) {
162
- self::$navMenuItems[] = $menuItem;
163
- }
164
- }
165
- }
166
- }
167
- }
168
-
169
- return isset(self::$navMenuItems) ? self::$navMenuItems : array();
170
- }
171
-
172
- /**
173
- * @param $menu_item
174
- * @return mixed
175
- */
176
- public function addCustomNavFields($menuItem)
177
- {
178
- $menuItem->sgpbPopupId = get_post_meta($menuItem->ID, '_menu_sgpb_popup_id', true);
179
- return $menuItem;
180
- }
181
-
182
- /**
183
- * @return array of popup objects
184
- */
185
- public static function getPopups()
186
- {
187
- return SGPopup::getAllPopups();
188
- }
189
-
190
- /**
191
- * Adds custom fields to the menu item editor.
192
- *
193
- * @param $itemId
194
- * @param $item
195
- * @param $depth
196
- * @param $args
197
- */
198
- public function fields($itemId, $item, $depth, $args)
199
- { ?>
200
- <div class="description description-wide">
201
- <label for="edit-menu-item-pb-<?php echo $item->ID; ?>">
202
- <?php _e('Select a Popup', SG_POPUP_TEXT_DOMAIN); ?><br/>
203
- <select class="widefat" name="menu-item-pb[<?php echo $item->ID; ?>][popup]"
204
- id="edit-menu-item-pb-<?php echo $item->ID; ?>">
205
- <option value=""></option>
206
- <?php foreach (self::getPopups() as $popup) : ?>
207
- <option value="<?php echo $popup->getId(); ?>" <?php selected($popup->getId(), (int)get_post_meta($itemId, '_menu_sgpb_popup_id', true)); ?>>
208
- <?php echo esc_html($popup->getTitle()); ?>
209
- </option>
210
- <?php endforeach; ?>
211
- </select>
212
- <span class="description"><?php _e('Open a popup once this item is clicked.', SG_POPUP_TEXT_DOMAIN); ?></span>
213
- </label>
214
- </div>
215
- <?php
216
- }
217
-
218
- /**
219
- * Processes the saving of menu items.
220
- *
221
- * @param $menu_id
222
- * @param $item_id
223
- */
224
- public function save($menu_id, $item_id)
225
- {
226
- delete_post_meta($item_id, '_menu_sgpb_popup_id');
227
- if (isset($_POST['menu-item-pb'][$item_id]['popup'])) {
228
- $popupId = (int)$_POST['menu-item-pb'][$item_id]['popup'];
229
- update_post_meta($item_id, '_menu_sgpb_popup_id', $popupId);
230
- }
231
- }
232
- }
1
+ <?php
2
+
3
+ namespace sgpb;
4
+
5
+ /**
6
+ * Class SGPBMenu
7
+ * @package sgpb
8
+ */
9
+ class SGPBMenu
10
+ {
11
+ /**
12
+ * Singleton variable to save menu locations.
13
+ * @var
14
+ */
15
+ public static $navMenuLocations;
16
+
17
+ /**
18
+ * Singleton variable to save menu items on which popup is set.
19
+ * @var
20
+ */
21
+ public static $navMenuItems;
22
+
23
+ /**
24
+ * Menu constructor.
25
+ */
26
+ public function __construct()
27
+ {
28
+ $this->init();
29
+ }
30
+
31
+ /**
32
+ * Initialize actions and filters.
33
+ */
34
+ public function init()
35
+ {
36
+ add_action('wp_nav_menu_item_custom_fields', array($this, 'fields'), 10, 4);
37
+ add_action('wp_update_nav_menu_item', array($this, 'save'), 10, 2);
38
+
39
+ add_filter('nav_menu_css_class', array($this, 'addPopupTriggeringClass'), 10, 2);
40
+ add_filter('wp_setup_nav_menu_item', array($this, 'addCustomNavFields'));
41
+ add_filter('sgpbLoadablePopups', array($this, 'addPopupToLoad'));
42
+ }
43
+
44
+ /**
45
+ * @param $classes
46
+ * @param $menuItem
47
+ * @return mixed
48
+ */
49
+ public function addPopupTriggeringClass($classes, $menuItem)
50
+ {
51
+ $popupId = $menuItem->sgpbPopupId;
52
+ if ($popupId && !in_array('sg-popup-id-'.$popupId, $classes)) {
53
+ array_push($classes, 'sg-popup-id-'.$popupId);
54
+ }
55
+
56
+ return $classes;
57
+ }
58
+
59
+ /**
60
+ * @param $popups
61
+ * @return mixed
62
+ */
63
+ public function addPopupToLoad($popups) {
64
+ $registeredMenus = $this->getNavMenuLocations();
65
+ /* Will only return menu items on which popup is set */
66
+ $menuItems = $this->getNavMenuItemsWithPopup($registeredMenus);
67
+
68
+ foreach ($menuItems as $menuItem) {
69
+ $menuPopupId = (int)$menuItem->sgpbPopupId;
70
+
71
+ /* As $menuItems contains only menu items on which popup is set
72
+ we can check if the popup should load on current page or not */
73
+ $popup = $this->shouldLoadPopupForMenuItem($menuPopupId, $popups);
74
+ if (!$popup) {
75
+ $popup = SGPopup::find($menuPopupId);
76
+ if (!$popup instanceof SGPopup) continue;
77
+ /* We could set param everywhere as popup was not suppose to load on current page.
78
+ We could also load popup to current requested page but to avoid any confusion
79
+ it will be better to use everywhere */
80
+ // $popup->setTarget(array(
81
+ // array('param' => 'everywhere')
82
+ // ));
83
+ $popups[] = $popup;
84
+ }
85
+
86
+ $popupOpeningEvents = $popup->getEvents();
87
+
88
+ /* If the popup is setup inside the menu but there is no onclick event we will add manually */
89
+ if (!$this->inMultiDimArray('click', $popupOpeningEvents)) {
90
+ $popup->setEvents(array('param' => 'click', 'value' => ''));
91
+ }
92
+ /* if the popup is set on menu item we don't need any limitation */
93
+ //$this->disablePopupLimitation($popup);
94
+ }
95
+
96
+ return $popups;
97
+ }
98
+
99
+ /**
100
+ * @param $popup
101
+ */
102
+ private function disablePopupLimitation(&$popup)
103
+ {
104
+ $popupOptions = $popup->getOptions();
105
+ unset($popupOptions['sgpb-show-popup-same-user']);
106
+ $popup->setOptions($popupOptions);
107
+ }
108
+
109
+ /**
110
+ * @param $item
111
+ * @param $array
112
+ * @return false|int
113
+ */
114
+ private function inMultiDimArray($item , $array){
115
+ return preg_match('/"'.preg_quote($item, '/').'"/i' , json_encode($array));
116
+ }
117
+
118
+ /**
119
+ * @param $menuPopupId
120
+ * @param $popups
121
+ * @return false|mixed
122
+ */
123
+ private function shouldLoadPopupForMenuItem($menuPopupId, &$popups) {
124
+ foreach ($popups as $popup) {
125
+ $popupId = $popup->getId();
126
+ /* Menu item contains popup with current id and the popup is loaded */
127
+ if ($menuPopupId == $popupId) {
128
+ return $popup;
129
+ }
130
+ }
131
+ return false;
132
+ }
133
+
134
+ /**
135
+ * @param false $forceUpdate
136
+ * @return array
137
+ */
138
+ public function getNavMenuLocations($forceUpdate = false)
139
+ {
140
+ if (!isset(self::$navMenuLocations) && !$forceUpdate) {
141
+ self::$navMenuLocations = get_nav_menu_locations();
142
+ }
143
+
144
+ return isset(self::$navMenuLocations) ? self::$navMenuLocations : array();
145
+ }
146
+
147
+ /**
148
+ * @param array $navMenuLocations
149
+ * @param false $forceUpdate
150
+ * @return array of menu items where popup is set
151
+ */
152
+ public function getNavMenuItemsWithPopup($navMenuLocations = array(), $forceUpdate = false)
153
+ {
154
+ if (!isset(self::$navMenuItems) && !$forceUpdate) {
155
+ foreach ($navMenuLocations as $menuName => $menuId) {
156
+ $menuItems = wp_get_nav_menu_items($menuId);
157
+
158
+ if (!empty($menuItems)) {
159
+ foreach ($menuItems as $menuItem) {
160
+ $popupId = $menuItem->sgpbPopupId;
161
+ if ($popupId > 0) {
162
+ self::$navMenuItems[] = $menuItem;
163
+ }
164
+ }
165
+ }
166
+ }
167
+ }
168
+
169
+ return isset(self::$navMenuItems) ? self::$navMenuItems : array();
170
+ }
171
+
172
+ /**
173
+ * @param $menu_item
174
+ * @return mixed
175
+ */
176
+ public function addCustomNavFields($menuItem)
177
+ {
178
+ $menuItem->sgpbPopupId = get_post_meta($menuItem->ID, '_menu_sgpb_popup_id', true);
179
+ return $menuItem;
180
+ }
181
+
182
+ /**
183
+ * @return array of popup objects
184
+ */
185
+ public static function getPopups()
186
+ {
187
+ return SGPopup::getAllPopups();
188
+ }
189
+
190
+ /**
191
+ * Adds custom fields to the menu item editor.
192
+ *
193
+ * @param $itemId
194
+ * @param $item
195
+ * @param $depth
196
+ * @param $args
197
+ */
198
+ public function fields($itemId, $item, $depth, $args)
199
+ { ?>
200
+ <div class="description description-wide">
201
+ <label for="edit-menu-item-pb-<?php echo $item->ID; ?>">
202
+ <?php _e('Select a Popup', SG_POPUP_TEXT_DOMAIN); ?><br/>
203
+ <select class="widefat" name="menu-item-pb[<?php echo $item->ID; ?>][popup]"
204
+ id="edit-menu-item-pb-<?php echo $item->ID; ?>">
205
+ <option value=""></option>
206
+ <?php foreach (self::getPopups() as $popup) : ?>
207
+ <option value="<?php echo $popup->getId(); ?>" <?php selected($popup->getId(), (int)get_post_meta($itemId, '_menu_sgpb_popup_id', true)); ?>>
208
+ <?php echo esc_html($popup->getTitle()); ?>
209
+ </option>
210
+ <?php endforeach; ?>
211
+ </select>
212
+ <span class="description"><?php _e('Open a popup once this item is clicked.', SG_POPUP_TEXT_DOMAIN); ?></span>
213
+ </label>
214
+ </div>
215
+ <?php
216
+ }
217
+
218
+ /**
219
+ * Processes the saving of menu items.
220
+ *
221
+ * @param $menu_id
222
+ * @param $item_id
223
+ */
224
+ public function save($menu_id, $item_id)
225
+ {
226
+ delete_post_meta($item_id, '_menu_sgpb_popup_id');
227
+ if (isset($_POST['menu-item-pb'][$item_id]['popup'])) {
228
+ $popupId = (int)$_POST['menu-item-pb'][$item_id]['popup'];
229
+ update_post_meta($item_id, '_menu_sgpb_popup_id', $popupId);
230
+ }
231
+ }
232
+ }
com/classes/dataTable/Subscribers.php CHANGED
@@ -1,206 +1,206 @@
1
- <?php
2
- require_once(SG_POPUP_CLASSES_PATH.'/Ajax.php');
3
- require_once(SG_POPUP_HELPERS_PATH.'AdminHelper.php');
4
-
5
- use sgpb\SGPopup;
6
- use sgpb\AdminHelper;
7
- use sgpbDataTable\SGPBTable;
8
- use sgpb\SubscriptionPopup;
9
-
10
- class Subscribers extends SGPBTable
11
- {
12
- public function __construct()
13
- {
14
- global $wpdb;
15
- parent::__construct('sgpbAllSubscribers');
16
-
17
- $this->setRowsPerPage(SGPB_APP_POPUP_TABLE_LIMIT);
18
- $this->setTablename($wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME);
19
-
20
- $columns = array(
21
- $this->tablename.'.id',
22
- 'firstName',
23
- 'lastName',
24
- 'email',
25
- 'cDate',
26
- 'subscriptionType'
27
- );
28
-
29
- $selectAllCheckbox = '<div class="sgpb-wrapper checkbox-wrapper">
30
- <input class="subs-bulk" type="checkbox" id="checkbox-all">
31
- <label class="checkboxLabel" for="checkbox-all"></label>
32
- </div>';
33
-
34
- $displayColumns = array(
35
- 'bulk' => $selectAllCheckbox,
36
- 'id' => 'ID',
37
- 'firstName' => __('First name', SG_POPUP_TEXT_DOMAIN),
38
- 'lastName' => __('Last name', SG_POPUP_TEXT_DOMAIN),
39
- 'email' => __('Email', SG_POPUP_TEXT_DOMAIN),
40
- 'cDate' => __('Date', SG_POPUP_TEXT_DOMAIN),
41
- 'subscriptionType' => __('Popup', SG_POPUP_TEXT_DOMAIN)
42
- //'options' => __('Actions', SG_POPUP_TEXT_DOMAIN)
43
- );
44
-
45
- $filterColumnsDisplaySettings = array(
46
- 'columns' => $columns,
47
- 'displayColumns' => $displayColumns
48
- );
49
-
50
- $filterColumnsDisplaySettings = apply_filters('sgpbAlterColumnIntoSubscribers', $filterColumnsDisplaySettings);
51
-
52
- $this->setColumns(@$filterColumnsDisplaySettings['columns']);
53
- $this->setDisplayColumns(@$filterColumnsDisplaySettings['displayColumns']);
54
- $this->setSortableColumns(array(
55
- 'id' => array('id', false),
56
- 'firstName' => array('firstName', true),
57
- 'lastName' => array('lastName', true),
58
- 'email' => array('email', true),
59
- 'cDate' => array('cDate', true),
60
- 'subscriptionType' => array('subscriptionType', true),
61
- $this->setInitialSort(array(
62
- 'id' => 'DESC'
63
- ))
64
- ));
65
- }
66
-
67
- public function customizeRow(&$row)
68
- {
69
- $popupId = (int)$row[5];
70
- $row = apply_filters('sgpbEditSubscribersTableRowValues', $row, $popupId);
71
- $row[6] = get_the_title($popupId);
72
- $row[5] = $row[4];
73
- $row[4] = $row[3];
74
- $row[3] = $row[2];
75
- $row[2] = $row[1];
76
- $row[1] = $row[0];
77
-
78
- // show date more user friendly
79
- $row[5] = date('d F Y', strtotime($row[5]));
80
-
81
- $id = $row[0];
82
- $row[0] = '<div class="sgpb-wrapper checkbox-wrapper">
83
- <input class="subs-delete-checkbox" type="checkbox" id="checkbox-'.esc_attr($id).'" data-delete-id="'.esc_attr($id).'">
84
- <label class="checkboxLabel" for="checkbox-'.esc_attr($id).'"></label>
85
- </div>';
86
- }
87
-
88
- public function customizeQuery(&$query)
89
- {
90
- $query = AdminHelper::subscribersRelatedQuery($query);
91
- }
92
-
93
- public function getNavPopupsConditions()
94
- {
95
- $subscriptionPopups = SubscriptionPopup::getAllSubscriptionForms();
96
- $list = '';
97
- $selectedPopup = '';
98
-
99
- if (isset($_GET['sgpb-subscription-popup-id'])) {
100
- $selectedPopup = (int)$_GET['sgpb-subscription-popup-id'];
101
- }
102
-
103
- ob_start();
104
- ?>
105
- <input type="hidden" class="sgpb-subscription-popup-id" name="sgpb-subscription-popup-id" value="<?php echo $selectedPopup;?>">
106
- <input type="hidden" name="page" value="<?php echo SG_POPUP_SUBSCRIBERS_PAGE; ?>" >
107
-
108
- <select class="select__select sgpb-margin-right-10" name="sgpb-subscription-popup" id="sgpb-subscription-popup">
109
- <?php
110
- $list .= '<option value="all">'.__('All', SG_POPUP_TEXT_DOMAIN).'</option>';
111
- foreach ($subscriptionPopups as $popupId => $popupTitle) {
112
- if ($selectedPopup == $popupId) {
113
- $selected = ' selected';
114
- }
115
- else {
116
- $selected = '';
117
- }
118
- $list .= '<option value="'.esc_attr($popupId).'"'.$selected.'>'.$popupTitle.'</option>';
119
- }
120
- echo $list;
121
- ?>
122
- </select>
123
- <?php
124
- $content = ob_get_contents();
125
- ob_end_clean();
126
-
127
- return $content;
128
- }
129
-
130
- public function getNavDateConditions() {
131
- $subscribersDates = SubscriptionPopup::getAllSubscribersDate();
132
- $uniqueDates = array();
133
-
134
- foreach ($subscribersDates as $arr) {
135
- $uniqueDates[] = $arr;
136
- }
137
- $uniqueDates = array_unique($uniqueDates, SORT_REGULAR);
138
-
139
- $selectedDate = '';
140
- $dateList = '';
141
- $selected = '';
142
-
143
- if (isset($_GET['sgpb-subscribers-date'])) {
144
- $selectedDate = esc_attr($_GET['sgpb-subscribers-date']);
145
- }
146
-
147
- ob_start();
148
- ?>
149
- <input type="hidden" class="sgpb-subscribers-date" name="sgpb-subscribers-date" value="<?php echo $selectedDate;?>">
150
- <select class="select__select sgpb-margin-right-10" name="sgpb-subscribers-dates" id="sgpb-subscribers-dates">
151
- <?php
152
- $gotDateList = '<option value="all">'.__('All dates', SG_POPUP_TEXT_DOMAIN).'</option>';
153
- foreach ($uniqueDates as $date) {
154
- if ($selectedDate == $date['date-value']) {
155
- $selected = ' selected';
156
- }
157
- else {
158
- $selected = '';
159
- }
160
- $gotDateList .= '<option value="'.$date['date-value'].'"'.$selected.'>'.$date['date-title'].'</option>';
161
- }
162
- if (empty($subscribersDates)) {
163
- $gotDateList = '<option value="'.@$date['date-value'].'"'.$selected.'>'.__('Date', SG_POPUP_TEXT_DOMAIN).'</option>';
164
- }
165
- echo $dateList.$gotDateList;
166
- ?>
167
- </select>
168
- <?php
169
- $content = ob_get_contents();
170
- ob_end_clean();
171
-
172
- return $content;
173
- }
174
-
175
- // parent class method overriding
176
- public function extra_tablenav($which)
177
- {
178
- $isVisibleExtraNav = $this->getIsVisibleExtraNav();
179
-
180
- if (!$isVisibleExtraNav) {
181
- return '';
182
- }
183
- ?>
184
- <div class="sgpb-display-flex sgpb-justify-content-between actions">
185
- <div>
186
- <label class="screen-reader-text" for="sgpb-subscription-popup"><?php _e('Filter by popup', SG_POPUP_TEXT_DOMAIN)?></label>
187
- <?php echo $this->getNavPopupsConditions(); ?>
188
- <label class="screen-reader-text" for="sgpb-subscribers-dates"><?php _e('Filter by date', SG_POPUP_TEXT_DOMAIN)?></label>
189
- <?php echo $this->getNavDateConditions(); ?>
190
- <input name="filter_action" id="post-query-submit" class="buttonGroup__button buttonGroup__button_blueBg buttonGroup__button_unrounded" value="<?php _e('Filter', SG_POPUP_TEXT_DOMAIN)?>" type="submit">
191
- </div>
192
- <div>
193
- <?php
194
- if ($which == 'top') {
195
- ?>
196
- <button type="button" class="sgpb-btn sgpb-btn-danger sgpb-btn-disabled sgpb-btn--rounded sg-subs-delete-button" data-ajaxNonce="<?php echo SG_AJAX_NONCE;?>">
197
- <?php _e('Delete subscriber(s)', SG_POPUP_TEXT_DOMAIN)?>
198
- </button>
199
- <?php
200
- }
201
- ?>
202
- </div>
203
- </div>
204
- <?php
205
- }
206
- }
1
+ <?php
2
+ require_once(SG_POPUP_CLASSES_PATH.'/Ajax.php');
3
+ require_once(SG_POPUP_HELPERS_PATH.'AdminHelper.php');
4
+
5
+ use sgpb\SGPopup;
6
+ use sgpb\AdminHelper;
7
+ use sgpbDataTable\SGPBTable;
8
+ use sgpb\SubscriptionPopup;
9
+
10
+ class Subscribers extends SGPBTable
11
+ {
12
+ public function __construct()
13
+ {
14
+ global $wpdb;
15
+ parent::__construct('sgpbAllSubscribers');
16
+
17
+ $this->setRowsPerPage(SGPB_APP_POPUP_TABLE_LIMIT);
18
+ $this->setTablename($wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME);
19
+
20
+ $columns = array(
21
+ $this->tablename.'.id',
22
+ 'firstName',
23
+ 'lastName',
24
+ 'email',
25
+ 'cDate',
26
+ 'subscriptionType'
27
+ );
28
+
29
+ $selectAllCheckbox = '<div class="sgpb-wrapper checkbox-wrapper">
30
+ <input class="subs-bulk" type="checkbox" id="checkbox-all">
31
+ <label class="checkboxLabel" for="checkbox-all"></label>
32
+ </div>';
33
+
34
+ $displayColumns = array(
35
+ 'bulk' => $selectAllCheckbox,
36
+ 'id' => 'ID',
37
+ 'firstName' => __('First name', SG_POPUP_TEXT_DOMAIN),
38
+ 'lastName' => __('Last name', SG_POPUP_TEXT_DOMAIN),
39
+ 'email' => __('Email', SG_POPUP_TEXT_DOMAIN),
40
+ 'cDate' => __('Date', SG_POPUP_TEXT_DOMAIN),
41
+ 'subscriptionType' => __('Popup', SG_POPUP_TEXT_DOMAIN)
42
+ //'options' => __('Actions', SG_POPUP_TEXT_DOMAIN)
43
+ );
44
+
45
+ $filterColumnsDisplaySettings = array(
46
+ 'columns' => $columns,
47
+ 'displayColumns' => $displayColumns
48
+ );
49
+
50
+ $filterColumnsDisplaySettings = apply_filters('sgpbAlterColumnIntoSubscribers', $filterColumnsDisplaySettings);
51
+
52
+ $this->setColumns(@$filterColumnsDisplaySettings['columns']);
53
+ $this->setDisplayColumns(@$filterColumnsDisplaySettings['displayColumns']);
54
+ $this->setSortableColumns(array(
55
+ 'id' => array('id', false),
56
+ 'firstName' => array('firstName', true),
57
+ 'lastName' => array('lastName', true),
58
+ 'email' => array('email', true),
59
+ 'cDate' => array('cDate', true),
60
+ 'subscriptionType' => array('subscriptionType', true),
61
+ $this->setInitialSort(array(
62
+ 'id' => 'DESC'
63
+ ))
64
+ ));
65
+ }
66
+
67
+ public function customizeRow(&$row)
68
+ {
69
+ $popupId = (int)$row[5];
70
+ $row = apply_filters('sgpbEditSubscribersTableRowValues', $row, $popupId);
71
+ $row[6] = get_the_title($popupId);
72
+ $row[5] = $row[4];
73
+ $row[4] = $row[3];
74
+ $row[3] = $row[2];
75
+ $row[2] = $row[1];
76
+ $row[1] = $row[0];
77
+
78
+ // show date more user friendly
79
+ $row[5] = date('d F Y', strtotime($row[5]));
80
+
81
+ $id = $row[0];
82
+ $row[0] = '<div class="sgpb-wrapper checkbox-wrapper">
83
+ <input class="subs-delete-checkbox" type="checkbox" id="checkbox-'.esc_attr($id).'" data-delete-id="'.esc_attr($id).'">
84
+ <label class="checkboxLabel" for="checkbox-'.esc_attr($id).'"></label>
85
+ </div>';
86
+ }
87
+
88
+ public function customizeQuery(&$query)
89
+ {
90
+ $query = AdminHelper::subscribersRelatedQuery($query);
91
+ }
92
+
93
+ public function getNavPopupsConditions()
94
+ {
95
+ $subscriptionPopups = SubscriptionPopup::getAllSubscriptionForms();
96
+ $list = '';
97
+ $selectedPopup = '';
98
+
99
+ if (isset($_GET['sgpb-subscription-popup-id'])) {
100
+ $selectedPopup = (int)$_GET['sgpb-subscription-popup-id'];
101
+ }
102
+
103
+ ob_start();
104
+ ?>
105
+ <input type="hidden" class="sgpb-subscription-popup-id" name="sgpb-subscription-popup-id" value="<?php echo $selectedPopup;?>">
106
+ <input type="hidden" name="page" value="<?php echo SG_POPUP_SUBSCRIBERS_PAGE; ?>" >
107
+
108
+ <select class="select__select sgpb-margin-right-10" name="sgpb-subscription-popup" id="sgpb-subscription-popup">
109
+ <?php
110
+ $list .= '<option value="all">'.__('All', SG_POPUP_TEXT_DOMAIN).'</option>';
111
+ foreach ($subscriptionPopups as $popupId => $popupTitle) {
112
+ if ($selectedPopup == $popupId) {
113
+ $selected = ' selected';
114
+ }
115
+ else {
116
+ $selected = '';
117
+ }
118
+ $list .= '<option value="'.esc_attr($popupId).'"'.$selected.'>'.$popupTitle.'</option>';
119
+ }
120
+ echo $list;
121
+ ?>
122
+ </select>
123
+ <?php
124
+ $content = ob_get_contents();
125
+ ob_end_clean();
126
+
127
+ return $content;
128
+ }
129
+
130
+ public function getNavDateConditions() {
131
+ $subscribersDates = SubscriptionPopup::getAllSubscribersDate();
132
+ $uniqueDates = array();
133
+
134
+ foreach ($subscribersDates as $arr) {
135
+ $uniqueDates[] = $arr;
136
+ }
137
+ $uniqueDates = array_unique($uniqueDates, SORT_REGULAR);
138
+
139
+ $selectedDate = '';
140
+ $dateList = '';
141
+ $selected = '';
142
+
143
+ if (isset($_GET['sgpb-subscribers-date'])) {
144
+ $selectedDate = esc_attr($_GET['sgpb-subscribers-date']);
145
+ }
146
+
147
+ ob_start();
148
+ ?>
149
+ <input type="hidden" class="sgpb-subscribers-date" name="sgpb-subscribers-date" value="<?php echo $selectedDate;?>">
150
+ <select class="select__select sgpb-margin-right-10" name="sgpb-subscribers-dates" id="sgpb-subscribers-dates">
151
+ <?php
152
+ $gotDateList = '<option value="all">'.__('All dates', SG_POPUP_TEXT_DOMAIN).'</option>';
153
+ foreach ($uniqueDates as $date) {
154
+ if ($selectedDate == $date['date-value']) {
155
+ $selected = ' selected';
156
+ }
157
+ else {
158
+ $selected = '';
159
+ }
160
+ $gotDateList .= '<option value="'.$date['date-value'].'"'.$selected.'>'.$date['date-title'].'</option>';
161
+ }
162
+ if (empty($subscribersDates)) {
163
+ $gotDateList = '<option value="'.@$date['date-value'].'"'.$selected.'>'.__('Date', SG_POPUP_TEXT_DOMAIN).'</option>';
164
+ }
165
+ echo $dateList.$gotDateList;
166
+ ?>
167
+ </select>
168
+ <?php
169
+ $content = ob_get_contents();
170
+ ob_end_clean();
171
+
172
+ return $content;
173
+ }
174
+
175
+ // parent class method overriding
176
+ public function extra_tablenav($which)
177
+ {
178
+ $isVisibleExtraNav = $this->getIsVisibleExtraNav();
179
+
180
+ if (!$isVisibleExtraNav) {
181
+ return '';
182
+ }
183
+ ?>
184
+ <div class="sgpb-display-flex sgpb-justify-content-between actions">
185
+ <div>
186
+ <label class="screen-reader-text" for="sgpb-subscription-popup"><?php _e('Filter by popup', SG_POPUP_TEXT_DOMAIN)?></label>
187
+ <?php echo $this->getNavPopupsConditions(); ?>
188
+ <label class="screen-reader-text" for="sgpb-subscribers-dates"><?php _e('Filter by date', SG_POPUP_TEXT_DOMAIN)?></label>
189
+ <?php echo $this->getNavDateConditions(); ?>
190
+ <input name="filter_action" id="post-query-submit" class="buttonGroup__button buttonGroup__button_blueBg buttonGroup__button_unrounded" value="<?php _e('Filter', SG_POPUP_TEXT_DOMAIN)?>" type="submit">
191
+ </div>
192
+ <div>
193
+ <?php
194
+ if ($which == 'top') {
195
+ ?>
196
+ <button type="button" class="sgpb-btn sgpb-btn-danger sgpb-btn-disabled sgpb-btn--rounded sg-subs-delete-button" data-ajaxNonce="<?php echo SG_AJAX_NONCE;?>">
197
+ <?php _e('Delete subscriber(s)', SG_POPUP_TEXT_DOMAIN)?>
198
+ </button>
199
+ <?php
200
+ }
201
+ ?>
202
+ </div>
203
+ </div>
204
+ <?php
205
+ }
206
+ }
com/classes/extension/SgpbIPopupExtension.php CHANGED
@@ -1,10 +1,10 @@
1
- <?php
2
- interface SgpbIPopupExtension
3
- {
4
- /*It's Admin scripts*/
5
- public function getScripts($page, $data);
6
- public function getStyles($page, $data);
7
- /*It's frontend scripts*/
8
- public function getFrontendScripts($page, $data);
9
- public function getFrontendStyles($page, $data);
10
  }
1
+ <?php
2
+ interface SgpbIPopupExtension
3
+ {
4
+ /*It's Admin scripts*/
5
+ public function getScripts($page, $data);
6
+ public function getStyles($page, $data);
7
+ /*It's frontend scripts*/
8
+ public function getFrontendScripts($page, $data);
9
+ public function getFrontendStyles($page, $data);
10
  }
com/classes/extension/SgpbPopupExtension.php CHANGED
@@ -1,358 +1,358 @@
1
- <?php
2
-
3
- require_once(SG_POPUP_EXTENSION_PATH.'SgpbIPopupExtension.php');
4
- use sgpb\AdminHelper;
5
- use \sgpb\SgpbPopupVersionDetection;
6
-
7
- if (class_exists('SgpbPopupExtension')) {
8
- return false;
9
- }
10
-
11
- class SgpbPopupExtension implements SgpbIPopupExtension
12
- {
13
- public function getNewsletterPageKey()
14
- {
15
- return SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_NEWSLETTER_PAGE;
16
- }
17
-
18
- public function getSettingsPageKey()
19
- {
20
- return SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_SETTINGS_PAGE;
21
- }
22
-
23
- public function getScripts($pageName, $data)
24
- {
25
- $jsFiles = array();
26
- $localizeData = array();
27
- $translatedData = ConfigDataHelper::getJsLocalizedData();
28
- $currentPostType = AdminHelper::getCurrentPostType();
29
- $newsletterPage = $this->getNewsletterPageKey();
30
- $settingsPage = $this->getSettingsPageKey();
31
-
32
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'ExtensionsNotification.js', 'dep' => array('jquery'));
33
- $localizeData[] = array(
34
- 'handle' => 'ExtensionsNotification.js',
35
- 'name' => 'SGPB_JS_EXTENSIONS_PARAMS',
36
- 'data' => array(
37
- 'nonce' => wp_create_nonce(SG_AJAX_NONCE),
38
- 'popupPostType' => SG_POPUP_POST_TYPE,
39
- 'extendPage' => SG_POPUP_EXTEND_PAGE,
40
- 'supportUrl' => SG_POPUP_SUPPORT_URL,
41
- 'allExtensionsUrl' => SG_POPUP_ALL_EXTENSIONS_URL,
42
- 'supportPage' => SG_POPUP_SUPPORT_PAGE,
43
- 'reviewUrl' => SG_POPUP_RATE_US_URL
44
- )
45
- );
46
-
47
- $allowPages = array(
48
- 'popupType',
49
- 'editpage',
50
- 'popupspage',
51
- 'popupbuilder_page_license',
52
- $newsletterPage,
53
- $settingsPage
54
- );
55
-
56
- if ($pageName == $newsletterPage) {
57
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Newsletter.js');
58
- }
59
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Banner.js', 'dep' => array('jquery'));
60
- $localizeData[] = array(
61
- 'handle' => 'Banner.js',
62
- 'name' => 'SGPB_JS_PARAMS',
63
- 'data' => array(
64
- 'url' => admin_url('admin-ajax.php'),
65
- 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
66
- )
67
- );
68
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'gutenbergBlock.min.js');
69
-
70
- $localizeData[] = array(
71
- 'handle' => 'gutenbergBlock.min.js',
72
- 'name' => 'SGPB_GUTENBERG_PARAMS',
73
- 'data' => array(
74
- 'allPopups' => AdminHelper::getGutenbergPopupsIdAndTitle(),
75
- 'allEvents' => AdminHelper::getGutenbergPopupsEvents(),
76
- 'title' => __('Popup Builder', SG_POPUP_TEXT_DOMAIN),
77
- 'description' => __('This block will help you to add Popup Builder’s shortcode inside the page content', SG_POPUP_TEXT_DOMAIN),
78
- 'i18n'=> array(
79
- 'title' => __( 'WPForms', 'wpforms-lite' ),
80
- 'description' => __( 'Select and display one of your forms.', 'wpforms-lite' ),
81
- 'form_keyword' => __( 'form', 'wpforms-lite' ),
82
- 'form_select' => __( 'Select Popup', 'wpforms-lite' ),
83
- 'form_settings' => __( 'Form Settings', 'wpforms-lite' ),
84
- 'form_selected' => __( 'Form', 'wpforms-lite' ),
85
- 'show_title' => __( 'Show Title', 'wpforms-lite' ),
86
- 'show_description' => __( 'Show Description', 'wpforms-lite' ),
87
- ),
88
- 'logo_url' => SG_POPUP_IMG_URL.'bannerLogo.png',
89
- 'logo_classname' => 'sgpb-gutenberg-logo',
90
- 'clickText' => __('Click me', SG_POPUP_TEXT_DOMAIN)
91
- )
92
- );
93
-
94
- if (in_array($pageName, $allowPages) || $currentPostType == SG_POPUP_AUTORESPONDER_POST_TYPE) {
95
- $jsFiles[] = array('folderUrl'=> '', 'filename' => 'wp-color-picker');
96
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'select2.min.js');
97
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'sgpbSelect2.js');
98
-
99
-
100
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'bootstrap.min.js');
101
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'sgPopupRangeSlider.js');
102
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Backend.js');
103
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'FloatingButton.js', 'dep' => array('Backend.js'),);
104
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'NotificationCenter.js');
105
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Popup.js');
106
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'PopupConfig.js');
107
-
108
- $localizeData[] = array(
109
- 'handle' => 'Backend.js',
110
- 'name' => 'SGPB_JS_PARAMS',
111
- 'data' => array(
112
- 'url' => admin_url('admin-ajax.php'),
113
- 'postUrl' => SG_POPUP_ADMIN_URL.'admin-post.php',
114
- 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
115
- )
116
- );
117
-
118
- $localizeData[] = array(
119
- 'handle' => 'sgpbSelect2.js',
120
- 'name' => 'SGPB_JS_PACKAGES',
121
- 'data' => array(
122
- 'packages' => array(
123
- 'current' => SGPB_POPUP_PKG,
124
- 'free' => SGPB_POPUP_PKG_FREE,
125
- 'silver' => SGPB_POPUP_PKG_SILVER,
126
- 'gold' => SGPB_POPUP_PKG_GOLD,
127
- 'platinum' => SGPB_POPUP_PKG_PLATINUM
128
- ),
129
- 'extensions' => array(
130
- 'geo-targeting' => AdminHelper::isPluginActive('geo-targeting'),
131
- 'advanced-closing' => AdminHelper::isPluginActive('advancedClosing')
132
- ),
133
- 'proEvents' => apply_filters('sgpbProEvents', array('inactivity', 'onScroll'))
134
- )
135
- );
136
-
137
- $localizeData[] = array(
138
- 'handle' => 'Backend.js',
139
- 'name' => 'SGPB_JS_LOCALIZATION',
140
- 'data' => $translatedData
141
- );
142
-
143
- $localizeData[] = array(
144
- 'handle' => 'Popup.js',
145
- 'name' => 'sgpbPublicUrl',
146
- 'data' => SG_POPUP_PUBLIC_URL
147
- );
148
- }
149
- else if ($pageName == SG_POPUP_SUBSCRIBERS_PAGE) {
150
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'select2.min.js', 'dep' => '', 'ver' => '3.86', 'inFooter' => '');
151
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'sgpbSelect2.js');
152
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Subscribers.js');
153
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Banner.js');
154
-
155
- $localizeData[] = array(
156
- 'handle' => 'Subscribers.js',
157
- 'name' => 'SGPB_JS_PARAMS',
158
- 'data' => array(
159
- 'url' => admin_url('admin-ajax.php'),
160
- 'nonce' => wp_create_nonce(SG_AJAX_NONCE),
161
- 'packages' => array(
162
- 'current' => SGPB_POPUP_PKG,
163
- 'silver' => SGPB_POPUP_PKG_SILVER,
164
- 'gold' => SGPB_POPUP_PKG_GOLD,
165
- 'platinum' => SGPB_POPUP_PKG_PLATINUM
166
- )
167
- )
168
- );
169
-
170
- $localizeData[] = array(
171
- 'handle' => 'sgpbSelect2.js',
172
- 'name' => 'SGPB_JS_PACKAGES',
173
- 'data' => array(
174
- 'packages' => array(
175
- 'current' => SGPB_POPUP_PKG,
176
- 'free' => SGPB_POPUP_PKG_FREE,
177
- 'silver' => SGPB_POPUP_PKG_SILVER,
178
- 'gold' => SGPB_POPUP_PKG_GOLD,
179
- 'platinum' => SGPB_POPUP_PKG_PLATINUM
180
- )
181
- )
182
- );
183
-
184
- $localizeData[] = array(
185
- 'handle' => 'Subscribers.js',
186
- 'name' => 'SGPB_JS_ADMIN_URL',
187
- 'data' => array(
188
- 'url' => SG_POPUP_ADMIN_URL.'admin-post.php',
189
- 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
190
- )
191
- );
192
-
193
- $localizeData[] = array(
194
- 'handle' => 'Subscribers.js',
195
- 'name' => 'SGPB_JS_LOCALIZATION',
196
- 'data' => $translatedData
197
- );
198
-
199
- $localizeData[] = array(
200
- 'handle' => 'Banner.js',
201
- 'name' => 'SGPB_JS_PARAMS',
202
- 'data' => array(
203
- 'url' => admin_url('admin-ajax.php'),
204
- 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
205
- )
206
- );
207
- }
208
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Modals.js');
209
- if (count($versionDetection = SgpbPopupVersionDetection::compareVersions())) {
210
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'sgpbDetect.js');
211
- $localizeData[] = array(
212
- 'handle' => 'sgpbDetect.js',
213
- 'name' => 'SGPB_JS_DETECTIONS',
214
- 'data' => $versionDetection
215
- );
216
- }
217
-
218
- $scriptData = array(
219
- 'jsFiles' => apply_filters('sgpbAdminJsFiles', $jsFiles),
220
- 'localizeData' => apply_filters('sgpbAdminJsLocalizedData', $localizeData)
221
- );
222
-
223
- $scriptData = apply_filters('sgpbAdminJs', $scriptData);
224
-
225
- return $scriptData;
226
- }
227
-
228
- public function getStyles($pageName, $data)
229
- {
230
- $cssFiles = array();
231
- $newsletterPage = $this->getNewsletterPageKey();
232
- $settingsPage = $this->getSettingsPageKey();
233
-
234
- $allowPages = array(
235
- 'popupType',
236
- 'editpage',
237
- 'popupspage',
238
- 'popupbuilder_page_license',
239
- $newsletterPage,
240
- $settingsPage
241
- );
242
- if (in_array($pageName, $allowPages)) {
243
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'jquery.dateTimePicker.min.css', 'dep' => array(), 'ver' => rand(1, 1000), 'inFooter' => false);
244
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'sgbp-bootstrap.css', 'dep' => array(), 'ver' => rand(1, 1000), 'inFooter' => false);
245
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'popupAdminStyles.css', 'dep' => array(), 'ver' => rand(1, 1000), 'inFooter' => false);
246
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'select2.min.css', 'dep' => array(), 'ver' => rand(1, 1000), 'inFooter' => false);
247
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'theme.css', 'dep' => array(), 'ver' => rand(1, 1000), 'inFooter' => false);
248
- $cssFiles[] = array('folderUrl' => '', 'filename' => 'wp-color-picker');
249
- }
250
- else if ($pageName == SG_POPUP_SUBSCRIBERS_PAGE) {
251
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'sgbp-bootstrap.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
252
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'popupAdminStyles.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
253
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'select2.min.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
254
-
255
- }
256
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'sgpb-modal.css', 'dep' => array(), 'ver' => rand(1, 10000), 'inFooter' => false);
257
-
258
- $cssData = array(
259
- 'cssFiles' => apply_filters('sgpbAdminCssFiles', $cssFiles)
260
- );
261
- return $cssData;
262
- }
263
-
264
- public function getFrontendScripts($page, $popupObjs)
265
- {
266
- $translatedData = ConfigDataHelper::getJsLocalizedData();
267
- $jsFiles = array();
268
- $localizeData = array();
269
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Popup.js', 'dep' => array('jquery'));
270
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'PopupConfig.js', 'dep' => array('Popup.js'));
271
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'PopupBuilder.js', 'dep' => array('PopupConfig.js'));
272
- if (SGPB_POPUP_PKG >= SGPB_POPUP_PKG_SILVER) {
273
- $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'PopupBuilderProFunctionality.js', 'dep' => array('jquery'));
274
- }
275
-
276
- $localizeData[] = array(
277
- 'handle' => 'PopupBuilder.js',
278
- 'name' => 'SGPB_POPUP_PARAMS',
279
- 'data' => array(
280
- 'popupTypeAgeRestriction' => SGPB_POPUP_TYPE_RESTRICTION,
281
- 'defaultThemeImages' => array(
282
- 1 => AdminHelper::defaultButtonImage('sgpb-theme-1'),
283
- 2 => AdminHelper::defaultButtonImage('sgpb-theme-2'),
284
- 3 => AdminHelper::defaultButtonImage('sgpb-theme-3'),
285
- 5 => AdminHelper::defaultButtonImage('sgpb-theme-5'),
286
- 6 => AdminHelper::defaultButtonImage('sgpb-theme-6')
287
- ),
288
- 'homePageUrl' => get_home_url().'/',
289
- 'isPreview' => isset($_GET['sg_popup_preview_id']),
290
- 'convertedIdsReverse' => AdminHelper::getReverseConvertIds(),
291
- 'dontShowPopupExpireTime' => SGPB_DONT_SHOW_POPUP_EXPIRY,
292
- 'conditionalJsClasses' => apply_filters('sgpbConditionalJsClasses', array()),
293
- 'disableAnalyticsGeneral' => AdminHelper::getOption('sgpb-enable-debug-mode')
294
- )
295
- );
296
-
297
- $localizeData[] = array(
298
- 'handle' => 'PopupBuilder.js',
299
- 'name' => 'SGPB_JS_PACKAGES',
300
- 'data' => array(
301
- 'packages' => array(
302
- 'current' => SGPB_POPUP_PKG,
303
- 'free' => SGPB_POPUP_PKG_FREE,
304
- 'silver' => SGPB_POPUP_PKG_SILVER,
305
- 'gold' => SGPB_POPUP_PKG_GOLD,
306
- 'platinum' => SGPB_POPUP_PKG_PLATINUM
307
- ),
308
- 'extensions' => array(
309
- 'geo-targeting' => AdminHelper::isPluginActive('geo-targeting'),
310
- 'advanced-closing' => AdminHelper::isPluginActive('advancedClosing')
311
- )
312
- )
313
- );
314
-
315
- $localizeData[] = array(
316
- 'handle' => 'Popup.js',
317
- 'name' => 'sgpbPublicUrl',
318
- 'data' => SG_POPUP_PUBLIC_URL
319
- );
320
-
321
- $localizeData[] = array(
322
- 'handle' => 'Popup.js',
323
- 'name' => 'SGPB_JS_LOCALIZATION',
324
- 'data' => $translatedData
325
- );
326
-
327
- $localizeData[] = array(
328
- 'handle' => 'PopupBuilder.js',
329
- 'name' => 'SGPB_JS_PARAMS',
330
- 'data' => array(
331
- 'ajaxUrl' => admin_url('admin-ajax.php'),
332
- 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
333
- )
334
- );
335
-
336
- $scriptData = array(
337
- 'jsFiles' => apply_filters('sgpbFrontendJsFiles', $jsFiles),
338
- 'localizeData' => apply_filters('sgpbFrontendJsLocalizedData', $localizeData)
339
- );
340
-
341
- $scriptData = apply_filters('sgpbFrontendJs', $scriptData);
342
-
343
- return $scriptData;
344
- }
345
-
346
- public function getFrontendStyles($page, $data)
347
- {
348
- $cssFiles = array();
349
- $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'theme.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
350
-
351
- $cssData = array(
352
- 'cssFiles' => apply_filters('sgpbFrontendCssFiles', $cssFiles)
353
- );
354
-
355
- return $cssData;
356
- }
357
-
358
- }
1
+ <?php
2
+
3
+ require_once(SG_POPUP_EXTENSION_PATH.'SgpbIPopupExtension.php');
4
+ use sgpb\AdminHelper;
5
+ use \sgpb\SgpbPopupVersionDetection;
6
+
7
+ if (class_exists('SgpbPopupExtension')) {
8
+ return false;
9
+ }
10
+
11
+ class SgpbPopupExtension implements SgpbIPopupExtension
12
+ {
13
+ public function getNewsletterPageKey()
14
+ {
15
+ return SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_NEWSLETTER_PAGE;
16
+ }
17
+
18
+ public function getSettingsPageKey()
19
+ {
20
+ return SG_POPUP_POST_TYPE.'_page_'.SG_POPUP_SETTINGS_PAGE;
21
+ }
22
+
23
+ public function getScripts($pageName, $data)
24
+ {
25
+ $jsFiles = array();
26
+ $localizeData = array();
27
+ $translatedData = ConfigDataHelper::getJsLocalizedData();
28
+ $currentPostType = AdminHelper::getCurrentPostType();
29
+ $newsletterPage = $this->getNewsletterPageKey();
30
+ $settingsPage = $this->getSettingsPageKey();
31
+
32
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'ExtensionsNotification.js', 'dep' => array('jquery'));
33
+ $localizeData[] = array(
34
+ 'handle' => 'ExtensionsNotification.js',
35
+ 'name' => 'SGPB_JS_EXTENSIONS_PARAMS',
36
+ 'data' => array(
37
+ 'nonce' => wp_create_nonce(SG_AJAX_NONCE),
38
+ 'popupPostType' => SG_POPUP_POST_TYPE,
39
+ 'extendPage' => SG_POPUP_EXTEND_PAGE,
40
+ 'supportUrl' => SG_POPUP_SUPPORT_URL,
41
+ 'allExtensionsUrl' => SG_POPUP_ALL_EXTENSIONS_URL,
42
+ 'supportPage' => SG_POPUP_SUPPORT_PAGE,
43
+ 'reviewUrl' => SG_POPUP_RATE_US_URL
44
+ )
45
+ );
46
+
47
+ $allowPages = array(
48
+ 'popupType',
49
+ 'editpage',
50
+ 'popupspage',
51
+ 'popupbuilder_page_license',
52
+ $newsletterPage,
53
+ $settingsPage
54
+ );
55
+
56
+ if ($pageName == $newsletterPage) {
57
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Newsletter.js');
58
+ }
59
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Banner.js', 'dep' => array('jquery'));
60
+ $localizeData[] = array(
61
+ 'handle' => 'Banner.js',
62
+ 'name' => 'SGPB_JS_PARAMS',
63
+ 'data' => array(
64
+ 'url' => admin_url('admin-ajax.php'),
65
+ 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
66
+ )
67
+ );
68
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'gutenbergBlock.min.js');
69
+
70
+ $localizeData[] = array(
71
+ 'handle' => 'gutenbergBlock.min.js',
72
+ 'name' => 'SGPB_GUTENBERG_PARAMS',
73
+ 'data' => array(
74
+ 'allPopups' => AdminHelper::getGutenbergPopupsIdAndTitle(),
75
+ 'allEvents' => AdminHelper::getGutenbergPopupsEvents(),
76
+ 'title' => __('Popup Builder', SG_POPUP_TEXT_DOMAIN),
77
+ 'description' => __('This block will help you to add Popup Builder’s shortcode inside the page content', SG_POPUP_TEXT_DOMAIN),
78
+ 'i18n'=> array(
79
+ 'title' => __( 'WPForms', 'wpforms-lite' ),
80
+ 'description' => __( 'Select and display one of your forms.', 'wpforms-lite' ),
81
+ 'form_keyword' => __( 'form', 'wpforms-lite' ),
82
+ 'form_select' => __( 'Select Popup', 'wpforms-lite' ),
83
+ 'form_settings' => __( 'Form Settings', 'wpforms-lite' ),
84
+ 'form_selected' => __( 'Form', 'wpforms-lite' ),
85
+ 'show_title' => __( 'Show Title', 'wpforms-lite' ),
86
+ 'show_description' => __( 'Show Description', 'wpforms-lite' ),
87
+ ),
88
+ 'logo_url' => SG_POPUP_IMG_URL.'bannerLogo.png',
89
+ 'logo_classname' => 'sgpb-gutenberg-logo',
90
+ 'clickText' => __('Click me', SG_POPUP_TEXT_DOMAIN)
91
+ )
92
+ );
93
+
94
+ if (in_array($pageName, $allowPages) || $currentPostType == SG_POPUP_AUTORESPONDER_POST_TYPE) {
95
+ $jsFiles[] = array('folderUrl'=> '', 'filename' => 'wp-color-picker');
96
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'select2.min.js');
97
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'sgpbSelect2.js');
98
+
99
+
100
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'bootstrap.min.js');
101
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'sgPopupRangeSlider.js');
102
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Backend.js');
103
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'FloatingButton.js', 'dep' => array('Backend.js'),);
104
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'NotificationCenter.js');
105
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Popup.js');
106
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'PopupConfig.js');
107
+
108
+ $localizeData[] = array(
109
+ 'handle' => 'Backend.js',
110
+ 'name' => 'SGPB_JS_PARAMS',
111
+ 'data' => array(
112
+ 'url' => admin_url('admin-ajax.php'),
113
+ 'postUrl' => SG_POPUP_ADMIN_URL.'admin-post.php',
114
+ 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
115
+ )
116
+ );
117
+
118
+ $localizeData[] = array(
119
+ 'handle' => 'sgpbSelect2.js',
120
+ 'name' => 'SGPB_JS_PACKAGES',
121
+ 'data' => array(
122
+ 'packages' => array(
123
+ 'current' => SGPB_POPUP_PKG,
124
+ 'free' => SGPB_POPUP_PKG_FREE,
125
+ 'silver' => SGPB_POPUP_PKG_SILVER,
126
+ 'gold' => SGPB_POPUP_PKG_GOLD,
127
+ 'platinum' => SGPB_POPUP_PKG_PLATINUM
128
+ ),
129
+ 'extensions' => array(
130
+ 'geo-targeting' => AdminHelper::isPluginActive('geo-targeting'),
131
+ 'advanced-closing' => AdminHelper::isPluginActive('advancedClosing')
132
+ ),
133
+ 'proEvents' => apply_filters('sgpbProEvents', array('inactivity', 'onScroll'))
134
+ )
135
+ );
136
+
137
+ $localizeData[] = array(
138
+ 'handle' => 'Backend.js',
139
+ 'name' => 'SGPB_JS_LOCALIZATION',
140
+ 'data' => $translatedData
141
+ );
142
+
143
+ $localizeData[] = array(
144
+ 'handle' => 'Popup.js',
145
+ 'name' => 'sgpbPublicUrl',
146
+ 'data' => SG_POPUP_PUBLIC_URL
147
+ );
148
+ }
149
+ else if ($pageName == SG_POPUP_SUBSCRIBERS_PAGE) {
150
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'select2.min.js', 'dep' => '', 'ver' => '3.86', 'inFooter' => '');
151
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'sgpbSelect2.js');
152
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Subscribers.js');
153
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Banner.js');
154
+
155
+ $localizeData[] = array(
156
+ 'handle' => 'Subscribers.js',
157
+ 'name' => 'SGPB_JS_PARAMS',
158
+ 'data' => array(
159
+ 'url' => admin_url('admin-ajax.php'),
160
+ 'nonce' => wp_create_nonce(SG_AJAX_NONCE),
161
+ 'packages' => array(
162
+ 'current' => SGPB_POPUP_PKG,
163
+ 'silver' => SGPB_POPUP_PKG_SILVER,
164
+ 'gold' => SGPB_POPUP_PKG_GOLD,
165
+ 'platinum' => SGPB_POPUP_PKG_PLATINUM
166
+ )
167
+ )
168
+ );
169
+
170
+ $localizeData[] = array(
171
+ 'handle' => 'sgpbSelect2.js',
172
+ 'name' => 'SGPB_JS_PACKAGES',
173
+ 'data' => array(
174
+ 'packages' => array(
175
+ 'current' => SGPB_POPUP_PKG,
176
+ 'free' => SGPB_POPUP_PKG_FREE,
177
+ 'silver' => SGPB_POPUP_PKG_SILVER,
178
+ 'gold' => SGPB_POPUP_PKG_GOLD,
179
+ 'platinum' => SGPB_POPUP_PKG_PLATINUM
180
+ )
181
+ )
182
+ );
183
+
184
+ $localizeData[] = array(
185
+ 'handle' => 'Subscribers.js',
186
+ 'name' => 'SGPB_JS_ADMIN_URL',
187
+ 'data' => array(
188
+ 'url' => SG_POPUP_ADMIN_URL.'admin-post.php',
189
+ 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
190
+ )
191
+ );
192
+
193
+ $localizeData[] = array(
194
+ 'handle' => 'Subscribers.js',
195
+ 'name' => 'SGPB_JS_LOCALIZATION',
196
+ 'data' => $translatedData
197
+ );
198
+
199
+ $localizeData[] = array(
200
+ 'handle' => 'Banner.js',
201
+ 'name' => 'SGPB_JS_PARAMS',
202
+ 'data' => array(
203
+ 'url' => admin_url('admin-ajax.php'),
204
+ 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
205
+ )
206
+ );
207
+ }
208
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Modals.js');
209
+ if (count($versionDetection = SgpbPopupVersionDetection::compareVersions())) {
210
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'sgpbDetect.js');
211
+ $localizeData[] = array(
212
+ 'handle' => 'sgpbDetect.js',
213
+ 'name' => 'SGPB_JS_DETECTIONS',
214
+ 'data' => $versionDetection
215
+ );
216
+ }
217
+
218
+ $scriptData = array(
219
+ 'jsFiles' => apply_filters('sgpbAdminJsFiles', $jsFiles),
220
+ 'localizeData' => apply_filters('sgpbAdminJsLocalizedData', $localizeData)
221
+ );
222
+
223
+ $scriptData = apply_filters('sgpbAdminJs', $scriptData);
224
+
225
+ return $scriptData;
226
+ }
227
+
228
+ public function getStyles($pageName, $data)
229
+ {
230
+ $cssFiles = array();
231
+ $newsletterPage = $this->getNewsletterPageKey();
232
+ $settingsPage = $this->getSettingsPageKey();
233
+
234
+ $allowPages = array(
235
+ 'popupType',
236
+ 'editpage',
237
+ 'popupspage',
238
+ 'popupbuilder_page_license',
239
+ $newsletterPage,
240
+ $settingsPage
241
+ );
242
+ if (in_array($pageName, $allowPages)) {
243
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'jquery.dateTimePicker.min.css', 'dep' => array(), 'ver' => rand(1, 1000), 'inFooter' => false);
244
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'sgbp-bootstrap.css', 'dep' => array(), 'ver' => rand(1, 1000), 'inFooter' => false);
245
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'popupAdminStyles.css', 'dep' => array(), 'ver' => rand(1, 1000), 'inFooter' => false);
246
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'select2.min.css', 'dep' => array(), 'ver' => rand(1, 1000), 'inFooter' => false);
247
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'theme.css', 'dep' => array(), 'ver' => rand(1, 1000), 'inFooter' => false);
248
+ $cssFiles[] = array('folderUrl' => '', 'filename' => 'wp-color-picker');
249
+ }
250
+ else if ($pageName == SG_POPUP_SUBSCRIBERS_PAGE) {
251
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'sgbp-bootstrap.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
252
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'popupAdminStyles.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
253
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'select2.min.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
254
+
255
+ }
256
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'sgpb-modal.css', 'dep' => array(), 'ver' => rand(1, 10000), 'inFooter' => false);
257
+
258
+ $cssData = array(
259
+ 'cssFiles' => apply_filters('sgpbAdminCssFiles', $cssFiles)
260
+ );
261
+ return $cssData;
262
+ }
263
+
264
+ public function getFrontendScripts($page, $popupObjs)
265
+ {
266
+ $translatedData = ConfigDataHelper::getJsLocalizedData();
267
+ $jsFiles = array();
268
+ $localizeData = array();
269
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'Popup.js', 'dep' => array('jquery'));
270
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'PopupConfig.js', 'dep' => array('Popup.js'));
271
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'PopupBuilder.js', 'dep' => array('PopupConfig.js'));
272
+ if (SGPB_POPUP_PKG >= SGPB_POPUP_PKG_SILVER) {
273
+ $jsFiles[] = array('folderUrl'=> SG_POPUP_JS_URL, 'filename' => 'PopupBuilderProFunctionality.js', 'dep' => array('jquery'));
274
+ }
275
+
276
+ $localizeData[] = array(
277
+ 'handle' => 'PopupBuilder.js',
278
+ 'name' => 'SGPB_POPUP_PARAMS',
279
+ 'data' => array(
280
+ 'popupTypeAgeRestriction' => SGPB_POPUP_TYPE_RESTRICTION,
281
+ 'defaultThemeImages' => array(
282
+ 1 => AdminHelper::defaultButtonImage('sgpb-theme-1'),
283
+ 2 => AdminHelper::defaultButtonImage('sgpb-theme-2'),
284
+ 3 => AdminHelper::defaultButtonImage('sgpb-theme-3'),
285
+ 5 => AdminHelper::defaultButtonImage('sgpb-theme-5'),
286
+ 6 => AdminHelper::defaultButtonImage('sgpb-theme-6')
287
+ ),
288
+ 'homePageUrl' => get_home_url().'/',
289
+ 'isPreview' => isset($_GET['sg_popup_preview_id']),
290
+ 'convertedIdsReverse' => AdminHelper::getReverseConvertIds(),
291
+ 'dontShowPopupExpireTime' => SGPB_DONT_SHOW_POPUP_EXPIRY,
292
+ 'conditionalJsClasses' => apply_filters('sgpbConditionalJsClasses', array()),
293
+ 'disableAnalyticsGeneral' => AdminHelper::getOption('sgpb-enable-debug-mode')
294
+ )
295
+ );
296
+
297
+ $localizeData[] = array(
298
+ 'handle' => 'PopupBuilder.js',
299
+ 'name' => 'SGPB_JS_PACKAGES',
300
+ 'data' => array(
301
+ 'packages' => array(
302
+ 'current' => SGPB_POPUP_PKG,
303
+ 'free' => SGPB_POPUP_PKG_FREE,
304
+ 'silver' => SGPB_POPUP_PKG_SILVER,
305
+ 'gold' => SGPB_POPUP_PKG_GOLD,
306
+ 'platinum' => SGPB_POPUP_PKG_PLATINUM
307
+ ),
308
+ 'extensions' => array(
309
+ 'geo-targeting' => AdminHelper::isPluginActive('geo-targeting'),
310
+ 'advanced-closing' => AdminHelper::isPluginActive('advancedClosing')
311
+ )
312
+ )
313
+ );
314
+
315
+ $localizeData[] = array(
316
+ 'handle' => 'Popup.js',
317
+ 'name' => 'sgpbPublicUrl',
318
+ 'data' => SG_POPUP_PUBLIC_URL
319
+ );
320
+
321
+ $localizeData[] = array(
322
+ 'handle' => 'Popup.js',
323
+ 'name' => 'SGPB_JS_LOCALIZATION',
324
+ 'data' => $translatedData
325
+ );
326
+
327
+ $localizeData[] = array(
328
+ 'handle' => 'PopupBuilder.js',
329
+ 'name' => 'SGPB_JS_PARAMS',
330
+ 'data' => array(
331
+ 'ajaxUrl' => admin_url('admin-ajax.php'),
332
+ 'nonce' => wp_create_nonce(SG_AJAX_NONCE)
333
+ )
334
+ );
335
+
336
+ $scriptData = array(
337
+ 'jsFiles' => apply_filters('sgpbFrontendJsFiles', $jsFiles),
338
+ 'localizeData' => apply_filters('sgpbFrontendJsLocalizedData', $localizeData)
339
+ );
340
+
341
+ $scriptData = apply_filters('sgpbFrontendJs', $scriptData);
342
+
343
+ return $scriptData;
344
+ }
345
+
346
+ public function getFrontendStyles($page, $data)
347
+ {
348
+ $cssFiles = array();
349
+ $cssFiles[] = array('folderUrl' => SG_POPUP_CSS_URL, 'filename' => 'theme.css', 'dep' => array(), 'ver' => SG_POPUP_VERSION, 'inFooter' => false);
350
+
351
+ $cssData = array(
352
+ 'cssFiles' => apply_filters('sgpbFrontendCssFiles', $cssFiles)
353
+ );
354
+
355
+ return $cssData;
356
+ }
357
+
358
+ }
com/classes/extension/SgpbPopupExtensionActivator.php CHANGED
@@ -1,108 +1,108 @@
1
- <?php
2
- namespace sgpb;
3
-
4
- class PopupExtensionActivator
5
- {
6
- public function activate()
7
- {
8
- $extensions = get_option('sgpbExtensionsInfo');
9
-
10
- if (empty($extensions)) {
11
- return false;
12
- }
13
-
14
- foreach ($extensions as $folderName => $extension) {
15
- if (empty($extension['key'])) {
16
- continue;
17
- }
18
- $key = $extension['key'];
19
-
20
- if ($folderName == 'popupbuilder-woocommerce') {
21
- $key = $folderName.'/popupbuilderWoocommerce.php';
22
- }
23
- else if ($folderName == 'popupbuilder-restriction') {
24
- $key = $folderName.'/PopupBuilderAgerestriction.php';
25
- }
26
- else if ($folderName == 'popupbuilder-aweber') {
27
- $key = $folderName.'/PopupBuilderAWeber.php';
28
- }
29
- else if ($folderName == 'popupbuilder-adblock') {
30
- $key = $folderName.'/PopupBuilderAdBlock.php';
31
- }
32
-
33
- activate_plugin($key);
34
- }
35
-
36
- return true;
37
- }
38
-
39
- private function getExtensionsInfo()
40
- {
41
- $extensionsInfo = array();
42
- if (!file_exists(SG_POPUP_BUILDER_PATH.'extensions')) {
43
- return $extensionsInfo;
44
- }
45
- $it = new \RecursiveDirectoryIterator(SG_POPUP_BUILDER_PATH.'extensions', \RecursiveDirectoryIterator::SKIP_DOTS);
46
-
47
-
48
- foreach ($it as $path => $fileInfo) {
49
- if (empty($fileInfo)) {
50
- continue;
51
- }
52
- $extensionFolderName = $fileInfo->getFilename();
53
- $extensionMainFile = $this->getExtensionMainFile($extensionFolderName);
54
- $extensionKey = $extensionFolderName.'/'.$extensionMainFile;
55
-
56
- $extensionsInfo[$extensionFolderName] = array('key' => $extensionKey, 'mainFileName' => $extensionMainFile);
57
- }
58
-
59
- return $extensionsInfo;
60
- }
61
-
62
- public function install()
63
- {
64
- $extensionsInfo = $this->getExtensionsInfo();
65
-
66
- if (!get_option('sgpbExtensionsInfo')) {
67
- update_option('sgpbExtensionsInfo', $extensionsInfo);
68
- }
69
- $this->moveExtensionToPluginsSection($extensionsInfo);
70
- }
71
-
72
- private function moveExtensionToPluginsSection($extensionsInfo)
73
- {
74
- foreach ($extensionsInfo as $extensionFolder => $extensionsDetail) {
75
- $passedExtension = WP_PLUGIN_DIR.DIRECTORY_SEPARATOR.$extensionFolder.DIRECTORY_SEPARATOR;
76
- $originalExtension = SG_POPUP_BUILDER_PATH.'extensions'.DIRECTORY_SEPARATOR.$extensionFolder.DIRECTORY_SEPARATOR;
77
- @rename($originalExtension,$passedExtension);
78
- }
79
- }
80
-
81
- private function getExtensionMainFile($folderName)
82
- {
83
- if (empty($folderName)) {
84
- return '';
85
- }
86
-
87
- $explodedData = explode('-', $folderName);
88
-
89
- if (empty($explodedData)) {
90
- return '';
91
- }
92
- $explodedData = array_filter(array_values($explodedData), array($this, 'ucifirstElements'));
93
- $fileName = implode('', $explodedData);
94
-
95
- return $fileName.'.php';
96
- }
97
-
98
- private function ucifirstElements(&$element)
99
- {
100
- if ($element == 'popupbuilder') {
101
- $element = 'PopupBuilder';
102
- return $element;
103
- }
104
- $element = ucfirst($element);
105
-
106
- return $element;
107
- }
108
- }
1
+ <?php
2
+ namespace sgpb;
3
+
4
+ class PopupExtensionActivator
5
+ {
6
+ public function activate()
7
+ {
8
+ $extensions = get_option('sgpbExtensionsInfo');
9
+
10
+ if (empty($extensions)) {
11
+ return false;
12
+ }
13
+
14
+ foreach ($extensions as $folderName => $extension) {
15
+ if (empty($extension['key'])) {
16
+ continue;
17
+ }
18
+ $key = $extension['key'];
19
+
20
+ if ($folderName == 'popupbuilder-woocommerce') {
21
+ $key = $folderName.'/popupbuilderWoocommerce.php';
22
+ }
23
+ else if ($folderName == 'popupbuilder-restriction') {
24
+ $key = $folderName.'/PopupBuilderAgerestriction.php';
25
+ }
26
+ else if ($folderName == 'popupbuilder-aweber') {
27
+ $key = $folderName.'/PopupBuilderAWeber.php';
28
+ }
29
+ else if ($folderName == 'popupbuilder-adblock') {
30
+ $key = $folderName.'/PopupBuilderAdBlock.php';
31
+ }
32
+
33
+ activate_plugin($key);
34
+ }
35
+
36
+ return true;
37
+ }
38
+
39
+ private function getExtensionsInfo()
40
+ {
41
+ $extensionsInfo = array();
42
+ if (!file_exists(SG_POPUP_BUILDER_PATH.'extensions')) {
43
+ return $extensionsInfo;
44
+ }
45
+ $it = new \RecursiveDirectoryIterator(SG_POPUP_BUILDER_PATH.'extensions', \RecursiveDirectoryIterator::SKIP_DOTS);
46
+
47
+
48
+ foreach ($it as $path => $fileInfo) {
49
+ if (empty($fileInfo)) {
50
+ continue;
51
+ }
52
+ $extensionFolderName = $fileInfo->getFilename();
53
+ $extensionMainFile = $this->getExtensionMainFile($extensionFolderName);
54
+ $extensionKey = $extensionFolderName.'/'.$extensionMainFile;
55
+
56
+ $extensionsInfo[$extensionFolderName] = array('key' => $extensionKey, 'mainFileName' => $extensionMainFile);
57
+ }
58
+
59
+ return $extensionsInfo;
60
+ }
61
+
62
+ public function install()
63
+ {
64
+ $extensionsInfo = $this->getExtensionsInfo();
65
+
66
+ if (!get_option('sgpbExtensionsInfo')) {
67
+ update_option('sgpbExtensionsInfo', $extensionsInfo);
68
+ }
69
+ $this->moveExtensionToPluginsSection($extensionsInfo);
70
+ }
71
+
72
+ private function moveExtensionToPluginsSection($extensionsInfo)
73
+ {
74
+ foreach ($extensionsInfo as $extensionFolder => $extensionsDetail) {
75
+ $passedExtension = WP_PLUGIN_DIR.DIRECTORY_SEPARATOR.$extensionFolder.DIRECTORY_SEPARATOR;
76
+ $originalExtension = SG_POPUP_BUILDER_PATH.'extensions'.DIRECTORY_SEPARATOR.$extensionFolder.DIRECTORY_SEPARATOR;
77
+ @rename($originalExtension,$passedExtension);
78
+ }
79
+ }
80
+
81
+ private function getExtensionMainFile($folderName)
82
+ {
83
+ if (empty($folderName)) {
84
+ return '';
85
+ }
86
+
87
+ $explodedData = explode('-', $folderName);
88
+
89
+ if (empty($explodedData)) {
90
+ return '';
91
+ }
92
+ $explodedData = array_filter(array_values($explodedData), array($this, 'ucifirstElements'));
93
+ $fileName = implode('', $explodedData);
94
+
95
+ return $fileName.'.php';
96
+ }
97
+
98
+ private function ucifirstElements(&$element)
99
+ {
100
+ if ($element == 'popupbuilder') {
101
+ $element = 'PopupBuilder';
102
+ return $element;
103
+ }
104
+ $element = ucfirst($element);
105
+
106
+ return $element;
107
+ }
108
+ }
com/classes/extension/SgpbPopupExtensionRegister.php CHANGED
@@ -1,120 +1,120 @@
1
- <?php
2
- use sgpb\AdminHelper;
3
-
4
- class SgpbPopupExtensionRegister
5
- {
6
- public static function register($pluginName, $classPath, $className, $options = array())
7
- {
8
- if (is_multisite() && is_network_admin()) {
9
- global $wp_version;
10
-
11
- if ($wp_version > '4.6.0') {
12
- $blogs = get_sites();
13
- }
14
- else {
15
- $blogs = wp_get_sites();
16
- }
17
-
18
- foreach ($blogs as $blog) {
19
- /* $blog -> List of WP_Site objects for wp > 4.6 otherwise, an associative array of WP_Site data as arrays. */
20
- $blogId = is_object($blog)?$blog->blog_id:$blog['blog_id'];
21
- switch_to_blog($blogId);
22
- }
23
- return;
24
- }
25
-
26
- self::registerPlugin($pluginName, $classPath, $className, $options);
27
- }
28
-
29
- private static function registerPlugin($pluginName, $classPath, $className, $options = array())
30
- {
31
- $registeredData = array();
32
- $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
33
-
34
- if (!empty($registeredPlugins)) {
35
- $registeredData = $registeredPlugins;
36
- $registeredData = json_decode($registeredData, true);
37
- }
38
-
39
- if (empty($classPath) || empty($className)) {
40
- if(!empty($registeredData[$pluginName])) {
41
- /*Delete the plugin from the registered plugins' list if the class name or the class path is empty.*/
42
- unset($registeredData[$pluginName]);
43
- AdminHelper::updateOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS, $registeredData);
44
- }
45
-
46
- return;
47
- }
48
- $classPath = str_replace(SG_POPUP_PLUGIN_PATH, '', $classPath);
49
- $pluginData['classPath'] = $classPath;
50
- $pluginData['className'] = $className;
51
- $pluginData['options'] = $options;
52
-
53
- $registeredData[$pluginName] = $pluginData;
54
- $registeredData = json_encode($registeredData);
55
-
56
- AdminHelper::updateOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS, $registeredData);
57
- // it seems we have an inactive extension now
58
- AdminHelper::updateOption('SGPB_INACTIVE_EXTENSIONS', 'inactive');
59
-
60
- do_action('sgpb_extension_activation_hook', $pluginData);
61
- }
62
-
63
- private static function isPluginActive($plugin)
64
- {
65
- $activePlugins = (array)AdminHelper::getOption('active_plugins', array(1));
66
- return in_array($plugin, $activePlugins, true);
67
- }
68
-
69
- public static function remove($pluginName)
70
- {
71
- if (is_multisite() && is_network_admin()) {
72
- global $wp_version;
73
-
74
- if ($wp_version > '4.6.0') {
75
- $blogs = get_sites();
76
- }
77
- else {
78
- $blogs = wp_get_sites();
79
- }
80
-
81
- foreach ($blogs as $blog) {
82
- /* $blog -> List of WP_Site objects for wp > 4.6 otherwise, an associative array of WP_Site data as arrays. */
83
- $blogId = is_object($blog)?$blog->blog_id:$blog['blog_id'];
84
- switch_to_blog($blogId);
85
- if (!self::isPluginActive($pluginName)) {
86
- self::removePlugin($pluginName);
87
- }
88
- restore_current_blog();
89
- }
90
- return;
91
- }
92
-
93
- self::removePlugin($pluginName);
94
- }
95
-
96
- private static function removePlugin($pluginName)
97
- {
98
- $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
99
-
100
- if (!$registeredPlugins) {
101
- return false;
102
- }
103
-
104
- $registeredData = json_decode($registeredPlugins, true);
105
-
106
- if(empty($registeredData)) {
107
- return false;
108
- }
109
-
110
- if (empty($registeredData[$pluginName])) {
111
- return false;
112
- }
113
- unset($registeredData[$pluginName]);
114
- $registeredData = json_encode($registeredData);
115
-
116
- AdminHelper::updateOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS, $registeredData);
117
-
118
- return true;
119
- }
120
- }
1
+ <?php
2
+ use sgpb\AdminHelper;
3
+
4
+ class SgpbPopupExtensionRegister
5
+ {
6
+ public static function register($pluginName, $classPath, $className, $options = array())
7
+ {
8
+ if (is_multisite() && is_network_admin()) {
9
+ global $wp_version;
10
+
11
+ if ($wp_version > '4.6.0') {
12
+ $blogs = get_sites();
13
+ }
14
+ else {
15
+ $blogs = wp_get_sites();
16
+ }
17
+
18
+ foreach ($blogs as $blog) {
19
+ /* $blog -> List of WP_Site objects for wp > 4.6 otherwise, an associative array of WP_Site data as arrays. */
20
+ $blogId = is_object($blog)?$blog->blog_id:$blog['blog_id'];
21
+ switch_to_blog($blogId);
22
+ }
23
+ return;
24
+ }
25
+
26
+ self::registerPlugin($pluginName, $classPath, $className, $options);
27
+ }
28
+
29
+ private static function registerPlugin($pluginName, $classPath, $className, $options = array())
30
+ {
31
+ $registeredData = array();
32
+ $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
33
+
34
+ if (!empty($registeredPlugins)) {
35
+ $registeredData = $registeredPlugins;
36
+ $registeredData = json_decode($registeredData, true);
37
+ }
38
+
39
+ if (empty($classPath) || empty($className)) {
40
+ if(!empty($registeredData[$pluginName])) {
41
+ /*Delete the plugin from the registered plugins' list if the class name or the class path is empty.*/
42
+ unset($registeredData[$pluginName]);
43
+ AdminHelper::updateOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS, $registeredData);
44
+ }
45
+
46
+ return;
47
+ }
48
+ $classPath = str_replace(SG_POPUP_PLUGIN_PATH, '', $classPath);
49
+ $pluginData['classPath'] = $classPath;
50
+ $pluginData['className'] = $className;
51
+ $pluginData['options'] = $options;
52
+
53
+ $registeredData[$pluginName] = $pluginData;
54
+ $registeredData = json_encode($registeredData);
55
+
56
+ AdminHelper::updateOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS, $registeredData);
57
+ // it seems we have an inactive extension now
58
+ AdminHelper::updateOption('SGPB_INACTIVE_EXTENSIONS', 'inactive');
59
+
60
+ do_action('sgpb_extension_activation_hook', $pluginData);
61
+ }
62
+
63
+ private static function isPluginActive($plugin)
64
+ {
65
+ $activePlugins = (array)AdminHelper::getOption('active_plugins', array(1));
66
+ return in_array($plugin, $activePlugins, true);
67
+ }
68
+
69
+ public static function remove($pluginName)
70
+ {
71
+ if (is_multisite() && is_network_admin()) {
72
+ global $wp_version;
73
+
74
+ if ($wp_version > '4.6.0') {
75
+ $blogs = get_sites();
76
+ }
77
+ else {
78
+ $blogs = wp_get_sites();
79
+ }
80
+
81
+ foreach ($blogs as $blog) {
82
+ /* $blog -> List of WP_Site objects for wp > 4.6 otherwise, an associative array of WP_Site data as arrays. */
83
+ $blogId = is_object($blog)?$blog->blog_id:$blog['blog_id'];
84
+ switch_to_blog($blogId);
85
+ if (!self::isPluginActive($pluginName)) {
86
+ self::removePlugin($pluginName);
87
+ }
88
+ restore_current_blog();
89
+ }
90
+ return;
91
+ }
92
+
93
+ self::removePlugin($pluginName);
94
+ }
95
+
96
+ private static function removePlugin($pluginName)
97
+ {
98
+ $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
99
+
100
+ if (!$registeredPlugins) {
101
+ return false;
102
+ }
103
+
104
+ $registeredData = json_decode($registeredPlugins, true);
105
+
106
+ if(empty($registeredData)) {
107
+ return false;
108
+ }
109
+
110
+ if (empty($registeredData[$pluginName])) {
111
+ return false;
112
+ }
113
+ unset($registeredData[$pluginName]);
114
+ $registeredData = json_encode($registeredData);
115
+
116
+ AdminHelper::updateOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS, $registeredData);
117
+
118
+ return true;
119
+ }
120
+ }
com/classes/popups/FblikePopup.php CHANGED
@@ -1,114 +1,114 @@
1
- <?php
2
- namespace sgpb;
3
- require_once(dirname(__FILE__).'/SGPopup.php');
4
-
5
- class FblikePopup extends SGPopup
6
- {
7
- public function getOptionValue($optionName, $forceDefaultValue = false)
8
- {
9
- return parent::getOptionValue($optionName, $forceDefaultValue);
10
- }
11
-
12
- public function getPopupTypeOptionsView()
13
- {
14
- return array(
15
- 'filePath' => SG_POPUP_TYPE_OPTIONS_PATH.'facebook.php',
16
- 'metaboxTitle' => 'Facebook Settings',
17
- 'short_description' => 'Select your Facebook page URL for liking and sharing it'
18
- );
19
- }
20
-
21
- private function getScripts()
22
- {
23
- /*get WordPress localization name*/
24
- $locale = $this->getSiteLocale();
25
- ob_start();
26
- ?>
27
- <script>
28
- jQuery(window).on('sgpbDidOpen', function (e) {
29
- var sgpbOldCB = window.fbAsyncInit;
30
- window.fbAsyncInit = function () {
31
- if (typeof sgpbOldCB === 'function') {
32
- sgpbOldCB();
33
- }
34
- FB.init({
35
- appId: <?php echo SGPB_FACEBOOK_APP_ID;?>
36
- });
37
- };
38
- (function(d, s, id) {
39
- var js, fjs = d.getElementsByTagName(s)[0];
40
- if (d.getElementById(id)) return;
41
- js = d.createElement(s); js.id = id;
42
- js.src = 'https://connect.facebook.net/<?php echo $locale;?>/all.js#xfbml=1&version=v2.11&appId=<?php echo SGPB_FACEBOOK_APP_ID;?>';
43
- fjs.parentNode.insertBefore(js, fjs);
44
- }(document, 'script', 'facebook-jssdk'));
45
- });
46
- </script>
47
- <?php
48
- $scripts = ob_get_contents();
49
- ob_get_clean();
50
-
51
- return $scripts;
52
- }
53
-
54
- private function getButtonConfig($shareUrl, $layout, $shareButtonStatus)
55
- {
56
- ob_start();
57
- ?>
58
- <div class='sg-fb-buttons-wrapper sgpb-fb-wrapper-<?php echo $layout;?>'>
59
- <div class="fb-like"
60
- data-href="<?php echo $shareUrl; ?>"
61
- data-layout="<?php echo $layout; ?>"
62
- data-action="like"
63
- data-size="small"
64
- data-show-faces="true"
65
- data-share="<?php echo $shareButtonStatus; ?>">
66
- </div>
67
- </div>
68
- <?php
69
- $buttonConfig = ob_get_contents();
70
- ob_get_clean();
71
-
72
- return $buttonConfig;
73
- }
74
-
75
- private function getFblikeContent()
76
- {
77
- $options = $this->getOptions();
78
- $shareUrl = $options['sgpb-fblike-like-url'];
79
- $layout = $options['sgpb-fblike-layout'];
80
- $shareButtonStatus = true;
81
- if (!empty($options['sgpb-fblike-dont-show-share-button'])) {
82
- $shareButtonStatus = false;
83
- }
84
-
85
- $scripts = $this->getScripts();
86
- $buttonConfig = $this->getButtonConfig($shareUrl, $layout, $shareButtonStatus);
87
- ob_start();
88
- ?>
89
- <div id="sg-facebook-like">
90
- <div id="fb-root"></div>
91
- <?php echo $buttonConfig; ?>
92
- <?php echo $scripts; ?>
93
- </div>
94
- <?php
95
- $content = ob_get_contents();
96
- ob_get_clean();
97
-
98
- return $content;
99
- }
100
-
101
- public function getPopupTypeContent()
102
- {
103
- $fbLikeContent = $this->getFblikeContent();
104
- $popupContent = $this->getContent();
105
- $popupContent .= $fbLikeContent;
106
-
107
- return $popupContent;
108
- }
109
-
110
- public function getExtraRenderOptions()
111
- {
112
- return array();
113
- }
114
- }
1
+ <?php
2
+ namespace sgpb;
3
+ require_once(dirname(__FILE__).'/SGPopup.php');
4
+
5
+ class FblikePopup extends SGPopup
6
+ {
7
+ public function getOptionValue($optionName, $forceDefaultValue = false)
8
+ {
9
+ return parent::getOptionValue($optionName, $forceDefaultValue);
10
+ }
11
+
12
+ public function getPopupTypeOptionsView()
13
+ {
14
+ return array(
15
+ 'filePath' => SG_POPUP_TYPE_OPTIONS_PATH.'facebook.php',
16
+ 'metaboxTitle' => 'Facebook Settings',
17
+ 'short_description' => 'Select your Facebook page URL for liking and sharing it'
18
+ );
19
+ }
20
+
21
+ private function getScripts()
22
+ {
23
+ /*get WordPress localization name*/
24
+ $locale = $this->getSiteLocale();
25
+ ob_start();
26
+ ?>
27
+ <script>
28
+ jQuery(window).on('sgpbDidOpen', function (e) {
29
+ var sgpbOldCB = window.fbAsyncInit;
30
+ window.fbAsyncInit = function () {
31
+ if (typeof sgpbOldCB === 'function') {
32
+ sgpbOldCB();
33
+ }
34
+ FB.init({
35
+ appId: <?php echo SGPB_FACEBOOK_APP_ID;?>
36
+ });
37
+ };
38
+ (function(d, s, id) {
39
+ var js, fjs = d.getElementsByTagName(s)[0];
40
+ if (d.getElementById(id)) return;
41
+ js = d.createElement(s); js.id = id;
42
+ js.src = 'https://connect.facebook.net/<?php echo $locale;?>/all.js#xfbml=1&version=v2.11&appId=<?php echo SGPB_FACEBOOK_APP_ID;?>';
43
+ fjs.parentNode.insertBefore(js, fjs);
44
+ }(document, 'script', 'facebook-jssdk'));
45
+ });
46
+ </script>
47
+ <?php
48
+ $scripts = ob_get_contents();
49
+ ob_get_clean();
50
+
51
+ return $scripts;
52
+ }
53
+
54
+ private function getButtonConfig($shareUrl, $layout, $shareButtonStatus)
55
+ {
56
+ ob_start();
57
+ ?>
58
+ <div class='sg-fb-buttons-wrapper sgpb-fb-wrapper-<?php echo $layout;?>'>
59
+ <div class="fb-like"
60
+ data-href="<?php echo $shareUrl; ?>"
61
+ data-layout="<?php echo $layout; ?>"
62
+ data-action="like"
63
+ data-size="small"
64
+ data-show-faces="true"
65
+ data-share="<?php echo $shareButtonStatus; ?>">
66
+ </div>
67
+ </div>
68
+ <?php
69
+ $buttonConfig = ob_get_contents();
70
+ ob_get_clean();
71
+
72
+ return $buttonConfig;
73
+ }
74
+
75
+ private function getFblikeContent()
76
+ {
77
+ $options = $this->getOptions();
78
+ $shareUrl = $options['sgpb-fblike-like-url'];
79
+ $layout = $options['sgpb-fblike-layout'];
80
+ $shareButtonStatus = true;
81
+ if (!empty($options['sgpb-fblike-dont-show-share-button'])) {
82
+ $shareButtonStatus = false;
83
+ }
84
+
85
+ $scripts = $this->getScripts();
86
+ $buttonConfig = $this->getButtonConfig($shareUrl, $layout, $shareButtonStatus);
87
+ ob_start();
88
+ ?>
89
+ <div id="sg-facebook-like">
90
+ <div id="fb-root"></div>
91
+ <?php echo $buttonConfig; ?>
92
+ <?php echo $scripts; ?>
93
+ </div>
94
+ <?php
95
+ $content = ob_get_contents();
96
+ ob_get_clean();
97
+
98
+ return $content;
99
+ }
100
+
101
+ public function getPopupTypeContent()
102
+ {
103
+ $fbLikeContent = $this->getFblikeContent();
104
+ $popupContent = $this->getContent();
105
+ $popupContent .= $fbLikeContent;
106
+
107
+ return $popupContent;
108
+ }
109
+
110
+ public function getExtraRenderOptions()
111
+ {
112
+ return array();
113
+ }
114
+ }
com/classes/popups/HtmlPopup.php CHANGED
@@ -1,38 +1,38 @@
1
- <?php
2
- namespace sgpb;
3
- require_once(dirname(__FILE__).'/SGPopup.php') ;
4
- class HtmlPopup extends SGPopup
5
- {
6
-
7
- public function getOptionValue($optionName, $forceDefaultValue = false)
8
- {
9
- return parent::getOptionValue($optionName, $forceDefaultValue);
10
- }
11
-
12
- public function getPopupTypeOptionsView()
13
- {
14
- return array();
15
- }
16
-
17
- public function getPopupTypeMainView()
18
- {
19
- return array();
20
- }
21
-
22
- public function getPopupTypeContent()
23
- {
24
- $htmlContent = '';
25
- $popupContent = $this->getContent();
26
- $htmlContent .= '<div class="sgpb-main-html-content-wrapper">';
27
- $htmlContent .= $popupContent;
28
- $htmlContent .= '</div>';
29
-
30
- return $htmlContent;
31
- }
32
-
33
- public function getExtraRenderOptions()
34
- {
35
- return array();
36
- }
37
- }
38
-
1
+ <?php
2
+ namespace sgpb;
3
+ require_once(dirname(__FILE__).'/SGPopup.php') ;
4
+ class HtmlPopup extends SGPopup
5
+ {
6
+
7
+ public function getOptionValue($optionName, $forceDefaultValue = false)
8
+ {
9
+ return parent::getOptionValue($optionName, $forceDefaultValue);
10
+ }
11
+
12
+ public function getPopupTypeOptionsView()
13
+ {
14
+ return array();
15
+ }
16
+
17
+ public function getPopupTypeMainView()
18
+ {
19
+ return array();
20
+ }
21
+
22
+ public function getPopupTypeContent()
23
+ {
24
+ $htmlContent = '';
25
+ $popupContent = $this->getContent();
26
+ $htmlContent .= '<div class="sgpb-main-html-content-wrapper">';
27
+ $htmlContent .= $popupContent;
28
+ $htmlContent .= '</div>';
29
+
30
+ return $htmlContent;
31
+ }
32
+
33
+ public function getExtraRenderOptions()
34
+ {
35
+ return array();
36
+ }
37
+ }
38
+
com/classes/popups/ImagePopup.php CHANGED
@@ -1,90 +1,90 @@
1
- <?php
2
- namespace sgpb;
3
- require_once(dirname(__FILE__).'/SGPopup.php');
4
-
5
- class ImagePopup extends SGPopup
6
- {
7
- public function save()
8
- {
9
- $imageData = '';
10
- $savedImageUrl = '';
11
- $data = $this->getSanitizedData();
12
- $imageUrl = @$data['sgpb-image-url'];
13
- $savedPopup = $this->getSavedPopup();
14
-
15
- if (is_object($savedPopup)) {
16
- $imageData = $savedPopup->getOptionvalue('sgpb-image-data');
17
- $savedImageUrl = $savedPopup->getOptionValue('sgpb-image-url');
18
- }
19
-
20
- $data['sgpb-image-url'] = $imageUrl;
21
- $this->setSanitizedData($data);
22
-
23
- parent::save();
24
- }
25
-
26
- public function getOptionValue($optionName, $forceDefaultValue = false)
27
- {
28
- return parent::getOptionValue($optionName, $forceDefaultValue);
29
- }
30
-
31
- public function getPopupTypeOptionsView()
32
- {
33
- return array(
34
- 'filePath' => SG_POPUP_TYPE_MAIN_PATH.'image.php',
35
- 'metaboxTitle' => 'Image Settings',
36
- 'short_description' => 'Upload your feature image for the popup'
37
- );
38
- }
39
-
40
- public function getRemoveOptions()
41
- {
42
-
43
- // Where 1 mean this options must not show for this popup type
44
- $removeOptions = array(
45
- 'sgpb-reopen-after-form-submission' => 1,
46
- 'sgpb-background-image' => 1,
47
- 'sgpb-background-image-mode' => 1,
48
- 'sgpb-force-rtl' => 1,
49
- 'sgpb-content-padding' => 1
50
- );
51
- $parentOptions = parent::getRemoveOptions();
52
- if ($this->getType() != 'image') {
53
- return $parentOptions;
54
- }
55
-
56
- return $removeOptions + $parentOptions;
57
- }
58
-
59
- public function getPopupTypeMainView()
60
- {
61
- return array();
62
- }
63
-
64
- /**
65
- * It returns what the current post supports (for example: title, editor, etc...)
66
- *
67
- * @since 1.0.0
68
- *
69
- * @return array
70
- */
71
- public static function getPopupTypeSupports()
72
- {
73
- return array('title');
74
- }
75
-
76
- public function getPopupTypeContent()
77
- {
78
- $id = $this->getId();
79
- $imageUrl = $this->getOptionValue('sgpb-image-url');
80
-
81
- $imageAltText = AdminHelper::getImageAltTextByUrl($imageUrl);
82
-
83
- return '<img width="1" height="1" class="sgpb-preloaded-image-'.$id.'" alt="'.$imageAltText.'" src="'.$imageUrl.'" style="position:absolute;right:9999999999999px;">';
84
- }
85
-
86
- public function getExtraRenderOptions()
87
- {
88
- return array();
89
- }
90
- }
1
+ <?php
2
+ namespace sgpb;
3
+ require_once(dirname(__FILE__).'/SGPopup.php');
4
+
5
+ class ImagePopup extends SGPopup
6
+ {
7
+ public function save()
8
+ {
9
+ $imageData = '';
10
+ $savedImageUrl = '';
11
+ $data = $this->getSanitizedData();
12
+ $imageUrl = @$data['sgpb-image-url'];
13
+ $savedPopup = $this->getSavedPopup();
14
+
15
+ if (is_object($savedPopup)) {
16
+ $imageData = $savedPopup->getOptionvalue('sgpb-image-data');
17
+ $savedImageUrl = $savedPopup->getOptionValue('sgpb-image-url');
18
+ }
19
+
20
+ $data['sgpb-image-url'] = $imageUrl;
21
+ $this->setSanitizedData($data);
22
+
23
+ parent::save();
24
+ }
25
+
26
+ public function getOptionValue($optionName, $forceDefaultValue = false)
27
+ {
28
+ return parent::getOptionValue($optionName, $forceDefaultValue);
29
+ }
30
+
31
+ public function getPopupTypeOptionsView()
32
+ {
33
+ return array(
34
+ 'filePath' => SG_POPUP_TYPE_MAIN_PATH.'image.php',
35
+ 'metaboxTitle' => 'Image Settings',
36
+ 'short_description' => 'Upload your feature image for the popup'
37
+ );
38
+ }
39
+
40
+ public function getRemoveOptions()
41
+ {
42
+
43
+ // Where 1 mean this options must not show for this popup type
44
+ $removeOptions = array(
45
+ 'sgpb-reopen-after-form-submission' => 1,
46
+ 'sgpb-background-image' => 1,
47
+ 'sgpb-background-image-mode' => 1,
48
+ 'sgpb-force-rtl' => 1,
49
+ 'sgpb-content-padding' => 1
50
+ );
51
+ $parentOptions = parent::getRemoveOptions();
52
+ if ($this->getType() != 'image') {
53
+ return $parentOptions;
54
+ }
55
+
56
+ return $removeOptions + $parentOptions;
57
+ }
58
+
59
+ public function getPopupTypeMainView()
60
+ {
61
+ return array();
62
+ }
63
+
64
+ /**
65
+ * It returns what the current post supports (for example: title, editor, etc...)
66
+ *
67
+ * @since 1.0.0
68
+ *
69
+ * @return array
70
+ */
71
+ public static function getPopupTypeSupports()
72
+ {
73
+ return array('title');
74
+ }
75
+
76
+ public function getPopupTypeContent()
77
+ {
78
+ $id = $this->getId();
79
+ $imageUrl = $this->getOptionValue('sgpb-image-url');
80
+
81
+ $imageAltText = AdminHelper::getImageAltTextByUrl($imageUrl);
82
+
83
+ return '<img width="1" height="1" class="sgpb-preloaded-image-'.$id.'" alt="'.$imageAltText.'" src="'.$imageUrl.'" style="position:absolute;right:9999999999999px;">';
84
+ }
85
+
86
+ public function getExtraRenderOptions()
87
+ {
88
+ return array();
89
+ }
90
+ }
com/classes/popups/PopupData.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
- namespace sgpb;
3
-
4
- class PopupData
5
- {
6
- private static $popupData = array();
7
-
8
- private function __construct()
9
- {
10
- }
11
-
12
- public static function getPopupDataById($popupId, $saveMode = '')
13
- {
14
- if (!isset(self::$popupData[$popupId])) {
15
- self::$popupData[$popupId] = SGPopup::getSavedData($popupId, $saveMode);
16
- }
17
-
18
- return self::$popupData[$popupId];
19
- }
20
- }
1
+ <?php
2
+ namespace sgpb;
3
+
4
+ class PopupData
5
+ {
6
+ private static $popupData = array();
7
+
8
+ private function __construct()
9
+ {
10
+ }
11
+
12
+ public static function getPopupDataById($popupId, $saveMode = '')
13
+ {
14
+ if (!isset(self::$popupData[$popupId])) {
15
+ self::$popupData[$popupId] = SGPopup::getSavedData($popupId, $saveMode);
16
+ }
17
+
18
+ return self::$popupData[$popupId];
19
+ }
20
+ }
com/classes/popups/SGPopup.php CHANGED
@@ -1,1749 +1,1751 @@
1
- <?php
2
- namespace sgpb;
3
- use \ConfigDataHelper;
4
- use \WP_Post;
5
-
6
- if (class_exists("sgpb\SGPopup")) {
7
- return;
8
- }
9
-
10
- abstract class SGPopup
11
- {
12
- protected $type;
13
-
14
- private $sanitizedData;
15
- private $postData = array();
16
- private $id;
17
- private $title;
18
- private $content;
19
- private $target;
20
- private $conditions;
21
- private $events = array();
22
- private $options;
23
- private $loadableModes;
24
- private $saveMode = '';
25
- private $savedPopup = false;
26
-
27
-
28
- public function setId($id)
29
- {
30
- $this->id = $id;
31
- }
32
-
33
- public function getId()
34
- {
35
- return (int)$this->id;
36
- }
37
-
38
- public function setTitle($title)
39
- {
40
- $this->title = $title;
41
- }
42
-
43
- public function getTitle()
44
- {
45
- return $this->title;
46
- }
47
-
48
- public function setType($type)
49
- {
50
- $this->type = $type;
51
- }
52
-
53
- public function getType()
54
- {
55
- return $this->type;
56
- }
57
-
58
- public function setTarget($target)
59
- {
60
- $this->target = $target;
61
- }
62
-
63
- public function getTarget()
64
- {
65
- return $this->target;
66
- }
67
-
68
- public function setEvents($events)
69
- {
70
- $this->events = $events;
71
- }
72
-
73
- public function getEvents()
74
- {
75
- return $this->events;
76
- }
77
-
78
- public function setConditions($conditions)
79
- {
80
- $this->conditions = $conditions;
81
- }
82
-
83
- public function getConditions()
84
- {
85
- return $this->conditions;
86
- }
87
-
88
- public function setOptions($options)
89
- {
90
- $this->options = $options;
91
- }
92
-
93
- public function getOptions()
94
- {
95
- return $this->options;
96
- }
97
-
98
- public function setLoadableModes($loadableModes)
99
- {
100
- $this->loadableModes = $loadableModes;
101
- }
102
-
103
- public function getLoadableModes()
104
- {
105
- return $this->loadableModes;
106
- }
107
-
108
- public function setSaveMode($saveMode)
109
- {
110
- $this->saveMode = $saveMode;
111
- }
112
-
113
- public function getSaveMode()
114
- {
115
- return $this->saveMode;
116
- }
117
-
118
- public function setSavedPopup($savedPopup)
119
- {
120
- $this->savedPopup = $savedPopup;
121
- }
122
-
123
- public function getSavedPopup()
124
- {
125
- return $this->savedPopup;
126
- }
127
-
128
- public function setContent($content)
129
- {
130
- $this->content = $content;
131
- }
132
-
133
- public function setSavedPopupById($popupId)
134
- {
135
- $popup = SGPopup::find($popupId);
136
- if (is_object($popup)) {
137
- $this->setSavedPopup($popup);
138
- }
139
- }
140
-
141
- public function setReportData($popupId)
142
- {
143
- $events = $this->getEvents();
144
- $options = $this->getOptions();
145
- $targets = $this->getTarget();
146
- $conditions = $this->getConditions();
147
- do_action('sgpbDebugReportUpdate', 'options', $options, $popupId);
148
- do_action('sgpbDebugReportUpdate', 'events', $events, $popupId);
149
- do_action('sgpbDebugReportUpdate', 'targets', $targets, $popupId);
150
- do_action('sgpbDebugReportUpdate', 'conditions', $conditions, $popupId);
151
- }
152
-
153
- public function getPopupAllEvents($postId, $popupId, $popupObj = false)
154
- {
155
- $events = array();
156
-
157
- $loadableModes = $this->getLoadableModes();
158
-
159
- if (isset($loadableModes['attr_event'])) {
160
- $customEvents = SGPopup::getPostPopupCustomEvent($postId, $popupId);
161
- $events = array_merge($events, $customEvents);
162
- }
163
-
164
- if (isset($loadableModes['option_event']) || is_null($loadableModes)) {
165
- $optionEvents = $this->getEvents();
166
- if (!is_array($optionEvents)) {
167
- $optionEvents = array();
168
- }
169
- $events = array_merge($events, $optionEvents);
170
- }
171
-
172
- if (!empty($popupObj->getOptionValue('sgpb-enable-floating-button'))) {
173
- $events[] = array('param' => 'setByCssClass', 'hiddenOption' => array());
174
- }
175
-
176
- return apply_filters('sgpbPopupEvents', $events, $popupObj);
177
- }
178
-
179
- public function getContent()
180
- {
181
- $postId = $this->getId();
182
-
183
- if (!AdminHelper::hasBlocks($this->content)) {
184
- $popupContent = wpautop($this->content);
185
- } else {
186
- $popupContent = $this->content;
187
- }
188
-
189
- $editorContent = AdminHelper::checkEditorByPopupId($postId);
190
- if (!empty($editorContent)) {
191
- if (class_exists('Vc_Manager')) {
192
- $popupContent .= $editorContent;
193
- }
194
- else {
195
- $popupContent = $editorContent;
196
- }
197
- }
198
-
199
- return $popupContent;
200
- }
201
-
202
- public function setPostData($postData)
203
- {
204
- $this->postData = apply_filters('sgpbSavedPostData', $postData);
205
- }
206
-
207
- public function getPostData()
208
- {
209
- return $this->postData;
210
- }
211
-
212
- public function getPopupTypeContent()
213
- {
214
- return $this->getContent();
215
- }
216
-
217
- public function insertIntoSanitizedData($sanitizedData)
218
- {
219
- if (!empty($sanitizedData)) {
220
- $this->sanitizedData[$sanitizedData['name']] = $sanitizedData['value'];
221
- }
222
- }
223
-
224
- abstract public function getExtraRenderOptions();
225
-
226
- public function setSanitizedData($sanitizedData)
227
- {
228
- $this->sanitizedData = $sanitizedData;
229
- }
230
-
231
- public function getSanitizedData()
232
- {
233
- return $this->sanitizedData;
234
- }
235
-
236
- /**
237
- * Find popup and create this object
238
- *
239
- * @since 1.0.0
240
- *
241
- * @param object|int $popup
242
- *
243
- * @return object|false $obj
244
- */
245
- public static function find($popup, $args = array())
246
- {
247
- if (isset($_GET['sg_popup_preview_id'])) {
248
- $args['is-preview'] = true;
249
- }
250
- // If the popup is object get data from object otherwise we find needed data from WordPress functions
251
- if ($popup instanceof WP_Post) {
252
- $status = $popup->post_status;
253
- $title = $popup->post_title;
254
- $popupContent = $popup->post_content;
255
- $popupId = $popup->ID;
256
- }
257
- else {
258
- $popupId = $popup;
259
- $popupPost = get_post($popupId);
260
- if (empty($popupPost)) {
261
- return false;
262
- }
263
- $title = get_the_title($popupId);
264
- $status = get_post_status($popupId);
265
- $popupContent = $popupPost->post_content;
266
- }
267
- $allowedStatus = array('publish', 'draft');
268
-
269
- if (!empty($args['status'])) {
270
- $allowedStatus = $args['status'];
271
- }
272
-
273
- if (!isset($args['checkActivePopupType']) && !in_array($status, $allowedStatus)) {
274
- return $status;
275
- }
276
- $saveMode = '';
277
- global $post;
278
- if ((@is_preview() && $post->ID == $popupId) || isset($args['preview'])) {
279
- $saveMode = '_preview';
280
- }
281
- if (isset($args['is-preview'])) {
282
- $saveMode = '_preview';
283
- }
284
- if (isset($args['insidePopup']) && $args['insidePopup'] == 'on') {
285
- $saveMode = '';
286
- }
287
- $currentPost = get_post($popupId);
288
- $currentPostStatus = $currentPost->post_status;
289
- if ($currentPostStatus == 'draft') {
290
- $saveMode = '_preview';
291
- }
292
-
293
- $savedData = array();
294
- if (file_exists(dirname(__FILE__).'/PopupData.php')) {
295
- require_once(dirname(__FILE__).'/PopupData.php');
296
- $savedData = PopupData::getPopupDataById($popupId, $saveMode);
297
- }
298
- $savedData = apply_filters('sgpbPopupSavedData', $savedData);
299
-
300
- if (empty($savedData)) {
301
- return false;
302
- }
303
-
304
- $type = 'html';
305
- if (isset($savedData['sgpb-type'])) {
306
- $type = $savedData['sgpb-type'];
307
- }
308
-
309
- $popupClassName = self::getPopupClassNameFormType($type);
310
- $typePath = self::getPopupTypeClassPath($type);
311
- if (!file_exists($typePath.$popupClassName.'.php')) {
312
- return false;
313
- }
314
- require_once($typePath.$popupClassName.'.php');
315
- $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
316
-
317
- $obj = new $popupClassName();
318
- $obj->setId($popupId);
319
- $obj->setType($type);
320
- $obj->setTitle($title);
321
- $obj->setContent($popupContent);
322
-
323
- if (!empty($savedData['sgpb-target'][0])) {
324
- $obj->setTarget($savedData['sgpb-target'][0]);
325
- }
326
- unset($savedData['sgpb-target']);
327
- if (!empty($savedData['sgpb-events'][0])) {
328
- $events = self::shapeEventsToOneArray($savedData['sgpb-events'][0]);
329
- $obj->setEvents($events);
330
- }
331
- unset($savedData['sgpb-events']);
332
- if (!empty($savedData['sgpb-conditions'][0])) {
333
- $obj->setConditions($savedData['sgpb-conditions'][0]);
334
- }
335
- unset($savedData['sgpb-conditions']);
336
-
337
- $obj->setOptions($savedData);
338
-
339
- return $obj;
340
- }
341
-
342
- private static function shapeEventsToOneArray($events)
343
- {
344
- $eventsData = array();
345
- if (!empty($events)) {
346
- foreach ($events as $event) {
347
- if (empty($event['hiddenOption'])) {
348
- $eventsData[] = $event;
349
- continue;
350
- }
351
- $hiddenOptions = $event['hiddenOption'];
352
- unset($event['hiddenOption']);
353
- $eventsData[] = $event + $hiddenOptions;
354
- }
355
- }
356
-
357
- return apply_filters('sgpbEventsToOneArray', $eventsData);
358
- }
359
-
360
- public static function getPopupClassNameFormType($type)
361
- {
362
- $popupName = ucfirst(strtolower($type));
363
- $popupClassName = $popupName.'Popup';
364
-
365
- return apply_filters('sgpbPopupClassNameFromType', $popupClassName);
366
- }
367
-
368
- public static function getPopupTypeClassPath($type)
369
- {
370
- global $SGPB_POPUP_TYPES;
371
- $typePaths = $SGPB_POPUP_TYPES['typePath'];
372
-
373
- if (empty($typePaths[$type])) {
374
- return SG_POPUP_CLASSES_POPUPS_PATH;
375
- }
376
-
377
- return $typePaths[$type];
378
- }
379
-
380
- public function sanitizeValueByType($value, $type)
381
- {
382
- switch ($type) {
383
- case 'string':
384
- if (is_array($value)) {
385
- $sanitizedValue = $this->recursiveSanitizeTextField($value);
386
- }
387
- else {
388
- $sanitizedValue = htmlspecialchars($value);
389
- }
390
- break;
391
- case 'text':
392
- $sanitizedValue = htmlspecialchars($value);
393
- break;
394
- case 'array':
395
- $sanitizedValue = $this->recursiveSanitizeTextField($value);
396
- break;
397
- case 'email':
398
- $sanitizedValue = sanitize_email($value);
399
- break;
400
- case 'sgpb':
401
- $sanitizedValue = $this->recursiveHtmlSpecialchars($value);
402
- break;
403
- default:
404
- $sanitizedValue = sanitize_text_field($value);
405
- break;
406
- }
407
-
408
- return $sanitizedValue;
409
- }
410
-
411
- public function recursiveSanitizeTextField($array)
412
- {
413
- if (!is_array($array)) {
414
- return $array;
415
- }
416
-
417
- foreach ($array as $key => &$value) {
418
- if (is_array($value)) {
419
- $value = $this->recursiveSanitizeTextField($value);
420
- }
421
- else {
422
- /*get simple field type and do sanitization*/
423
- $defaultData = $this->getDefaultDataByName($key);
424
- if (empty($defaultData['type'])) {
425
- $defaultData['type'] = 'string';
426
- }
427
- $value = $this->sanitizeValueByType($value, $defaultData['type']);
428
- }
429
- }
430
-
431
- return $array;
432
- }
433
-
434
- public function recursiveHtmlSpecialchars($array)
435
- {
436
- if (!is_array($array)) {
437
- return $array;
438
- }
439
-
440
- foreach ($array as $key => &$value) {
441
- if (is_array($value)) {
442
- $value = $this->recursiveHtmlSpecialchars($value);
443
- }
444
- else {
445
- $value = htmlspecialchars($value);
446
- }
447
- }
448
-
449
- return $array;
450
- }
451
-
452
- public static function parsePopupDataFromData($data)
453
- {
454
- $popupData = array();
455
- $data = apply_filters('sgpbFilterOptionsBeforeSaving', $data);
456
-
457
- foreach ($data as $key => $value) {
458
- if (strpos($key, 'sgpb') === 0) {
459
- $popupData[$key] = $value;
460
- }
461
- if (is_array($value) && isset($value['name']) && strpos($value['name'], 'sgpb') === 0) {
462
- $popupData[$value['name']] = $value['value'];
463
- }
464
- else if (is_array($value) && isset($value['name']) && strpos($value['name'], 'post_ID') === 0) {
465
- $popupData['sgpb-post-id'] = $value['value'];
466
- }
467
- }
468
-
469
- return $popupData;
470
- }
471
-
472
- public static function create($data = array(), $saveMode = '', $firstTime = 0)
473
- {
474
- $obj = new static();
475
- $obj->setSaveMode($saveMode);
476
- $additionalData = $obj->addAdditionalSettings($data, $obj);
477
- $data = array_merge($data, $additionalData);
478
- $data = apply_filters('sgpbAdvancedOptionsDefaultValues', $data);
479
- foreach ($data as $name => $value) {
480
- if (strpos($name, 'sgpb') === 0) {
481
- $defaultData = $obj->getDefaultDataByName($name);
482
- if (empty($defaultData['type'])) {
483
- $defaultData['type'] = 'string';
484
- }
485
- $sanitizedValue = $obj->sanitizeValueByType($value, $defaultData['type']);
486
- $obj->insertIntoSanitizedData(array('name' => $name,'value' => $sanitizedValue));
487
- }
488
- }
489
-
490
- $obj->setSavedPopupById($data['sgpb-post-id']);
491
- $result = $obj->save();
492
-
493
- $result = apply_filters('sgpbPopupCreateResult', $result);
494
-
495
- if ($result) {
496
- return $obj;
497
- }
498
-
499
- return $result;
500
- }
501
-
502
- public function save()
503
- {
504
- $this->convertImagesToData();
505
- $data = $this->getSanitizedData();
506
- $popupId = $data['sgpb-post-id'];
507
-
508
- $this->setId($popupId);
509
-
510
- if (!empty($data['sgpb-target'])) {
511
- $this->setTarget($data['sgpb-target']);
512
- /*remove from popup options because it's useless to save it twice*/
513
- unset($data['sgpb-target']);
514
- }
515
- if (!empty($data['sgpb-conditions'])) {
516
- $this->setConditions($data['sgpb-conditions']);
517
- unset($data['sgpb-conditions']);
518
- }
519
- if (!empty($data['sgpb-events'])) {
520
- $this->setEvents($data['sgpb-events']);
521
- unset($data['sgpb-events']);
522
- }
523
- $data = $this->customScriptsSave($data);
524
- $this->setOptions($data);
525
-
526
- $targets = $this->targetSave();
527
- $events = $this->eventsSave();
528
- $options = $this->popupOptionsSave();
529
-
530
- return ($targets && $events && $options);
531
- }
532
-
533
- public function convertImagesToData()
534
- {
535
- $buttonImageData = '';
536
- $savedImageUrl = '';
537
- $savedContentBackgroundImageUrl = '';
538
- $contentBackgroundImageData = '';
539
-
540
- $data = $this->getSanitizedData();
541
- $buttonImageUrl = @$data['sgpb-button-image'];
542
- $contentBackgroundImageUrl = @$data['sgpb-background-image'];
543
-
544
- $savedPopup = $this->getSavedPopup();
545
-
546
- if (is_object($savedPopup)) {
547
- $buttonImageData = $savedPopup->getOptionvalue('sgpb-button-image-data');
548
- $savedImageUrl = $savedPopup->getOptionValue('sgpb-button-image');
549
- $contentBackgroundImageData = $savedPopup->getOptionValue('sgpb-background-image-data');
550
- $savedContentBackgroundImageUrl = $savedPopup->getOptionValue('sgpb-background-image');
551
- }
552
-
553
- if ($buttonImageUrl != $savedImageUrl) {
554
- $buttonImageData = AdminHelper::getImageDataFromUrl($buttonImageUrl, true);
555
- }
556
- if ($contentBackgroundImageUrl != $savedContentBackgroundImageUrl) {
557
- $contentBackgroundImageData = AdminHelper::getImageDataFromUrl($contentBackgroundImageUrl);
558
- }
559
-
560
- $data['sgpb-button-image-data'] = $buttonImageData;
561
- $data['sgpb-background-image-data'] = $contentBackgroundImageData;
562
-
563
- $data = apply_filters('sgpbConvertImagesToData', $data);
564
- $this->setSanitizedData($data);
565
- }
566
-
567
- private function customScriptsSave($data)
568
- {
569
- $popupId = $this->getId();
570
- $popupContent = $this->getContent();
571
-
572
- $defaultData = ConfigDataHelper::defaultData();
573
- $defaultDataJs = $defaultData['customEditorContent']['js']['helperText'];
574
- $defaultDataCss = $defaultData['customEditorContent']['css']['oldDefaultValue'];
575
-
576
- $finalData = array('js' => array(), 'css' => array());
577
- $alreadySavedData = get_post_meta($popupId, 'sg_popup_scripts', true);
578
-
579
- // get styles
580
- $finalData['css'] = $data['sgpb-css-editor'];
581
- $defaultDataCss = $defaultDataCss[0];
582
-
583
- $defaultDataCss = preg_replace('/\s/', '', $defaultDataCss);
584
- $temp = preg_replace('/\s/', '', $finalData['css']);
585
-
586
- unset($data['sgpb-css-editor']);
587
-
588
- if ($temp == $defaultDataCss) {
589
- unset($finalData['css']);
590
- }
591
-
592
- // get scripts
593
- foreach ($defaultDataJs as $key => $value) {
594
- if ($data['sgpb-'.$key] == '') {
595
- unset($data['sgpb-'.$key]);
596
- continue;
597
- }
598
- if ($key == 'ShouldOpen' || $key == 'ShouldClose') {
599
- $finalData['js']['sgpb-'.$key] = $data['sgpb-'.$key];
600
- continue;
601
- }
602
- $finalData['js']['sgpb-'.$key] = $data['sgpb-'.$key];
603
- unset($data['sgpb-'.$key]);
604
- }
605
-
606
- if ($alreadySavedData == $finalData) {
607
- return $data;
608
- }
609
-
610
- array_walk_recursive($finalData, function(&$element){
611
- $element = str_replace(array("\r\n"), "\n", $element);
612
- });
613
-
614
- update_post_meta($popupId, 'sg_popup_scripts', $finalData);
615
-
616
- return $data;
617
- }
618
-
619
- private function targetSave()
620
- {
621
- global $SGPB_DATA_CONFIG_ARRAY;
622
- $saveMode = $this->getSaveMode();
623
- $popupId = $this->getId();
624
- $targetData = $this->getTarget();
625
- $conditionsData = $this->getConditions();
626
-
627
- $targetConfig = $SGPB_DATA_CONFIG_ARRAY['target'];
628
- $paramsData = $targetConfig['paramsData'];
629
- $attrs = $targetConfig['attrs'];
630
- $popupTarget = array();
631
- if (empty($targetData)) {
632
- return array();
633
- }
634
-
635
- foreach ($targetData as $groupId => $groupData) {
636
- foreach ($groupData as $ruleId => $ruleData) {
637
-
638
- if (empty($ruleData['value']) && !is_null($paramsData[$ruleData['param']])) {
639
- $targetData[$groupId][$ruleId]['value'] = '';
640
- }
641
- if (isset($ruleData['value']) && is_array($ruleData['value'])) {
642
- $valueAttrs = $attrs[$ruleData['param']]['htmlAttrs'];
643
- $postType = $valueAttrs['data-value-param'];
644
- $isNotPostType = '';
645
- if (isset($valueAttrs['isNotPostType'])) {
646
- $isNotPostType = $valueAttrs['isNotPostType'];
647
- }
648
-
649
- if (empty($valueAttrs['isNotPostType'])) {
650
- $isNotPostType = false;
651
- }
652
-
653
- /*
654
- * $isNotPostType => false must search inside post types post
655
- * $isNotPostType => true must save array data
656
- * */
657
- if (!$isNotPostType) {
658
- $args = array(
659
- 'post__in' => array_values($ruleData['value']),
660
- 'posts_per_page' => 100,
661
- 'post_type' => $postType
662
- );
663
-
664
- $searchResults = ConfigDataHelper::getPostTypeData($args);
665
-
666
- $targetData[$groupId][$ruleId]['value'] = $searchResults;
667
- }
668
- }
669
- }
670
- }
671
-
672
- $popupTarget['sgpb-target'] = $targetData;
673
- $popupTarget['sgpb-conditions'] = apply_filters('sgpbSaveConditions', $conditionsData);
674
-
675
- $alreadySavedTargets = get_post_meta($popupId, 'sg_popup_target'.$saveMode, true);
676
- if ($alreadySavedTargets === $popupTarget) {
677
- return true;
678
- }
679
-
680
- $popupTarget = apply_filters('sgpbPopupTargetMetaData', $popupTarget);
681
-
682
- return update_post_meta($popupId, 'sg_popup_target'.$saveMode, $popupTarget);
683
- }
684
-
685
- private function eventsSave()
686
- {
687
- global $SGPB_DATA_CONFIG_ARRAY;
688
-
689
- $eventsData = $this->getEvents();
690
- $popupId = $this->getId();
691
- $saveMode = $this->getSaveMode();
692
- $popupEvents = array();
693
- $eventsFromPopup = array();
694
-
695
- foreach ($eventsData as $groupId => $groupData) {
696
- $currentRuleData = array();
697
- foreach ($groupData as $ruleId => $ruleData) {
698
-
699
- $hiddenOptions = array();
700
- $currentData = array();
701
- foreach ($ruleData as $name => $value) {
702
- if ($name == 'param' || $name == 'value' || $name == 'operator') {
703
- $currentData[$name] = $value;
704
- }
705
- else {
706
- $hiddenOptions[$name] = $value;
707
- }
708
- }
709
- $currentData['hiddenOption'] = $hiddenOptions;
710
- $currentRuleData[$ruleId] = $currentData;
711
- }
712
- $eventsFromPopup[$groupId] = $currentRuleData;
713
- }
714
-
715
- $popupEvents['formPopup'] = $eventsFromPopup;
716
- $alreadySavedEvents = get_post_meta($popupId, 'sg_popup_events'.$saveMode, true);
717
- if ($alreadySavedEvents === $eventsFromPopup) {
718
- return true;
719
- }
720
-
721
- $eventsFromPopup = apply_filters('sgpbPopupEventsMetadata', $eventsFromPopup);
722
-
723
- return update_post_meta($popupId, 'sg_popup_events'.$saveMode, $eventsFromPopup);
724
- }
725
-
726
- private function popupOptionsSave()
727
- {
728
- $popupOptions = $this->getOptions();
729
- $popupOptions = apply_filters('sgpbSavePopupOptions', $popupOptions);
730
- //special code added for "Behavior After Special Events" section
731
- //todo: remove in the future if possible
732
- $specialBehaviors = array();
733
- if (!empty($popupOptions['sgpb-behavior-after-special-events'])) {
734
- $specialBehaviors = $popupOptions['sgpb-behavior-after-special-events'];
735
- }
736
- if (!empty($specialBehaviors) && is_array($specialBehaviors)) {
737
- foreach ($specialBehaviors as $groupId => $groupRow) {
738
- foreach ($groupRow as $ruleId => $ruleRow) {
739
- if (!empty($ruleRow['operator']) && $ruleRow['operator'] == 'open-popup') {
740
- $args = array(
741
- 'post__in' => array($ruleRow['value']),
742
- 'posts_per_page' => 10,
743
- 'post_type' => SG_POPUP_POST_TYPE
744
- );
745
-
746
- $searchResults = ConfigDataHelper::getPostTypeData($args);
747
- $popupOptions['sgpb-behavior-after-special-events'][$groupId][$ruleId]['value'] = $searchResults;
748
- }
749
- }
750
- }
751
- }
752
-
753
- $popupId = $this->getId();
754
- $saveMode = $this->getSaveMode();
755
-
756
- $alreadySavedOptions = get_post_meta($popupId, 'sg_popup_options'.$saveMode, true);
757
- if ($alreadySavedOptions === $popupOptions) {
758
- return true;
759
- }
760
-
761
- $popupOptions = apply_filters('sgpbPopupSavedOptionsMetaData', $popupOptions);
762
-
763
- return update_post_meta($popupId, 'sg_popup_options'.$saveMode, $popupOptions);
764
- }
765
-
766
- public function getOptionValue($optionName, $forceDefaultValue = false)
767
- {
768
- require_once(dirname(__FILE__).'/PopupData.php');
769
- $savedData = PopupData::getPopupDataById($this->getId());
770
- $this->setPostData($savedData);
771
-
772
- return $this->getOptionValueFromSavedData($optionName, $forceDefaultValue);
773
- }
774
-
775
- public function getOptionValueFromSavedData($optionName, $forceDefaultValue = false)
776
- {
777
- $defaultData = $this->getDefaultDataByName($optionName);
778
- $savedData = $this->getPostData();
779
-
780
- $optionValue = null;
781
-
782
- if (empty($defaultData['type'])) {
783
- $defaultData['type'] = 'string';
784
- }
785
-
786
- if (!empty($savedData)) { //edit mode
787
- if (isset($savedData[$optionName])) { //option exists in the database
788
- $optionValue = $savedData[$optionName];
789
- }
790
- /* if it's a checkbox, it may not exist in the db
791
- * if we don't care about it's existance, return empty string
792
- * otherwise, go for it's default value
793
- */
794
- else if ($defaultData['type'] == 'checkbox' && !$forceDefaultValue) {
795
- $optionValue = '';
796
- }
797
- }
798
-
799
- if ($optionValue === null && !empty($defaultData['defaultValue'])) {
800
- $optionValue = $defaultData['defaultValue'];
801
- }
802
-
803
- if ($defaultData['type'] == 'checkbox') {
804
- $optionValue = $this->boolToChecked($optionValue);
805
- }
806
-
807
- if ($defaultData['type'] == 'number' && $optionValue == 0) {
808
- $optionValue = 0;
809
- }
810
-
811
- return $optionValue;
812
- }
813
-
814
- public static function getSavedData($popupId, $saveMode = '')
815
- {
816
- $popupSavedData = array();
817
- $events = self::getEventsDataById($popupId, $saveMode);
818
- $targetData = self::getTargetDataById($popupId, $saveMode);
819
-
820
- if (!empty($events)) {
821
- $popupSavedData['sgpb-events'] = self::getEventsDataById($popupId, $saveMode);
822
- }
823
- if (!empty($targetData)) {
824
- if (!empty($targetData['sgpb-target'])) {
825
- $popupSavedData['sgpb-target'] = $targetData['sgpb-target'];
826
- }
827
- if (!empty($targetData['sgpb-conditions'])) {
828
- // for the after x pages option backward compatibility
829
- $targetData['sgpb-conditions'] = apply_filters('sgpbAdvancedTargetingSavedData', $targetData['sgpb-conditions'], $popupId);
830
- $popupSavedData['sgpb-conditions'] = $targetData['sgpb-conditions'];
831
- }
832
- }
833
-
834
- $popupOptions = self::getPopupOptionsById($popupId, $saveMode);
835
- if (is_array($popupOptions) && is_array($popupSavedData)) {
836
- $popupSavedData = array_merge($popupSavedData, $popupOptions);
837
- }
838
-
839
- return $popupSavedData;
840
- }
841
-
842
- public static function getEventsDataById($popupId, $saveMode = '')
843
- {
844
- $eventsData = array();
845
- if (get_post_meta($popupId, 'sg_popup_events'.$saveMode, true)) {
846
- $eventsData = get_post_meta($popupId, 'sg_popup_events'.$saveMode, true);
847
- }
848
-
849
- return $eventsData;
850
- }
851
-
852
- public static function getTargetDataById($popupId, $saveMode = '')
853
- {
854
- $targetData = array();
855
-
856
- if (get_post_meta($popupId, 'sg_popup_target'.$saveMode, true)) {
857
- $targetData = get_post_meta($popupId, 'sg_popup_target'.$saveMode, true);
858
- }
859
-
860
- return $targetData;
861
- }
862
-
863
- public static function getPopupOptionsById($popupId, $saveMode = '')
864
- {
865
- $currentPost = get_post($popupId);
866
-
867
- if (!empty($currentPost) && $currentPost->post_status == 'draft') {
868
- $saveMode = '_preview';
869
- }
870
- $optionsData = array();
871
- if (get_post_meta($popupId, 'sg_popup_options'.$saveMode, true)) {
872
- $optionsData = get_post_meta($popupId, 'sg_popup_options'.$saveMode, true);
873
- }
874
-
875
- return $optionsData;
876
- }
877
-
878
- public function getDefaultDataByName($optionName)
879
- {
880
- global $SGPB_OPTIONS;
881
- if (empty($SGPB_OPTIONS)) {
882
- return array();
883
- }
884
-
885
- foreach ($SGPB_OPTIONS as $option) {
886
- if ($option['name'] == $optionName) {
887
- return $option;
888
- }
889
- }
890
-
891
- return array();
892
- }
893
-
894
- /**
895
- * Get option default option value
896
- *
897
- * @param string $optionName
898
- *
899
- * @since 1.0.0
900
- *
901
- * @return string
902
- *
903
- */
904
- public function getOptionDefaultValue($optionName)
905
- {
906
- // return config data array by name
907
- $optionData = $this->getDefaultDataByName($optionName);
908
-
909
- if (empty($optionData)) {
910
- return '';
911
- }
912
-
913
- return $optionData['defaultValue'];
914
- }
915
-
916
- /**
917
- * Changing default options form changing options by name
918
- *
919
- * @since 1.0.0
920
- *
921
- * @param array $defaultOptions
922
- * @param array $changingOptions
923
- *
924
- * @return array $defaultOptions
925
- */
926
- public function changeDefaultOptionsByNames($defaultOptions, $changingOptions)
927
- {
928
- if (empty($defaultOptions) || empty($changingOptions)) {
929
- return $defaultOptions;
930
- }
931
- $changingOptionsNames = array_keys($changingOptions);
932
-
933
- foreach ($defaultOptions as $key => $defaultOption) {
934
- $defaultOptionName = $defaultOption['name'];
935
- if (in_array($defaultOptionName, $changingOptionsNames)) {
936
- $defaultOptions[$key] = $changingOptions[$defaultOptionName];
937
- }
938
- }
939
-
940
- return $defaultOptions;
941
- }
942
-
943
- /**
944
- * Returns separate popup types Free or Pro
945
- *
946
- * @since 2.5.6
947
- *
948
- * @return array $popupTypesObj
949
- */
950
- public static function getPopupTypes()
951
- {
952
- global $SGPB_POPUP_TYPES;
953
- $popupTypesObj = array();
954
- $popupTypes = $SGPB_POPUP_TYPES['typeName'];
955
-
956
- foreach ($popupTypes as $popupType => $level) {
957
-
958
- if (empty($level)) {
959
- $level = SGPB_POPUP_PKG_FREE;
960
- }
961
-
962
- $popupTypeObj = new PopupType();
963
- $popupTypeObj->setName($popupType);
964
- $popupTypeObj->setAccessLevel($level);
965
-
966
- if (SGPB_POPUP_PKG >= $level) {
967
- $popupTypeObj->setAvailable(true);
968
- }
969
- $popupTypesObj[] = $popupTypeObj;
970
- }
971
-
972
- return $popupTypesObj;
973
- }
974
-
975
- public static function savePopupsFromContentClasses($content, $post)
976
- {
977
- $postId = $post->ID;
978
- $clickClassIds = self::getStringNextNumbersByReg($content, 'sg-popup-id-');
979
- $targetData = array();
980
- $eventsData = array();
981
-
982
- if (!empty($clickClassIds)) {
983
- foreach ($clickClassIds as $id) {
984
- $id = apply_filters('sgpbConvertedPopupId', $id);
985
- if (empty($eventsData[$postId][$id])) {
986
- $eventsData[$postId][$id] = array('click');
987
- }
988
- else {
989
- $eventsData[$postId][$id][] = 'click';
990
- }
991
-
992
- if (empty($targetData[$postId])) {
993
- $targetData[$postId] = array($id);
994
- }
995
- else {
996
- $targetData[$postId][] = $id;
997
- }
998
- }
999
- }
1000
-
1001
- $iframeClassIs = self::getStringNextNumbersByReg($content, 'sg-iframe-popup-');
1002
-
1003
- if (!empty($iframeClassIs)) {
1004
- foreach ($iframeClassIs as $id) {
1005
- $id = apply_filters('sgpbConvertedPopupId', $id);
1006
- $popupObj = self::find($id);
1007
-
1008
- if (empty($popupObj)) {
1009
- continue;
1010
- }
1011
-
1012
- // this event should work only for iframe popup type
1013
- if ($popupObj->getType() != 'iframe') {
1014
- continue;
1015
- }
1016
-
1017
- if (empty($eventsData[$postId][$id])) {
1018
- $eventsData[$postId][$id] = array('iframe');
1019
- }
1020
- else {
1021
- $eventsData[$postId][$id][] = 'iframe';
1022
- }
1023
-
1024
- if (empty($targetData[$postId])) {
1025
- $targetData[$postId] = array($id);
1026
- }
1027
- else {
1028
- $targetData[$postId][] = $id;
1029
- }
1030
- }
1031
- }
1032
-
1033
- $confirmClassIds = self::getStringNextNumbersByReg($content, 'sg-confirm-popup-');
1034
-
1035
- if (!empty($confirmClassIds)) {
1036
- foreach ($confirmClassIds as $id) {
1037
- $id = apply_filters('sgpbConvertedPopupId', $id);
1038
- if (empty($eventsData[$postId][$id])) {
1039
- $eventsData[$postId][$id] = array('confirm');
1040
- }
1041
- else {
1042
- $eventsData[$postId][$id][] = 'confirm';
1043
- }
1044
-
1045
- if (empty($targetData[$postId])) {
1046
- $targetData[$postId] = array($id);
1047
- }
1048
- else {
1049
- $targetData[$postId][] = $id;
1050
- }
1051
- }
1052
- }
1053
-
1054
- $hoverClassIds = self::getStringNextNumbersByReg($content, 'sg-popup-hover-');
1055
-
1056
- if (!empty($hoverClassIds)) {
1057
- foreach ($hoverClassIds as $id) {
1058
- $id = apply_filters('sgpbConvertedPopupId', $id);
1059
- if (empty($eventsData[$postId][$id])) {
1060
- $eventsData[$postId][$id] = array('hover');
1061
- }
1062
- else {
1063
- $eventsData[$postId][$id][] = 'hover';
1064
- }
1065
-
1066
- if (empty($targetData[$postId])) {
1067
- $targetData[$postId] = array($id);
1068
- }
1069
- else {
1070
- $targetData[$postId][] = $id;
1071
- }
1072
- }
1073
- }
1074
-
1075
- $targetData = apply_filters('sgpbPopupTargetData', $targetData);
1076
- $eventsData = apply_filters('sgpbPopupEventsData', $eventsData);
1077
-
1078
- self::saveToTargetFromPage($targetData);
1079
- self::saveToEventsFromPage($eventsData);
1080
- }
1081
-
1082
- public static function getStringNextNumbersByReg($content, $key)
1083
- {
1084
- $result = array();
1085
- preg_match_all("/(?<=$key)(\d+)/", $content, $ids);
1086
-
1087
- if (!empty($ids[0])) {
1088
- $result = $ids[0];
1089
- }
1090
-
1091
- return $result;
1092
- }
1093
-
1094
- private static function saveToTargetAndEvents($popupsShortcodsInPostPage, $postId)
1095
- {
1096
- if (empty($popupsShortcodsInPostPage)) {
1097
- return false;
1098
- }
1099
- $customEvents = array();
1100
- $customPopups = array();
1101
-
1102
- foreach ($popupsShortcodsInPostPage as $shortcodesData) {
1103
- $popupId = apply_filters('sgpbConvertedPopupId', $shortcodesData['id']);
1104
-
1105
- $args = array(
1106
- 'post_type' => SG_POPUP_POST_TYPE,
1107
- 'post__in' => array($popupId)
1108
- );
1109
- $postById = ConfigDataHelper::getPostTypeData($args);
1110
- //When target data does not exist
1111
- if (empty($postById)) {
1112
- continue;
1113
- }
1114
-
1115
- // collect custom inserted popups
1116
- if (empty($customPopups[$postId])) {
1117
- $customPopups[$postId] = array($popupId);
1118
- }
1119
- else {
1120
- $customPopups[$postId][] = $popupId;
1121
- }
1122
-
1123
- // collect custom inserted popups events
1124
- if (empty($shortcodesData['event'])) {
1125
- $eventName = 'onload';
1126
- }
1127
- else {
1128
- $eventName = $shortcodesData['event'];
1129
- }
1130
-
1131
- if ($eventName == 'onload') {
1132
- $eventName = 'attr'.$eventName;
1133
- }
1134
- $currentEventData = array(
1135
- 'param' => $eventName
1136
- );
1137
-
1138
- if (empty($customEvents[$postId][$popupId])) {
1139
- $customEvents[$postId][$popupId] = array($currentEventData);
1140
- }
1141
- else {
1142
- $customEvents[$postId][$popupId][] = $currentEventData;
1143
- }
1144
- }
1145
-
1146
- self::saveToTargetFromPage($customPopups);
1147
- self::saveToEventsFromPage($customEvents);
1148
-
1149
- return true;
1150
- }
1151
-
1152
- public static function getPostPopupCustomEvent($postId, $popupId)
1153
- {
1154
- $events = array();
1155
-
1156
- $customEventsData = self::getCustomInsertedPopupEventsByPostId($postId);
1157
-
1158
- if (!empty($customEventsData[$popupId])) {
1159
- $events = $customEventsData[$popupId];
1160
- }
1161
-
1162
- return $events;
1163
- }
1164
-
1165
- /**
1166
- * Save popup to custom events from pages
1167
- *
1168
- * @since 1.0.0
1169
- *
1170
- * @param array $customEvents
1171
- *
1172
- * @return bool
1173
- *
1174
- */
1175
- public static function saveToEventsFromPage($customEvents)
1176
- {
1177
- if (empty($customEvents)) {
1178
- return false;
1179
- }
1180
-
1181
- foreach ($customEvents as $postId => $popupsData) {
1182
- $savedCustomEvents = self::getCustomInsertedPopupEventsByPostId($postId);
1183
- $result = AdminHelper::arrayMergeSameKeys($popupsData, $savedCustomEvents);
1184
-
1185
- if (!$result) {
1186
- return $result;
1187
- }
1188
- update_post_meta($postId, 'sgpb_popup_events_custom', $result);
1189
- }
1190
-
1191
- return true;
1192
- }
1193
-
1194
- public static function getCustomInsertedPopupEventsByPostId($postId)
1195
- {
1196
- $eventsData = array();
1197
- $postMetaData = get_post_meta($postId, 'sgpb_popup_events_custom', true);
1198
-
1199
- if (!empty($postMetaData)) {
1200
- $eventsData = $postMetaData;
1201
- }
1202
-
1203
- return $eventsData;
1204
- }
1205
-
1206
- /**
1207
- * Save popup to custom targets from pages
1208
- *
1209
- * @since 1.0.0
1210
- *
1211
- * @param array $customPopups
1212
- *
1213
- * @return void
1214
- *
1215
- */
1216
- public static function saveToTargetFromPage($customPopups)
1217
- {
1218
- if (!empty($customPopups)) {
1219
- foreach ($customPopups as $postId => $popups) {
1220
- $alreadySavedPopups = self::getCustomInsertedDataByPostId($postId);
1221
- $popups = array_merge($popups, $alreadySavedPopups);
1222
- update_post_meta($postId, 'sg_popup_target_custom', $popups);
1223
- }
1224
- }
1225
- }
1226
-
1227
- /**
1228
- * Get popup custom targes form saved data
1229
- *
1230
- * @since 1.0.0
1231
- *
1232
- * @param int $postId
1233
- *
1234
- * @return array $postData
1235
- */
1236
- public static function getCustomInsertedDataByPostId($postId)
1237
- {
1238
- $postData = array();
1239
- $postMetaData = get_post_meta($postId, 'sg_popup_target_custom');
1240
-
1241
- if (!empty($postMetaData[0])) {
1242
- $postData = $postMetaData[0];
1243
- }
1244
-
1245
- return $postData;
1246
- }
1247
-
1248
- public static function getPopupShortcodeMatchesFromContent($content)
1249
- {
1250
- $result = false;
1251
- $pattern = get_shortcode_regex();
1252
-
1253
- if (preg_match_all('/'.$pattern.'/s', $content, $matches)
1254
- && !empty($matches)
1255
- && is_array($matches)
1256
- && array_key_exists( 2, $matches )
1257
- && in_array('sg_popup', $matches[2])
1258
- )
1259
- {
1260
- $result = $matches;
1261
- }
1262
-
1263
- return $result;
1264
- }
1265
-
1266
- public static function renderPopupContentShortcode($content, $popupId, $event, $args)
1267
- {
1268
- ob_start();
1269
- $wrap = 'a';
1270
- if (!empty($args['wrap'])) {
1271
- if ($args['wrap'] == $wrap) {
1272
- $args['href'] = 'javascript:void(0)';
1273
- }
1274
- $wrap = $args['wrap'];
1275
- }
1276
- unset($args['wrap']);
1277
- unset($args['event']);
1278
- unset($args['id']);
1279
- $attr = AdminHelper::createAttrs($args);
1280
- ?>
1281
- <<?php echo $wrap; ?>
1282
- <?php if ($wrap == 'a') : ?>
1283
- href="javascript:void(0)"
1284
- <?php endif ?>
1285
- class="sgpb-show-popup <?php echo 'sgpb-popup-id-'.$popupId; ?>"
1286
- data-sgpbpopupid="<?php echo esc_attr($popupId); ?>"
1287
- data-popup-event="<?php echo $event; ?>"
1288
- <?php echo $attr; ?>>
1289
- <?php echo $content; ?>
1290
- </<?php echo $wrap; ?>>
1291
- <?php
1292
-
1293
- $shortcodeContent = ob_get_contents();
1294
- ob_get_clean();
1295
-
1296
- return $shortcodeContent;
1297
- }
1298
-
1299
- private static function collectInsidePopupShortcodes($content)
1300
- {
1301
- $pattern = get_shortcode_regex();
1302
- $options = array();
1303
- if (preg_match_all('/'.$pattern.'/s', $content, $matches)
1304
- && !empty($matches)
1305
- && is_array($matches)
1306
- && array_key_exists( 2, $matches )
1307
- && in_array('sg_popup', $matches[2])
1308
- )
1309
- {
1310
- foreach ($matches[0] as $key => $value) {
1311
- //return current shortcode all attrs as assoc array
1312
- $attrs = shortcode_parse_atts($matches[3][$key]);
1313
- $currentAttrs = array();
1314
- if (!empty($attrs['id'])) {
1315
- $currentAttrs['id'] = $attrs['id'];
1316
- }
1317
- if (!empty($attrs['insidepopup'])) {
1318
- $currentAttrs['insidepopup'] = $attrs['insidepopup'];
1319
- }
1320
- if (empty($attrs['insidepopup']) || (!empty($attrs['insidepopup']) && $attrs['insidepopup'] != 'on')) {
1321
- continue;
1322
- }
1323
-
1324
- $options[$currentAttrs['id']] = $value;
1325
- }
1326
- }
1327
-
1328
- return apply_filters('sgpbPopupInsideShortcodes', $options);
1329
- }
1330
-
1331
- /**
1332
- * Collect all popups by taxonomy slug
1333
- *
1334
- * @since 1.0.0
1335
- *
1336
- * @param string $popupTermSlug category slug name
1337
- *
1338
- * @return array $popupIds random popups id
1339
- *
1340
- */
1341
- public static function getPopupsByTermSlug($popupTermSlug)
1342
- {
1343
- $popupIds = array();
1344
-
1345
- $termPopups = get_transient(SGPB_TRANSIENT_POPUPS_TERMS);
1346
- if ($termPopups === false) {
1347
- $termPopups = get_posts(
1348
- array(
1349
- 'post_type' => 'popupbuilder',
1350
- 'numberposts' => -1,
1351
- 'tax_query' => array(
1352
- array(
1353
- 'taxonomy' => SG_POPUP_CATEGORY_TAXONOMY,
1354
- 'field' => 'slug',
1355
- 'terms' => $popupTermSlug
1356
- )
1357
- )
1358
- )
1359
- );
1360
- set_transient(SGPB_TRANSIENT_POPUPS_TERMS, $termPopups, SGPB_TRANSIENT_TIMEOUT_WEEK);
1361
- }
1362
-
1363
- if (empty($termPopups)) {
1364
- return $popupIds;
1365
- }
1366
-
1367
- foreach ($termPopups as $termPopup) {
1368
- $popupIds[] = $termPopup->ID;
1369
- }
1370
-
1371
- return $popupIds;
1372
- }
1373
-
1374
- public function boolToChecked($var)
1375
- {
1376
- return ($var?'checked':'');
1377
- }
1378
-
1379
- /**
1380
- * Delete custom inserted data
1381
- *
1382
- * @since 1.0.0
1383
- *
1384
- * @param int $postId current post page id
1385
- *
1386
- * @return void
1387
- *
1388
- */
1389
- public static function deletePostCustomInsertedData($postId)
1390
- {
1391
- delete_post_meta($postId, 'sg_popup_target_custom');
1392
- }
1393
-
1394
- /**
1395
- * Delete custom inserted events
1396
- *
1397
- * @since 1.0.0
1398
- *
1399
- * @param int $postId current post page id
1400
- *
1401
- * @return void
1402
- *
1403
- */
1404
- public static function deletePostCustomInsertedEvents($postId)
1405
- {
1406
- delete_post_meta($postId, 'sgpb_popup_events_custom');
1407
- }
1408
-
1409
- /**
1410
- * If popup Type does not have getPopupTypeOptions method
1411
- * it's tell popup does not have custom options
1412
- *
1413
- * @since 1.0.0
1414
- *
1415
- * @return bool
1416
- *
1417
- */
1418
- public function getPopupTypeOptionsView()
1419
- {
1420
- return false;
1421
- }
1422
-
1423
- /**
1424
- * If popup Type does not have getPopupTypeOptions method
1425
- * it's tell popup does not have custom options
1426
- *
1427
- * @since 1.0.0
1428
- *
1429
- * @return bool
1430
- *
1431
- */
1432
- public function getPopupTypeMainView()
1433
- {
1434
- return false;
1435
- }
1436
-
1437
- /**
1438
- * Remove popup option from admin view by option name
1439
- *
1440
- * @since 1.0.0
1441
- *
1442
- * @return array $removedOptions
1443
- *
1444
- */
1445
- public function getRemoveOptions()
1446
- {
1447
- $removeOptions = array();
1448
-
1449
- return apply_filters('sgpbRemoveOptions', $removeOptions);
1450
- }
1451
-
1452
- public static function createPopupTypeObjById($popupId)
1453
- {
1454
- global $SGPB_POPUP_TYPES;
1455
- $typePath = '';
1456
- $popupOptionsData = SGPopup::getPopupOptionsById($popupId);
1457
- if (empty($popupOptionsData)) {
1458
- return false;
1459
- }
1460
- $popupType = $popupOptionsData['sgpb-type'];
1461
- $popupName = ucfirst(strtolower($popupType));
1462
- $popupClassName = $popupName.'Popup';
1463
-
1464
- if (!empty($SGPB_POPUP_TYPES['typePath'][$popupType])) {
1465
- $typePath = $SGPB_POPUP_TYPES['typePath'][$popupType];
1466
- }
1467
-
1468
- if (!file_exists($typePath.$popupClassName.'.php')) {
1469
- wp_die(__('Popup class does not exist', SG_POPUP_TEXT_DOMAIN));
1470
- }
1471
- require_once($typePath.$popupClassName.'.php');
1472
-
1473
- $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
1474
- $popupTypeObj = new $popupClassName();
1475
- $popupTypeObj->setId($popupId);
1476
-
1477
- return $popupTypeObj;
1478
- }
1479
-
1480
- /**
1481
- * if child class does not have this function we call parent function to not get any errors
1482
- *
1483
- * @since 1.0.0
1484
- *
1485
- * @return array
1486
- *
1487
- */
1488
- public static function getTablesSql()
1489
- {
1490
- return array();
1491
- }
1492
-
1493
- /**
1494
- * if child class does not have this function we call parent function to not get any errors
1495
- *
1496
- * @since 1.0.0
1497
- *
1498
- * @return array
1499
- *
1500
- */
1501
- public static function getTableNames()
1502
- {
1503
- return array();
1504
- }
1505
-
1506
- /**
1507
- *
1508
- * Get WordPress localization name
1509
- *
1510
- * @since 1.0.0
1511
- *
1512
- * @return string
1513
- *
1514
- */
1515
- public function getSiteLocale()
1516
- {
1517
- $locale = get_bloginfo('language');
1518
- $locale = str_replace('-', '_', $locale);
1519
-
1520
- return $locale;
1521
- }
1522
-
1523
- public function addAdditionalSettings($postData = array(), $obj = null)
1524
- {
1525
- return array();
1526
- }
1527
-
1528
- public function allowToLoad()
1529
- {
1530
- global $post;
1531
-
1532
- $popupChecker = PopupChecker::instance();
1533
- $loadableModes = $popupChecker->isLoadable($this, $post);
1534
- $this->setLoadableModes($loadableModes);
1535
-
1536
- return ($loadableModes['attr_event'] || $loadableModes['option_event']);
1537
- }
1538
-
1539
- public function allowToLoadAJAX()
1540
- {
1541
- global $post;
1542
-
1543
- $popupChecker = PopupChecker::instance();
1544
- $loadableModes = $popupChecker->isLoadable($this, $post, true);
1545
- $this->setLoadableModes($loadableModes);
1546
-
1547
- return ($loadableModes['attr_event'] || $loadableModes['option_event']);
1548
- }
1549
-
1550
- public static function getAllPopups($filters = array())
1551
- {
1552
- $args = array(
1553
- 'post_type' => SG_POPUP_POST_TYPE
1554
- );
1555
- $allPopups = array();
1556
- $allPostData = ConfigDataHelper::getQueryDataByArgs($args);
1557
-
1558
- if (empty($allPostData)) {
1559
- return $allPopups;
1560
- }
1561
-
1562
- foreach ($allPostData->posts as $postData) {
1563
- if (empty($postData)) {
1564
- continue;
1565
- }
1566
-
1567
- $popup = self::find($postData->ID, $args);
1568
- if (empty($popup) || !($popup instanceof SGPopup)) {
1569
- continue;
1570
- }
1571
- $type = @$popup->getType();
1572
-
1573
- if (isset($filters['type'])) {
1574
- if (is_array($filters['type'])) {
1575
- if (!in_array($type, $filters['type'])) {
1576
- continue;
1577
- }
1578
- }
1579
- else if ($type != $filters['type']) {
1580
- continue;
1581
- }
1582
- }
1583
- $allPopups[] = $popup;
1584
- }
1585
-
1586
- return $allPopups;
1587
- }
1588
-
1589
- public function getPopupsIdAndTitle()
1590
- {
1591
- $allPopups = SGPopup::getAllPopups();
1592
- $popupIdTitles = array();
1593
-
1594
- if (empty($allPopups)) {
1595
- return $popupIdTitles;
1596
- }
1597
- $currentPopupId = $this->getId();
1598
-
1599
- foreach ($allPopups as $popup) {
1600
- if (empty($popup)) {
1601
- continue;
1602
- }
1603
- $id = $popup->getId();
1604
-
1605
- if ($id == $currentPopupId) {
1606
- continue;
1607
- }
1608
-
1609
- $title = $popup->getTitle();
1610
- $type = $popup->getType();
1611
-
1612
- $popupIdTitles[$id] = $title.' - '.$type;
1613
- }
1614
-
1615
- return $popupIdTitles;
1616
- }
1617
-
1618
- public function getSubPopupObj()
1619
- {
1620
- $subPopups = array();
1621
- $options = $this->getOptions();
1622
-
1623
- $specialBehaviors = @$options['sgpb-behavior-after-special-events'];
1624
- if (!empty($specialBehaviors) && is_array($specialBehaviors)) {
1625
- foreach ($specialBehaviors as $behavior) {
1626
- foreach ($behavior as $row) {
1627
- if (!empty($row['param']) && $row['param'] == SGPB_CONTACT_FORM_7_BEHAVIOR_KEY) {
1628
- if (!empty($row['operator']) && $row['operator'] == 'open-popup') {
1629
- if (!empty($row['value'])) {
1630
- $popupId = key($row['value']);
1631
- $subPopupObj = self::find((int)$popupId);
1632
- if (!empty($subPopupObj) && ($subPopupObj instanceof SGPopup)) {
1633
- $subPopupObj->setEvents(array('param' => 'click', 'value' => ''));
1634
- $subPopups[] = $subPopupObj;
1635
- }
1636
- }
1637
- }
1638
- }
1639
- }
1640
- }
1641
- }
1642
-
1643
- return $subPopups;
1644
- }
1645
-
1646
- public static function doInsideShortcode($insideShortcode)
1647
- {
1648
- return do_shortcode($insideShortcode);
1649
- }
1650
-
1651
- public function popupShortcodesInsidePopup()
1652
- {
1653
- $popups = array();
1654
- $args = array('insidePopup' => 'on');
1655
- $popupContent = $this->getContent();
1656
- $parentTarget = $this->getTarget();
1657
- $insidePopupShortcodes = self::collectInsidePopupShortcodes($popupContent);
1658
- if (empty($insidePopupShortcodes)) {
1659
- return $popups;
1660
- }
1661
- foreach ($insidePopupShortcodes as $insidePopupId => $insidePopupShortcode) {
1662
- $insidePopupId = (int)$insidePopupId;
1663
- if (!$insidePopupId) {
1664
- continue;
1665
- }
1666
- // true = find inside popup
1667
- $insidePopup = self::find($insidePopupId, $args);
1668
- if (empty($insidePopup) || $insidePopup == 'trash' || $insidePopup == 'inherit') {
1669
- continue;
1670
- }
1671
- $events = array('insideclick');
1672
- $insidePopup->setEvents($events);
1673
- $popups[$insidePopupId] = $insidePopup;
1674
- }
1675
-
1676
- $popupContent = self::doInsideShortcode($popupContent);
1677
- $this->setContent($popupContent);
1678
-
1679
- return $popups;
1680
- }
1681
-
1682
- public function getPopupOpeningCountById($popupId)
1683
- {
1684
- global $wpdb;
1685
-
1686
- $allCount = 0;
1687
- $popupsCounterData = get_option('SgpbCounter');
1688
- $popupCountFromAnalyticsData = 0;
1689
- $tableName = $wpdb->prefix.'sgpb_analytics';
1690
- if ($wpdb->get_var("SHOW TABLES LIKE '$tableName'") == $tableName) {
1691
- $popupCountFromAnalyticsData = self::getAnalyticsDataByPopupId($popupId);
1692
- }
1693
- if (isset($popupsCounterData[$popupId])) {
1694
- $allCount += $popupsCounterData[$popupId];
1695
- }
1696
- $allCount += $popupCountFromAnalyticsData;
1697
-
1698
- return $allCount;
1699
- }
1700
-
1701
- public static function getAnalyticsDataByPopupId($popupId)
1702
- {
1703
- global $wpdb;
1704
- // 7, 12, 13 => exclude close, subscription success, contact success events
1705
- $stmt = $wpdb->prepare('SELECT COUNT(*) FROM '.$wpdb->prefix.'sgpb_analytics WHERE target_id = %d AND event_id NOT IN (7, 12, 13)', $popupId);
1706
- $popupAnalyticsData = $wpdb->get_var($stmt);
1707
- return $popupAnalyticsData;
1708
- }
1709
-
1710
- public static function deleteAnalyticsDataByPopupId($popupId)
1711
- {
1712
- global $wpdb;
1713
- $prepareSql = $wpdb->prepare('DELETE FROM '.$wpdb->prefix.'sgpb_analytics WHERE target_id = %d AND event_id NOT IN (7, 12, 13) LIMIT 100', $popupId);
1714
- $wpdb->query($prepareSql);
1715
- }
1716
-
1717
- public static function getActivePopupsQueryString()
1718
- {
1719
- $activePopupsQuery = '';
1720
- $args = array(
1721
- 'post_type' => SG_POPUP_POST_TYPE,
1722
- 'post_status' => array('trash', 'publish')
1723
- );
1724
- if (!class_exists('ConfigDataHelper')) {
1725
- return $activePopupsQuery;
1726
- }
1727
- $allPostData = ConfigDataHelper::getQueryDataByArgs($args);
1728
- $args['checkActivePopupType'] = true;
1729
- $allPopups = $allPostData->posts;
1730
- foreach ($allPopups as $post) {
1731
- $id = $post->ID;
1732
- $popup = self::find($id, $args);
1733
- if (empty($popup)) {
1734
- $activePopupsQuery .= $id.', ';
1735
- }
1736
- }
1737
- if ($activePopupsQuery != '') {
1738
- $activePopupsQuery = ' AND ID NOT IN ('.$activePopupsQuery.')';
1739
- $activePopupsQuery = str_replace(', )', ') ', $activePopupsQuery);
1740
- }
1741
-
1742
- return $activePopupsQuery;
1743
- }
1744
-
1745
- public function isActive()
1746
- {
1747
- return $this->getOptionValue('sgpb-is-active', true);
1748
- }
1749
- }
 
 
1
+ <?php
2
+ namespace sgpb;
3
+ use \ConfigDataHelper;
4
+ use \WP_Post;
5
+
6
+ if (class_exists("sgpb\SGPopup")) {
7
+ return;
8
+ }
9
+
10
+ abstract class SGPopup
11
+ {
12
+ protected $type;
13
+
14
+ private $sanitizedData;
15
+ private $postData = array();
16
+ private $id;
17
+ private $title;
18
+ private $content;
19
+ private $target;
20
+ private $conditions;
21
+ private $events = array();
22
+ private $options;
23
+ private $loadableModes;
24
+ private $saveMode = '';
25
+ private $savedPopup = false;
26
+
27
+
28
+ public function setId($id)
29
+ {
30
+ $this->id = $id;
31
+ }
32
+
33
+ public function getId()
34
+ {
35
+ return (int)$this->id;
36
+ }
37
+
38
+ public function setTitle($title)
39
+ {
40
+ $this->title = $title;
41
+ }
42
+
43
+ public function getTitle()
44
+ {
45
+ return $this->title;
46
+ }
47
+
48
+ public function setType($type)
49
+ {
50
+ $this->type = $type;
51
+ }
52
+
53
+ public function getType()
54
+ {
55
+ return $this->type;
56
+ }
57
+
58
+ public function setTarget($target)
59
+ {
60
+ $this->target = $target;
61
+ }
62
+
63
+ public function getTarget()
64
+ {
65
+ return $this->target;
66
+ }
67
+
68
+ public function setEvents($events)
69
+ {
70
+ $this->events = $events;
71
+ }
72
+
73
+ public function getEvents()
74
+ {
75
+ return $this->events;
76
+ }
77
+
78
+ public function setConditions($conditions)
79
+ {
80
+ $this->conditions = $conditions;
81
+ }
82
+
83
+ public function getConditions()
84
+ {
85
+ return $this->conditions;
86
+ }
87
+
88
+ public function setOptions($options)
89
+ {
90
+ $this->options = $options;
91
+ }
92
+
93
+ public function getOptions()
94
+ {
95
+ return $this->options;
96
+ }
97
+
98
+ public function setLoadableModes($loadableModes)
99
+ {
100
+ $this->loadableModes = $loadableModes;
101
+ }
102
+
103
+ public function getLoadableModes()
104
+ {
105
+ return $this->loadableModes;
106
+ }
107
+
108
+ public function setSaveMode($saveMode)
109
+ {
110
+ $this->saveMode = $saveMode;
111
+ }
112
+
113
+ public function getSaveMode()
114
+ {
115
+ return $this->saveMode;
116
+ }
117
+
118
+ public function setSavedPopup($savedPopup)
119
+ {
120
+ $this->savedPopup = $savedPopup;
121
+ }
122
+
123
+ public function getSavedPopup()
124
+ {
125
+ return $this->savedPopup;
126
+ }
127
+
128
+ public function setContent($content)
129
+ {
130
+ $this->content = $content;
131
+ }
132
+
133
+ public function setSavedPopupById($popupId)
134
+ {
135
+ $popup = SGPopup::find($popupId);
136
+ if (is_object($popup)) {
137
+ $this->setSavedPopup($popup);
138
+ }
139
+ }
140
+
141
+ public function setReportData($popupId)
142
+ {
143
+ $events = $this->getEvents();
144
+ $options = $this->getOptions();
145
+ $targets = $this->getTarget();
146
+ $conditions = $this->getConditions();
147
+ do_action('sgpbDebugReportUpdate', 'options', $options, $popupId);
148
+ do_action('sgpbDebugReportUpdate', 'events', $events, $popupId);
149
+ do_action('sgpbDebugReportUpdate', 'targets', $targets, $popupId);
150
+ do_action('sgpbDebugReportUpdate', 'conditions', $conditions, $popupId);
151
+ }
152
+
153
+ public function getPopupAllEvents($postId, $popupId, $popupObj = false)
154
+ {
155
+ $events = array();
156
+
157
+ $loadableModes = $this->getLoadableModes();
158
+
159
+ if (isset($loadableModes['attr_event'])) {
160
+ $customEvents = SGPopup::getPostPopupCustomEvent($postId, $popupId);
161
+ $events = array_merge($events, $customEvents);
162
+ }
163
+
164
+ if (isset($loadableModes['option_event']) || is_null($loadableModes)) {
165
+ $optionEvents = $this->getEvents();
166
+ if (!is_array($optionEvents)) {
167
+ $optionEvents = array();
168
+ }
169
+ $events = array_merge($events, $optionEvents);
170
+ }
171
+
172
+ if (!empty($popupObj->getOptionValue('sgpb-enable-floating-button'))) {
173
+ $events[] = array('param' => 'setByCssClass', 'hiddenOption' => array());
174
+ }
175
+
176
+ return apply_filters('sgpbPopupEvents', $events, $popupObj);
177
+ }
178
+
179
+ public function getContent()
180
+ {
181
+ $postId = $this->getId();
182
+
183
+ if (!AdminHelper::hasBlocks($this->content)) {
184
+ $popupContent = wpautop($this->content);
185
+ } else {
186
+ $popupContent = $this->content;
187
+ }
188
+
189
+ $editorContent = AdminHelper::checkEditorByPopupId($postId);
190
+ if (!empty($editorContent)) {
191
+ if (class_exists('Vc_Manager')) {
192
+ $popupContent .= $editorContent;
193
+ }
194
+ else {
195
+ $popupContent = $editorContent;
196
+ }
197
+ }
198
+
199
+ return $popupContent;
200
+ }
201
+
202
+ public function setPostData($postData)
203
+ {
204
+ $this->postData = apply_filters('sgpbSavedPostData', $postData);
205
+ }
206
+
207
+ public function getPostData()
208
+ {
209
+ return $this->postData;
210
+ }
211
+
212
+ public function getPopupTypeContent()
213
+ {
214
+ return $this->getContent();
215
+ }
216
+
217
+ public function insertIntoSanitizedData($sanitizedData)
218
+ {
219
+ if (!empty($sanitizedData)) {
220
+ $this->sanitizedData[$sanitizedData['name']] = $sanitizedData['value'];
221
+ }
222
+ }
223
+
224
+ abstract public function getExtraRenderOptions();
225
+
226
+ public function setSanitizedData($sanitizedData)
227
+ {
228
+ $this->sanitizedData = $sanitizedData;
229
+ }
230
+
231
+ public function getSanitizedData()
232
+ {
233
+ return $this->sanitizedData;
234
+ }
235
+
236
+ /**
237
+ * Find popup and create this object
238
+ *
239
+ * @since 1.0.0
240
+ *
241
+ * @param object|int $popup
242
+ *
243
+ * @return object|false $obj
244
+ */
245
+ public static function find($popup, $args = array())
246
+ {
247
+ if (isset($_GET['sg_popup_preview_id'])) {
248
+ $args['is-preview'] = true;
249
+ }
250
+ // If the popup is object get data from object otherwise we find needed data from WordPress functions
251
+ if ($popup instanceof WP_Post) {
252
+ $status = $popup->post_status;
253
+ $title = $popup->post_title;
254
+ $popupContent = $popup->post_content;
255
+ $popupId = $popup->ID;
256
+ }
257
+ else {
258
+ $popupId = $popup;
259
+ $popupPost = get_post($popupId);
260
+ if (empty($popupPost)) {
261
+ return false;
262
+ }
263
+ $title = get_the_title($popupId);
264
+ $status = get_post_status($popupId);
265
+ $popupContent = $popupPost->post_content;
266
+ }
267
+ $allowedStatus = array('publish', 'draft');
268
+
269
+ if (!empty($args['status'])) {
270
+ $allowedStatus = $args['status'];
271
+ }
272
+
273
+ if (!isset($args['checkActivePopupType']) && !in_array($status, $allowedStatus)) {
274
+ return $status;
275
+ }
276
+ $saveMode = '';
277
+ global $post;
278
+ if ((@is_preview() && $post->ID == $popupId) || isset($args['preview'])) {
279
+ $saveMode = '_preview';
280
+ }
281
+ if (isset($args['is-preview'])) {
282
+ $saveMode = '_preview';
283
+ }
284
+ if (isset($args['insidePopup']) && $args['insidePopup'] == 'on') {
285
+ $saveMode = '';
286
+ }
287
+ $currentPost = get_post($popupId);
288
+ $currentPostStatus = $currentPost->post_status;
289
+ if ($currentPostStatus == 'draft') {
290
+ $saveMode = '_preview';
291
+ }
292
+
293
+ $savedData = array();
294
+ if (file_exists(dirname(__FILE__).'/PopupData.php')) {
295
+ require_once(dirname(__FILE__).'/PopupData.php');
296
+ $savedData = PopupData::getPopupDataById($popupId, $saveMode);
297
+ }
298
+ $savedData = apply_filters('sgpbPopupSavedData', $savedData);
299
+
300
+ if (empty($savedData)) {
301
+ return false;
302
+ }
303
+
304
+ $type = 'html';
305
+ if (isset($savedData['sgpb-type'])) {
306
+ $type = $savedData['sgpb-type'];
307
+ }
308
+
309
+ $popupClassName = self::getPopupClassNameFormType($type);
310
+ $typePath = self::getPopupTypeClassPath($type);
311
+ if (!file_exists($typePath.$popupClassName.'.php')) {
312
+ return false;
313
+ }
314
+ require_once($typePath.$popupClassName.'.php');
315
+ $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
316
+
317
+ $obj = new $popupClassName();
318
+ $obj->setId($popupId);
319
+ $obj->setType($type);
320
+ $obj->setTitle($title);
321
+ $obj->setContent($popupContent);
322
+
323
+ if (!empty($savedData['sgpb-target'][0])) {
324
+ $obj->setTarget($savedData['sgpb-target'][0]);
325
+ }
326
+ unset($savedData['sgpb-target']);
327
+ if (!empty($savedData['sgpb-events'][0])) {
328
+ $events = self::shapeEventsToOneArray($savedData['sgpb-events'][0]);
329
+ $obj->setEvents($events);
330
+ }
331
+ unset($savedData['sgpb-events']);
332
+ if (!empty($savedData['sgpb-conditions'][0])) {
333
+ $obj->setConditions($savedData['sgpb-conditions'][0]);
334
+ }
335
+ unset($savedData['sgpb-conditions']);
336
+
337
+ $obj->setOptions($savedData);
338
+
339
+ return $obj;
340
+ }
341
+
342
+ private static function shapeEventsToOneArray($events)
343
+ {
344
+ $eventsData = array();
345
+ if (!empty($events)) {
346
+ foreach ($events as $event) {
347
+ if (empty($event['hiddenOption'])) {
348
+ $eventsData[] = $event;
349
+ continue;
350
+ }
351
+ $hiddenOptions = $event['hiddenOption'];
352
+ unset($event['hiddenOption']);
353
+ $eventsData[] = $event + $hiddenOptions;
354
+ }
355
+ }
356
+
357
+ return apply_filters('sgpbEventsToOneArray', $eventsData);
358
+ }
359
+
360
+ public static function getPopupClassNameFormType($type)
361
+ {
362
+ $popupName = ucfirst(strtolower($type));
363
+ $popupClassName = $popupName.'Popup';
364
+
365
+ return apply_filters('sgpbPopupClassNameFromType', $popupClassName);
366
+ }
367
+
368
+ public static function getPopupTypeClassPath($type)
369
+ {
370
+ global $SGPB_POPUP_TYPES;
371
+ $typePaths = $SGPB_POPUP_TYPES['typePath'];
372
+
373
+ if (empty($typePaths[$type])) {
374
+ return SG_POPUP_CLASSES_POPUPS_PATH;
375
+ }
376
+
377
+ return $typePaths[$type];
378
+ }
379
+
380
+ public function sanitizeValueByType($value, $type)
381
+ {
382
+ switch ($type) {
383
+ case 'string':
384
+ if (is_array($value)) {
385
+ $sanitizedValue = $this->recursiveSanitizeTextField($value);
386
+ }
387
+ else {
388
+ $sanitizedValue = htmlspecialchars($value);
389
+ }
390
+ break;
391
+ case 'text':
392
+ $sanitizedValue = htmlspecialchars($value);
393
+ break;
394
+ case 'array':
395
+ $sanitizedValue = $this->recursiveSanitizeTextField($value);
396
+ break;
397
+ case 'email':
398
+ $sanitizedValue = sanitize_email($value);
399
+ break;
400
+ case 'sgpb':
401
+ $sanitizedValue = $this->recursiveHtmlSpecialchars($value);
402
+ break;
403
+ default:
404
+ $sanitizedValue = sanitize_text_field($value);
405
+ break;
406
+ }
407
+
408
+ return $sanitizedValue;
409
+ }
410
+
411
+ public function recursiveSanitizeTextField($array)
412
+ {
413
+ if (!is_array($array)) {
414
+ return $array;
415
+ }
416
+
417
+ foreach ($array as $key => &$value) {
418
+ if (is_array($value)) {
419
+ $value = $this->recursiveSanitizeTextField($value);
420
+ }
421
+ else {
422
+ /*get simple field type and do sanitization*/
423
+ $defaultData = $this->getDefaultDataByName($key);
424
+ if (empty($defaultData['type'])) {
425
+ $defaultData['type'] = 'string';
426
+ }
427
+ $value = $this->sanitizeValueByType($value, $defaultData['type']);
428
+ }
429
+ }
430
+
431
+ return $array;
432
+ }
433
+
434
+ public function recursiveHtmlSpecialchars($array)
435
+ {
436
+ if (!is_array($array)) {
437
+ return $array;
438
+ }
439
+
440
+ foreach ($array as $key => &$value) {
441
+ if (is_array($value)) {
442
+ $value = $this->recursiveHtmlSpecialchars($value);
443
+ }
444
+ else {
445
+ $value = htmlspecialchars($value);
446
+ }
447
+ }
448
+
449
+ return $array;
450
+ }
451
+
452
+ public static function parsePopupDataFromData($data)
453
+ {
454
+ $popupData = array();
455
+ $data = apply_filters('sgpbFilterOptionsBeforeSaving', $data);
456
+
457
+ foreach ($data as $key => $value) {
458
+ if (strpos($key, 'sgpb') === 0) {
459
+ $popupData[$key] = $value;
460
+ }
461
+ if (is_array($value) && isset($value['name']) && strpos($value['name'], 'sgpb') === 0) {
462
+ $popupData[$value['name']] = $value['value'];
463
+ }
464
+ else if (is_array($value) && isset($value['name']) && strpos($value['name'], 'post_ID') === 0) {
465
+ $popupData['sgpb-post-id'] = $value['value'];
466
+ }
467
+ }
468
+
469
+ return $popupData;
470
+ }
471
+
472
+ public static function create($data = array(), $saveMode = '', $firstTime = 0)
473
+ {
474
+ $obj = new static();
475
+ $obj->setSaveMode($saveMode);
476
+ $additionalData = $obj->addAdditionalSettings($data, $obj);
477
+ $data = array_merge($data, $additionalData);
478
+ $data = apply_filters('sgpbAdvancedOptionsDefaultValues', $data);
479
+ foreach ($data as $name => $value) {
480
+ if (strpos($name, 'sgpb') === 0) {
481
+ $defaultData = $obj->getDefaultDataByName($name);
482
+ if (empty($defaultData['type'])) {
483
+ $defaultData['type'] = 'string';
484
+ }
485
+ $sanitizedValue = $obj->sanitizeValueByType($value, $defaultData['type']);
486
+ $obj->insertIntoSanitizedData(array('name' => $name,'value' => $sanitizedValue));
487
+ }
488
+ }
489
+
490
+ $obj->setSavedPopupById($data['sgpb-post-id']);
491
+ $result = $obj->save();
492
+
493
+ $result = apply_filters('sgpbPopupCreateResult', $result);
494
+
495
+ if ($result) {
496
+ return $obj;
497
+ }
498
+
499
+ return $result;
500
+ }
501
+
502
+ public function save()
503
+ {
504
+ $this->convertImagesToData();
505
+ $data = $this->getSanitizedData();
506
+ $popupId = $data['sgpb-post-id'];
507
+
508
+ $this->setId($popupId);
509
+
510
+ if (!empty($data['sgpb-target'])) {
511
+ $this->setTarget($data['sgpb-target']);
512
+ /*remove from popup options because it's useless to save it twice*/
513
+ unset($data['sgpb-target']);
514
+ }
515
+ if (!empty($data['sgpb-conditions'])) {
516
+ $this->setConditions($data['sgpb-conditions']);
517
+ unset($data['sgpb-conditions']);
518
+ }
519
+ if (!empty($data['sgpb-events'])) {
520
+ $this->setEvents($data['sgpb-events']);
521
+ unset($data['sgpb-events']);
522
+ }
523
+ $data = $this->customScriptsSave($data);
524
+ $this->setOptions($data);
525
+
526
+ $targets = $this->targetSave();
527
+ $events = $this->eventsSave();
528
+ $options = $this->popupOptionsSave();
529
+
530
+ return ($targets && $events && $options);
531
+ }
532
+
533
+ public function convertImagesToData()
534
+ {
535
+ $buttonImageData = '';
536
+ $savedImageUrl = '';
537
+ $savedContentBackgroundImageUrl = '';
538
+ $contentBackgroundImageData = '';
539
+
540
+ $data = $this->getSanitizedData();
541
+ $buttonImageUrl = @$data['sgpb-button-image'];
542
+ $contentBackgroundImageUrl = @$data['sgpb-background-image'];
543
+
544
+ $savedPopup = $this->getSavedPopup();
545
+
546
+ if (is_object($savedPopup)) {
547
+ $buttonImageData = $savedPopup->getOptionvalue('sgpb-button-image-data');
548
+ $savedImageUrl = $savedPopup->getOptionValue('sgpb-button-image');
549
+ $contentBackgroundImageData = $savedPopup->getOptionValue('sgpb-background-image-data');
550
+ $savedContentBackgroundImageUrl = $savedPopup->getOptionValue('sgpb-background-image');
551
+ }
552
+
553
+ if ($buttonImageUrl != $savedImageUrl) {
554
+ $buttonImageData = AdminHelper::getImageDataFromUrl($buttonImageUrl, true);
555
+ }
556
+ if ($contentBackgroundImageUrl != $savedContentBackgroundImageUrl) {
557
+ $contentBackgroundImageData = AdminHelper::getImageDataFromUrl($contentBackgroundImageUrl);
558
+ }
559
+
560
+ $data['sgpb-button-image-data'] = $buttonImageData;
561
+ $data['sgpb-background-image-data'] = $contentBackgroundImageData;
562
+
563
+ $data = apply_filters('sgpbConvertImagesToData', $data);
564
+ $this->setSanitizedData($data);
565
+ }
566
+
567
+ private function customScriptsSave($data)
568
+ {
569
+ $popupId = $this->getId();
570
+ $popupContent = $this->getContent();
571
+
572
+ $defaultData = ConfigDataHelper::defaultData();
573
+ $defaultDataJs = $defaultData['customEditorContent']['js']['helperText'];
574
+ $defaultDataCss = $defaultData['customEditorContent']['css']['oldDefaultValue'];
575
+
576
+ $finalData = array('js' => array(), 'css' => array());
577
+ $alreadySavedData = get_post_meta($popupId, 'sg_popup_scripts', true);
578
+
579
+ // get styles
580
+ $finalData['css'] = $data['sgpb-css-editor'];
581
+ $defaultDataCss = $defaultDataCss[0];
582
+
583
+ $defaultDataCss = preg_replace('/\s/', '', $defaultDataCss);
584
+ $temp = preg_replace('/\s/', '', $finalData['css']);
585
+
586
+ unset($data['sgpb-css-editor']);
587
+
588
+ if ($temp == $defaultDataCss) {
589
+ unset($finalData['css']);
590
+ }
591
+
592
+ // get scripts
593
+ foreach ($defaultDataJs as $key => $value) {
594
+ if ($data['sgpb-'.$key] == '') {
595
+ unset($data['sgpb-'.$key]);
596
+ continue;
597
+ }
598
+ if ($key == 'ShouldOpen' || $key == 'ShouldClose') {
599
+ $finalData['js']['sgpb-'.$key] = $data['sgpb-'.$key];
600
+ continue;
601
+ }
602
+ $finalData['js']['sgpb-'.$key] = $data['sgpb-'.$key];
603
+ unset($data['sgpb-'.$key]);
604
+ }
605
+
606
+ if ($alreadySavedData == $finalData) {
607
+ return $data;
608
+ }
609
+
610
+ array_walk_recursive($finalData, function(&$element){
611
+ $element = str_replace(array("\r\n"), "\n", $element);
612
+ });
613
+
614
+ update_post_meta($popupId, 'sg_popup_scripts', $finalData);
615
+
616
+ return $data;
617
+ }
618
+
619
+ private function targetSave()
620
+ {
621
+ global $SGPB_DATA_CONFIG_ARRAY;
622
+ $saveMode = $this->getSaveMode();
623
+ $popupId = $this->getId();
624
+ $targetData = $this->getTarget();
625
+ $conditionsData = $this->getConditions();
626
+
627
+ $targetConfig = $SGPB_DATA_CONFIG_ARRAY['target'];
628
+ $paramsData = $targetConfig['paramsData'];
629
+ $attrs = $targetConfig['attrs'];
630
+ $popupTarget = array();
631
+ if (empty($targetData)) {
632
+ return array();
633
+ }
634
+
635
+ foreach ($targetData as $groupId => $groupData) {
636
+ foreach ($groupData as $ruleId => $ruleData) {
637
+
638
+ if (empty($ruleData['value']) && !is_null($paramsData[$ruleData['param']])) {
639
+ $targetData[$groupId][$ruleId]['value'] = '';
640
+ }
641
+ if (isset($ruleData['value']) && is_array($ruleData['value'])) {
642
+ $valueAttrs = $attrs[$ruleData['param']]['htmlAttrs'];
643
+ $postType = $valueAttrs['data-value-param'];
644
+ $isNotPostType = '';
645
+ if (isset($valueAttrs['isNotPostType'])) {
646
+ $isNotPostType = $valueAttrs['isNotPostType'];
647
+ }
648
+
649
+ if (empty($valueAttrs['isNotPostType'])) {
650
+ $isNotPostType = false;
651
+ }
652
+
653
+ /*
654
+ * $isNotPostType => false must search inside post types post
655
+ * $isNotPostType => true must save array data
656
+ * */
657
+ if (!$isNotPostType) {
658
+ $args = array(
659
+ 'post__in' => array_values($ruleData['value']),
660
+ 'posts_per_page' => 100,
661
+ 'post_type' => $postType
662
+ );
663
+
664
+ $searchResults = ConfigDataHelper::getPostTypeData($args);
665
+
666
+ $targetData[$groupId][$ruleId]['value'] = $searchResults;
667
+ }
668
+ }
669
+ }
670
+ }
671
+
672
+ $popupTarget['sgpb-target'] = $targetData;
673
+ $popupTarget['sgpb-conditions'] = apply_filters('sgpbSaveConditions', $conditionsData);
674
+
675
+ $alreadySavedTargets = get_post_meta($popupId, 'sg_popup_target'.$saveMode, true);
676
+ if ($alreadySavedTargets === $popupTarget) {
677
+ return true;
678
+ }
679
+
680
+ $popupTarget = apply_filters('sgpbPopupTargetMetaData', $popupTarget);
681
+
682
+ return update_post_meta($popupId, 'sg_popup_target'.$saveMode, $popupTarget);
683
+ }
684
+
685
+ private function eventsSave()
686
+ {
687
+ global $SGPB_DATA_CONFIG_ARRAY;
688
+
689
+ $eventsData = $this->getEvents();
690
+ $popupId = $this->getId();
691
+ $saveMode = $this->getSaveMode();
692
+ $popupEvents = array();
693
+ $eventsFromPopup = array();
694
+
695
+ foreach ($eventsData as $groupId => $groupData) {
696
+ $currentRuleData = array();
697
+ foreach ($groupData as $ruleId => $ruleData) {
698
+
699
+ $hiddenOptions = array();
700
+ $currentData = array();
701
+ foreach ($ruleData as $name => $value) {
702
+ if ($name == 'param' || $name == 'value' || $name == 'operator') {
703
+ $currentData[$name] = $value;
704
+ }
705
+ else {
706
+ $hiddenOptions[$name] = $value;
707
+ }
708
+ }
709
+ $currentData['hiddenOption'] = $hiddenOptions;
710
+ $currentRuleData[$ruleId] = $currentData;
711
+ }
712
+ $eventsFromPopup[$groupId] = $currentRuleData;
713
+ }
714
+
715
+ $popupEvents['formPopup'] = $eventsFromPopup;
716
+ $alreadySavedEvents = get_post_meta($popupId, 'sg_popup_events'.$saveMode, true);
717
+ if ($alreadySavedEvents === $eventsFromPopup) {
718
+ return true;
719
+ }
720
+
721
+ $eventsFromPopup = apply_filters('sgpbPopupEventsMetadata', $eventsFromPopup);
722
+
723
+ return update_post_meta($popupId, 'sg_popup_events'.$saveMode, $eventsFromPopup);
724
+ }
725
+
726
+ private function popupOptionsSave()
727
+ {
728
+ $popupOptions = $this->getOptions();
729
+ $popupOptions = apply_filters('sgpbSavePopupOptions', $popupOptions);
730
+ //special code added for "Behavior After Special Events" section
731
+ //todo: remove in the future if possible
732
+ $specialBehaviors = array();
733
+ if (!empty($popupOptions['sgpb-behavior-after-special-events'])) {
734
+ $specialBehaviors = $popupOptions['sgpb-behavior-after-special-events'];
735
+ }
736
+ if (!empty($specialBehaviors) && is_array($specialBehaviors)) {
737
+ foreach ($specialBehaviors as $groupId => $groupRow) {
738
+ foreach ($groupRow as $ruleId => $ruleRow) {
739
+ if (!empty($ruleRow['operator']) && $ruleRow['operator'] == 'open-popup') {
740
+ $args = array(
741
+ 'post__in' => array($ruleRow['value']),
742
+ 'posts_per_page' => 10,
743
+ 'post_type' => SG_POPUP_POST_TYPE
744
+ );
745
+
746
+ $searchResults = ConfigDataHelper::getPostTypeData($args);
747
+ $popupOptions['sgpb-behavior-after-special-events'][$groupId][$ruleId]['value'] = $searchResults;
748
+ }
749
+ }
750
+ }
751
+ }
752
+
753
+ $popupId = $this->getId();
754
+ $saveMode = $this->getSaveMode();
755
+
756
+ $alreadySavedOptions = get_post_meta($popupId, 'sg_popup_options'.$saveMode, true);
757
+ if ($alreadySavedOptions === $popupOptions) {
758
+ return true;
759
+ }
760
+
761
+ $popupOptions = apply_filters('sgpbPopupSavedOptionsMetaData', $popupOptions);
762
+
763
+ return update_post_meta($popupId, 'sg_popup_options'.$saveMode, $popupOptions);
764
+ }
765
+
766
+ public function getOptionValue($optionName, $forceDefaultValue = false)
767
+ {
768
+ require_once(dirname(__FILE__).'/PopupData.php');
769
+ $savedData = PopupData::getPopupDataById($this->getId());
770
+ $this->setPostData($savedData);
771
+
772
+ return $this->getOptionValueFromSavedData($optionName, $forceDefaultValue);
773
+ }
774
+
775
+ public function getOptionValueFromSavedData($optionName, $forceDefaultValue = false)
776
+ {
777
+ $defaultData = $this->getDefaultDataByName($optionName);
778
+ $savedData = $this->getPostData();
779
+
780
+ $optionValue = null;
781
+
782
+ if (empty($defaultData['type'])) {
783
+ $defaultData['type'] = 'string';
784
+ }
785
+
786
+ if (!empty($savedData)) { //edit mode
787
+ if (isset($savedData[$optionName])) { //option exists in the database
788
+ $optionValue = $savedData[$optionName];
789
+ }
790
+ /* if it's a checkbox, it may not exist in the db
791
+ * if we don't care about it's existance, return empty string
792
+ * otherwise, go for it's default value
793
+ */
794
+ else if ($defaultData['type'] == 'checkbox' && !$forceDefaultValue) {
795
+ $optionValue = '';
796
+ }
797
+ }
798
+
799
+ if ($optionValue === null && !empty($defaultData['defaultValue'])) {
800
+ $optionValue = $defaultData['defaultValue'];
801
+ }
802
+
803
+ if ($defaultData['type'] == 'checkbox') {
804
+ $optionValue = $this->boolToChecked($optionValue);
805
+ }
806
+
807
+ if ($defaultData['type'] == 'number' && $optionValue == 0) {
808
+ $optionValue = 0;
809
+ }
810
+
811
+ return $optionValue;
812
+ }
813
+
814
+ public static function getSavedData($popupId, $saveMode = '')
815
+ {
816
+ $popupSavedData = array();
817
+ $events = self::getEventsDataById($popupId, $saveMode);
818
+ $targetData = self::getTargetDataById($popupId, $saveMode);
819
+
820
+ if (!empty($events)) {
821
+ $popupSavedData['sgpb-events'] = self::getEventsDataById($popupId, $saveMode);
822
+ }
823
+ if (!empty($targetData)) {
824
+ if (!empty($targetData['sgpb-target'])) {
825
+ $popupSavedData['sgpb-target'] = $targetData['sgpb-target'];
826
+ }
827
+ if (!empty($targetData['sgpb-conditions'])) {
828
+ // for the after x pages option backward compatibility
829
+ $targetData['sgpb-conditions'] = apply_filters('sgpbAdvancedTargetingSavedData', $targetData['sgpb-conditions'], $popupId);
830
+ $popupSavedData['sgpb-conditions'] = $targetData['sgpb-conditions'];
831
+ }
832
+ }
833
+
834
+ $popupOptions = self::getPopupOptionsById($popupId, $saveMode);
835
+ if (is_array($popupOptions) && is_array($popupSavedData)) {
836
+ $popupSavedData = array_merge($popupSavedData, $popupOptions);
837
+ }
838
+
839
+ return $popupSavedData;
840
+ }
841
+
842
+ public static function getEventsDataById($popupId, $saveMode = '')
843
+ {
844
+ $eventsData = array();
845
+ if (get_post_meta($popupId, 'sg_popup_events'.$saveMode, true)) {
846
+ $eventsData = get_post_meta($popupId, 'sg_popup_events'.$saveMode, true);
847
+ }
848
+
849
+ return $eventsData;
850
+ }
851
+
852
+ public static function getTargetDataById($popupId, $saveMode = '')
853
+ {
854
+ $targetData = array();
855
+
856
+ if (get_post_meta($popupId, 'sg_popup_target'.$saveMode, true)) {
857
+ $targetData = get_post_meta($popupId, 'sg_popup_target'.$saveMode, true);
858
+ }
859
+
860
+ return $targetData;
861
+ }
862
+
863
+ public static function getPopupOptionsById($popupId, $saveMode = '')
864
+ {
865
+ $currentPost = get_post($popupId);
866
+
867
+ if (!empty($currentPost) && $currentPost->post_status == 'draft') {
868
+ $saveMode = '_preview';
869
+ }
870
+ $optionsData = array();
871
+ if (get_post_meta($popupId, 'sg_popup_options'.$saveMode, true)) {
872
+ $optionsData = get_post_meta($popupId, 'sg_popup_options'.$saveMode, true);
873
+ }
874
+
875
+ return $optionsData;
876
+ }
877
+
878
+ public function getDefaultDataByName($optionName)
879
+ {
880
+ global $SGPB_OPTIONS;
881
+ if (empty($SGPB_OPTIONS)) {
882
+ return array();
883
+ }
884
+
885
+ foreach ($SGPB_OPTIONS as $option) {
886
+ if ($option['name'] == $optionName) {
887
+ return $option;
888
+ }
889
+ }
890
+
891
+ return array();
892
+ }
893
+
894
+ /**
895
+ * Get option default option value
896
+ *
897
+ * @param string $optionName
898
+ *
899
+ * @since 1.0.0
900
+ *
901
+ * @return string
902
+ *
903
+ */
904
+ public function getOptionDefaultValue($optionName)
905
+ {
906
+ // return config data array by name
907
+ $optionData = $this->getDefaultDataByName($optionName);
908
+
909
+ if (empty($optionData)) {
910
+ return '';
911
+ }
912
+
913
+ return $optionData['defaultValue'];
914
+ }
915
+
916
+ /**
917
+ * Changing default options form changing options by name
918
+ *
919
+ * @since 1.0.0
920
+ *
921
+ * @param array $defaultOptions
922
+ * @param array $changingOptions
923
+ *
924
+ * @return array $defaultOptions
925
+ */
926
+ public function changeDefaultOptionsByNames($defaultOptions, $changingOptions)
927
+ {
928
+ if (empty($defaultOptions) || empty($changingOptions)) {
929
+ return $defaultOptions;
930
+ }
931
+ $changingOptionsNames = array_keys($changingOptions);
932
+
933
+ foreach ($defaultOptions as $key => $defaultOption) {
934
+ $defaultOptionName = $defaultOption['name'];
935
+ if (in_array($defaultOptionName, $changingOptionsNames)) {
936
+ $defaultOptions[$key] = $changingOptions[$defaultOptionName];
937
+ }
938
+ }
939
+
940
+ return $defaultOptions;
941
+ }
942
+
943
+ /**
944
+ * Returns separate popup types Free or Pro
945
+ *
946
+ * @since 2.5.6
947
+ *
948
+ * @return array $popupTypesObj
949
+ */
950
+ public static function getPopupTypes()
951
+ {
952
+ global $SGPB_POPUP_TYPES;
953
+ $popupTypesObj = array();
954
+ $popupTypes = $SGPB_POPUP_TYPES['typeName'];
955
+
956
+ foreach ($popupTypes as $popupType => $level) {
957
+
958
+ if (empty($level)) {
959
+ $level = SGPB_POPUP_PKG_FREE;
960
+ }
961
+
962
+ $popupTypeObj = new PopupType();
963
+ $popupTypeObj->setName($popupType);
964
+ $popupTypeObj->setAccessLevel($level);
965
+
966
+ if (SGPB_POPUP_PKG >= $level) {
967
+ $popupTypeObj->setAvailable(true);
968
+ }
969
+ $popupTypesObj[] = $popupTypeObj;
970
+ }
971
+
972
+ return $popupTypesObj;
973
+ }
974
+
975
+ public static function savePopupsFromContentClasses($content, $post)
976
+ {
977
+ $postId = $post->ID;
978
+ $clickClassIds = self::getStringNextNumbersByReg($content, 'sg-popup-id-');
979
+ $targetData = array();
980
+ $eventsData = array();
981
+
982
+ if (!empty($clickClassIds)) {
983
+ foreach ($clickClassIds as $id) {
984
+ $id = apply_filters('sgpbConvertedPopupId', $id);
985
+ if (empty($eventsData[$postId][$id])) {
986
+ $eventsData[$postId][$id] = array('click');
987
+ }
988
+ else {
989
+ $eventsData[$postId][$id][] = 'click';
990
+ }
991
+
992
+ if (empty($targetData[$postId])) {
993
+ $targetData[$postId] = array($id);
994
+ }
995
+ else {
996
+ $targetData[$postId][] = $id;
997
+ }
998
+ }
999
+ }
1000
+
1001
+ $iframeClassIs = self::getStringNextNumbersByReg($content, 'sg-iframe-popup-');
1002
+
1003
+ if (!empty($iframeClassIs)) {
1004
+ foreach ($iframeClassIs as $id) {
1005
+ $id = apply_filters('sgpbConvertedPopupId', $id);
1006
+ $popupObj = self::find($id);
1007
+
1008
+ if (empty($popupObj)) {
1009
+ continue;
1010
+ }
1011
+
1012
+ // this event should work only for iframe popup type
1013
+ if ($popupObj->getType() != 'iframe') {
1014
+ continue;
1015
+ }
1016
+
1017
+ if (empty($eventsData[$postId][$id])) {
1018
+ $eventsData[$postId][$id] = array('iframe');
1019
+ }
1020
+ else {
1021
+ $eventsData[$postId][$id][] = 'iframe';
1022
+ }
1023
+
1024
+ if (empty($targetData[$postId])) {
1025
+ $targetData[$postId] = array($id);
1026
+ }
1027
+ else {
1028
+ $targetData[$postId][] = $id;
1029
+ }
1030
+ }
1031
+ }
1032
+
1033
+ $confirmClassIds = self::getStringNextNumbersByReg($content, 'sg-confirm-popup-');
1034
+
1035
+ if (!empty($confirmClassIds)) {
1036
+ foreach ($confirmClassIds as $id) {
1037
+ $id = apply_filters('sgpbConvertedPopupId', $id);
1038
+ if (empty($eventsData[$postId][$id])) {
1039
+ $eventsData[$postId][$id] = array('confirm');
1040
+ }
1041
+ else {
1042
+ $eventsData[$postId][$id][] = 'confirm';
1043
+ }
1044
+
1045
+ if (empty($targetData[$postId])) {
1046
+ $targetData[$postId] = array($id);
1047
+ }
1048
+ else {
1049
+ $targetData[$postId][] = $id;
1050
+ }
1051
+ }
1052
+ }
1053
+
1054
+ $hoverClassIds = self::getStringNextNumbersByReg($content, 'sg-popup-hover-');
1055
+
1056
+ if (!empty($hoverClassIds)) {
1057
+ foreach ($hoverClassIds as $id) {
1058
+ $id = apply_filters('sgpbConvertedPopupId', $id);
1059
+ if (empty($eventsData[$postId][$id])) {
1060
+ $eventsData[$postId][$id] = array('hover');
1061
+ }
1062
+ else {
1063
+ $eventsData[$postId][$id][] = 'hover';
1064
+ }
1065
+
1066
+ if (empty($targetData[$postId])) {
1067
+ $targetData[$postId] = array($id);
1068
+ }
1069
+ else {
1070
+ $targetData[$postId][] = $id;
1071
+ }
1072
+ }
1073
+ }
1074
+
1075
+ $targetData = apply_filters('sgpbPopupTargetData', $targetData);
1076
+ $eventsData = apply_filters('sgpbPopupEventsData', $eventsData);
1077
+
1078
+ self::saveToTargetFromPage($targetData);
1079
+ self::saveToEventsFromPage($eventsData);
1080
+ }
1081
+
1082
+ public static function getStringNextNumbersByReg($content, $key)
1083
+ {
1084
+ $result = array();
1085
+ preg_match_all("/(?<=$key)(\d+)/", $content, $ids);
1086
+
1087
+ if (!empty($ids[0])) {
1088
+ $result = $ids[0];
1089
+ }
1090
+
1091
+ return $result;
1092
+ }
1093
+
1094
+ private static function saveToTargetAndEvents($popupsShortcodsInPostPage, $postId)
1095
+ {
1096
+ if (empty($popupsShortcodsInPostPage)) {
1097
+ return false;
1098
+ }
1099
+ $customEvents = array();
1100
+ $customPopups = array();
1101
+
1102
+ foreach ($popupsShortcodsInPostPage as $shortcodesData) {
1103
+ $popupId = apply_filters('sgpbConvertedPopupId', $shortcodesData['id']);
1104
+
1105
+ $args = array(
1106
+ 'post_type' => SG_POPUP_POST_TYPE,
1107
+ 'post__in' => array($popupId)
1108
+ );
1109
+ $postById = ConfigDataHelper::getPostTypeData($args);
1110
+ //When target data does not exist
1111
+ if (empty($postById)) {
1112
+ continue;
1113
+ }
1114
+
1115
+ // collect custom inserted popups
1116
+ if (empty($customPopups[$postId])) {
1117
+ $customPopups[$postId] = array($popupId);
1118
+ }
1119
+ else {
1120
+ $customPopups[$postId][] = $popupId;
1121
+ }
1122
+
1123
+ // collect custom inserted popups events
1124
+ if (empty($shortcodesData['event'])) {
1125
+ $eventName = 'onload';
1126
+ }
1127
+ else {
1128
+ $eventName = $shortcodesData['event'];
1129
+ }
1130
+
1131
+ if ($eventName == 'onload') {
1132
+ $eventName = 'attr'.$eventName;
1133
+ }
1134
+ $currentEventData = array(
1135
+ 'param' => $eventName
1136
+ );
1137
+
1138
+ if (empty($customEvents[$postId][$popupId])) {
1139
+ $customEvents[$postId][$popupId] = array($currentEventData);
1140
+ }
1141
+ else {
1142
+ $customEvents[$postId][$popupId][] = $currentEventData;
1143
+ }
1144
+ }
1145
+
1146
+ self::saveToTargetFromPage($customPopups);
1147
+ self::saveToEventsFromPage($customEvents);
1148
+
1149
+ return true;
1150
+ }
1151
+
1152
+ public static function getPostPopupCustomEvent($postId, $popupId)
1153
+ {
1154
+ $events = array();
1155
+
1156
+ $customEventsData = self::getCustomInsertedPopupEventsByPostId($postId);
1157
+
1158
+ if (!empty($customEventsData[$popupId])) {
1159
+ $events = $customEventsData[$popupId];
1160
+ }
1161
+
1162
+ return $events;
1163
+ }
1164
+
1165
+ /**
1166
+ * Save popup to custom events from pages
1167
+ *
1168
+ * @since 1.0.0
1169
+ *
1170
+ * @param array $customEvents
1171
+ *
1172
+ * @return bool
1173
+ *
1174
+ */
1175
+ public static function saveToEventsFromPage($customEvents)
1176
+ {
1177
+ if (empty($customEvents)) {
1178
+ return false;
1179
+ }
1180
+
1181
+ foreach ($customEvents as $postId => $popupsData) {
1182
+ $savedCustomEvents = self::getCustomInsertedPopupEventsByPostId($postId);
1183
+ $result = AdminHelper::arrayMergeSameKeys($popupsData, $savedCustomEvents);
1184
+
1185
+ if (!$result) {
1186
+ return $result;
1187
+ }
1188
+ update_post_meta($postId, 'sgpb_popup_events_custom', $result);
1189
+ }
1190
+
1191
+ return true;
1192
+ }
1193
+
1194
+ public static function getCustomInsertedPopupEventsByPostId($postId)
1195
+ {
1196
+ $eventsData = array();
1197
+ $postMetaData = get_post_meta($postId, 'sgpb_popup_events_custom', true);
1198
+
1199
+ if (!empty($postMetaData)) {
1200
+ $eventsData = $postMetaData;
1201
+ }
1202
+
1203
+ return $eventsData;
1204
+ }
1205
+
1206
+ /**
1207
+ * Save popup to custom targets from pages
1208
+ *
1209
+ * @since 1.0.0
1210
+ *
1211
+ * @param array $customPopups
1212
+ *
1213
+ * @return void
1214
+ *
1215
+ */
1216
+ public static function saveToTargetFromPage($customPopups)
1217
+ {
1218
+ if (!empty($customPopups)) {
1219
+ foreach ($customPopups as $postId => $popups) {
1220
+ $alreadySavedPopups = self::getCustomInsertedDataByPostId($postId);
1221
+ $popups = array_merge($popups, $alreadySavedPopups);
1222
+ update_post_meta($postId, 'sg_popup_target_custom', $popups);
1223
+ }
1224
+ }
1225
+ }
1226
+
1227
+ /**
1228
+ * Get popup custom targes form saved data
1229
+ *
1230
+ * @since 1.0.0
1231
+ *
1232
+ * @param int $postId
1233
+ *
1234
+ * @return array $postData
1235
+ */
1236
+ public static function getCustomInsertedDataByPostId($postId)
1237
+ {
1238
+ $postData = array();
1239
+ $postMetaData = get_post_meta($postId, 'sg_popup_target_custom');
1240
+
1241
+ if (!empty($postMetaData[0])) {
1242
+ $postData = $postMetaData[0];
1243
+ }
1244
+
1245
+ return $postData;
1246
+ }
1247
+
1248
+ public static function getPopupShortcodeMatchesFromContent($content)
1249
+ {
1250
+ $result = false;
1251
+ $pattern = get_shortcode_regex();
1252
+
1253
+ if (preg_match_all('/'.$pattern.'/s', $content, $matches)
1254
+ && !empty($matches)
1255
+ && is_array($matches)
1256
+ && array_key_exists( 2, $matches )
1257
+ && in_array('sg_popup', $matches[2])
1258
+ )
1259
+ {
1260
+ $result = $matches;
1261
+ }
1262
+
1263
+ return $result;
1264
+ }
1265
+
1266
+ public static function renderPopupContentShortcode($content, $popupId, $event, $args)
1267
+ {
1268
+ ob_start();
1269
+ $wrap = 'a';
1270
+ if (!empty($args['wrap'])) {
1271
+ if ($args['wrap'] == $wrap) {
1272
+ $args['href'] = 'javascript:void(0)';
1273
+ }
1274
+ $wrap = $args['wrap'];
1275
+ }
1276
+ unset($args['wrap']);
1277
+ unset($args['event']);
1278
+ unset($args['id']);
1279
+ $attr = AdminHelper::createAttrs($args);
1280
+ ?>
1281
+ <<?php echo $wrap; ?>
1282
+ <?php if ($wrap == 'a') : ?>
1283
+ href="javascript:void(0)"
1284
+ <?php endif ?>
1285
+ class="sgpb-show-popup <?php echo 'sgpb-popup-id-'.$popupId; ?>"
1286
+ data-sgpbpopupid="<?php echo esc_attr($popupId); ?>"
1287
+ data-popup-event="<?php echo $event; ?>"
1288
+ <?php echo $attr; ?>>
1289
+ <?php echo $content; ?>
1290
+ </<?php echo $wrap; ?>>
1291
+ <?php
1292
+
1293
+ $shortcodeContent = ob_get_contents();
1294
+ ob_get_clean();
1295
+
1296
+ return $shortcodeContent;
1297
+ }
1298
+
1299
+ private static function collectInsidePopupShortcodes($content)
1300
+ {
1301
+ $pattern = get_shortcode_regex();
1302
+ $options = array();
1303
+ if (preg_match_all('/'.$pattern.'/s', $content, $matches)
1304
+ && !empty($matches)
1305
+ && is_array($matches)
1306
+ && array_key_exists( 2, $matches )
1307
+ && in_array('sg_popup', $matches[2])
1308
+ )
1309
+ {
1310
+ foreach ($matches[0] as $key => $value) {
1311
+ //return current shortcode all attrs as assoc array
1312
+ $attrs = shortcode_parse_atts($matches[3][$key]);
1313
+ $currentAttrs = array();
1314
+ if (!empty($attrs['id'])) {
1315
+ $currentAttrs['id'] = $attrs['id'];
1316
+ }
1317
+ if (!empty($attrs['insidepopup'])) {
1318
+ $currentAttrs['insidepopup'] = $attrs['insidepopup'];
1319
+ }
1320
+ if (empty($attrs['insidepopup']) || (!empty($attrs['insidepopup']) && $attrs['insidepopup'] != 'on')) {
1321
+ continue;
1322
+ }
1323
+
1324
+ $options[$currentAttrs['id']] = $value;
1325
+ }
1326
+ }
1327
+
1328
+ return apply_filters('sgpbPopupInsideShortcodes', $options);
1329
+ }
1330
+
1331
+ /**
1332
+ * TODO remove ASAP!
1333
+ *
1334
+ * Collect all popups by taxonomy slug
1335
+ *
1336
+ * @since 1.0.0
1337
+ *
1338
+ * @param string $popupTermSlug category slug name
1339
+ *
1340
+ * @return array $popupIds random popups id
1341
+ *
1342
+ */
1343
+ public static function getPopupsByTermSlug($popupTermSlug)
1344
+ {
1345
+ $popupIds = array();
1346
+
1347
+ $termPopups = get_transient(SGPB_TRANSIENT_POPUPS_TERMS);
1348
+ if ($termPopups === false) {
1349
+ $termPopups = get_posts(
1350
+ array(
1351
+ 'post_type' => 'popupbuilder',
1352
+ 'numberposts' => -1,
1353
+ 'tax_query' => array(
1354
+ array(
1355
+ 'taxonomy' => SG_POPUP_CATEGORY_TAXONOMY,
1356
+ 'field' => 'slug',
1357
+ 'terms' => $popupTermSlug
1358
+ )
1359
+ )
1360
+ )
1361
+ );
1362
+ set_transient(SGPB_TRANSIENT_POPUPS_TERMS, $termPopups, SGPB_TRANSIENT_TIMEOUT_WEEK);
1363
+ }
1364
+
1365
+ if (empty($termPopups)) {
1366
+ return $popupIds;
1367
+ }
1368
+
1369
+ foreach ($termPopups as $termPopup) {
1370
+ $popupIds[] = $termPopup->ID;
1371
+ }
1372
+
1373
+ return $popupIds;
1374
+ }
1375
+
1376
+ public function boolToChecked($var)
1377
+ {
1378
+ return ($var?'checked':'');
1379
+ }
1380
+
1381
+ /**
1382
+ * Delete custom inserted data
1383
+ *
1384
+ * @since 1.0.0
1385
+ *
1386
+ * @param int $postId current post page id
1387
+ *
1388
+ * @return void
1389
+ *
1390
+ */
1391
+ public static function deletePostCustomInsertedData($postId)
1392
+ {
1393
+ delete_post_meta($postId, 'sg_popup_target_custom');
1394
+ }
1395
+
1396
+ /**
1397
+ * Delete custom inserted events
1398
+ *
1399
+ * @since 1.0.0
1400
+ *
1401
+ * @param int $postId current post page id
1402
+ *
1403
+ * @return void
1404
+ *
1405
+ */
1406
+ public static function deletePostCustomInsertedEvents($postId)
1407
+ {
1408
+ delete_post_meta($postId, 'sgpb_popup_events_custom');
1409
+ }
1410
+
1411
+ /**
1412
+ * If popup Type does not have getPopupTypeOptions method
1413
+ * it's tell popup does not have custom options
1414
+ *
1415
+ * @since 1.0.0
1416
+ *
1417
+ * @return bool
1418
+ *
1419
+ */
1420
+ public function getPopupTypeOptionsView()
1421
+ {
1422
+ return false;
1423
+ }
1424
+
1425
+ /**
1426
+ * If popup Type does not have getPopupTypeOptions method
1427
+ * it's tell popup does not have custom options
1428
+ *
1429
+ * @since 1.0.0
1430
+ *
1431
+ * @return bool
1432
+ *
1433
+ */
1434
+ public function getPopupTypeMainView()
1435
+ {
1436
+ return false;
1437
+ }
1438
+
1439
+ /**
1440
+ * Remove popup option from admin view by option name
1441
+ *
1442
+ * @since 1.0.0
1443
+ *
1444
+ * @return array $removedOptions
1445
+ *
1446
+ */
1447
+ public function getRemoveOptions()
1448
+ {
1449
+ $removeOptions = array();
1450
+
1451
+ return apply_filters('sgpbRemoveOptions', $removeOptions);
1452
+ }
1453
+
1454
+ public static function createPopupTypeObjById($popupId)
1455
+ {
1456
+ global $SGPB_POPUP_TYPES;
1457
+ $typePath = '';
1458
+ $popupOptionsData = SGPopup::getPopupOptionsById($popupId);
1459
+ if (empty($popupOptionsData)) {
1460
+ return false;
1461
+ }
1462
+ $popupType = $popupOptionsData['sgpb-type'];
1463
+ $popupName = ucfirst(strtolower($popupType));
1464
+ $popupClassName = $popupName.'Popup';
1465
+
1466
+ if (!empty($SGPB_POPUP_TYPES['typePath'][$popupType])) {
1467
+ $typePath = $SGPB_POPUP_TYPES['typePath'][$popupType];
1468
+ }
1469
+
1470
+ if (!file_exists($typePath.$popupClassName.'.php')) {
1471
+ wp_die(__('Popup class does not exist', SG_POPUP_TEXT_DOMAIN));
1472
+ }
1473
+ require_once($typePath.$popupClassName.'.php');
1474
+
1475
+ $popupClassName = __NAMESPACE__.'\\'.$popupClassName;
1476
+ $popupTypeObj = new $popupClassName();
1477
+ $popupTypeObj->setId($popupId);
1478
+
1479
+ return $popupTypeObj;
1480
+ }
1481
+
1482
+ /**
1483
+ * if child class does not have this function we call parent function to not get any errors
1484
+ *
1485
+ * @since 1.0.0
1486
+ *
1487
+ * @return array
1488
+ *
1489
+ */
1490
+ public static function getTablesSql()
1491
+ {
1492
+ return array();
1493
+ }
1494
+
1495
+ /**
1496
+ * if child class does not have this function we call parent function to not get any errors
1497
+ *
1498
+ * @since 1.0.0
1499
+ *
1500
+ * @return array
1501
+ *
1502
+ */
1503
+ public static function getTableNames()
1504
+ {
1505
+ return array();
1506
+ }
1507
+
1508
+ /**
1509
+ *
1510
+ * Get WordPress localization name
1511
+ *
1512
+ * @since 1.0.0
1513
+ *
1514
+ * @return string
1515
+ *
1516
+ */
1517
+ public function getSiteLocale()
1518
+ {
1519
+ $locale = get_bloginfo('language');
1520
+ $locale = str_replace('-', '_', $locale);
1521
+
1522
+ return $locale;
1523
+ }
1524
+
1525
+ public function addAdditionalSettings($postData = array(), $obj = null)
1526
+ {
1527
+ return array();
1528
+ }
1529
+
1530
+ public function allowToLoad()
1531
+ {
1532
+ global $post;
1533
+
1534
+ $popupChecker = PopupChecker::instance();
1535
+ $loadableModes = $popupChecker->isLoadable($this, $post);
1536
+ $this->setLoadableModes($loadableModes);
1537
+
1538
+ return ($loadableModes['attr_event'] || $loadableModes['option_event']);
1539
+ }
1540
+
1541
+ public function allowToLoadAJAX()
1542
+ {
1543
+ global $post;
1544
+
1545
+ $popupChecker = PopupChecker::instance();
1546
+ $loadableModes = $popupChecker->isLoadable($this, $post, true);
1547
+ $this->setLoadableModes($loadableModes);
1548
+
1549
+ return ($loadableModes['attr_event'] || $loadableModes['option_event']);
1550
+ }
1551
+
1552
+ public static function getAllPopups($filters = array())
1553
+ {
1554
+ $args = array(
1555
+ 'post_type' => SG_POPUP_POST_TYPE
1556
+ );
1557
+ $allPopups = array();
1558
+ $allPostData = ConfigDataHelper::getQueryDataByArgs($args);
1559
+
1560
+ if (empty($allPostData)) {
1561
+ return $allPopups;
1562
+ }
1563
+
1564
+ foreach ($allPostData->posts as $postData) {
1565
+ if (empty($postData)) {
1566
+ continue;
1567
+ }
1568
+
1569
+ $popup = self::find($postData->ID, $args);
1570
+ if (empty($popup) || !($popup instanceof SGPopup)) {
1571
+ continue;
1572
+ }
1573
+ $type = @$popup->getType();
1574
+
1575
+ if (isset($filters['type'])) {
1576
+ if (is_array($filters['type'])) {
1577
+ if (!in_array($type, $filters['type'])) {
1578
+ continue;
1579
+ }
1580
+ }
1581
+ else if ($type != $filters['type']) {
1582
+ continue;
1583
+ }
1584
+ }
1585
+ $allPopups[] = $popup;
1586
+ }
1587
+
1588
+ return $allPopups;
1589
+ }
1590
+
1591
+ public function getPopupsIdAndTitle()
1592
+ {
1593
+ $allPopups = SGPopup::getAllPopups();
1594
+ $popupIdTitles = array();
1595
+
1596
+ if (empty($allPopups)) {
1597
+ return $popupIdTitles;
1598
+ }
1599
+ $currentPopupId = $this->getId();
1600
+
1601
+ foreach ($allPopups as $popup) {
1602
+ if (empty($popup)) {
1603
+ continue;
1604
+ }
1605
+ $id = $popup->getId();
1606
+
1607
+ if ($id == $currentPopupId) {
1608
+ continue;
1609
+ }
1610
+
1611
+ $title = $popup->getTitle();
1612
+ $type = $popup->getType();
1613
+
1614
+ $popupIdTitles[$id] = $title.' - '.$type;
1615
+ }
1616
+
1617
+ return $popupIdTitles;
1618
+ }
1619
+
1620
+ public function getSubPopupObj()
1621
+ {
1622
+ $subPopups = array();
1623
+ $options = $this->getOptions();
1624
+
1625
+ $specialBehaviors = @$options['sgpb-behavior-after-special-events'];
1626
+ if (!empty($specialBehaviors) && is_array($specialBehaviors)) {
1627
+ foreach ($specialBehaviors as $behavior) {
1628
+ foreach ($behavior as $row) {
1629
+ if (!empty($row['param']) && $row['param'] == SGPB_CONTACT_FORM_7_BEHAVIOR_KEY) {
1630
+ if (!empty($row['operator']) && $row['operator'] == 'open-popup') {
1631
+ if (!empty($row['value'])) {
1632
+ $popupId = key($row['value']);
1633
+ $subPopupObj = self::find((int)$popupId);
1634
+ if (!empty($subPopupObj) && ($subPopupObj instanceof SGPopup)) {
1635
+ $subPopupObj->setEvents(array('param' => 'click', 'value' => ''));
1636
+ $subPopups[] = $subPopupObj;
1637
+ }
1638
+ }
1639
+ }
1640
+ }
1641
+ }
1642
+ }
1643
+ }
1644
+
1645
+ return $subPopups;
1646
+ }
1647
+
1648
+ public static function doInsideShortcode($insideShortcode)
1649
+ {
1650
+ return do_shortcode($insideShortcode);
1651
+ }
1652
+
1653
+ public function popupShortcodesInsidePopup()
1654
+ {
1655
+ $popups = array();
1656
+ $args = array('insidePopup' => 'on');
1657
+ $popupContent = $this->getContent();
1658
+ $parentTarget = $this->getTarget();
1659
+ $insidePopupShortcodes = self::collectInsidePopupShortcodes($popupContent);
1660
+ if (empty($insidePopupShortcodes)) {
1661
+ return $popups;
1662
+ }
1663
+ foreach ($insidePopupShortcodes as $insidePopupId => $insidePopupShortcode) {
1664
+ $insidePopupId = (int)$insidePopupId;
1665
+ if (!$insidePopupId) {
1666
+ continue;
1667
+ }
1668
+ // true = find inside popup
1669
+ $insidePopup = self::find($insidePopupId, $args);
1670
+ if (empty($insidePopup) || $insidePopup == 'trash' || $insidePopup == 'inherit') {
1671
+ continue;
1672
+ }
1673
+ $events = array('insideclick');
1674
+ $insidePopup->setEvents($events);
1675
+ $popups[$insidePopupId] = $insidePopup;
1676
+ }
1677
+
1678
+ $popupContent = self::doInsideShortcode($popupContent);
1679
+ $this->setContent($popupContent);
1680
+
1681
+ return $popups;
1682
+ }
1683
+
1684
+ public function getPopupOpeningCountById($popupId)
1685
+ {
1686
+ global $wpdb;
1687
+
1688
+ $allCount = 0;
1689
+ $popupsCounterData = get_option('SgpbCounter');
1690
+ $popupCountFromAnalyticsData = 0;
1691
+ $tableName = $wpdb->prefix.'sgpb_analytics';
1692
+ if ($wpdb->get_var("SHOW TABLES LIKE '$tableName'") == $tableName) {
1693
+ $popupCountFromAnalyticsData = self::getAnalyticsDataByPopupId($popupId);
1694
+ }
1695
+ if (isset($popupsCounterData[$popupId])) {
1696
+ $allCount += $popupsCounterData[$popupId];
1697
+ }
1698
+ $allCount += $popupCountFromAnalyticsData;
1699
+
1700
+ return $allCount;
1701
+ }
1702
+
1703
+ public static function getAnalyticsDataByPopupId($popupId)
1704
+ {
1705
+ global $wpdb;
1706
+ // 7, 12, 13 => exclude close, subscription success, contact success events
1707
+ $stmt = $wpdb->prepare('SELECT COUNT(*) FROM '.$wpdb->prefix.'sgpb_analytics WHERE target_id = %d AND event_id NOT IN (7, 12, 13)', $popupId);
1708
+ $popupAnalyticsData = $wpdb->get_var($stmt);
1709
+ return $popupAnalyticsData;
1710
+ }
1711
+
1712
+ public static function deleteAnalyticsDataByPopupId($popupId)
1713
+ {
1714
+ global $wpdb;
1715
+ $prepareSql = $wpdb->prepare('DELETE FROM '.$wpdb->prefix.'sgpb_analytics WHERE target_id = %d AND event_id NOT IN (7, 12, 13) LIMIT 100', $popupId);
1716
+ $wpdb->query($prepareSql);
1717
+ }
1718
+
1719
+ public static function getActivePopupsQueryString()
1720
+ {
1721
+ $activePopupsQuery = '';
1722
+ $args = array(
1723
+ 'post_type' => SG_POPUP_POST_TYPE,
1724
+ 'post_status' => array('trash', 'publish')
1725
+ );
1726
+ if (!class_exists('ConfigDataHelper')) {
1727
+ return $activePopupsQuery;
1728
+ }
1729
+ $allPostData = ConfigDataHelper::getQueryDataByArgs($args);
1730
+ $args['checkActivePopupType'] = true;
1731
+ $allPopups = $allPostData->posts;
1732
+ foreach ($allPopups as $post) {
1733
+ $id = $post->ID;
1734
+ $popup = self::find($id, $args);
1735
+ if (empty($popup)) {
1736
+ $activePopupsQuery .= $id.', ';
1737
+ }
1738
+ }
1739
+ if ($activePopupsQuery != '') {
1740
+ $activePopupsQuery = ' AND ID NOT IN ('.$activePopupsQuery.')';
1741
+ $activePopupsQuery = str_replace(', )', ') ', $activePopupsQuery);
1742
+ }
1743
+
1744
+ return $activePopupsQuery;
1745
+ }
1746
+
1747
+ public function isActive()
1748
+ {
1749
+ return $this->getOptionValue('sgpb-is-active', true);
1750
+ }
1751
+ }
com/classes/popups/SubscriptionPopup.php CHANGED
@@ -1,688 +1,688 @@
1
- <?php
2
- namespace sgpb;
3
- require_once(dirname(__FILE__).'/SGPopup.php');
4
- require_once(ABSPATH.'wp-admin/includes/plugin.php');
5
-
6
- class SubscriptionPopup extends SGPopup
7
- {
8
- private $data;
9
- private $formContent = '';
10
-
11
- public function __construct()
12
- {
13
- add_filter('sgpbPopupRenderOptions', array($this, 'renderOptions'), 12, 1);
14
- add_filter('sgpbAdminJsFiles', array($this, 'adminJsFilter'), 1, 1);
15
- add_filter('sgpbAdminCssFiles', array($this, 'adminCssFilter'), 1, 1);
16
- add_filter('sgpbSubscriptionForm', array($this, 'subscriptionForm'), 1, 1);
17
- }
18
-
19
- private function frontendFilters()
20
- {
21
- $isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
22
-
23
- if (!$isSubscriptionPlusActive) {
24
- add_filter('sgpbFrontendJsFiles', array($this, 'frontJsFilter'), 1, 1);
25
- }
26
- add_filter('sgpbFrontendCssFiles', array($this, 'frontCssFilter'), 1, 1);
27
- }
28
-
29
- public function setData($data)
30
- {
31
- $this->data = $data;
32
- }
33
-
34
- public function getData()
35
- {
36
- return $this->data;
37
- }
38
-
39
- public function setFormContent($formContent)
40
- {
41
- $this->formContent = $formContent;
42
- }
43
-
44
- public function getFormContent()
45
- {
46
- return $this->formContent;
47
- }
48
-
49
- public static function getTablesSql()
50
- {
51
- $tablesSql = array();
52
- $dbEngine = Functions::getDatabaseEngine();
53
-
54
- $tablesSql[] = SGPB_SUBSCRIBERS_TABLE_NAME.' (
55
- `id` int(12) NOT NULL AUTO_INCREMENT,
56
- `firstName` varchar(255),
57
- `lastName` varchar(255),
58
- `email` varchar(255),
59
- `subscriptionType` int(12),
60
- `cDate` date,
61
- `status` varchar(255),
62
- `unsubscribed` int(11) default 0,
63
- PRIMARY KEY (id)
64
- ) ENGINE='.$dbEngine.' DEFAULT CHARSET=utf8;';
65
-
66
- $tablesSql[] = SGPB_SUBSCRIBERS_ERROR_TABLE_NAME.' (
67
- `id` int(12) NOT NULL AUTO_INCREMENT,
68
- `firstName` varchar(255),
69
- `popupType` varchar(255),
70
- `email` varchar(255),
71
- `date` varchar(255),
72
- PRIMARY KEY (id)
73
- ) ENGINE='.$dbEngine.' DEFAULT CHARSET=utf8;';
74
-
75
- return $tablesSql;
76
- }
77
-
78
- /**
79
- * Return Subscription popup type need all table names
80
- *
81
- * @since 1.0.0
82
- *
83
- * @return array $table names
84
- *
85
- */
86
- public static function getTableNames()
87
- {
88
- $tableNames = array(
89
- SGPB_SUBSCRIBERS_TABLE_NAME,
90
- SGPB_SUBSCRIBERS_ERROR_TABLE_NAME
91
- );
92
-
93
- return $tableNames;
94
- }
95
-
96
- public function frontJsFilter($jsFiles)
97
- {
98
- $jsFiles[] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Subscription.js');
99
- $jsFiles[] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Validate.js');
100
-
101
- return $jsFiles;
102
- }
103
-
104
- public function adminJsFilter($jsFiles)
105
- {
106
- $jsFiles[] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Subscription.js');
107
-
108
- return $jsFiles;
109
- }
110
-
111
- public function adminCssFilter($cssFiles)
112
- {
113
- $cssFiles[] = array(
114
- 'folderUrl' => SG_POPUP_CSS_URL,
115
- 'filename' => 'ResetFormStyle.css'
116
- );
117
- $cssFiles[] = array(
118
- 'folderUrl' => SG_POPUP_CSS_URL,
119
- 'filename' => 'SubscriptionForm.css'
120
- );
121
-
122
- return $cssFiles;
123
- }
124
-
125
- public function frontCssFilter($cssFiles)
126
- {
127
- $cssFiles[] = array(
128
- 'folderUrl' => SG_POPUP_CSS_URL,
129
- 'filename' => 'ResetFormStyle.css',
130
- 'inFooter' => true
131
- );
132
- $cssFiles[] = array(
133
- 'folderUrl' => SG_POPUP_CSS_URL,
134
- 'filename' => 'SubscriptionForm.css',
135
- 'inFooter' => true
136
- );
137
-
138
- return $cssFiles;
139
- }
140
-
141
- public function addAdditionalSettings($postData = array(), $obj = null)
142
- {
143
- $this->setData($postData);
144
- $this->setPostData($postData);
145
- $isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
146
-
147
- if (!$isSubscriptionPlusActive) {
148
- $postData['sgpb-subs-fields'] = $this->createFormFieldsData();
149
- }
150
-
151
- return $postData;
152
- }
153
-
154
- public function setSubsFormData($formId)
155
- {
156
- $savedData = array();
157
-
158
- if (!empty($formId)) {
159
- $savedData = SGPopup::getSavedData($formId);
160
- }
161
-
162
- $this->setData($savedData);
163
- }
164
-
165
- private function getFieldValue($optionName)
166
- {
167
- $optionValue = '';
168
- $postData = $this->getPostData();
169
-
170
- if (!empty($postData[$optionName])) {
171
- return $postData[$optionName];
172
- }
173
-
174
- $defaultData = $this->getDefaultDataByName($optionName);
175
-
176
- // when Saved data does not exist we try find inside default values
177
- if (empty($postData) && !empty($defaultData)) {
178
- return $defaultData['defaultValue'];
179
- }
180
-
181
- return $optionValue;
182
- }
183
-
184
- /**
185
- * Create form fields data
186
- *
187
- * @since 1.0.0
188
- *
189
- * @return array $formData
190
- */
191
- public function createFormFieldsData()
192
- {
193
- $formData = array();
194
- $inputStyles = array();
195
- $submitStyles = array();
196
- $emailPlaceholder = $this->getFieldValue('sgpb-subs-email-placeholder');
197
- if ($this->getFieldValue('sgpb-subs-text-width')) {
198
- $inputWidth = $this->getFieldValue('sgpb-subs-text-width');
199
- $inputStyles['width'] = AdminHelper::getCSSSafeSize($inputWidth);
200
- }
201
- if ($this->getFieldValue('sgpb-subs-text-height')) {
202
- $inputHeight = $this->getFieldValue('sgpb-subs-text-height');
203
- $inputStyles['height'] = AdminHelper::getCSSSafeSize($inputHeight);
204
- }
205
- if ($this->getFieldValue('sgpb-subs-text-border-width')) {
206
- $inputBorderWidth = $this->getFieldValue('sgpb-subs-text-border-width');
207
- $inputStyles['border-width'] = AdminHelper::getCSSSafeSize($inputBorderWidth);
208
- }
209
- if ($this->getFieldValue('sgpb-subs-text-border-color')) {
210
- $inputStyles['border-color'] = $this->getFieldValue('sgpb-subs-text-border-color');
211
- }
212
- if ($this->getFieldValue('sgpb-subs-text-bg-color')) {
213
- $inputStyles['background-color'] = $this->getFieldValue('sgpb-subs-text-bg-color');
214
- }
215
- if ($this->getFieldValue('sgpb-subs-text-color')) {
216
- $inputStyles['color'] = $this->getFieldValue('sgpb-subs-text-color');
217
- }
218
- $inputStyles['autocomplete'] = 'off';
219
-
220
- if ($this->getFieldValue('sgpb-subs-btn-width')) {
221
- $submitWidth = $this->getFieldValue('sgpb-subs-btn-width');
222
- $submitStyles['width'] = AdminHelper::getCSSSafeSize($submitWidth);
223
- }
224
- if ($this->getFieldValue('sgpb-subs-btn-height')) {
225
- $submitHeight = $this->getFieldValue('sgpb-subs-btn-height');
226
- $submitStyles['height'] = AdminHelper::getCSSSafeSize($submitHeight);
227
- }
228
- if ($this->getFieldValue('sgpb-subs-btn-bg-color')) {
229
- $submitStyles['background-color'] = $this->getFieldValue('sgpb-subs-btn-bg-color').' !important';
230
- }
231
- if ($this->getFieldValue('sgpb-subs-btn-text-color')) {
232
- $submitStyles['color'] = $this->getFieldValue('sgpb-subs-btn-text-color');
233
- }
234
- if ($this->getFieldValue('sgpb-subs-btn-border-radius')) {
235
- $submitStyles['border-radius'] = AdminHelper::getCSSSafeSize($this->getFieldValue('sgpb-subs-btn-border-radius')).' !important';
236
- }
237
- if ($this->getFieldValue('sgpb-subs-btn-border-width')) {
238
- $submitStyles['border-width'] = AdminHelper::getCSSSafeSize($this->getFieldValue('sgpb-subs-btn-border-width')).' !important';
239
- }
240
- if ($this->getFieldValue('sgpb-subs-btn-border-color')) {
241
- $submitStyles['border-color'] = $this->getFieldValue('sgpb-subs-btn-border-color').' !important';
242
- }
243
- $submitStyles['text-transform'] = 'none !important';
244
- $submitStyles['border-style'] = 'solid';
245
-
246
- $formData['email'] = array(
247
- 'isShow' => true,
248
- 'attrs' => array(
249
- 'type' => 'email',
250
- 'data-required' => true,
251
- 'name' => 'sgpb-subs-email',
252
- 'placeholder' => $emailPlaceholder,
253
- 'class' => 'js-subs-text-inputs js-subs-email-input',
254
- 'data-error-message-class' => 'sgpb-subs-email-error-message'
255
- ),
256
- 'style' => $inputStyles,
257
- 'errorMessageBoxStyles' => isset($inputStyles["width"]) ?$inputStyles["width"] : ''
258
- );
259
-
260
- $firstNamePlaceholder = $this->getFieldValue('sgpb-subs-first-placeholder');
261
- $firstNameRequired = $this->getOptionValueFromSavedData('sgpb-subs-first-name-required');
262
- $firstNameRequired = (!empty($firstNameRequired)) ? true : false;
263
- $isShow = ($this->getFieldValue('sgpb-subs-first-name-status')) ? true : false;
264
-
265
- $formData['first-name'] = array(
266
- 'isShow' => $isShow,
267
- 'attrs' => array(
268
- 'type' => 'text',
269
- 'data-required' => $firstNameRequired,
270
- 'name' => 'sgpb-subs-first-name',
271
- 'placeholder' => $firstNamePlaceholder,
272
- 'class' => 'js-subs-text-inputs js-subs-first-name-input',
273
- 'data-error-message-class' => 'sgpb-subs-first-name-error-message'
274
- ),
275
- 'style' => $inputStyles,
276
- 'errorMessageBoxStyles' => isset($inputStyles['width']) ? $inputStyles['width'] : ''
277
- );
278
-
279
- $lastNamePlaceholder = $this->getFieldValue('sgpb-subs-last-placeholder');
280
- $lastNameRequired = $this->getOptionValueFromSavedData('sgpb-subs-last-name-required');
281
- $lastNameRequired = (!empty($lastNameRequired)) ? true : false;
282
- $isShow = ($this->getFieldValue('sgpb-subs-last-name-status')) ? true : false;
283
-
284
- $formData['last-name'] = array(
285
- 'isShow' => $isShow,
286
- 'attrs' => array(
287
- 'type' => 'text',
288
- 'data-required' => $lastNameRequired,
289
- 'name' => 'sgpb-subs-last-name',
290
- 'placeholder' => $lastNamePlaceholder,
291
- 'class' => 'js-subs-text-inputs js-subs-last-name-input',
292
- 'data-error-message-class' => 'sgpb-subs-last-name-error-message'
293
- ),
294
- 'style' => $inputStyles,
295
- 'errorMessageBoxStyles' => isset($inputStyles['width']) ? $inputStyles['width'] : ''
296
- );
297
-
298
- /* GDPR checkbox */
299
- $gdprLabel = $this->getOptionValueFromSavedData('sgpb-subs-gdpr-label');
300
- $gdprRequired = ($this->getOptionValueFromSavedData('sgpb-subs-gdpr-status')) ? true : false;
301
- $isShow = ($this->getOptionValueFromSavedData('sgpb-subs-gdpr-status')) ? true : false;
302
-
303
- $formData['gdpr'] = array(
304
- 'isShow' => $isShow,
305
- 'attrs' => array(
306
- 'type' => 'customCheckbox',
307
- 'data-required' => $gdprRequired,
308
- 'name' => 'sgpb-subs-gdpr',
309
- 'class' => 'js-subs-gdpr-inputs js-subs-gdpr-label',
310
- 'id' => 'sgpb-gdpr-field-label',
311
- 'data-error-message-class' => 'sgpb-gdpr-error-message'
312
- ),
313
- 'style' => array('width' => isset($inputWidth)? $inputWidth :''),
314
- 'label' => $gdprLabel,
315
- 'text' => $this->getFieldValue('sgpb-subs-gdpr-text'),
316
- 'errorMessageBoxStyles' => isset($inputStyles['width'])?$inputStyles['width']:''
317
- );
318
- /* GDPR checkbox */
319
-
320
- $hiddenChecker['position'] = 'absolute';
321
- // For protected bots and spams
322
- $hiddenChecker['left'] = '-5000px';
323
- $hiddenChecker['padding'] = '0';
324
- $formData['hidden-checker'] = array(
325
- 'isShow' => false,
326
- 'attrs' => array(
327
- 'type' => 'hidden',
328
- 'data-required' => false,
329
- 'name' => 'sgpb-subs-hidden-checker',
330
- 'value' => '',
331
- 'class' => 'js-subs-text-inputs js-subs-last-name-input'
332
- ),
333
- 'style' => $hiddenChecker
334
- );
335
-
336
- $submitTitle = $this->getFieldValue('sgpb-subs-btn-title');
337
- $progressTitle = $this->getFieldValue('sgpb-subs-btn-progress-title');
338
- $formData['submit'] = array(
339
- 'isShow' => true,
340
- 'attrs' => array(
341
- 'type' => 'submit',
342
- 'name' => 'sgpb-subs-submit',
343
- 'value' => $submitTitle,
344
- 'data-title' => $submitTitle,
345
- 'data-progress-title' => $progressTitle,
346
- 'class' => 'js-subs-submit-btn'
347
- ),
348
- 'style' => $submitStyles
349
- );
350
-
351
- return $formData;
352
- }
353
-
354
- /**
355
- * Create validation obj for jQuery validate
356
- *
357
- * @since 1.0.0
358
- *
359
- * @param array $subsFields
360
- * @param array $validationMessages
361
- *
362
- * @return string
363
- */
364
- private function createValidateObj($subsFields, $validationMessages)
365
- {
366
- $validateObj = '';
367
- $id = $this->getId();
368
- $requiredMessage = $this->getOptionValue('sgpb-subs-validation-message');
369
- $emailMessage = $this->getOptionValue('sgpb-subs-invalid-message');
370
-
371
- if (empty($subsFields)) {
372
- return $validateObj;
373
- }
374
-
375
- if (empty($emailMessage)) {
376
- $emailMessage = SGPB_SUBSCRIPTION_EMAIL_MESSAGE;
377
- }
378
-
379
- if (empty($requiredMessage)) {
380
- $requiredMessage = SGPB_SUBSCRIPTION_VALIDATION_MESSAGE;
381
- }
382
-
383
- $rules = 'rules: { ';
384
- $messages = 'messages: { ';
385
-
386
- $validateObj = 'var sgpbSubsValidateObj'.$id.' = { ';
387
- foreach ($subsFields as $subsField) {
388
-
389
- if (empty($subsField['attrs'])) {
390
- continue;
391
- }
392
-
393
- $attrs = $subsField['attrs'];
394
- $type = 'text';
395
- $name = '';
396
- $required = false;
397
-
398
- if (!empty($attrs['type'])) {
399
- $type = $attrs['type'];
400
- }
401
- if (!empty($attrs['name'])) {
402
- $name = $attrs['name'];
403
- }
404
- if (!empty($attrs['data-required'])) {
405
- $required = $attrs['data-required'];
406
- }
407
-
408
- if ($type == 'email') {
409
- $rules .= '"'.$name.'": {required: true, email: true},';
410
- $messages .= '"'.$name.'": {
411
- "required": "'.$requiredMessage.'",
412
- "email": "'.$emailMessage.'"
413
- },';
414
- continue;
415
- }
416
-
417
- if (!$required) {
418
- continue;
419
- }
420
-
421
- $messages .= '"'.$name.'": "'.$requiredMessage.'",';
422
- $rules .= '"'.$name.'" : "required",';
423
-
424
- }
425
- $rules = rtrim($rules, ',');
426
- $messages = rtrim($messages, ',');
427
-
428
- $rules .= '},';
429
- $messages .= '}';
430
-
431
- $validateObj .= $rules;
432
- $validateObj .= $messages;
433
-
434
- $validateObj .= '};';
435
-
436
- return $validateObj;
437
- }
438
-
439
- private function getSubscriptionValidationScripts($validateObj)
440
- {
441
- $script = '<script type="text/javascript">';
442
- $script .= $validateObj;
443
- $script .= '</script>';
444
-
445
- return $script;
446
- }
447
-
448
- public function getFormCustomStyles($styleData)
449
- {
450
- $placeholderColor = $styleData['placeholderColor'];
451
- $formBackgroundColor = $this->getFieldValue('sgpb-subs-form-bg-color');
452
- $formPadding = $this->getFieldValue('sgpb-subs-form-padding');
453
- $formBackgroundOpacity = $this->getFieldValue('sgpb-subs-form-bg-opacity');
454
- $popupId = $this->getId();
455
- if (isset($styleData['formBackgroundOpacity'])) {
456
- $formBackgroundOpacity = $styleData['formBackgroundOpacity'];
457
- }
458
- if (isset($styleData['formColor'])) {
459
- $formBackgroundColor = $styleData['formColor'];
460
- }
461
- if (isset($styleData['formPadding'])) {
462
- $formPadding = $styleData['formPadding'];
463
- }
464
- $formBackgroundColor = AdminHelper::hexToRgba($formBackgroundColor, $formBackgroundOpacity);
465
-
466
- ob_start();
467
- ?>
468
- <style type="text/css">
469
- .sgpb-subs-form-<?php echo $popupId; ?> {background-color: <?php echo $formBackgroundColor; ?>;padding: <?php echo $formPadding.'px'; ?>}
470
- .sgpb-subs-form-<?php echo $popupId; ?> .js-subs-text-inputs::-webkit-input-placeholder {color: <?php echo $placeholderColor; ?>;font-weight: lighter;}
471
- .sgpb-subs-form-<?php echo $popupId; ?> .js-subs-text-inputs::-moz-placeholder {color:<?php echo $placeholderColor; ?>;font-weight: lighter;}
472
- .sgpb-subs-form-<?php echo $popupId; ?> .js-subs-text-inputs:-ms-input-placeholder {color:<?php echo $placeholderColor; ?>;font-weight: lighter;} /* ie */
473
- .sgpb-subs-form-<?php echo $popupId; ?> .js-subs-text-inputs:-moz-placeholder {color:<?php echo $placeholderColor; ?>;font-weight: lighter;}
474
- .sgpb-subs-form-<?php echo $popupId; ?> input[type="checkbox"] {-webkit-appearance: checkbox;!important}
475
- .sgpb-subs-form-<?php echo $popupId; ?> input[type="checkbox"]:before {content: none!important; }
476
- </style>
477
- <?php
478
- $styles = ob_get_contents();
479
- ob_get_clean();
480
-
481
- return $styles;
482
- }
483
-
484
- public function getOptionValue($optionName, $forceDefaultValue = false)
485
- {
486
- return parent::getOptionValue($optionName, $forceDefaultValue);
487
- }
488
-
489
- public function getPopupTypeOptionsView()
490
- {
491
- $optionsViewData = array(
492
- 'filePath' => SG_POPUP_TYPE_OPTIONS_PATH . 'subscription.php',
493
- 'metaboxTitle' => 'Subscription Settings',
494
- 'short_description' => 'Create subscription form, customize the fields and styles'
495
- );
496
-
497
- $isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
498
-
499
- if ($isSubscriptionPlusActive) {
500
- return array();
501
- }
502
-
503
- return $optionsViewData;
504
- }
505
-
506
- private function getSubscriptionForm($subsFields)
507
- {
508
- $popupId = $this->getId();
509
- $form = '<div class="sgpb-subs-form-'.$popupId.' sgpb-subscription-form">';
510
- $form .= $this->getFormMessages();
511
- $form .= Functions::renderForm($subsFields);
512
- $form .= '</div>';
513
-
514
- return $form;
515
- }
516
-
517
- private function getFormMessages()
518
- {
519
- $successMessage = $this->getOptionValue('sgpb-subs-success-message');
520
- $errorMessage = $this->getOptionValue('sgpb-subs-error-message');
521
- if (empty($errorMessage)) {
522
- $errorMessage = SGPB_SUBSCRIPTION_ERROR_MESSAGE;
523
- }
524
- ob_start();
525
- ?>
526
- <div class="subs-form-messages sgpb-alert sgpb-alert-success sg-hide-element">
527
- <p><?php echo $successMessage; ?></p>
528
- </div>
529
- <div class="subs-form-messages sgpb-alert sgpb-alert-danger sg-hide-element">
530
- <p><?php echo $errorMessage; ?></p>
531
- </div>
532
- <?php
533
- $messages = ob_get_contents();
534
- ob_end_clean();
535
-
536
- return $messages;
537
- }
538
-
539
- public function renderOptions($options)
540
- {
541
- // for old popups
542
- if (isset($options['sgpb-subs-success-popup']) && function_exists('sgpb\sgpGetCorrectPopupId')) {
543
- $options['sgpb-subs-success-popup'] = sgpGetCorrectPopupId($options['sgpb-subs-success-popup']);
544
- }
545
-
546
- return $options;
547
- }
548
-
549
- public function getPopupTypeContent()
550
- {
551
- $this->frontendFilters();
552
-
553
- apply_filters('sgpbSubscriptionForm', $this);
554
- $popupContent = $this->getContent();
555
- $formContent = $this->getFormContent();
556
- $showToTop = $this->getOptionValue('sgpb-subs-show-form-to-top');
557
- $content = $popupContent.$formContent;
558
-
559
- if ($showToTop) {
560
- $content = $formContent.$popupContent;
561
- }
562
- return $content;
563
- }
564
-
565
- public function subscriptionForm($popupObj)
566
- {
567
- if (!is_object($popupObj)) {
568
- return '';
569
- }
570
- $popupContent = '';
571
- $popupOptions = $popupObj->getOptions();
572
- $subsFields = $popupObj->getOptionValue('sgpb-subs-fields');
573
- $isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
574
-
575
- if (empty($subsFields) || !$isSubscriptionPlusActive) {
576
- $subsFields = $popupObj->createFormFieldsData();
577
- }
578
-
579
- $subsRequiredMessages = '';
580
- if (!empty($popupOptions['sgpb-subs-validation-message'])) {
581
- $subsRequiredMessages = $popupOptions['sgpb-subs-validation-message'];
582
- }
583
-
584
- $validationMessages = array(
585
- 'requiredMessage' => $subsRequiredMessages
586
- );
587
-
588
- $styleData = array(
589
- 'placeholderColor' => $popupOptions['sgpb-subs-text-placeholder-color'],
590
- 'formColor' => $popupOptions['sgpb-subs-form-bg-color'],
591
- 'formPadding' => isset($popupOptions['sgpb-subs-form-padding'])?$popupOptions['sgpb-subs-form-padding']:'',
592
- 'formBackgroundOpacity' => isset($popupOptions['sgpb-subs-form-bg-opacity'])?$popupOptions['sgpb-subs-form-bg-opacity']:''
593
- );
594
-
595
- $validateScript = $popupObj->createValidateObj($subsFields, $validationMessages);
596
- $popupContent .= $popupObj->getSubscriptionForm($subsFields);
597
- $popupContent .= $popupObj->getSubscriptionValidationScripts($validateScript);
598
- $popupContent .= $popupObj->getFormCustomStyles($styleData);
599
-
600
- $popupObj->setFormContent($popupContent);
601
-
602
- return $popupObj;
603
- }
604
-
605
- public function getSubPopupObj()
606
- {
607
- $options = $this->getOptions();
608
- $subPopups = parent::getSubPopupObj();
609
- if ($options['sgpb-subs-success-behavior'] == 'openPopup') {
610
- $subPopupId = (!empty($options['sgpb-subs-success-popup'])) ? (int)$options['sgpb-subs-success-popup']: null;
611
-
612
- if (empty($subPopupId)) {
613
- return $subPopups;
614
- }
615
-
616
- // for old popups
617
- if (function_exists('sgpb\sgpGetCorrectPopupId')) {
618
- $subPopupId = sgpGetCorrectPopupId($subPopupId);
619
- }
620
-
621
- $subPopupObj = SGPopup::find($subPopupId);
622
- if (!empty($subPopupObj) && ($subPopupObj instanceof SGPopup)) {
623
- // We remove all events because this popup will be open after successful subscription
624
- $subPopupObj->setEvents(array('param' => 'click', 'value' => ''));
625
- $subPopups[] = $subPopupObj;
626
- }
627
- }
628
-
629
- return $subPopups;
630
- }
631
-
632
- public function getExtraRenderOptions()
633
- {
634
- return array();
635
- }
636
-
637
- public static function getSubscribersCount()
638
- {
639
- global $wpdb;
640
- $count = $wpdb->get_var('SELECT COUNT(*) FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME);
641
-
642
- return (int)$count;
643
- }
644
-
645
- public static function getAllSubscriptions()
646
- {
647
- $popupArgs = array();
648
- $popupArgs['type'][] = 'subscription';
649
-
650
- $popupArgs = apply_filters('sgpbGetAllSubscriptionArgs', $popupArgs);
651
- $allPopups = SGPopup::getAllPopups($popupArgs);
652
-
653
- return $allPopups;
654
- }
655
-
656
- public static function getAllSubscriptionForms()
657
- {
658
- $subsFormList = array();
659
- $subscriptionForms = self::getAllSubscriptions();
660
-
661
- foreach ($subscriptionForms as $subscriptionForm) {
662
- $title = $subscriptionForm->getTitle();
663
- $id = $subscriptionForm->getId();
664
- if ($title == '') {
665
- $title = '('.__('no title', SG_POPUP_TEXT_DOMAIN).')';
666
- }
667
- $subsFormList[$id] = $title;
668
- }
669
-
670
- return $subsFormList;
671
- }
672
-
673
- public static function getAllSubscribersDate()
674
- {
675
- $subsDateList = array();
676
- global $wpdb;
677
- $subscriptionPopups = $wpdb->get_results('SELECT id, cDate FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME, ARRAY_A);
678
-
679
- foreach ($subscriptionPopups as $subscriptionForm) {
680
- $id = $subscriptionForm['id'];
681
- $date = substr($subscriptionForm['cDate'], 0, 7);
682
- $subsDateList[$id]['date-value'] = $date;
683
- $subsDateList[$id]['date-title'] = AdminHelper::getFormattedDate($date);
684
- }
685
-
686
- return $subsDateList;
687
- }
688
- }
1
+ <?php
2
+ namespace sgpb;
3
+ require_once(dirname(__FILE__).'/SGPopup.php');
4
+ require_once(ABSPATH.'wp-admin/includes/plugin.php');
5
+
6
+ class SubscriptionPopup extends SGPopup
7
+ {
8
+ private $data;
9
+ private $formContent = '';
10
+
11
+ public function __construct()
12
+ {
13
+ add_filter('sgpbPopupRenderOptions', array($this, 'renderOptions'), 12, 1);
14
+ add_filter('sgpbAdminJsFiles', array($this, 'adminJsFilter'), 1, 1);
15
+ add_filter('sgpbAdminCssFiles', array($this, 'adminCssFilter'), 1, 1);
16
+ add_filter('sgpbSubscriptionForm', array($this, 'subscriptionForm'), 1, 1);
17
+ }
18
+
19
+ private function frontendFilters()
20
+ {
21
+ $isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
22
+
23
+ if (!$isSubscriptionPlusActive) {
24
+ add_filter('sgpbFrontendJsFiles', array($this, 'frontJsFilter'), 1, 1);
25
+ }
26
+ add_filter('sgpbFrontendCssFiles', array($this, 'frontCssFilter'), 1, 1);
27
+ }
28
+
29
+ public function setData($data)
30
+ {
31
+ $this->data = $data;
32
+ }
33
+
34
+ public function getData()
35
+ {
36
+ return $this->data;
37
+ }
38
+
39
+ public function setFormContent($formContent)
40
+ {
41
+ $this->formContent = $formContent;
42
+ }
43
+
44
+ public function getFormContent()
45
+ {
46
+ return $this->formContent;
47
+ }
48
+
49
+ public static function getTablesSql()
50
+ {
51
+ $tablesSql = array();
52
+ $dbEngine = Functions::getDatabaseEngine();
53
+
54
+ $tablesSql[] = SGPB_SUBSCRIBERS_TABLE_NAME.' (
55
+ `id` int(12) NOT NULL AUTO_INCREMENT,
56
+ `firstName` varchar(255),
57
+ `lastName` varchar(255),
58
+ `email` varchar(255),
59
+ `subscriptionType` int(12),
60
+ `cDate` date,
61
+ `status` varchar(255),
62
+ `unsubscribed` int(11) default 0,
63
+ PRIMARY KEY (id)
64
+ ) ENGINE='.$dbEngine.' DEFAULT CHARSET=utf8;';
65
+
66
+ $tablesSql[] = SGPB_SUBSCRIBERS_ERROR_TABLE_NAME.' (
67
+ `id` int(12) NOT NULL AUTO_INCREMENT,
68
+ `firstName` varchar(255),
69
+ `popupType` varchar(255),
70
+ `email` varchar(255),
71
+ `date` varchar(255),
72
+ PRIMARY KEY (id)
73
+ ) ENGINE='.$dbEngine.' DEFAULT CHARSET=utf8;';
74
+
75
+ return $tablesSql;
76
+ }
77
+
78
+ /**
79
+ * Return Subscription popup type need all table names
80
+ *
81
+ * @since 1.0.0
82
+ *
83
+ * @return array $table names
84
+ *
85
+ */
86
+ public static function getTableNames()
87
+ {
88
+ $tableNames = array(
89
+ SGPB_SUBSCRIBERS_TABLE_NAME,
90
+ SGPB_SUBSCRIBERS_ERROR_TABLE_NAME
91
+ );
92
+
93
+ return $tableNames;
94
+ }
95
+
96
+ public function frontJsFilter($jsFiles)
97
+ {
98
+ $jsFiles[] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Subscription.js');
99
+ $jsFiles[] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Validate.js');
100
+
101
+ return $jsFiles;
102
+ }
103
+
104
+ public function adminJsFilter($jsFiles)
105
+ {
106
+ $jsFiles[] = array('folderUrl' => SG_POPUP_JS_URL, 'filename' => 'Subscription.js');
107
+
108
+ return $jsFiles;
109
+ }
110
+
111
+ public function adminCssFilter($cssFiles)
112
+ {
113
+ $cssFiles[] = array(
114
+ 'folderUrl' => SG_POPUP_CSS_URL,
115
+ 'filename' => 'ResetFormStyle.css'
116
+ );
117
+ $cssFiles[] = array(
118
+ 'folderUrl' => SG_POPUP_CSS_URL,
119
+ 'filename' => 'SubscriptionForm.css'
120
+ );
121
+
122
+ return $cssFiles;
123
+ }
124
+
125
+ public function frontCssFilter($cssFiles)
126
+ {
127
+ $cssFiles[] = array(
128
+ 'folderUrl' => SG_POPUP_CSS_URL,
129
+ 'filename' => 'ResetFormStyle.css',
130
+ 'inFooter' => true
131
+ );
132
+ $cssFiles[] = array(
133
+ 'folderUrl' => SG_POPUP_CSS_URL,
134
+ 'filename' => 'SubscriptionForm.css',
135
+ 'inFooter' => true
136
+ );
137
+
138
+ return $cssFiles;
139
+ }
140
+
141
+ public function addAdditionalSettings($postData = array(), $obj = null)
142
+ {
143
+ $this->setData($postData);
144
+ $this->setPostData($postData);
145
+ $isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
146
+
147
+ if (!$isSubscriptionPlusActive) {
148
+ $postData['sgpb-subs-fields'] = $this->createFormFieldsData();
149
+ }
150
+
151
+ return $postData;
152
+ }
153
+
154
+ public function setSubsFormData($formId)
155
+ {
156
+ $savedData = array();
157
+
158
+ if (!empty($formId)) {
159
+ $savedData = SGPopup::getSavedData($formId);
160
+ }
161
+
162
+ $this->setData($savedData);
163
+ }
164
+
165
+ private function getFieldValue($optionName)
166
+ {
167
+ $optionValue = '';
168
+ $postData = $this->getPostData();
169
+
170
+ if (!empty($postData[$optionName])) {
171
+ return $postData[$optionName];
172
+ }
173
+
174
+ $defaultData = $this->getDefaultDataByName($optionName);
175
+
176
+ // when Saved data does not exist we try find inside default values
177
+ if (empty($postData) && !empty($defaultData)) {
178
+ return $defaultData['defaultValue'];
179
+ }
180
+
181
+ return $optionValue;
182
+ }
183
+
184
+ /**
185
+ * Create form fields data
186
+ *
187
+ * @since 1.0.0
188
+ *
189
+ * @return array $formData
190
+ */
191
+ public function createFormFieldsData()
192
+ {
193
+ $formData = array();
194
+ $inputStyles = array();
195
+ $submitStyles = array();
196
+ $emailPlaceholder = $this->getFieldValue('sgpb-subs-email-placeholder');
197
+ if ($this->getFieldValue('sgpb-subs-text-width')) {
198
+ $inputWidth = $this->getFieldValue('sgpb-subs-text-width');
199
+ $inputStyles['width'] = AdminHelper::getCSSSafeSize($inputWidth);
200
+ }
201
+ if ($this->getFieldValue('sgpb-subs-text-height')) {
202
+ $inputHeight = $this->getFieldValue('sgpb-subs-text-height');
203
+ $inputStyles['height'] = AdminHelper::getCSSSafeSize($inputHeight);
204
+ }
205
+ if ($this->getFieldValue('sgpb-subs-text-border-width')) {
206
+ $inputBorderWidth = $this->getFieldValue('sgpb-subs-text-border-width');
207
+ $inputStyles['border-width'] = AdminHelper::getCSSSafeSize($inputBorderWidth);
208
+ }
209
+ if ($this->getFieldValue('sgpb-subs-text-border-color')) {
210
+ $inputStyles['border-color'] = $this->getFieldValue('sgpb-subs-text-border-color');
211
+ }
212
+ if ($this->getFieldValue('sgpb-subs-text-bg-color')) {
213
+ $inputStyles['background-color'] = $this->getFieldValue('sgpb-subs-text-bg-color');
214
+ }
215
+ if ($this->getFieldValue('sgpb-subs-text-color')) {
216
+ $inputStyles['color'] = $this->getFieldValue('sgpb-subs-text-color');
217
+ }
218
+ $inputStyles['autocomplete'] = 'off';
219
+
220
+ if ($this->getFieldValue('sgpb-subs-btn-width')) {
221
+ $submitWidth = $this->getFieldValue('sgpb-subs-btn-width');
222
+ $submitStyles['width'] = AdminHelper::getCSSSafeSize($submitWidth);
223
+ }
224
+ if ($this->getFieldValue('sgpb-subs-btn-height')) {
225
+ $submitHeight = $this->getFieldValue('sgpb-subs-btn-height');
226
+ $submitStyles['height'] = AdminHelper::getCSSSafeSize($submitHeight);
227
+ }
228
+ if ($this->getFieldValue('sgpb-subs-btn-bg-color')) {
229
+ $submitStyles['background-color'] = $this->getFieldValue('sgpb-subs-btn-bg-color').' !important';
230
+ }
231
+ if ($this->getFieldValue('sgpb-subs-btn-text-color')) {
232
+ $submitStyles['color'] = $this->getFieldValue('sgpb-subs-btn-text-color');
233
+ }
234
+ if ($this->getFieldValue('sgpb-subs-btn-border-radius')) {
235
+ $submitStyles['border-radius'] = AdminHelper::getCSSSafeSize($this->getFieldValue('sgpb-subs-btn-border-radius')).' !important';
236
+ }
237
+ if ($this->getFieldValue('sgpb-subs-btn-border-width')) {
238
+ $submitStyles['border-width'] = AdminHelper::getCSSSafeSize($this->getFieldValue('sgpb-subs-btn-border-width')).' !important';
239
+ }
240
+ if ($this->getFieldValue('sgpb-subs-btn-border-color')) {
241
+ $submitStyles['border-color'] = $this->getFieldValue('sgpb-subs-btn-border-color').' !important';
242
+ }
243
+ $submitStyles['text-transform'] = 'none !important';
244
+ $submitStyles['border-style'] = 'solid';
245
+
246
+ $formData['email'] = array(
247
+ 'isShow' => true,
248
+ 'attrs' => array(
249
+ 'type' => 'email',
250
+ 'data-required' => true,
251
+ 'name' => 'sgpb-subs-email',
252
+ 'placeholder' => $emailPlaceholder,
253
+ 'class' => 'js-subs-text-inputs js-subs-email-input',
254
+ 'data-error-message-class' => 'sgpb-subs-email-error-message'
255
+ ),
256
+ 'style' => $inputStyles,
257
+ 'errorMessageBoxStyles' => isset($inputStyles["width"]) ?$inputStyles["width"] : ''
258
+ );
259
+
260
+ $firstNamePlaceholder = $this->getFieldValue('sgpb-subs-first-placeholder');
261
+ $firstNameRequired = $this->getOptionValueFromSavedData('sgpb-subs-first-name-required');
262
+ $firstNameRequired = (!empty($firstNameRequired)) ? true : false;
263
+ $isShow = ($this->getFieldValue('sgpb-subs-first-name-status')) ? true : false;
264
+
265
+ $formData['first-name'] = array(
266
+ 'isShow' => $isShow,
267
+ 'attrs' => array(
268
+ 'type' => 'text',
269
+ 'data-required' => $firstNameRequired,
270
+ 'name' => 'sgpb-subs-first-name',
271
+ 'placeholder' => $firstNamePlaceholder,
272
+ 'class' => 'js-subs-text-inputs js-subs-first-name-input',
273
+ 'data-error-message-class' => 'sgpb-subs-first-name-error-message'
274
+ ),
275
+ 'style' => $inputStyles,
276
+ 'errorMessageBoxStyles' => isset($inputStyles['width']) ? $inputStyles['width'] : ''
277
+ );
278
+
279
+ $lastNamePlaceholder = $this->getFieldValue('sgpb-subs-last-placeholder');
280
+ $lastNameRequired = $this->getOptionValueFromSavedData('sgpb-subs-last-name-required');
281
+ $lastNameRequired = (!empty($lastNameRequired)) ? true : false;
282
+ $isShow = ($this->getFieldValue('sgpb-subs-last-name-status')) ? true : false;
283
+
284
+ $formData['last-name'] = array(
285
+ 'isShow' => $isShow,
286
+ 'attrs' => array(
287
+ 'type' => 'text',
288
+ 'data-required' => $lastNameRequired,
289
+ 'name' => 'sgpb-subs-last-name',
290
+ 'placeholder' => $lastNamePlaceholder,
291
+ 'class' => 'js-subs-text-inputs js-subs-last-name-input',
292
+ 'data-error-message-class' => 'sgpb-subs-last-name-error-message'
293
+ ),
294
+ 'style' => $inputStyles,
295
+ 'errorMessageBoxStyles' => isset($inputStyles['width']) ? $inputStyles['width'] : ''
296
+ );
297
+
298
+ /* GDPR checkbox */
299
+ $gdprLabel = $this->getOptionValueFromSavedData('sgpb-subs-gdpr-label');
300
+ $gdprRequired = ($this->getOptionValueFromSavedData('sgpb-subs-gdpr-status')) ? true : false;
301
+ $isShow = ($this->getOptionValueFromSavedData('sgpb-subs-gdpr-status')) ? true : false;
302
+
303
+ $formData['gdpr'] = array(
304
+ 'isShow' => $isShow,
305
+ 'attrs' => array(
306
+ 'type' => 'customCheckbox',
307
+ 'data-required' => $gdprRequired,
308
+ 'name' => 'sgpb-subs-gdpr',
309
+ 'class' => 'js-subs-gdpr-inputs js-subs-gdpr-label',
310
+ 'id' => 'sgpb-gdpr-field-label',
311
+ 'data-error-message-class' => 'sgpb-gdpr-error-message'
312
+ ),
313
+ 'style' => array('width' => isset($inputWidth)? $inputWidth :''),
314
+ 'label' => $gdprLabel,
315
+ 'text' => $this->getFieldValue('sgpb-subs-gdpr-text'),
316
+ 'errorMessageBoxStyles' => isset($inputStyles['width'])?$inputStyles['width']:''
317
+ );
318
+ /* GDPR checkbox */
319
+
320
+ $hiddenChecker['position'] = 'absolute';
321
+ // For protected bots and spams
322
+ $hiddenChecker['left'] = '-5000px';
323
+ $hiddenChecker['padding'] = '0';
324
+ $formData['hidden-checker'] = array(
325
+ 'isShow' => false,
326
+ 'attrs' => array(
327
+ 'type' => 'hidden',
328
+ 'data-required' => false,
329
+ 'name' => 'sgpb-subs-hidden-checker',
330
+ 'value' => '',
331
+ 'class' => 'js-subs-text-inputs js-subs-last-name-input'
332
+ ),
333
+ 'style' => $hiddenChecker
334
+ );
335
+
336
+ $submitTitle = $this->getFieldValue('sgpb-subs-btn-title');
337
+ $progressTitle = $this->getFieldValue('sgpb-subs-btn-progress-title');
338
+ $formData['submit'] = array(
339
+ 'isShow' => true,
340
+ 'attrs' => array(
341
+ 'type' => 'submit',
342
+ 'name' => 'sgpb-subs-submit',
343
+ 'value' => $submitTitle,
344
+ 'data-title' => $submitTitle,
345
+ 'data-progress-title' => $progressTitle,
346
+ 'class' => 'js-subs-submit-btn'
347
+ ),
348
+ 'style' => $submitStyles
349
+ );
350
+
351
+ return $formData;
352
+ }
353
+
354
+ /**
355
+ * Create validation obj for jQuery validate
356
+ *
357
+ * @since 1.0.0
358
+ *
359
+ * @param array $subsFields
360
+ * @param array $validationMessages
361
+ *
362
+ * @return string
363
+ */
364
+ private function createValidateObj($subsFields, $validationMessages)
365
+ {
366
+ $validateObj = '';
367
+ $id = $this->getId();
368
+ $requiredMessage = $this->getOptionValue('sgpb-subs-validation-message');
369
+ $emailMessage = $this->getOptionValue('sgpb-subs-invalid-message');
370
+
371
+ if (empty($subsFields)) {
372
+ return $validateObj;
373
+ }
374
+
375
+ if (empty($emailMessage)) {
376
+ $emailMessage = SGPB_SUBSCRIPTION_EMAIL_MESSAGE;
377
+ }
378
+
379
+ if (empty($requiredMessage)) {
380
+ $requiredMessage = SGPB_SUBSCRIPTION_VALIDATION_MESSAGE;
381
+ }
382
+
383
+ $rules = 'rules: { ';
384
+ $messages = 'messages: { ';
385
+
386
+ $validateObj = 'var sgpbSubsValidateObj'.$id.' = { ';
387
+ foreach ($subsFields as $subsField) {
388
+
389
+ if (empty($subsField['attrs'])) {
390
+ continue;
391
+ }
392
+
393
+ $attrs = $subsField['attrs'];
394
+ $type = 'text';
395
+ $name = '';
396
+ $required = false;
397
+
398
+ if (!empty($attrs['type'])) {
399
+ $type = $attrs['type'];
400
+ }
401
+ if (!empty($attrs['name'])) {
402
+ $name = $attrs['name'];
403
+ }
404
+ if (!empty($attrs['data-required'])) {
405
+ $required = $attrs['data-required'];
406
+ }
407
+
408
+ if ($type == 'email') {
409
+ $rules .= '"'.$name.'": {required: true, email: true},';
410
+ $messages .= '"'.$name.'": {
411
+ "required": "'.$requiredMessage.'",
412
+ "email": "'.$emailMessage.'"
413
+ },';
414
+ continue;
415
+ }
416
+
417
+ if (!$required) {
418
+ continue;
419
+ }
420
+
421
+ $messages .= '"'.$name.'": "'.$requiredMessage.'",';
422
+ $rules .= '"'.$name.'" : "required",';
423
+
424
+ }
425
+ $rules = rtrim($rules, ',');
426
+ $messages = rtrim($messages, ',');
427
+
428
+ $rules .= '},';
429
+ $messages .= '}';
430
+
431
+ $validateObj .= $rules;
432
+ $validateObj .= $messages;
433
+
434
+ $validateObj .= '};';
435
+
436
+ return $validateObj;
437
+ }
438
+
439
+ private function getSubscriptionValidationScripts($validateObj)
440
+ {
441
+ $script = '<script type="text/javascript">';
442
+ $script .= $validateObj;
443
+ $script .= '</script>';
444
+
445
+ return $script;
446
+ }
447
+
448
+ public function getFormCustomStyles($styleData)
449
+ {
450
+ $placeholderColor = $styleData['placeholderColor'];
451
+ $formBackgroundColor = $this->getFieldValue('sgpb-subs-form-bg-color');
452
+ $formPadding = $this->getFieldValue('sgpb-subs-form-padding');
453
+ $formBackgroundOpacity = $this->getFieldValue('sgpb-subs-form-bg-opacity');
454
+ $popupId = $this->getId();
455
+ if (isset($styleData['formBackgroundOpacity'])) {
456
+ $formBackgroundOpacity = $styleData['formBackgroundOpacity'];
457
+ }
458
+ if (isset($styleData['formColor'])) {
459
+ $formBackgroundColor = $styleData['formColor'];
460
+ }
461
+ if (isset($styleData['formPadding'])) {
462
+ $formPadding = $styleData['formPadding'];
463
+ }
464
+ $formBackgroundColor = AdminHelper::hexToRgba($formBackgroundColor, $formBackgroundOpacity);
465
+
466
+ ob_start();
467
+ ?>
468
+ <style type="text/css">
469
+ .sgpb-subs-form-<?php echo $popupId; ?> {background-color: <?php echo $formBackgroundColor; ?>;padding: <?php echo $formPadding.'px'; ?>}
470
+ .sgpb-subs-form-<?php echo $popupId; ?> .js-subs-text-inputs::-webkit-input-placeholder {color: <?php echo $placeholderColor; ?>;font-weight: lighter;}
471
+ .sgpb-subs-form-<?php echo $popupId; ?> .js-subs-text-inputs::-moz-placeholder {color:<?php echo $placeholderColor; ?>;font-weight: lighter;}
472
+ .sgpb-subs-form-<?php echo $popupId; ?> .js-subs-text-inputs:-ms-input-placeholder {color:<?php echo $placeholderColor; ?>;font-weight: lighter;} /* ie */
473
+ .sgpb-subs-form-<?php echo $popupId; ?> .js-subs-text-inputs:-moz-placeholder {color:<?php echo $placeholderColor; ?>;font-weight: lighter;}
474
+ .sgpb-subs-form-<?php echo $popupId; ?> input[type="checkbox"] {-webkit-appearance: checkbox;!important}
475
+ .sgpb-subs-form-<?php echo $popupId; ?> input[type="checkbox"]:before {content: none!important; }
476
+ </style>
477
+ <?php
478
+ $styles = ob_get_contents();
479
+ ob_get_clean();
480
+
481
+ return $styles;
482
+ }
483
+
484
+ public function getOptionValue($optionName, $forceDefaultValue = false)
485
+ {
486
+ return parent::getOptionValue($optionName, $forceDefaultValue);
487
+ }
488
+
489
+ public function getPopupTypeOptionsView()
490
+ {
491
+ $optionsViewData = array(
492
+ 'filePath' => SG_POPUP_TYPE_OPTIONS_PATH . 'subscription.php',
493
+ 'metaboxTitle' => 'Subscription Settings',
494
+ 'short_description' => 'Create subscription form, customize the fields and styles'
495
+ );
496
+
497
+ $isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
498
+
499
+ if ($isSubscriptionPlusActive) {
500
+ return array();
501
+ }
502
+
503
+ return $optionsViewData;
504
+ }
505
+
506
+ private function getSubscriptionForm($subsFields)
507
+ {
508
+ $popupId = $this->getId();
509
+ $form = '<div class="sgpb-subs-form-'.$popupId.' sgpb-subscription-form">';
510
+ $form .= $this->getFormMessages();
511
+ $form .= Functions::renderForm($subsFields);
512
+ $form .= '</div>';
513
+
514
+ return $form;
515
+ }
516
+
517
+ private function getFormMessages()
518
+ {
519
+ $successMessage = $this->getOptionValue('sgpb-subs-success-message');
520
+ $errorMessage = $this->getOptionValue('sgpb-subs-error-message');
521
+ if (empty($errorMessage)) {
522
+ $errorMessage = SGPB_SUBSCRIPTION_ERROR_MESSAGE;
523
+ }
524
+ ob_start();
525
+ ?>
526
+ <div class="subs-form-messages sgpb-alert sgpb-alert-success sg-hide-element">
527
+ <p><?php echo $successMessage; ?></p>
528
+ </div>
529
+ <div class="subs-form-messages sgpb-alert sgpb-alert-danger sg-hide-element">
530
+ <p><?php echo $errorMessage; ?></p>
531
+ </div>
532
+ <?php
533
+ $messages = ob_get_contents();
534
+ ob_end_clean();
535
+
536
+ return $messages;
537
+ }
538
+
539
+ public function renderOptions($options)
540
+ {
541
+ // for old popups
542
+ if (isset($options['sgpb-subs-success-popup']) && function_exists('sgpb\sgpGetCorrectPopupId')) {
543
+ $options['sgpb-subs-success-popup'] = sgpGetCorrectPopupId($options['sgpb-subs-success-popup']);
544
+ }
545
+
546
+ return $options;
547
+ }
548
+
549
+ public function getPopupTypeContent()
550
+ {
551
+ $this->frontendFilters();
552
+
553
+ apply_filters('sgpbSubscriptionForm', $this);
554
+ $popupContent = $this->getContent();
555
+ $formContent = $this->getFormContent();
556
+ $showToTop = $this->getOptionValue('sgpb-subs-show-form-to-top');
557
+ $content = $popupContent.$formContent;
558
+
559
+ if ($showToTop) {
560
+ $content = $formContent.$popupContent;
561
+ }
562
+ return $content;
563
+ }
564
+
565
+ public function subscriptionForm($popupObj)
566
+ {
567
+ if (!is_object($popupObj)) {
568
+ return '';
569
+ }
570
+ $popupContent = '';
571
+ $popupOptions = $popupObj->getOptions();
572
+ $subsFields = $popupObj->getOptionValue('sgpb-subs-fields');
573
+ $isSubscriptionPlusActive = is_plugin_active(SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY);
574
+
575
+ if (empty($subsFields) || !$isSubscriptionPlusActive) {
576
+ $subsFields = $popupObj->createFormFieldsData();
577
+ }
578
+
579
+ $subsRequiredMessages = '';
580
+ if (!empty($popupOptions['sgpb-subs-validation-message'])) {
581
+ $subsRequiredMessages = $popupOptions['sgpb-subs-validation-message'];
582
+ }
583
+
584
+ $validationMessages = array(
585
+ 'requiredMessage' => $subsRequiredMessages
586
+ );
587
+
588
+ $styleData = array(
589
+ 'placeholderColor' => $popupOptions['sgpb-subs-text-placeholder-color'],
590
+ 'formColor' => $popupOptions['sgpb-subs-form-bg-color'],
591
+ 'formPadding' => isset($popupOptions['sgpb-subs-form-padding'])?$popupOptions['sgpb-subs-form-padding']:'',
592
+ 'formBackgroundOpacity' => isset($popupOptions['sgpb-subs-form-bg-opacity'])?$popupOptions['sgpb-subs-form-bg-opacity']:''
593
+ );
594
+
595
+ $validateScript = $popupObj->createValidateObj($subsFields, $validationMessages);
596
+ $popupContent .= $popupObj->getSubscriptionForm($subsFields);
597
+ $popupContent .= $popupObj->getSubscriptionValidationScripts($validateScript);
598
+ $popupContent .= $popupObj->getFormCustomStyles($styleData);
599
+
600
+ $popupObj->setFormContent($popupContent);
601
+
602
+ return $popupObj;
603
+ }
604
+
605
+ public function getSubPopupObj()
606
+ {
607
+ $options = $this->getOptions();
608
+ $subPopups = parent::getSubPopupObj();
609
+ if ($options['sgpb-subs-success-behavior'] == 'openPopup') {
610
+ $subPopupId = (!empty($options['sgpb-subs-success-popup'])) ? (int)$options['sgpb-subs-success-popup']: null;
611
+
612
+ if (empty($subPopupId)) {
613
+ return $subPopups;
614
+ }
615
+
616
+ // for old popups
617
+ if (function_exists('sgpb\sgpGetCorrectPopupId')) {
618
+ $subPopupId = sgpGetCorrectPopupId($subPopupId);
619
+ }
620
+
621
+ $subPopupObj = SGPopup::find($subPopupId);
622
+ if (!empty($subPopupObj) && ($subPopupObj instanceof SGPopup)) {
623
+ // We remove all events because this popup will be open after successful subscription
624
+ $subPopupObj->setEvents(array('param' => 'click', 'value' => ''));
625
+ $subPopups[] = $subPopupObj;
626
+ }
627
+ }
628
+
629
+ return $subPopups;
630
+ }
631
+
632
+ public function getExtraRenderOptions()
633
+ {
634
+ return array();
635
+ }
636
+
637
+ public static function getSubscribersCount()
638
+ {
639
+ global $wpdb;
640
+ $count = $wpdb->get_var('SELECT COUNT(*) FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME);
641
+
642
+ return (int)$count;
643
+ }
644
+
645
+ public static function getAllSubscriptions()
646
+ {
647
+ $popupArgs = array();
648
+ $popupArgs['type'][] = 'subscription';
649
+
650
+ $popupArgs = apply_filters('sgpbGetAllSubscriptionArgs', $popupArgs);
651
+ $allPopups = SGPopup::getAllPopups($popupArgs);
652
+
653
+ return $allPopups;
654
+ }
655
+
656
+ public static function getAllSubscriptionForms()
657
+ {
658
+ $subsFormList = array();
659
+ $subscriptionForms = self::getAllSubscriptions();
660
+
661
+ foreach ($subscriptionForms as $subscriptionForm) {
662
+ $title = $subscriptionForm->getTitle();
663
+ $id = $subscriptionForm->getId();
664
+ if ($title == '') {
665
+ $title = '('.__('no title', SG_POPUP_TEXT_DOMAIN).')';
666
+ }
667
+ $subsFormList[$id] = $title;
668
+ }
669
+
670
+ return $subsFormList;
671
+ }
672
+
673
+ public static function getAllSubscribersDate()
674
+ {
675
+ $subsDateList = array();
676
+ global $wpdb;
677
+ $subscriptionPopups = $wpdb->get_results('SELECT id, cDate FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME, ARRAY_A);
678
+
679
+ foreach ($subscriptionPopups as $subscriptionForm) {
680
+ $id = $subscriptionForm['id'];
681
+ $date = substr($subscriptionForm['cDate'], 0, 7);
682
+ $subsDateList[$id]['date-value'] = $date;
683
+ $subsDateList[$id]['date-title'] = AdminHelper::getFormattedDate($date);
684
+ }
685
+
686
+ return $subsDateList;
687
+ }
688
+ }
com/config/config.php CHANGED
@@ -1,176 +1,176 @@
1
- <?php
2
-
3
- class SgpbPopupConfig
4
- {
5
- public static function addDefine($name, $value)
6
- {
7
- if (!defined($name)) {
8
- define($name, $value);
9
- }
10
- }
11
-
12
- public static function init()
13
- {
14
- self::addDefine('SGPB_POPUP_FREE_MIN_VERSION', '3.0.2');
15
- self::addDefine('SGPB_POPUP_PRO_MIN_VERSION', '4.0');
16
-
17
- self::addDefine('SGPB_POPUP_PKG_FREE', 1);
18
- self::addDefine('SGPB_POPUP_PKG_SILVER', 2);
19
- self::addDefine('SGPB_POPUP_PKG_GOLD', 3);
20
- self::addDefine('SGPB_POPUP_PKG_PLATINUM', 4);
21
- self::addDefine('SG_POPUP_PRO_URL', 'https://popup-builder.com/pricing/');
22
- self::addDefine('SG_POPUP_BUNDLE_URL', 'https://popup-builder.com/pricing/');
23
- self::addDefine('SG_POPUP_EXTENSIONS_URL', 'https://popup-builder.com/extensions/');
24
- self::addDefine('SG_POPUP_SUPPORT_URL', 'https://wordpress.org/support/plugin/popup-builder');
25
- self::addDefine('SG_POPUP_TICKET_URL', 'https://help.popup-builder.com');
26
- self::addDefine('SG_POPUP_RATE_US_URL', 'https://wordpress.org/support/plugin/popup-builder/reviews/');
27
- self::addDefine('SG_POPUP_IFRAME_URL', 'https://popup-builder.com/product/iframe-popup//');
28
- self::addDefine('SG_POPUP_SCROLL_URL', 'https://popup-builder.com/product/scroll-triggered-popup/');
29
- self::addDefine('SG_POPUP_AD_BLOCK_URL', 'https://popup-builder.com/product/ad-block/');
30
- self::addDefine('SG_POPUP_ANALYTICS_URL', 'https://popup-builder.com/product/analytics/');
31
- self::addDefine('SG_POPUP_EXIT_INTENT_URL', 'https://popup-builder.com/product/exit-intent/');
32
- self::addDefine('SG_POPUP_MAILCHIMP_URL', 'https://popup-builder.com/product/mailchimp-popup/');
33
- self::addDefine('SG_POPUP_AWEBER_URL', 'https://popup-builder.com/product/aweber-popup/');
34
- self::addDefine('SG_POPUP_WOOCOMMERCE_URL', 'https://popup-builder.com/product/woocommerce/');
35
- self::addDefine('SG_POPUP_RECENT_SALES_URL', 'https://popup-builder.com/product/recent-sales/');
36
- self::addDefine('SG_POPUP_VIDEO_URL', 'https://popup-builder.com/product/video-popup/');
37
- self::addDefine('SG_POPUP_SOCIAL_URL', 'https://popup-builder.com/product/social-popup/');
38
- self::addDefine('SG_POPUP_COUNTDOWN_URL', 'https://popup-builder.com/product/countdown-popup/');
39
- self::addDefine('SG_POPUP_RESTRICTION_URL', 'https://popup-builder.com/product/yes-no-button-popup/');
40
- self::addDefine('SG_POPUP_CONTACT_FORM_URL', 'https://popup-builder.com/product/contact-form-popup/');
41
- self::addDefine('SG_POPUP_INACTIVITY_URL', 'https://popup-builder.com/product/inactivity-event/');
42
- self::addDefine('SG_POPUP_SCHEDULING_URL', 'https://popup-builder.com/product/scheduling/');
43
- self::addDefine('SG_POPUP_GEO_TARGETING_URL', 'https://popup-builder.com/product/geo-targeting/');
44
- self::addDefine('SG_POPUP_RANDOM_URL', 'https://popup-builder.com/product/random-popup/');
45
- self::addDefine('SG_POPUP_ADVANCED_CLOSING_URL', 'https://popup-builder.com/product/advanced-closing/');
46
- self::addDefine('SG_POPUP_ADVANCED_TARGETING_URL', 'https://popup-builder.com/product/advanced-targeting/');
47
- self::addDefine('SG_POPUP_ALL_EXTENSIONS_URL', 'https://popup-builder.com/extensions/');
48
- self::addDefine('SG_POPUP_LOGIN_URL', 'https://popup-builder.com/product/login-popup/');
49
- self::addDefine('SG_POPUP_REGISTRATION_URL', 'https://popup-builder.com/product/registration-popup/');
50
- self::addDefine('SG_POPUP_SUBSCRIPTION_PLUS_URL', 'https://popup-builder.com/product/subscription-plus-popup/');
51
- self::addDefine('SG_POPUP_PUSH_NOTIFICATION_URL', 'https://popup-builder.com/product/web-push-notification-popup/');
52
- self::addDefine('SGPB_EDD_PLUGIN_URL', 'https://popup-builder.com/product/easy-digital-download-edd-popup/');
53
- self::addDefine('SGPB_PDF_PLUGIN_URL', 'https://popup-builder.com/product/pdf-popup/');
54
- self::addDefine('SGPB_GAMIFICATION_PLUGIN_URL', 'https://popup-builder.com/product/gamification-popup-pick-a-gift-popup/');
55
- self::addDefine('SGPB_AGE_VERIFICATION_PLUGIN_URL', 'https://popup-builder.com/product/age-restriction-popup/');
56
- self::addDefine('SG_POPUP_ADMIN_URL', admin_url());
57
- self::addDefine('SG_POPUP_BUILDER_URL', plugins_url().'/'.SG_POPUP_FOLDER_NAME.'/');
58
- self::addDefine('SG_POPUP_PLUGIN_PATH', WP_PLUGIN_DIR.'/');
59
- self::addDefine('SG_POPUP_BUILDER_PATH', SG_POPUP_PLUGIN_PATH.SG_POPUP_FOLDER_NAME.'/');
60
- self::addDefine('SG_POPUP_COM_PATH', SG_POPUP_BUILDER_PATH.'com/');
61
- self::addDefine('SG_POPUP_CONFIG_PATH', SG_POPUP_COM_PATH.'config/');
62
- self::addDefine('SG_POPUP_PUBLIC_PATH', SG_POPUP_BUILDER_PATH.'public/');
63
- self::addDefine('SG_POPUP_CLASSES_PATH', SG_POPUP_COM_PATH.'classes/');
64
- self::addDefine('SG_POPUP_COMPONENTS_PATH', SG_POPUP_CLASSES_PATH.'components/');
65
- self::addDefine('SG_POPUP_DATA_TABLES_PATH', SG_POPUP_CLASSES_PATH.'dataTable/');
66
- self::addDefine('SG_POPUP_CLASSES_POPUPS_PATH', SG_POPUP_CLASSES_PATH.'popups/');
67
- self::addDefine('SG_POPUP_EXTENSION_PATH', SG_POPUP_CLASSES_PATH.'extension/');
68
- self::addDefine('SGPB_POPUP_DETECTION_PATH', SG_POPUP_CLASSES_PATH.'_detection/');
69
- self::addDefine('SG_POPUP_LIBS_PATH', SG_POPUP_COM_PATH.'libs/');
70
- self::addDefine('SG_POPUP_HELPERS_PATH', SG_POPUP_COM_PATH.'helpers/');
71
- self::addDefine('SG_POPUP_JS_PATH', SG_POPUP_PUBLIC_PATH.'js/');
72
- self::addDefine('SG_POPUP_CSS_PATH', SG_POPUP_PUBLIC_PATH.'css/');
73
- self::addDefine('SG_POPUP_VIEWS_PATH', SG_POPUP_PUBLIC_PATH.'views/');
74
- self::addDefine('SG_POPUP_TYPE_OPTIONS_PATH', SG_POPUP_VIEWS_PATH.'options/');
75
- self::addDefine('SG_POPUP_TYPE_MAIN_PATH', SG_POPUP_VIEWS_PATH.'main/');
76
- self::addDefine('SG_POPUP_PUBLIC_URL', SG_POPUP_BUILDER_URL.'public/');
77
- self::addDefine('SG_POPUP_JS_URL', SG_POPUP_PUBLIC_URL.'js/');
78
- self::addDefine('SG_POPUP_CSS_URL', SG_POPUP_PUBLIC_URL.'css/');
79
- self::addDefine('SG_POPUP_IMG_URL', SG_POPUP_PUBLIC_URL.'img/');
80
- self::addDefine('SG_POPUP_SOUND_URL', SG_POPUP_PUBLIC_URL.'sound/');
81
- self::addDefine('SG_POPUP_VIEWS_URL', SG_POPUP_PUBLIC_URL.'views/');
82
- self::addDefine('SG_POPUP_EMAIL_TEMPLATES_URL', SG_POPUP_VIEWS_URL.'emailTemplates/');
83
- self::addDefine('SG_POPUP_DEFAULT_TIME_ZONE', 'UTC');
84
- self::addDefine('SG_POPUP_CATEGORY_TAXONOMY', 'popup-categories');
85
- self::addDefine('SG_POPUP_MINIMUM_PHP_VERSION', '5.3.3');
86
- self::addDefine('SG_POPUP_POST_TYPE', 'popupbuilder');
87
- self::addDefine('SG_POPUP_NEWSLETTER_PAGE', 'sgpbNewsletter');
88
- self::addDefine('SG_POPUP_SETTINGS_PAGE', 'sgpbSettings');
89
- self::addDefine('SG_POPUP_SUBSCRIBERS_PAGE', 'sgpbSubscribers');
90
- self::addDefine('SG_POPUP_SUPPORT_PAGE', 'sgpbSupport');
91
- self::addDefine('SGPB_POPUP_LICENSE', 'license');
92
- self::addDefine('SG_POPUP_EXTEND_PAGE', 'extend');
93
- self::addDefine('SGPB_FILTER_REPEAT_INTERVAL', 50);
94
- self::addDefine('SG_POPUP_TEXT_DOMAIN', 'popup-builder');
95
- self::addDefine('SG_POPUP_STORE_URL', 'https://popup-builder.com/');
96
- self::addDefine('SG_POPUP_AUTHOR', 'Sygnoos');
97
- self::addDefine('SG_POPUP_KEY', 'POPUP_BUILDER');
98
- self::addDefine('SG_AJAX_NONCE', 'popupBuilderAjaxNonce');
99
- self::addDefine('SG_CONDITION_FIRST_RULE', 0);
100
- self::addDefine('SGPB_AJAX_STATUS_FALSE', 0);
101
- self::addDefine('SGPB_AJAX_STATUS_TRUE', 1);
102
- self::addDefine('SGPB_SUBSCRIBERS_TABLE_NAME', 'sgpb_subscribers');
103
- self::addDefine('SGPB_POSTS_TABLE_NAME', 'posts');
104
- self::addDefine('SGPB_APP_POPUP_TABLE_LIMIT', 10);
105
- self::addDefine('SGPB_SUBSCRIBERS_ERROR_TABLE_NAME', 'sgpb_subscription_error_log');
106
- self::addDefine('SGPB_CRON_REPEAT_INTERVAL', 1);
107
- self::addDefine('SGPB_NOTIFICATIONS_CRON_REPEAT_INTERVAL', 12); /* Hours */
108
- self::addDefine('SGPB_METABOX_BANNER_CRON_TEXT_URL', 'https://popup-builder.com/sgpb-banner.php?banner=sidebar1');
109
- self::addDefine('SGPB_FACEBOOK_APP_ID', 540547196484707);
110
- self::addDefine('SGPB_POPUP_TYPE_RESTRICTION', 'ageRestriction');
111
- self::addDefine('SGPB_POPUP_DEFAULT_SOUND', 'popupOpenSound.wav');
112
- self::addDefine('SGPB_POPUP_EXTENSIONS_PATH', SG_POPUP_COM_PATH.'extensions/');
113
- self::addDefine('SG_POPUP_BUILDER_NOTIFICATIONS_URL', 'https://popup-builder.com/notifications.json');
114
- self::addDefine('SGPB_POPUP_ADVANCED_CLOSING_PLUGIN_KEY', 'popupbuilder-advanced-closing/PopupBuilderAdvancedClosing.php');
115
- self::addDefine('SGPB_DONT_SHOW_POPUP_EXPIRY', 365);
116
- self::addDefine('SGPB_CONTACT_FORM_7_BEHAVIOR_KEY', 'contact-form-7');
117
- self::addDefine('SGPB_CSS_CLASS_ACTIONS_KEY', 'setByCssClass');
118
- self::addDefine('SGPB_CLICK_ACTION_KEY', 'setByClick');
119
- self::addDefine('SGPB_HOVER_ACTION_KEY', 'setByHover');
120
- self::addDefine('SG_COUNTDOWN_COUNTER_SECONDS_SHOW', 1);
121
- self::addDefine('SG_COUNTDOWN_COUNTER_SECONDS_HIDE', 2);
122
- self::addDefine('SGPB_POPUP_SCHEDULING_EXTENSION_KEY', 'popupbuilder-scheduling/PopupBuilderScheduling.php');
123
- self::addDefine('SGPB_POPUP_GEO_TARGETING_EXTENSION_KEY', 'popupbuilder-geo-targeting/PopupBuilderGeoTargeting.php');
124
- self::addDefine('SGPB_POPUP_ADVANCED_TARGETING_EXTENSION_KEY', 'popupbuilder-advanced-targeting/PopupBuilderAdvancedTargeting.php');
125
- self::addDefine('SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY', 'popupbuilder-subscription-plus/PopupBuilderSubscriptionPlus.php');
126
- self::addDefine('SGPB_ASK_REVIEW_POPUP_COUNT', 80);
127
- self::addDefine('SGPB_REVIEW_POPUP_PERIOD', 30);
128
- self::addDefine('SGPB_POPUP_EXPORT_FILE_NAME', 'PopupBuilderPopups.xml');
129
- self::addDefine('SG_POPUP_AUTORESPONDER_POST_TYPE', 'sgpbautoresponder');
130
- self::addDefine('SG_POPUP_TEMPLATE_POST_TYPE', 'sgpbtemplate');
131
- self::addDefine('SGPB_INACTIVE_EXTENSIONS', 'inactivePBExtensions');
132
- self::addDefine('SGPB_POPUP_LICENSE_SCREEN', SG_POPUP_POST_TYPE.'_page_'.SGPB_POPUP_LICENSE);
133
- self::addDefine('SGPB_SUBSCRIPTION_ERROR_MESSAGE', __('There was an error while trying to send your request. Please try again', SG_POPUP_TEXT_DOMAIN).'.');
134
- self::addDefine('SGPB_SUBSCRIPTION_VALIDATION_MESSAGE', __('This field is required', SG_POPUP_TEXT_DOMAIN).'.');
135
- self::addDefine('SGPB_SUBSCRIPTION_EMAIL_MESSAGE', __('Please enter a valid email address', SG_POPUP_TEXT_DOMAIN).'.');
136
- self::addDefine('SGPB_TRANSIENT_TIMEOUT_HOUR', 60 * MINUTE_IN_SECONDS);
137
- self::addDefine('SGPB_TRANSIENT_TIMEOUT_DAY', 24 * HOUR_IN_SECONDS);
138
- self::addDefine('SGPB_TRANSIENT_TIMEOUT_WEEK', 7 * DAY_IN_SECONDS);
139
- self::addDefine('SGPB_TRANSIENT_POPUPS_LOAD', 'sgpbLoadPopups');
140
- self::addDefine('SGPB_TRANSIENT_POPUPS_TERMS', 'sgpbGetPopupsByTermSlug');
141
- self::addDefine('SGPB_TRANSIENT_POPUPS_ALL_CATEGORIES', 'sgpbGetPostsAllCategories');
142
- self::addDefine('SGPB_REGISTERED_PLUGINS_PATHS_MODIFIED', 'sgpbModifiedRegisteredPluginsPaths2');
143
- self::addDefine('SGPB_POPUP_BUILDER_REGISTERED_PLUGINS', 'sgpbPopupBuilderRegisteredPlugins');
144
- self::addDefine('SGPB_RATE_US_NOTIFICATION_ID', 'sgpbMainRateUsNotification');
145
- self::addDefine('SGPB_SUPPORT_BANNER_NOTIFICATION_ID', 'sgpbMainSupportBanner');
146
- self::popupTypesInit();
147
- }
148
-
149
- public static function popupTypesInit()
150
- {
151
- global $SGPB_POPUP_TYPES;
152
-
153
- $SGPB_POPUP_TYPES['typeName'] = apply_filters('sgpbAddPopupType', array(
154
- 'image' => SGPB_POPUP_PKG_FREE,
155
- 'html' => SGPB_POPUP_PKG_FREE,
156
- 'fblike' => SGPB_POPUP_PKG_FREE,
157
- 'subscription' => SGPB_POPUP_PKG_FREE
158
- ));
159
-
160
- $SGPB_POPUP_TYPES['typePath'] = apply_filters('sgpbAddPopupTypePath', array(
161
- 'image' => SG_POPUP_CLASSES_POPUPS_PATH,
162
- 'html' => SG_POPUP_CLASSES_POPUPS_PATH,
163
- 'fblike' => SG_POPUP_CLASSES_POPUPS_PATH,
164
- 'subscription' => SG_POPUP_CLASSES_POPUPS_PATH
165
- ));
166
-
167
- $SGPB_POPUP_TYPES['typeLabels'] = apply_filters('sgpbAddPopupTypeLabels', array(
168
- 'image' => __('Image', SG_POPUP_TEXT_DOMAIN),
169
- 'html' => __('HTML', SG_POPUP_TEXT_DOMAIN),
170
- 'fblike' => __('Facebook', SG_POPUP_TEXT_DOMAIN),
171
- 'subscription' => __('Subscription', SG_POPUP_TEXT_DOMAIN)
172
- ));
173
- }
174
- }
175
-
176
- SgpbPopupConfig::init();
1
+ <?php
2
+
3
+ class SgpbPopupConfig
4
+ {
5
+ public static function addDefine($name, $value)
6
+ {
7
+ if (!defined($name)) {
8
+ define($name, $value);
9
+ }
10
+ }
11
+
12
+ public static function init()
13
+ {
14
+ self::addDefine('SGPB_POPUP_FREE_MIN_VERSION', '3.0.2');
15
+ self::addDefine('SGPB_POPUP_PRO_MIN_VERSION', '4.0');
16
+
17
+ self::addDefine('SGPB_POPUP_PKG_FREE', 1);
18
+ self::addDefine('SGPB_POPUP_PKG_SILVER', 2);
19
+ self::addDefine('SGPB_POPUP_PKG_GOLD', 3);
20
+ self::addDefine('SGPB_POPUP_PKG_PLATINUM', 4);
21
+ self::addDefine('SG_POPUP_PRO_URL', 'https://popup-builder.com/pricing/');
22
+ self::addDefine('SG_POPUP_BUNDLE_URL', 'https://popup-builder.com/pricing/');
23
+ self::addDefine('SG_POPUP_EXTENSIONS_URL', 'https://popup-builder.com/extensions/');
24
+ self::addDefine('SG_POPUP_SUPPORT_URL', 'https://wordpress.org/support/plugin/popup-builder');
25
+ self::addDefine('SG_POPUP_TICKET_URL', 'https://help.popup-builder.com');
26
+ self::addDefine('SG_POPUP_RATE_US_URL', 'https://wordpress.org/support/plugin/popup-builder/reviews/');
27
+ self::addDefine('SG_POPUP_IFRAME_URL', 'https://popup-builder.com/product/iframe-popup//');
28
+ self::addDefine('SG_POPUP_SCROLL_URL', 'https://popup-builder.com/product/scroll-triggered-popup/');
29
+ self::addDefine('SG_POPUP_AD_BLOCK_URL', 'https://popup-builder.com/product/ad-block/');
30
+ self::addDefine('SG_POPUP_ANALYTICS_URL', 'https://popup-builder.com/product/analytics/');
31
+ self::addDefine('SG_POPUP_EXIT_INTENT_URL', 'https://popup-builder.com/product/exit-intent/');
32
+ self::addDefine('SG_POPUP_MAILCHIMP_URL', 'https://popup-builder.com/product/mailchimp-popup/');
33
+ self::addDefine('SG_POPUP_AWEBER_URL', 'https://popup-builder.com/product/aweber-popup/');
34
+ self::addDefine('SG_POPUP_WOOCOMMERCE_URL', 'https://popup-builder.com/product/woocommerce/');
35
+ self::addDefine('SG_POPUP_RECENT_SALES_URL', 'https://popup-builder.com/product/recent-sales/');
36
+ self::addDefine('SG_POPUP_VIDEO_URL', 'https://popup-builder.com/product/video-popup/');
37
+ self::addDefine('SG_POPUP_SOCIAL_URL', 'https://popup-builder.com/product/social-popup/');
38
+ self::addDefine('SG_POPUP_COUNTDOWN_URL', 'https://popup-builder.com/product/countdown-popup/');
39
+ self::addDefine('SG_POPUP_RESTRICTION_URL', 'https://popup-builder.com/product/yes-no-button-popup/');
40
+ self::addDefine('SG_POPUP_CONTACT_FORM_URL', 'https://popup-builder.com/product/contact-form-popup/');
41
+ self::addDefine('SG_POPUP_INACTIVITY_URL', 'https://popup-builder.com/product/inactivity-event/');
42
+ self::addDefine('SG_POPUP_SCHEDULING_URL', 'https://popup-builder.com/product/scheduling/');
43
+ self::addDefine('SG_POPUP_GEO_TARGETING_URL', 'https://popup-builder.com/product/geo-targeting/');
44
+ self::addDefine('SG_POPUP_RANDOM_URL', 'https://popup-builder.com/product/random-popup/');
45
+ self::addDefine('SG_POPUP_ADVANCED_CLOSING_URL', 'https://popup-builder.com/product/advanced-closing/');
46
+ self::addDefine('SG_POPUP_ADVANCED_TARGETING_URL', 'https://popup-builder.com/product/advanced-targeting/');
47
+ self::addDefine('SG_POPUP_ALL_EXTENSIONS_URL', 'https://popup-builder.com/extensions/');
48
+ self::addDefine('SG_POPUP_LOGIN_URL', 'https://popup-builder.com/product/login-popup/');
49
+ self::addDefine('SG_POPUP_REGISTRATION_URL', 'https://popup-builder.com/product/registration-popup/');
50
+ self::addDefine('SG_POPUP_SUBSCRIPTION_PLUS_URL', 'https://popup-builder.com/product/subscription-plus-popup/');
51
+ self::addDefine('SG_POPUP_PUSH_NOTIFICATION_URL', 'https://popup-builder.com/product/web-push-notification-popup/');
52
+ self::addDefine('SGPB_EDD_PLUGIN_URL', 'https://popup-builder.com/product/easy-digital-download-edd-popup/');
53
+ self::addDefine('SGPB_PDF_PLUGIN_URL', 'https://popup-builder.com/product/pdf-popup/');
54
+ self::addDefine('SGPB_GAMIFICATION_PLUGIN_URL', 'https://popup-builder.com/product/gamification-popup-pick-a-gift-popup/');
55
+ self::addDefine('SGPB_AGE_VERIFICATION_PLUGIN_URL', 'https://popup-builder.com/product/age-restriction-popup/');
56
+ self::addDefine('SG_POPUP_ADMIN_URL', admin_url());
57
+ self::addDefine('SG_POPUP_BUILDER_URL', plugins_url().'/'.SG_POPUP_FOLDER_NAME.'/');
58
+ self::addDefine('SG_POPUP_PLUGIN_PATH', WP_PLUGIN_DIR.'/');
59
+ self::addDefine('SG_POPUP_BUILDER_PATH', SG_POPUP_PLUGIN_PATH.SG_POPUP_FOLDER_NAME.'/');
60
+ self::addDefine('SG_POPUP_COM_PATH', SG_POPUP_BUILDER_PATH.'com/');
61
+ self::addDefine('SG_POPUP_CONFIG_PATH', SG_POPUP_COM_PATH.'config/');
62
+ self::addDefine('SG_POPUP_PUBLIC_PATH', SG_POPUP_BUILDER_PATH.'public/');
63
+ self::addDefine('SG_POPUP_CLASSES_PATH', SG_POPUP_COM_PATH.'classes/');
64
+ self::addDefine('SG_POPUP_COMPONENTS_PATH', SG_POPUP_CLASSES_PATH.'components/');
65
+ self::addDefine('SG_POPUP_DATA_TABLES_PATH', SG_POPUP_CLASSES_PATH.'dataTable/');
66
+ self::addDefine('SG_POPUP_CLASSES_POPUPS_PATH', SG_POPUP_CLASSES_PATH.'popups/');
67
+ self::addDefine('SG_POPUP_EXTENSION_PATH', SG_POPUP_CLASSES_PATH.'extension/');
68
+ self::addDefine('SGPB_POPUP_DETECTION_PATH', SG_POPUP_CLASSES_PATH.'_detection/');
69
+ self::addDefine('SG_POPUP_LIBS_PATH', SG_POPUP_COM_PATH.'libs/');
70
+ self::addDefine('SG_POPUP_HELPERS_PATH', SG_POPUP_COM_PATH.'helpers/');
71
+ self::addDefine('SG_POPUP_JS_PATH', SG_POPUP_PUBLIC_PATH.'js/');
72
+ self::addDefine('SG_POPUP_CSS_PATH', SG_POPUP_PUBLIC_PATH.'css/');
73
+ self::addDefine('SG_POPUP_VIEWS_PATH', SG_POPUP_PUBLIC_PATH.'views/');
74
+ self::addDefine('SG_POPUP_TYPE_OPTIONS_PATH', SG_POPUP_VIEWS_PATH.'options/');
75
+ self::addDefine('SG_POPUP_TYPE_MAIN_PATH', SG_POPUP_VIEWS_PATH.'main/');
76
+ self::addDefine('SG_POPUP_PUBLIC_URL', SG_POPUP_BUILDER_URL.'public/');
77
+ self::addDefine('SG_POPUP_JS_URL', SG_POPUP_PUBLIC_URL.'js/');
78
+ self::addDefine('SG_POPUP_CSS_URL', SG_POPUP_PUBLIC_URL.'css/');
79
+ self::addDefine('SG_POPUP_IMG_URL', SG_POPUP_PUBLIC_URL.'img/');
80
+ self::addDefine('SG_POPUP_SOUND_URL', SG_POPUP_PUBLIC_URL.'sound/');
81
+ self::addDefine('SG_POPUP_VIEWS_URL', SG_POPUP_PUBLIC_URL.'views/');
82
+ self::addDefine('SG_POPUP_EMAIL_TEMPLATES_URL', SG_POPUP_VIEWS_URL.'emailTemplates/');
83
+ self::addDefine('SG_POPUP_DEFAULT_TIME_ZONE', 'UTC');
84
+ self::addDefine('SG_POPUP_CATEGORY_TAXONOMY', 'popup-categories');
85
+ self::addDefine('SG_POPUP_MINIMUM_PHP_VERSION', '5.3.3');
86
+ self::addDefine('SG_POPUP_POST_TYPE', 'popupbuilder');
87
+ self::addDefine('SG_POPUP_NEWSLETTER_PAGE', 'sgpbNewsletter');
88
+ self::addDefine('SG_POPUP_SETTINGS_PAGE', 'sgpbSettings');
89
+ self::addDefine('SG_POPUP_SUBSCRIBERS_PAGE', 'sgpbSubscribers');
90
+ self::addDefine('SG_POPUP_SUPPORT_PAGE', 'sgpbSupport');
91
+ self::addDefine('SGPB_POPUP_LICENSE', 'license');
92
+ self::addDefine('SG_POPUP_EXTEND_PAGE', 'extend');
93
+ self::addDefine('SGPB_FILTER_REPEAT_INTERVAL', 50);
94
+ self::addDefine('SG_POPUP_TEXT_DOMAIN', 'popup-builder');
95
+ self::addDefine('SG_POPUP_STORE_URL', 'https://popup-builder.com/');
96
+ self::addDefine('SG_POPUP_AUTHOR', 'Sygnoos');
97
+ self::addDefine('SG_POPUP_KEY', 'POPUP_BUILDER');
98
+ self::addDefine('SG_AJAX_NONCE', 'popupBuilderAjaxNonce');
99
+ self::addDefine('SG_CONDITION_FIRST_RULE', 0);
100
+ self::addDefine('SGPB_AJAX_STATUS_FALSE', 0);
101
+ self::addDefine('SGPB_AJAX_STATUS_TRUE', 1);
102
+ self::addDefine('SGPB_SUBSCRIBERS_TABLE_NAME', 'sgpb_subscribers');
103
+ self::addDefine('SGPB_POSTS_TABLE_NAME', 'posts');
104
+ self::addDefine('SGPB_APP_POPUP_TABLE_LIMIT', 10);
105
+ self::addDefine('SGPB_SUBSCRIBERS_ERROR_TABLE_NAME', 'sgpb_subscription_error_log');
106
+ self::addDefine('SGPB_CRON_REPEAT_INTERVAL', 1);
107
+ self::addDefine('SGPB_NOTIFICATIONS_CRON_REPEAT_INTERVAL', 12); /* Hours */
108
+ self::addDefine('SGPB_METABOX_BANNER_CRON_TEXT_URL', 'https://popup-builder.com/sgpb-banner.php?banner=sidebar1');
109
+ self::addDefine('SGPB_FACEBOOK_APP_ID', 540547196484707);
110
+ self::addDefine('SGPB_POPUP_TYPE_RESTRICTION', 'ageRestriction');
111
+ self::addDefine('SGPB_POPUP_DEFAULT_SOUND', 'popupOpenSound.wav');
112
+ self::addDefine('SGPB_POPUP_EXTENSIONS_PATH', SG_POPUP_COM_PATH.'extensions/');
113
+ self::addDefine('SG_POPUP_BUILDER_NOTIFICATIONS_URL', 'https://popup-builder.com/notifications.json');
114
+ self::addDefine('SGPB_POPUP_ADVANCED_CLOSING_PLUGIN_KEY', 'popupbuilder-advanced-closing/PopupBuilderAdvancedClosing.php');
115
+ self::addDefine('SGPB_DONT_SHOW_POPUP_EXPIRY', 365);
116
+ self::addDefine('SGPB_CONTACT_FORM_7_BEHAVIOR_KEY', 'contact-form-7');
117
+ self::addDefine('SGPB_CSS_CLASS_ACTIONS_KEY', 'setByCssClass');
118
+ self::addDefine('SGPB_CLICK_ACTION_KEY', 'setByClick');
119
+ self::addDefine('SGPB_HOVER_ACTION_KEY', 'setByHover');
120
+ self::addDefine('SG_COUNTDOWN_COUNTER_SECONDS_SHOW', 1);
121
+ self::addDefine('SG_COUNTDOWN_COUNTER_SECONDS_HIDE', 2);
122
+ self::addDefine('SGPB_POPUP_SCHEDULING_EXTENSION_KEY', 'popupbuilder-scheduling/PopupBuilderScheduling.php');
123
+ self::addDefine('SGPB_POPUP_GEO_TARGETING_EXTENSION_KEY', 'popupbuilder-geo-targeting/PopupBuilderGeoTargeting.php');
124
+ self::addDefine('SGPB_POPUP_ADVANCED_TARGETING_EXTENSION_KEY', 'popupbuilder-advanced-targeting/PopupBuilderAdvancedTargeting.php');
125
+ self::addDefine('SGPB_POPUP_SUBSCRIPTION_PLUS_EXTENSION_KEY', 'popupbuilder-subscription-plus/PopupBuilderSubscriptionPlus.php');
126
+ self::addDefine('SGPB_ASK_REVIEW_POPUP_COUNT', 80);
127
+ self::addDefine('SGPB_REVIEW_POPUP_PERIOD', 30);
128
+ self::addDefine('SGPB_POPUP_EXPORT_FILE_NAME', 'PopupBuilderPopups.xml');
129
+ self::addDefine('SG_POPUP_AUTORESPONDER_POST_TYPE', 'sgpbautoresponder');
130
+ self::addDefine('SG_POPUP_TEMPLATE_POST_TYPE', 'sgpbtemplate');
131
+ self::addDefine('SGPB_INACTIVE_EXTENSIONS', 'inactivePBExtensions');
132
+ self::addDefine('SGPB_POPUP_LICENSE_SCREEN', SG_POPUP_POST_TYPE.'_page_'.SGPB_POPUP_LICENSE);
133
+ self::addDefine('SGPB_SUBSCRIPTION_ERROR_MESSAGE', __('There was an error while trying to send your request. Please try again', SG_POPUP_TEXT_DOMAIN).'.');
134
+ self::addDefine('SGPB_SUBSCRIPTION_VALIDATION_MESSAGE', __('This field is required', SG_POPUP_TEXT_DOMAIN).'.');
135
+ self::addDefine('SGPB_SUBSCRIPTION_EMAIL_MESSAGE', __('Please enter a valid email address', SG_POPUP_TEXT_DOMAIN).'.');
136
+ self::addDefine('SGPB_TRANSIENT_TIMEOUT_HOUR', 60 * MINUTE_IN_SECONDS);
137
+ self::addDefine('SGPB_TRANSIENT_TIMEOUT_DAY', 24 * HOUR_IN_SECONDS);
138
+ self::addDefine('SGPB_TRANSIENT_TIMEOUT_WEEK', 7 * DAY_IN_SECONDS);
139
+ self::addDefine('SGPB_TRANSIENT_POPUPS_LOAD', 'sgpbLoadPopups');
140
+ self::addDefine('SGPB_TRANSIENT_POPUPS_TERMS', 'sgpbGetPopupsByTermSlug');
141
+ self::addDefine('SGPB_TRANSIENT_POPUPS_ALL_CATEGORIES', 'sgpbGetPostsAllCategories');
142
+ self::addDefine('SGPB_REGISTERED_PLUGINS_PATHS_MODIFIED', 'sgpbModifiedRegisteredPluginsPaths2');
143
+ self::addDefine('SGPB_POPUP_BUILDER_REGISTERED_PLUGINS', 'sgpbPopupBuilderRegisteredPlugins');
144
+ self::addDefine('SGPB_RATE_US_NOTIFICATION_ID', 'sgpbMainRateUsNotification');
145
+ self::addDefine('SGPB_SUPPORT_BANNER_NOTIFICATION_ID', 'sgpbMainSupportBanner');
146
+ self::popupTypesInit();
147
+ }
148
+
149
+ public static function popupTypesInit()
150
+ {
151
+ global $SGPB_POPUP_TYPES;
152
+
153
+ $SGPB_POPUP_TYPES['typeName'] = apply_filters('sgpbAddPopupType', array(
154
+ 'image' => SGPB_POPUP_PKG_FREE,
155
+ 'html' => SGPB_POPUP_PKG_FREE,
156
+ 'fblike' => SGPB_POPUP_PKG_FREE,
157
+ 'subscription' => SGPB_POPUP_PKG_FREE
158
+ ));
159
+
160
+ $SGPB_POPUP_TYPES['typePath'] = apply_filters('sgpbAddPopupTypePath', array(
161
+ 'image' => SG_POPUP_CLASSES_POPUPS_PATH,
162
+ 'html' => SG_POPUP_CLASSES_POPUPS_PATH,
163
+ 'fblike' => SG_POPUP_CLASSES_POPUPS_PATH,
164
+ 'subscription' => SG_POPUP_CLASSES_POPUPS_PATH
165
+ ));
166
+
167
+ $SGPB_POPUP_TYPES['typeLabels'] = apply_filters('sgpbAddPopupTypeLabels', array(
168
+ 'image' => __('Image', SG_POPUP_TEXT_DOMAIN),
169
+ 'html' => __('HTML', SG_POPUP_TEXT_DOMAIN),
170
+ 'fblike' => __('Facebook', SG_POPUP_TEXT_DOMAIN),
171
+ 'subscription' => __('Subscription', SG_POPUP_TEXT_DOMAIN)
172
+ ));
173
+ }
174
+ }
175
+
176
+ SgpbPopupConfig::init();
com/config/configPackage.php CHANGED
@@ -1,8 +1,8 @@
1
- <?php
2
- if (!defined('ABSPATH')) {
3
- exit();
4
- }
5
-
6
- define('SG_POPUP_VERSION', '4.0.6');
7
- define('SGPB_POPUP_PKG', SGPB_POPUP_PKG_FREE);
8
- define('POPUP_BUILDER_BASENAME', 'popupbuilder-platinum/popup-builder.php');
1
+ <?php
2
+ if (!defined('ABSPATH')) {
3
+ exit();
4
+ }
5
+
6
+ define('SG_POPUP_VERSION', '4.0.7');
7
+ define('SGPB_POPUP_PKG', SGPB_POPUP_PKG_FREE);
8
+ define('POPUP_BUILDER_BASENAME', 'popupbuilder-platinum/popup-builder.php');
com/config/dataConfig.php CHANGED
@@ -1,1033 +1,1033 @@
1
- <?php
2
- require_once(SG_POPUP_HELPERS_PATH.'ConfigDataHelper.php');
3
- use sgpb\PopupBuilderActivePackage;
4
- class SgpbDataConfig
5
- {
6
- public static function init()
7
- {
8
- self::addFilters();
9
- self::conditionInit();
10
- self::transientConfig();
11
- self::popupDefaultOptions();
12
- }
13
-
14
- public static function conditionInit()
15
- {
16
- global $SGPB_DATA_CONFIG_ARRAY;
17
-
18
- /*Target condition config*/
19
- $targetData = array('param' => 'Pages', 'operator' => 'Is not', 'value' => 'Value');
20
- $targetElementTypes = array(
21
- 'param' => 'select',
22
- 'operator' => 'select',
23
- 'value' => 'select',
24
- 'post_selected' => 'select',
25
- 'page_selected' => 'select',
26
- 'post_type' => 'select',
27
- 'post_category' => 'select',
28
- 'page_type' => 'select',
29
- 'page_template' => 'select',
30
- 'post_tags_ids' => 'select'
31
- );
32
-
33
- $targetParams = array(
34
- 'not_rule' => __('Select rule', SG_POPUP_TEXT_DOMAIN),
35
- 'everywhere' => __('Everywhere', SG_POPUP_TEXT_DOMAIN),
36
- 'Post' => array(
37
- 'post_all' => __('All posts', SG_POPUP_TEXT_DOMAIN),
38
- 'post_selected' => __('Selected posts', SG_POPUP_TEXT_DOMAIN),
39
- 'post_type' => __('Post type', SG_POPUP_TEXT_DOMAIN),
40
- 'post_category' => __('Post category', SG_POPUP_TEXT_DOMAIN)
41
- ),
42
- 'Page' => array(
43
- 'page_all' => __('All pages', SG_POPUP_TEXT_DOMAIN),
44
- 'page_selected' => __('Selected pages', SG_POPUP_TEXT_DOMAIN),
45
- 'page_type' => __('Page type', SG_POPUP_TEXT_DOMAIN),
46
- 'page_template' => __('Page template', SG_POPUP_TEXT_DOMAIN)
47
- ),
48
- 'Tags' => array(
49
- 'post_tags' => __('All tags', SG_POPUP_TEXT_DOMAIN),
50
- 'post_tags_ids' => __('Selected tags', SG_POPUP_TEXT_DOMAIN)
51
- )
52
- );
53
-
54
- $targetOperators = array(
55
- array('operator' => 'add', 'name' => __('Add', SG_POPUP_TEXT_DOMAIN)),
56
- array('operator' => 'delete', 'name' => __('Delete', SG_POPUP_TEXT_DOMAIN))
57
- );
58
-
59
- $targetDataOperator = array(
60
- '==' => __('Is', SG_POPUP_TEXT_DOMAIN),
61
- '!=' => __('Is not', SG_POPUP_TEXT_DOMAIN)
62
- );
63
- $targetInitialData = array(
64
- array('param' => 'everywhere')
65
- );
66
-
67
- $targetDataParams['param'] = apply_filters('sgPopupTargetParams', $targetParams);
68
- $targetDataParams['operator'] = apply_filters('sgPopupTargetOperator', $targetDataOperator);
69
- $targetDataParams['post_selected'] = apply_filters('sgPopupTargetPostData', array());
70
- $targetDataParams['page_selected'] = apply_filters('sgPopupTargetPageSelected', array());
71
- $targetDataParams['post_type'] = apply_filters('sgPopupTargetPostType', ConfigDataHelper::getAllCustomPostTypes());
72
- $targetDataParams['post_category'] = apply_filters('sgPopupTargetPostCategory', ConfigDataHelper::getPostsAllCategories());
73
- $targetDataParams['page_type'] = apply_filters('sgPopupTargetPageType', ConfigDataHelper::getPageTypes());
74
- $targetDataParams['page_template'] = apply_filters('sgPopupPageTemplates', array());
75
- $targetDataParams['post_tags_ids'] = apply_filters('sgPopupTags', ConfigDataHelper::getAllTags());
76
- $targetDataParams['everywhere'] = null;
77
- $targetDataParams['not_rule'] = null;
78
- $targetDataParams['post_all'] = null;
79
- $targetDataParams['page_all'] = null;
80
- $targetDataParams['post_tags'] = null;
81
-
82
- $targetAttrs = array(
83
- 'param' => array(
84
- 'htmlAttrs' => array(
85
- 'class' => 'js-sg-select2 js-select-basic',
86
- 'data-select-class' => 'js-select-basic',
87
- 'data-select-type' => 'basic',
88
- 'autocomplete' => 'off'
89
- ),
90
- 'infoAttrs' => array(
91
- 'label' => 'Display rule',
92
- 'info' => __('Specify where the popup should be shown on your site.', SG_POPUP_TEXT_DOMAIN)
93
- )
94
-
95
- ),
96
- 'operator' => array(
97
- 'htmlAttrs' => array(
98
- 'class' => 'js-sg-select2 js-select-basic',
99
- 'data-select-class' => 'js-select-basic',
100
- 'data-select-type' => 'basic'
101
- ),
102
- 'infoAttrs' => array(
103
- 'label' => 'Is or is not',
104
- 'info' => __('Allow or Disallow popup showing for the selected rule.', SG_POPUP_TEXT_DOMAIN)
105
- )
106
- ),
107
- 'post_selected' => array(
108
- 'htmlAttrs' => array(
109
- 'class' => 'js-sg-select2 js-select-ajax',
110
- 'data-select-class' => 'js-select-ajax',
111
- 'data-select-type' => 'ajax',
112
- 'data-value-param' => 'post',
113
- 'multiple' => 'multiple'
114
- ),
115
- 'infoAttrs' => array(
116
- 'label' => 'Select Your Posts',
117
- 'info' => __('Select your specific posts where the popup should be shown.', SG_POPUP_TEXT_DOMAIN)
118
- )
119
- ),
120
- 'page_selected' => array(
121
- 'htmlAttrs' => array(
122
- 'class' => 'js-sg-select2 js-select-ajax',
123
- 'data-select-class' => 'js-select-ajax',
124
- 'data-select-type' => 'ajax',
125
- 'data-value-param' => 'page',
126
- 'multiple' => 'multiple'
127
- ),
128
- 'infoAttrs' => array(
129
- 'label' => 'Select Your Pages',
130
- 'info' => __('Select the pages on your site where the specific popup will be shown.', SG_POPUP_TEXT_DOMAIN)
131
- )
132
- ),
133
- 'post_type' => array(
134
- 'htmlAttrs' => array(
135
- 'class' => 'js-sg-select2 js-select-ajax',
136
- 'data-select-class' => 'js-select-ajax',
137
- 'data-select-type' => 'multiple',
138
- 'data-value-param' => 'postTypes',
139
- 'isNotPostType' => true,
140
- 'multiple' => 'multiple'
141
- ),
142
- 'infoAttrs' => array(
143
- 'label' => 'Select Your post types',
144
- 'info' => __('Specify the post types on your site to show the popup.', SG_POPUP_TEXT_DOMAIN)
145
- )
146
- ),
147
- 'post_category' => array(
148
- 'htmlAttrs' => array(
149
- 'class' => 'js-sg-select2 js-select-ajax',
150
- 'data-select-class' => 'js-select-ajax',
151
- 'data-select-type' => 'multiple',
152
- 'data-value-param' => 'postCategories',
153
- 'isNotPostType' => true,
154
- 'multiple' => 'multiple'
155
- ),
156
- 'infoAttrs' => array(
157
- 'label' => 'Select post categories',
158
- 'info' => __('Select the post categories on which the popup should be shown.', SG_POPUP_TEXT_DOMAIN)
159
- )
160
- ),
161
- 'page_type' => array(
162
- 'htmlAttrs' => array(
163
- 'class' => 'js-sg-select2 js-select-ajax',
164
- 'data-select-class' => 'js-select-ajax',
165
- 'data-select-type' => 'multiple',
166
- 'data-value-param' => 'postCategories',
167
- 'isNotPostType' => true,
168
- 'multiple' => 'multiple'
169
- ),
170
- 'infoAttrs' => array(
171
- 'label' => 'Select specific page types',
172
- 'info' => __('Specify the page types where the popup will be shown.', SG_POPUP_TEXT_DOMAIN)
173
- )
174
- ),
175
- 'page_template' => array(
176
- 'htmlAttrs' => array(
177
- 'class' => 'js-sg-select2 js-select-ajax',
178
- 'data-select-class' => 'js-select-ajax',
179
- 'data-select-type' => 'multiple',
180
- 'data-value-param' => 'pageTemplate',
181
- 'isNotPostType' => true,
182
- 'multiple' => 'multiple'
183
- ),
184
- 'infoAttrs' => array(
185
- 'label' => 'Select page template',
186
- 'info' => __('Select the page templates on which the popup will be shown.', SG_POPUP_TEXT_DOMAIN)
187
- )
188
- ),
189
- 'post_tags_ids' => array(
190
- 'htmlAttrs' => array(
191
- 'class' => 'js-sg-select2 js-select-ajax',
192
- 'data-select-class' => 'js-select-ajax',
193
- 'data-select-type' => 'multiple',
194
- 'data-value-param' => 'postTags',
195
- 'isNotPostType' => true,
196
- 'multiple' => 'multiple'
197
- ),
198
- 'infoAttrs' => array(
199
- 'label' => 'Select tags',
200
- 'info' => __('Select the tags on your site for popup showing', SG_POPUP_TEXT_DOMAIN)
201
- )
202
- )
203
- );
204
-
205
- $popupTarget['columns'] = apply_filters('sgPopupTargetColumns', $targetData);
206
- $popupTarget['columnTypes'] = apply_filters('sgPopupTargetTypes', $targetElementTypes);
207
- $popupTarget['paramsData'] = apply_filters('sgPopupTargetData', $targetDataParams);
208
- $popupTarget['initialData'] = apply_filters('sgPopupTargetInitialData', $targetInitialData);
209
- $popupTarget['operators'] = apply_filters('sgpbPopupEventsOperators', $targetOperators);
210
- $popupTarget['attrs'] = apply_filters('sgPopupTargetAttrs', $targetAttrs);
211
-
212
- $SGPB_DATA_CONFIG_ARRAY['target'] = $popupTarget;
213
-
214
- /*Target condition config*/
215
-
216
- /*
217
- *
218
- * Events data
219
- *
220
- **/
221
- $eventsData = array('param' => 'Event name', 'value' => 'Delay');
222
- $hiddenOptionData = array();
223
-
224
- $eventsRowTypes = array(
225
- 'param' => 'select',
226
- 'operator' => 'select',
227
- 'value' => 'text',
228
- 'load' => 'number',
229
- 'repetitive' => 'checkbox',
230
- 'repetitivePeriod' => 'text',
231
- SGPB_CLICK_ACTION_KEY => 'select',
232
- 'clickActionCustomClass' => 'text',
233
- 'hoverActionCustomClass' => 'text',
234
- 'defaultClickClassName' => 'conditionalText',
235
- 'defaultHoverClassName' => 'conditionalText'
236
- );
237
-
238
- $params = array(
239
- 'load' => 'On load',
240
- SGPB_CSS_CLASS_ACTIONS_KEY => __('Set by CSS class', SG_POPUP_TEXT_DOMAIN),
241
- SGPB_CLICK_ACTION_KEY => __('On Click', SG_POPUP_TEXT_DOMAIN),
242
- SGPB_HOVER_ACTION_KEY => __('On Hover', SG_POPUP_TEXT_DOMAIN),
243
- 'inactivity' => __('Inactivity', SG_POPUP_TEXT_DOMAIN),
244
- 'onScroll' => __('On Scroll', SG_POPUP_TEXT_DOMAIN)
245
- );
246
-
247
- $hiddenOptionData['load'] = array(
248
- 'options' => array(
249
- 'repetitive' => 'Repetitive popup'
250
- )
251
- );
252
-
253
- $onLoadData = 0;
254
-
255
- $eventsDataParams['param'] = $params;
256
- $eventsDataParams['operator'] = array();
257
- $eventsDataParams['load'] = $onLoadData;
258
- $eventsDataParams['clickActionCustomClass'] = '';
259
- $eventsDataParams['hoverActionCustomClass'] = '';
260
- $eventsDataParams['defaultClickClassName'] = 'sg-popup-id-';
261
- $eventsDataParams['defaultHoverClassName'] = 'sg-popup-hover-';
262
- $eventsDataParams[SGPB_CSS_CLASS_ACTIONS_KEY] = null;
263
- $eventsDataParams[SGPB_CLICK_ACTION_KEY.'Operator'] = ConfigDataHelper::getClickActionOptions();
264
- $eventsDataParams[SGPB_HOVER_ACTION_KEY.'Operator'] = ConfigDataHelper::getHoverActionOptions();
265
- /*Hidden params data*/
266
- $eventsDataParams['repetitive'] = '';
267
- $eventsDataParams['repetitivePeriod'] = 0;
268
-
269
- $eventOperators = array(
270
- array('operator' => 'add', 'name' => 'Add'),
271
- array('operator' => 'edit', 'name' => 'Edit'),
272
- array('operator' => 'delete', 'name' => 'Delete')
273
- );
274
-
275
- $eventsInitialData = array(
276
- array('param' => 'load', 'value' => '', 'hiddenOption' => array())
277
- );
278
-
279
- $eventsAttrs = array(
280
- 'param' => array(
281
- 'htmlAttrs' => array(
282
- 'class' => 'js-sg-select2 js-select-basic sgpb-selectbox-settings',
283
- 'data-select-class' => 'js-select-basic',
284
- 'data-select-type' => 'basic'
285
- ),
286
- 'infoAttrs' => array(
287
- 'label' => 'Event',
288
- 'info' => __('Select when the popup should appear on the page.', SG_POPUP_TEXT_DOMAIN)
289
- )
290
- ),
291
- 'operator' => array(
292
- 'htmlAttrs' => array(
293
- 'class' => 'js-sg-select2 js-select-basic',
294
- 'data-select-class' => 'js-select-basic',
295
- 'data-select-type' => 'basic'
296
- ),
297
- 'infoAttrs' => array(
298
- 'label' => 'Options',
299
- 'info' => __('Select the condition for the current event.', SG_POPUP_TEXT_DOMAIN)
300
- )
301
- ),
302
- 'load' => array(
303
- 'htmlAttrs' => array('class' => 'js-sg-onload-text formItem__input formItem__input_select2_num_input', 'placeholder' => __('default custom delay will be used', SG_POPUP_TEXT_DOMAIN), 'min' => 0),
304
- 'infoAttrs' => array(
305
- 'label' => 'Delay',
306
- 'info' => __('Specify how long the popup appearance should be delayed after loading the page (in sec).', SG_POPUP_TEXT_DOMAIN)
307
- )
308
- ),
309
- SGPB_CLICK_ACTION_KEY => array(
310
- 'htmlAttrs' => array(
311
- 'class' => 'js-sg-select2 js-select-basic formItem__input formItem__input_select2_num_input',
312
- 'data-select-class' => 'js-select-basic',
313
- 'data-select-type' => 'basic'
314
- ),
315
- 'infoAttrs' => array(
316
- 'label' => 'Click Event',
317
- 'info' => __('Specify the part of the page, in percentages, where the popup should appear after scrolling.', SG_POPUP_TEXT_DOMAIN)
318
- )
319
- ),
320
- SGPB_HOVER_ACTION_KEY => array(
321
- 'htmlAttrs' => array(
322
- 'class' => 'js-sg-select2 js-select-basic formItem__input formItem__input_select2_num_input',
323
- 'data-select-class' => 'js-select-basic',
324
- 'data-select-type' => 'basic'
325
- ),
326
- 'infoAttrs' => array(
327
- 'label' => 'Hover Event',
328
- 'info' => __('Specify the part of the page, in percentages, where the popup should appear after scrolling.', SG_POPUP_TEXT_DOMAIN)
329
- )
330
- ),
331
- 'clickActionCustomClass' => array(
332
- 'htmlAttrs' => array('class' => 'js-sg-inactivity-text formItem__input formItem__input_select2_num_input', 'min' => 0),
333
- 'infoAttrs' => array(
334
- 'label' => 'Custom Class',
335
- 'info' => __('Add the CSS class name of your HTML element which will trigger this popup after click.', SG_POPUP_TEXT_DOMAIN)
336
- )
337
- ),
338
- 'hoverActionCustomClass' => array(
339
- 'htmlAttrs' => array('class' => 'js-sg-inactivity-text formItem__input formItem__input_select2_num_input', 'min' => 0),
340
- 'infoAttrs' => array(
341
- 'label' => 'Custom Class',
342
- 'info' => __('Add the CSS class name of your HTML element which will trigger this popup after click.', SG_POPUP_TEXT_DOMAIN)
343
- )
344
- ),
345
- 'defaultClickClassName' => array(
346
- 'htmlAttrs' => array(
347
- 'class' => 'js-sg-click-event formItem__input formItem__input_select2_num_input',
348
- 'min' => 0,
349
- 'readonly' => '',
350
- 'value' => 'sg-popup-id-',
351
- 'beforeSaveLabel' => __('Please save popup to generate class name.', SG_POPUP_TEXT_DOMAIN)
352
- ),
353
- 'infoAttrs' => array(
354
- 'label' => 'Default Class',
355
- 'info' => __('Add the following CSS class into your HTML element.', SG_POPUP_TEXT_DOMAIN)
356
- )
357
- ),
358
- 'defaultHoverClassName' => array(
359
- 'htmlAttrs' => array(
360
- 'class' => 'js-sg-hover-event formItem__input formItem__input_select2_num_input',
361
- 'min' => 0,
362
- 'readonly' => '',
363
- 'value' => 'sg-popup-hover-',
364
- 'beforeSaveLabel' => __('Please save popup to generate class name.', SG_POPUP_TEXT_DOMAIN)
365
- ),
366
- 'infoAttrs' => array(
367
- 'label' => 'Default Class',
368
- 'info' => __('Add the following CSS class into your HTML element.', SG_POPUP_TEXT_DOMAIN)
369
- )
370
- ),
371
- 'repetitive' => array(
372
- 'htmlAttrs' => array(
373
- 'class' => 'sgpb-popup-option sgpb-popup-accordion',
374
- 'data-name' => 'repetitive',
375
- 'autocomplete' => 'off'
376
- ),
377
- 'infoAttrs' => array(
378
- 'label' => 'Repetitive open popup',
379
- 'info' => __('If this option is enabled the same popup will open up after every X seconds you have defined (after closing it).', SG_POPUP_TEXT_DOMAIN)
380
- ),
381
- 'childOptions' => array('repetitivePeriod')
382
- ),
383
- 'repetitivePeriod' => array(
384
- 'htmlAttrs' => array(
385
- 'class' => 'sgpb-popup-option',
386
- 'autocomplete' => 'off'
387
- ),
388
- 'infoAttrs' => array(
389
- 'label' => 'period',
390
- 'info' => __('This is info', SG_POPUP_TEXT_DOMAIN)
391
- )
392
- )
393
- );
394
-
395
- $popupEvents['columns'] = apply_filters('sgPopupEventColumns', $eventsData);
396
- $popupEvents['columnTypes'] = apply_filters('sgPopupEventTypes', $eventsRowTypes);
397
- $popupEvents['paramsData'] = apply_filters('sgPopupEventsData', $eventsDataParams);
398
- $popupEvents['initialData'] = apply_filters('sgPopupEventsInitialData', $eventsInitialData);
399
- $popupEvents['operators'] = apply_filters('sgPopupEventOperators', $eventOperators);
400
- $popupEvents['hiddenOptionData'] = apply_filters('sgEventsHiddenData', $hiddenOptionData);
401
- $popupEvents['attrs'] = apply_filters('sgPopupEventAttrs', $eventsAttrs);
402
-
403
- $popupEvents['specialDefaultOperator'] = apply_filters('sgPopupEventsOperators', ' ');
404
- $popupEvents['operatorAllowInConditions'] = apply_filters('sgPopupEventsOperatorAllowInConditions', array(SGPB_CLICK_ACTION_KEY, SGPB_HOVER_ACTION_KEY));
405
-
406
- $SGPB_DATA_CONFIG_ARRAY['events'] = $popupEvents;
407
-
408
- /*Target condition config*/
409
- $targetData = array('param' => 'Pages', 'operator' => 'Is not', 'value' => 'Value');
410
- $targetElementTypes = array(
411
- 'param' => 'select',
412
- 'operator' => 'select',
413
- 'value' => 'select',
414
- 'select_role' => 'select',
415
- );
416
-
417
- $targetParams = array(
418
- 'select_role' => __('Select role', SG_POPUP_TEXT_DOMAIN)
419
- );
420
-
421
- $targetOperators = array(
422
- array('operator' => 'add', 'name' => __('Add', SG_POPUP_TEXT_DOMAIN)),
423
- array('operator' => 'delete', 'name' => __('Delete', SG_POPUP_TEXT_DOMAIN))
424
- );
425
-
426
- $targetDataOperator = array(
427
- '==' => __('Is', SG_POPUP_TEXT_DOMAIN),
428
- '!=' => __('Is not', SG_POPUP_TEXT_DOMAIN)
429
- );
430
-
431
- $targetInitialData = array(
432
- array('param' => 'select_role', 'operator' => '==', 'value' => '')
433
- );
434
-
435
- $targetDataParams['param'] = apply_filters('sgpbPopupSpecialEventsParams', $targetParams);
436
- $targetDataParams['operator'] = apply_filters('sgpbPopupConditionsOperator', $targetDataOperator);
437
-
438
- $targetDataParams['select_role'] = null;
439
-
440
- $targetAttrs = array(
441
- 'param' => array(
442
- 'htmlAttrs' => array(
443
- 'class' => 'js-sg-select2 js-select-basic sgpb-selectbox-settings',
444
- 'data-select-class' => 'js-select-basic',
445
- 'data-select-type' => 'basic',
446
- 'autocomplete' => 'off'
447
- ),
448
- 'infoAttrs' => array(
449
- 'label' => 'Condition',
450
- 'info' => __('Target visitors to show the popup by different conditions.', SG_POPUP_TEXT_DOMAIN)
451
- )
452
- ),
453
- 'operator' => array(
454
- 'htmlAttrs' => array(
455
- 'class' => 'js-sg-select2 js-select-basic',
456
- 'data-select-class' => 'js-select-basic',
457
- 'data-select-type' => 'basic'
458
- ),
459
- 'infoAttrs' => array(
460
- 'label' => 'Rule',
461
- 'info' => __('Allow or Disallow popup showing for the selected conditions.', SG_POPUP_TEXT_DOMAIN)
462
- )
463
- )
464
- );
465
-
466
- $popupConditions['columns'] = apply_filters('sgPopupConditionsColumns', $targetData);
467
- $popupConditions['columnTypes'] = apply_filters('sgPopupConditionsTypes', $targetElementTypes);
468
- $popupConditions['paramsData'] = apply_filters('sgPopupConditionsData', $targetDataParams);
469
- $popupConditions['initialData'] = apply_filters('sgPopupConditionsInitialData', $targetInitialData);
470
- $popupConditions['operators'] = apply_filters('sgPopupConditionsOperators', $targetOperators);
471
- $popupConditions['attrs'] = apply_filters('sgPopupConditionsAttrs', $targetAttrs);
472
-
473
- $popupConditions['specialDefaultOperator'] = apply_filters('sgPopupConditionsOperators', $targetDataOperator);
474
- $popupConditions['operatorAllowInConditions'] = apply_filters('sgPopupConditionsOperatorAllowInConditions', array());
475
-
476
- $SGPB_DATA_CONFIG_ARRAY['conditions'] = $popupConditions;
477
-
478
- $SGPB_DATA_CONFIG_ARRAY['behavior-after-special-events'] = self::getBehaviorAfterSpecialEventsConfig();
479
- $SGPB_DATA_CONFIG_ARRAY = apply_filters('sgpbConfigArray', $SGPB_DATA_CONFIG_ARRAY);
480
- /*Target condition config*/
481
- }
482
-
483
- public static function allFreeExtensionsKeys()
484
- {
485
- $keys = array();
486
-
487
- return $keys;
488
- }
489
-
490
- public static function allExtensionsKeys()
491
- {
492
- $keys = array();
493
- $keys[] = array(
494
- 'label' => __('AdBlock', SG_POPUP_TEXT_DOMAIN),
495
- 'version' => '3.0',
496
- 'stable_version' => '3.0',
497
- 'pluginKey' => 'popupbuilder-adblock/PopupBuilderAdBlock.php',
498
- 'key' => 'sgpbAdBlock',
499
- 'url' => SG_POPUP_AD_BLOCK_URL
500
- );
501
- $keys[] = array(
502
- 'label' => __('Advanced Closing', SG_POPUP_TEXT_DOMAIN),
503
- 'version' => '2.0',
504
- 'stable_version' => '2.0',
505
- 'pluginKey' => 'popupbuilder-advanced-closing/PopupBuilderAdvancedClosing.php',
506
- 'key' => 'advancedClosing',
507
- 'url' => SG_POPUP_ADVANCED_CLOSING_URL
508
- );
509
- $keys[] = array(
510
- 'label' => __('Advanced Targeting', SG_POPUP_TEXT_DOMAIN),
511
- 'version' => '3.0',
512
- 'stable_version' => '3.0',
513
- 'pluginKey' => 'popupbuilder-advanced-targeting/PopupBuilderAdvancedTargeting.php',
514
- 'key' => 'sgpbAdvancedTargeting',
515
- 'url' => SG_POPUP_ADVANCED_TARGETING_URL
516
- );
517
- $keys[] = array(
518
- 'label' => __('Age Restriction', SG_POPUP_TEXT_DOMAIN),
519
- 'version' => '2.0',
520
- 'stable_version' => '2.0',
521
- 'pluginKey' => 'popupbuilder-age-verification/PopupBuilderAgeverification.php',
522
- 'key' => 'ageVerification',
523
- 'url' => SGPB_AGE_VERIFICATION_PLUGIN_URL
524
- );
525
- $keys[] = array(
526
- 'label' => __('Analytics', SG_POPUP_TEXT_DOMAIN),
527
- 'version' => '4.0',
528
- 'stable_version' => '4.0',
529
- 'pluginKey' => 'popupbuilder-analytics/PopupBuilderAnalytics.php',
530
- 'key' => 'sgpbAnalitics',
531
- 'url' => SG_POPUP_ANALYTICS_URL
532
- );
533
- $keys[] = array(
534
- 'label' => __('AWeber', SG_POPUP_TEXT_DOMAIN),
535
- 'version' => '3.0',
536
- 'stable_version' => '3.0',
537
- 'pluginKey' => 'popupbuilder-aweber/PopupBuilderAWeber.php',
538
- 'key' => 'sgpbAWeber',
539
- 'url' => SG_POPUP_AWEBER_URL
540
- );
541
- $keys[] = array(
542
- 'label' => __('Contact Form', SG_POPUP_TEXT_DOMAIN),
543
- 'version' => '3.0',
544
- 'stable_version' => '3.0',
545
- 'pluginKey' => 'popupbuilder-contact-form/PopupBuilderContactForm.php',
546
- 'key' => 'contactForm',
547
- 'url' => SG_POPUP_CONTACT_FORM_URL
548
- );
549
- $keys[] = array(
550
- 'label' => __('Countdown', SG_POPUP_TEXT_DOMAIN),
551
- 'version' => '3.0',
552
- 'stable_version' => '3.0',
553
- 'pluginKey' => 'popupbuilder-countdown/PopupBuilderCountdown.php',
554
- 'key' => 'countdown',
555
- 'url' => SG_POPUP_COUNTDOWN_URL
556
- );
557
- $keys[] = array(
558
- 'label' => __('EDD', SG_POPUP_TEXT_DOMAIN),
559
- 'version' => '2.0',
560
- 'stable_version' => '2.0',
561
- 'pluginKey' => 'popupbuilder-edd/PopupBuilderEdd.php',
562
- 'key' => 'edd',
563
- 'url' => SGPB_EDD_PLUGIN_URL
564
- );
565
- $keys[] = array(
566
- 'label' => __('Exit Intent',SG_POPUP_TEXT_DOMAIN),
567
- 'version' => '4.0',
568
- 'stable_version' => '4.0',
569
- 'pluginKey' => 'popupbuilder-exit-intent/PopupBuilderExitIntent.php',
570
- 'key' => 'sgpbExitIntent',
571
- 'url' => SG_POPUP_EXIT_INTENT_URL
572
- );
573
- $keys[] = array(
574
- 'label' => __('Gamification', SG_POPUP_TEXT_DOMAIN),
575
- 'version' => '2.0',
576
- 'stable_version' => '2.0',
577
- 'pluginKey' => 'popupbuilder-gamification/PopupBuilderGamification.php',
578
- 'key' => 'gamification',
579
- 'url' => SGPB_GAMIFICATION_PLUGIN_URL
580
- );
581
- $keys[] = array(
582
- 'label' => __('Geo Targeting', SG_POPUP_TEXT_DOMAIN),
583
- 'version' => '3.0',
584
- 'stable_version' => '3.0',
585
- 'pluginKey' => 'popupbuilder-geo-targeting/PopupBuilderGeoTargeting.php',
586
- 'key' => 'geo-targeting',
587
- 'url' => SG_POPUP_GEO_TARGETING_URL
588
- );
589
- $keys[] = array(
590
- 'label' => __('Iframe', SG_POPUP_TEXT_DOMAIN),
591
- 'version' => '2.0',
592
- 'stable_version' => '2.0',
593
- 'pluginKey' => 'popupbuilder-iframe/PopupBuilderIframe.php',
594
- 'key' => 'iframe',
595
- 'url' => SG_POPUP_IFRAME_URL
596
- );
597
- $keys[] = array(
598
- 'label' => __('Inactivity', SG_POPUP_TEXT_DOMAIN),
599
- 'version' => '2.0',
600
- 'stable_version' => '2.0',
601
- 'pluginKey' => 'popupbuilder-inactivity/PopupBuilderInactivity.php',
602
- 'key' => 'sgpbInactivity',
603
- 'url' => SG_POPUP_INACTIVITY_URL
604
- );
605
- $keys[] = array(
606
- 'label' => __('Log In', SG_POPUP_TEXT_DOMAIN),
607
- 'version' => '3.0',
608
- 'stable_version' => '3.0',
609
- 'pluginKey' => 'popupbuilder-login/PopupBuilderLogin.php',
610
- 'key' => 'login',
611
- 'url' => SG_POPUP_LOGIN_URL
612
- );
613
- $keys[] = array(
614
- 'label' => __('Mailchimp', SG_POPUP_TEXT_DOMAIN),
615
- 'version' => '4.0',
616
- 'stable_version' => '4.0',
617
- 'pluginKey' => 'popupbuilder-mailchimp/PopupBuilderMailchimp.php',
618
- 'key' => 'sgpbMailchimp',
619
- 'url' => SG_POPUP_MAILCHIMP_URL
620
- );
621
- $keys[] = array(
622
- 'label' => __('PDF', SG_POPUP_TEXT_DOMAIN),
623
- 'version' => '2.0',
624
- 'stable_version' => '2.0',
625
- 'pluginKey' => 'popupbuilder-pdf/PopupBuilderPdf.php',
626
- 'key' => 'pdf',
627
- 'url' => SGPB_PDF_PLUGIN_URL
628
- );
629
- $keys[] = array(
630
- 'label' => __('Push Notification', SG_POPUP_TEXT_DOMAIN),
631
- 'version' => '2.0',
632
- 'stable_version' => '2.0',
633
- 'pluginKey' => 'popupbuilder-push-notification/PopupBuilderPushNotification.php',
634
- 'key' => 'pushNotification',
635
- 'url' => SG_POPUP_PUSH_NOTIFICATION_URL
636
- );
637
- $keys[] = array(
638
- 'label' => __('Random', SG_POPUP_TEXT_DOMAIN),
639
- 'version' => '2.0',
640
- 'stable_version' => '2.0',
641
- 'pluginKey' => 'popupbuilder-random/PopupBuilderRandom.php',
642
- 'key' => 'sgpbRandom',
643
- 'url' => SG_POPUP_RANDOM_URL
644
- );
645
- $keys[] = array(
646
- 'label' => __('Recent Sales', SG_POPUP_TEXT_DOMAIN),
647
- 'version' => '2.0',
648
- 'stable_version' => '2.0',
649
- 'pluginKey' => 'popupbuilder-recent-sales/PopupBuilderRecentSales.php',
650
- 'key' => 'sgpbRecentSales',
651
- 'url' => SG_POPUP_RECENT_SALES_URL
652
- );
653
- $keys[] = array(
654
- 'label' => __('Registration', SG_POPUP_TEXT_DOMAIN),
655
- 'version' => '2.0',
656
- 'stable_version' => '2.0',
657
- 'pluginKey' => 'popupbuilder-registration/PopupBuilderRegistration.php',
658
- 'key' => 'registration',
659
- 'url' => SG_POPUP_REGISTRATION_URL
660
- );
661
- $keys[] = array(
662
- 'label' => __('Restriction', SG_POPUP_TEXT_DOMAIN),
663
- 'version' => '3.0',
664
- 'stable_version' => '3.0',
665
- 'pluginKey' => 'popupbuilder-restriction/PopupBuilderAgerestriction.php',
666
- 'key' => 'ageRestriction',
667
- 'url' => SG_POPUP_RESTRICTION_URL
668
- );
669
- $keys[] = array(
670
- 'label' => __('Scheduling', SG_POPUP_TEXT_DOMAIN),
671
- 'version' => '2.0',
672
- 'stable_version' => '2.0',
673
- 'pluginKey' => 'popupbuilder-scheduling/PopupBuilderScheduling.php',
674
- 'key' => 'scheduling',
675
- 'url' => SG_POPUP_SCHEDULING_URL
676
- );
677
- $keys[] = array(
678
- 'label' => __('Scroll', SG_POPUP_TEXT_DOMAIN),
679
- 'version' => '3.0',
680
- 'stable_version' => '3.0',
681
- 'pluginKey' => 'popupbuilder-scroll/PopupBuilderScroll.php',
682
- 'key' => 'sgpbScroll',
683
- 'url' => SG_POPUP_SCROLL_URL
684
- );
685
- $keys[] = array(
686
- 'label' => __('Social', SG_POPUP_TEXT_DOMAIN),
687
- 'version' => '2.0',
688
- 'stable_version' => '2.0',
689
- 'pluginKey' => 'popupbuilder-social/PopupBuilderSocial.php',
690
- 'key' => 'social',
691
- 'url' => SG_POPUP_SOCIAL_URL
692
- );
693
- $keys[] = array(
694
- 'label' => __('Subscription Plus', SG_POPUP_TEXT_DOMAIN),
695
- 'version' => '4.0',
696
- 'stable_version' => '4.0',
697
- 'pluginKey' => 'popupbuilder-subscription-plus/PopupBuilderSubscriptionPlus.php',
698
- 'key' => 'subscriptionPlus',
699
- 'url' => SG_POPUP_SUBSCRIPTION_PLUS_URL
700
- );
701
- $keys[] = array(
702
- 'label' => __('Video', SG_POPUP_TEXT_DOMAIN),
703
- 'version' => '2.0',
704
- 'stable_version' => '2.0',
705
- 'pluginKey' => 'popupbuilder-video/PopupBuilderVideo.php',
706
- 'key' => 'video',
707
- 'url' => SG_POPUP_VIDEO_URL
708
- );
709
- $keys[] = array(
710
- 'label' => __('WooCommerce', SG_POPUP_TEXT_DOMAIN),
711
- 'version' => '3.0',
712
- 'stable_version' => '3.0',
713
- 'pluginKey' => 'popupbuilder-woocommerce/popupbuilderWoocommerce.php',
714
- 'key' => 'sgpbWOO',
715
- 'url' => SG_POPUP_WOOCOMMERCE_URL
716
- );
717
-
718
- return apply_filters('sgpbExtensionsKeys', $keys);
719
- }
720
-
721
- private static function getBehaviorAfterSpecialEventsConfig()
722
- {
723
- $columns = array(
724
- 'param' => 'Event',
725
- 'operator' => 'Behavior',
726
- 'value' => 'Value'
727
- );
728
-
729
- $columnTypes = array(
730
- 'param' => 'select',
731
- 'operator' => 'select',
732
- 'value' => 'select',
733
- 'select_event' => 'select',
734
- 'select_behavior' => 'select',
735
- 'redirect-url' => 'url',
736
- 'open-popup' => 'select',
737
- 'close-popup' => 'number'
738
- );
739
-
740
- $params = array(
741
- 'param' => array(
742
- 'select_event' => __('Select event', SG_POPUP_TEXT_DOMAIN),
743
- __('Special events', SG_POPUP_TEXT_DOMAIN) => array(
744
- SGPB_CONTACT_FORM_7_BEHAVIOR_KEY => __('Contact Form 7 submission', SG_POPUP_TEXT_DOMAIN)
745
- )
746
- ),
747
- 'operator' => array(
748
- 'select_behavior' => __('Select behavior', SG_POPUP_TEXT_DOMAIN),
749
- __('Behaviors', SG_POPUP_TEXT_DOMAIN) => array(
750
- 'redirect-url' => __('Redirect to URL', SG_POPUP_TEXT_DOMAIN),
751
- 'open-popup' => __('Open another popup', SG_POPUP_TEXT_DOMAIN),
752
- 'close-popup' => __('Close current popup', SG_POPUP_TEXT_DOMAIN)
753
- )
754
- ),
755
- 'redirect-url' => '',
756
- 'open-popup' => array(),
757
- 'close-popup' => '',
758
- 'select_event' => null,
759
- 'select_behavior' => null
760
- );
761
-
762
- $initialData = array(
763
- array(
764
- 'param' => 'select_event',
765
- 'operator' => ''
766
- )
767
- );
768
-
769
- $attrs = array(
770
- 'param' => array(
771
- 'htmlAttrs' => array(
772
- 'class' => 'js-sg-select2 js-select-basic',
773
- 'data-select-class' => 'js-select-basic',
774
- 'data-select-type' => 'basic'
775
- ),
776
- 'infoAttrs' => array(
777
- 'label' => __('Event', SG_POPUP_TEXT_DOMAIN),
778
- 'info' => __('Select the special event you want to catch.', SG_POPUP_TEXT_DOMAIN)
779
- )
780
- ),
781
- 'operator' => array(
782
- 'htmlAttrs' => array(
783
- 'class' => 'js-sg-select2 js-select-basic',
784
- 'data-select-class' => 'js-select-basic',
785
- 'data-select-type' => 'basic'
786
- ),
787
- 'infoAttrs' => array(
788
- 'label' => __('Behavior', SG_POPUP_TEXT_DOMAIN),
789
- 'info' => __('Select what should happen after the special event.', SG_POPUP_TEXT_DOMAIN)
790
- )
791
- ),
792
- 'redirect-url' => array(
793
- 'htmlAttrs' => array(
794
- 'class' => 'sg-full-width formItem__input formItem__input_select2_num_input',
795
- 'placeholder' => 'https://www.example.com',
796
- 'required' => 'required'
797
- ),
798
- 'infoAttrs' => array(
799
- 'label' => __('URL', SG_POPUP_TEXT_DOMAIN),
800
- 'info' => __('Enter the URL of the page should be redirected to.', SG_POPUP_TEXT_DOMAIN)
801
- )
802
- ),
803
- 'open-popup' => array(
804
- 'htmlAttrs' => array(
805
- 'class' => 'js-sg-select2 js-select-ajax',
806
- 'data-select-class' => 'js-select-ajax',
807
- 'data-select-type' => 'ajax',
808
- 'data-value-param' => SG_POPUP_POST_TYPE,
809
- 'required' => 'required'
810
- ),
811
- 'infoAttrs' => array(
812
- 'label' => __('Select popup', SG_POPUP_TEXT_DOMAIN),
813
- 'info' => __('Select the popup that should be opened.', SG_POPUP_TEXT_DOMAIN)
814
- )
815
- ),
816
- 'close-popup' => array(
817
- 'htmlAttrs' => array(
818
- 'class' => 'sg-full-width formItem__input formItem__input_select2_num_input',
819
- 'required' => 'required',
820
- 'value' => 0,
821
- 'min' => 0
822
- ),
823
- 'infoAttrs' => array(
824
- 'label' => __('Delay', SG_POPUP_TEXT_DOMAIN),
825
- 'info' => __('After how many seconds the popup should close.', SG_POPUP_TEXT_DOMAIN)
826
- )
827
- )
828
- );
829
-
830
- $config = array();
831
- $config['columns'] = apply_filters('sgPopupSpecialEventsColumns', $columns);
832
- $config['columnTypes'] = apply_filters('sgPopupSpecialEventsColumnTypes', $columnTypes);
833
- $config['paramsData'] = apply_filters('sgPopupSpecialEventsParams', $params);
834
- $config['initialData'] = apply_filters('sgPopupSpecialEventsInitialData', $initialData);
835
- $config['attrs'] = apply_filters('sgPopupSpecialEventsAttrs', $attrs);
836
- $config['operators'] = apply_filters('sgpbPopupSpecialEventsOperators', array());
837
- $config['specialDefaultOperator'] = apply_filters('sgpbPopupSpecialEventsDefaultOperators', ' ');
838
-
839
- return $config;
840
- }
841
-
842
- public static function popupDefaultOptions()
843
- {
844
- global $SGPB_OPTIONS;
845
- global $SGPB_DATA_CONFIG_ARRAY;
846
-
847
- $targetDefaultValue = array($SGPB_DATA_CONFIG_ARRAY['target']['initialData']);
848
-
849
- $eventsDefaultData = array($SGPB_DATA_CONFIG_ARRAY['events']['initialData']);
850
- $conditionsDefaultData = array($SGPB_DATA_CONFIG_ARRAY['conditions']['initialData']);
851
- $specialEventsDefaultData = array($SGPB_DATA_CONFIG_ARRAY['behavior-after-special-events']['initialData']);
852
-
853
- $options = array();
854
-
855
- $options[] = array('name' => 'sgpb-target', 'type' => 'array', 'defaultValue' => $targetDefaultValue);
856
- $options[] = array('name' => 'sgpb-events', 'type' => 'array', 'defaultValue' => $eventsDefaultData);
857
- $options[] = array('name' => 'sgpb-conditions', 'type' => 'array', 'defaultValue' => $conditionsDefaultData, 'min-version' => SGPB_POPUP_PRO_MIN_VERSION, 'min-pkg' => SGPB_POPUP_PKG_SILVER);
858
- $options[] = array('name' => 'sgpb-behavior-after-special-events', 'type' => 'array', 'defaultValue' => $specialEventsDefaultData);
859
- $options[] = array('name' => 'sgpb-type', 'type' => 'text', 'defaultValue' => 'html');
860
- $options[] = array('name' => 'sgpb-popup-counting-disabled', 'type' => 'checkbox', 'defaultValue' => '');
861
- $options[] = array('name' => 'sgpb-esc-key', 'type' => 'checkbox', 'defaultValue' => 'on');
862
- $options[] = array('name' => 'sgpb-enable-close-button', 'type' => 'checkbox', 'defaultValue' => 'on');
863
- $options[] = array('name' => 'sgpb-enable-content-scrolling', 'type' => 'checkbox', 'defaultValue' => 'on');
864
- $options[] = array('name' => 'sgpb-overlay-click', 'type' => 'checkbox', 'defaultValue' => 'on');
865
- $options[] = array('name' => 'sgpb-content-click', 'type' => 'checkbox', 'defaultValue' => '');
866
- $options[] = array('name' => 'sgpb-subs-hide-subs-users', 'type' => 'checkbox', 'defaultValue' => 'on');
867
- $options[] = array('name' => 'sgpb-content-click-behavior', 'type' => 'text', 'defaultValue' => 'close');
868
- $options[] = array('name' => 'sgpb-click-redirect-to-url', 'type' => 'text', 'defaultValue' => '');
869
- $options[] = array('name' => 'sgpb-redirect-to-new-tab', 'type' => 'checkbox', 'defaultValue' => '');
870
- $options[] = array('name' => 'sgpb-copy-to-clipboard-text', 'type' => 'text', 'defaultValue' => '');
871
- $options[] = array('name' => 'sgpb-copy-to-clipboard-close-popup', 'type' => 'checkbox', 'defaultValue' => 'on');
872
- $options[] = array('name' => 'sgpb-copy-to-clipboard-alert', 'type' => 'checkbox', 'defaultValue' => 'on');
873
- $options[] = array('name' => 'sgpb-copy-to-clipboard-message', 'type' => 'text', 'defaultValue' => __('Copied to Clipboard!', SG_POPUP_TEXT_DOMAIN));
874
- $options[] = array('name' => 'sgpb-disable-popup-closing', 'type' => 'checkbox', 'defaultValue' => '', 'min-version' => SGPB_POPUP_PRO_MIN_VERSION, 'min-pkg' => SGPB_POPUP_PKG_SILVER);
875
- $options[] = array('name' => 'sgpb-popup-dimension-mode', 'type' => 'text', 'defaultValue' => 'responsiveMode');
876
- $options[] = array('name' => 'sgpb-popup-dimension-mode', 'type' => 'text', 'defaultValue' => '100');
877
- $options[] = array('name' => 'sgpb-width', 'type' => 'text', 'defaultValue' => '640px');
878
- $options[] = array('name' => 'sgpb-height', 'type' => 'text', 'defaultValue' => '480px');
879
- $options[] = array('name' => 'sgpb-max-width', 'type' => 'text', 'defaultValue' => '');
880
- $options[] = array('name' => 'sgpb-max-height', 'type' => 'text', 'defaultValue' => '');
881
- $options[] = array('name' => 'sgpb-min-width', 'type' => 'text', 'defaultValue' => '120px');
882
- $options[] = array('name' => 'sgpb-min-height', 'type' => 'text', 'defaultValue' => '');
883
- $options[] = array('name' => 'sgpb-popup-timer-status', 'type' => 'checkbox', 'defaultValue' => '');
884
- $options[] = array('name' => 'sgpb-popup-start-timer', 'type' => 'text', 'defaultValue' => '');
885
- $options[] = array('name' => 'sgpb-popup-end-timer', 'type' => 'text', 'defaultValue' => '');
886
- $options[] = array('name' => 'sgpb-popup-fixed', 'type' => 'checkbox', 'defaultValue' => '');
887
- $options[] = array('name' => 'sgpb-popup-fixed-position', 'type' => 'text', 'defaultValue' => '');
888
- $options[] = array('name' => 'sgpb-popup-delay', 'type' => 'text', 'defaultValue' => '0');
889
- $options[] = array('name' => 'sgpb-popup-order', 'type' => 'text', 'defaultValue' => '0');
890
- $options[] = array('name' => 'sgpb-disable-page-scrolling', 'type' => 'checkbox', 'defaultValue' => '');
891
- $options[] = array('name' => 'sgpb-content-padding', 'type' => 'text', 'defaultValue' => 7);
892
- $options[] = array('name' => 'sgpb-popup-z-index', 'type' => 'text', 'defaultValue' => 9999);
893
- $options[] = array('name' => 'sgpb-content-custom-class', 'type' => 'text', 'defaultValue' => 'sg-popup-content');
894
- $options[] = array('name' => 'sgpb-close-after-page-scroll', 'type' => 'checkbox', 'defaultValue' => '', 'min-version' => SGPB_POPUP_PRO_MIN_VERSION, 'min-pkg' => SGPB_POPUP_PKG_SILVER);
895
- $options[] = array('name' => 'sgpb-auto-close', 'type' => 'checkbox', 'defaultValue' => '', 'min-version' => SGPB_POPUP_PRO_MIN_VERSION, 'min-pkg' => SGPB_POPUP_PKG_SILVER);
896
- $options[] = array('name' => 'sgpb-auto-close-time', 'type' => 'number', 'defaultValue' => 0);
897
- $options[] = array('name' => 'sgpb-reopen-after-form-submission', 'type' => 'checkbox', 'defaultValue' => '');
898
- $options[] = array('name' => 'sgpb-open-sound', 'type' => 'checkbox', 'defaultValue' => '');
899
- $options[] = array('name' => 'sgpb-sound-url', 'type' => 'text', 'defaultValue' => SG_POPUP_SOUND_URL.SGPB_POPUP_DEFAULT_SOUND);
900
- $options[] = array('name' => 'sgpb-open-animation', 'type' => 'checkbox', 'defaultValue' => '');
901
- $options[] = array('name' => 'sgpb-close-animation', 'type' => 'checkbox', 'defaultValue' => '');
902
- $options[] = array('name' => 'sgpb-open-animation-speed', 'type' => 'text', 'defaultValue' => 1);
903
- $options[] = array('name' => 'sgpb-close-animation-speed', 'type' => 'text', 'defaultValue' => 1);
904
- $options[] = array('name' => 'sgpb-popup-themes', 'type' => 'text', 'defaultValue' => 'sgpb-theme-1');
905
- $options[] = array('name' => 'sgpb-enable-popup-overlay', 'type' => 'checkbox', 'defaultValue' => 'on', 'min-version' => SGPB_POPUP_PRO_MIN_VERSION, 'min-pkg' => SGPB_POPUP_PKG_SILVER);
906
- $options[] = array('name' => 'sgpb-overlay-custom-class', 'type' => 'text', 'defaultValue' => 'sgpb-popup-overlay');
907
- $options[] = array('name' => 'sgpb-overlay-color', 'type' => 'text', 'defaultValue' => '');
908
- $options[] = array('name' => 'sgpb-background-color', 'type' => 'text', 'defaultValue' => '');
909
- $options[] = array('name' => 'sgpb-overlay-opacity', 'type' => 'text', 'defaultValue' => 0.8);
910
- $options[] = array('name' => 'sgpb-content-opacity', 'type' => 'text', 'defaultValue' => 0.8);
911
- $options[] = array('name' => 'sgpb-background-image', 'type' => 'text', 'defaultValue' => '');
912
- $options[] = array('name' => 'sgpb-show-background', 'type' => 'checkbox', 'defaultValue' => '');
913
- $options[] = array('name' => 'sgpb-force-rtl', 'type' => 'checkbox', 'defaultValue' => '');
914
- $options[] = array('name' => 'sgpb-disable-border', 'type' => 'checkbox', 'defaultValue' => '');
915
- $options[] = array('name' => 'sgpb-background-image-mode', 'type' => 'text', 'defaultValue' => 'no-repeat');
916
- $options[] = array('name' => 'sgpb-image-url', 'type' => 'text', 'defaultValue' => '');
917
- $options[] = array('name' => 'sgpb-close-button-delay', 'type' => 'number', 'defaultValue' => 0);
918
- $options[] = array('name' => 'sgpb-button-position-bottom', 'type' => 'number', 'defaultValue' => 9);
919
- $options[] = array('name' => 'sgpb-button-position-right', 'type' => 'number', 'defaultValue' => 9);
920
- $options[] = array('name' => 'sgpb-button-image', 'type' => 'text', 'defaultValue' => '');
921
- $options[] = array('name' => 'sgpb-button-image-width', 'type' => 'text', 'defaultValue' => 21);
922
- $options[] = array('name' => 'sgpb-button-image-height', 'type' => 'text', 'defaultValue' => 21);
923
- $options[] = array('name' => 'sgpb-is-active', 'type' => 'checkbox', 'defaultValue' => 'on');
924
- $options[] = array('name' => 'sgpb-subs-form-bg-color', 'type' => 'text', 'defaultValue' => '#FFFFFF');
925
- $options[] = array('name' => 'sgpb-subs-form-bg-opacity', 'type' => 'text', 'defaultValue' => 0.8);
926
- $options[] = array('name' => 'sgpb-subs-form-padding', 'type' => 'number', 'defaultValue' => 2);
927
- $options[] = array('name' => 'sgpb-subs-email-placeholder', 'type' => 'text', 'defaultValue' => __('Email *', SG_POPUP_TEXT_DOMAIN));
928
- $options[] = array('name' => 'sgpb-subs-first-name-status', 'type' => 'checkbox', 'defaultValue' => 'on');
929
- $options[] = array('name' => 'sgpb-subs-first-placeholder', 'type' => 'text', 'defaultValue' => __('First name', SG_POPUP_TEXT_DOMAIN));
930
- $options[] = array('name' => 'sgpb-subs-first-name-required', 'type' => 'checkbox', 'defaultValue' => '');
931
- $options[] = array('name' => 'sgpb-subs-last-name-status', 'type' => 'checkbox', 'defaultValue' => 'on');
932
- $options[] = array('name' => 'sgpb-subs-last-placeholder', 'type' => 'text', 'defaultValue' => __('Last name', SG_POPUP_TEXT_DOMAIN));
933
- $options[] = array('name' => 'sgpb-subs-last-name-required', 'type' => 'checkbox', 'defaultValue' => '');
934
- $options[] = array('name' => 'sgpb-subs-validation-message', 'type' => 'text', 'defaultValue' => __('This field is required.', SG_POPUP_TEXT_DOMAIN));
935
- $options[] = array('name' => 'sgpb-subs-text-width', 'type' => 'text', 'defaultValue' => '300px');
936
- $options[] = array('name' => 'sgpb-subs-text-height', 'type' => 'text', 'defaultValue' => '40px');
937
- $options[] = array('name' => 'sgpb-subs-text-border-width', 'type' => 'text', 'defaultValue' => '2px');
938
- $options[] = array('name' => 'sgpb-subs-text-border-color', 'type' => 'text', 'defaultValue' => '#e8e8e8');
939
- $options[] = array('name' => 'sgpb-subs-text-bg-color', 'type' => 'text', 'defaultValue' => '#f1f1f1');
940
- $options[] = array('name' => 'sgpb-subs-text-color', 'type' => 'text', 'defaultValue' => '#000000');
941
- $options[] = array('name' => 'sgpb-subs-text-placeholder-color', 'type' => 'text', 'defaultValue' => '#757575');
942
- $options[] = array('name' => 'sgpb-subs-btn-width', 'type' => 'text', 'defaultValue' => '300px');
943
- $options[] = array('name' => 'sgpb-subs-btn-height', 'type' => 'text', 'defaultValue' => '40px');
944
- $options[] = array('name' => 'sgpb-subs-btn-border-radius', 'type' => 'text', 'defaultValue' => '4px');
945
- $options[] = array('name' => 'sgpb-subs-btn-border-width', 'type' => 'text', 'defaultValue' => '0px');
946
- $options[] = array('name' => 'sgpb-subs-btn-border-color', 'type' => 'text', 'defaultValue' => '#007fe1');
947
- $options[] = array('name' => 'sgpb-subs-btn-title', 'type' => 'text', 'defaultValue' => __('Subscribe', SG_POPUP_TEXT_DOMAIN));
948
- $options[] = array('name' => 'sgpb-subs-btn-progress-title', 'type' => 'text', 'defaultValue' => __('Please wait...', SG_POPUP_TEXT_DOMAIN));
949
- $options[] = array('name' => 'sgpb-subs-btn-bg-color', 'type' => 'text', 'defaultValue' => '#007fe1');
950
- $options[] = array('name' => 'sgpb-subs-btn-text-color', 'type' => 'text', 'defaultValue' => '#FFFFFF');
951
- $options[] = array('name' => 'sgpb-subs-error-message', 'type' => 'text', 'defaultValue' => SGPB_SUBSCRIPTION_ERROR_MESSAGE);
952
- $options[] = array('name' => 'sgpb-subs-invalid-message', 'type' => 'text', 'defaultValue' => __('Please enter a valid email address', SG_POPUP_TEXT_DOMAIN).'.');
953
- $options[] = array('name' => 'sgpb-subs-success-behavior', 'type' => 'text', 'defaultValue' => 'showMessage');
954
- $options[] = array('name' => 'sgpb-subs-success-message', 'type' => 'text', 'defaultValue' => __('You have successfully subscribed to the newsletter', SG_POPUP_TEXT_DOMAIN));
955
- $options[] = array('name' => 'sgpb-subs-success-redirect-URL', 'type' => 'text', 'defaultValue' => '');
956
- $options[] = array('name' => 'sgpb-subs-success-redirect-new-tab', 'type' => 'checkbox', 'defaultValue' => '');
957
- $options[] = array('name' => 'sgpb-subs-gdpr-status', 'type' => 'checkbox', 'defaultValue' => '');
958
- $options[] = array('name' => 'sgpb-subs-show-form-to-top', 'type' => 'checkbox', 'defaultValue' => '');
959
- $options[] = array('name' => 'sgpb-subs-gdpr-label', 'type' => 'text', 'defaultValue' => __('Accept Terms', SG_POPUP_TEXT_DOMAIN));
960
- $options[] = array('name' => 'sgpb-subs-gdpr-text', 'type' => 'text', 'defaultValue' => __(get_bloginfo().' will use the information you provide on this form to be in touch with you and to provide updates and marketing.', SG_POPUP_TEXT_DOMAIN));
961
- $options[] = array('name' => 'sgpb-subs-fields', 'type' => 'sgpb', 'defaultValue' => '');
962
- $options[] = array('name' => 'sgpb-fblike-like-url', 'type' => 'text', 'defaultValue' => '');
963
- $options[] = array('name' => 'sgpb-fblike-layout', 'type' => 'text', 'defaultValue' => 'standard');
964
- $options[] = array('name' => 'sgpb-fblike-dont-show-share-button', 'type' => 'checkbox', 'defaultValue' => '');
965
- $options[] = array('name' => 'sgpb-border-color', 'type' => 'text', 'defaultValue' => '#000000');
966
- $options[] = array('name' => 'sgpb-border-radius', 'type' => 'text', 'defaultValue' => 0);
967
- $options[] = array('name' => 'sgpb-show-popup-same-user', 'type' => 'checkbox', 'defaultValue' => '');
968
- $options[] = array('name' => 'sgpb-show-popup-same-user-count', 'type' => 'number', 'defaultValue' => 1);
969
- $options[] = array('name' => 'sgpb-show-popup-same-user-expiry', 'type' => 'number', 'defaultValue' => 1);
970
- $options[] = array('name' => 'sgpb-show-popup-same-user-page-level', 'type' => 'checkbox', 'defaultValue' => '');
971
-
972
- $options[] = array('name' => 'sgpb-enable-floating-button', 'type' => 'checkbox', 'defaultValue' => '');
973
- $options[] = array('name' => 'sgpb-floating-button-style', 'type' => 'text', 'defaultValue' => 'corner');
974
- $options[] = array('name' => 'sgpb-floating-button-position', 'type' => 'text', 'defaultValue' => 'bottom-right');
975
- $options[] = array('name' => 'sgpb-floating-button-position-top', 'type' => 'text', 'defaultValue' => '40');
976
- $options[] = array('name' => 'sgpb-floating-button-position-right', 'type' => 'text', 'defaultValue' => '50');
977
- $options[] = array('name' => 'sgpb-floating-button-font-size', 'type' => 'number', 'defaultValue' => 16);
978
- $options[] = array('name' => 'sgpb-floating-button-border-size', 'type' => 'number', 'defaultValue' => 5);
979
- $options[] = array('name' => 'sgpb-floating-button-border-radius', 'type' => 'number', 'defaultValue' => 5);
980
- $options[] = array('name' => 'sgpb-floating-button-border-color', 'type' => 'text', 'defaultValue' => '#5263eb');
981
- $options[] = array('name' => 'sgpb-floating-button-bg-color', 'type' => 'text', 'defaultValue' => '#5263eb');
982
- $options[] = array('name' => 'sgpb-floating-button-text-color', 'type' => 'text', 'defaultValue' => '#ffffff');
983
- $options[] = array('name' => 'sgpb-floating-button-text', 'type' => 'text', 'defaultValue' => __('Click it!'));
984
-
985
- $SGPB_OPTIONS = apply_filters('sgpbPopupDefaultOptions', $options);
986
- }
987
-
988
- public static function getOldExtensionsInfo()
989
- {
990
- $data = array(
991
- array(
992
- 'folderName' => 'popup-builder-ad-block',
993
- 'label' => __('AdBlock', SG_POPUP_TEXT_DOMAIN)
994
- ),
995
- array(
996
- 'folderName' => 'popup-builder-analytics',
997
- 'label' => __('Analytics', SG_POPUP_TEXT_DOMAIN)
998
- ),
999
- array(
1000
- 'folderName' => 'popup-builder-exit-intent',
1001
- 'label' => __('Exit intent', SG_POPUP_TEXT_DOMAIN)
1002
- ),
1003
- array(
1004
- 'folderName' => 'popup-builder-mailchimp',
1005
- 'label' => __('Mailchimp', SG_POPUP_TEXT_DOMAIN)
1006
- ),
1007
- array(
1008
- 'folderName' => 'popup-builder-aweber',
1009
- 'label' => __('AWeber', SG_POPUP_TEXT_DOMAIN)
1010
- )
1011
- );
1012
-
1013
- return $data;
1014
- }
1015
-
1016
- public static function addFilters()
1017
- {
1018
- ConfigDataHelper::addFilters();
1019
- }
1020
-
1021
- public static function transientConfig()
1022
- {
1023
- global $SGPB_TRANSIENT_CONFIG;
1024
-
1025
- $SGPB_TRANSIENT_CONFIG = array(
1026
- SGPB_TRANSIENT_POPUPS_LOAD,
1027
- SGPB_TRANSIENT_POPUPS_TERMS,
1028
- SGPB_TRANSIENT_POPUPS_ALL_CATEGORIES
1029
- );
1030
-
1031
- $SGPB_TRANSIENT_CONFIG = apply_filters('sgpbAllTransients', $SGPB_TRANSIENT_CONFIG);
1032
- }
1033
- }
1
+ <?php
2
+ require_once(SG_POPUP_HELPERS_PATH.'ConfigDataHelper.php');
3
+ use sgpb\PopupBuilderActivePackage;
4
+ class SgpbDataConfig
5
+ {
6
+ public static function init()
7
+ {
8
+ self::addFilters();
9
+ self::conditionInit();
10
+ self::transientConfig();
11
+ self::popupDefaultOptions();
12
+ }
13
+
14
+ public static function conditionInit()
15
+ {
16
+ global $SGPB_DATA_CONFIG_ARRAY;
17
+
18
+ /*Target condition config*/
19
+ $targetData = array('param' => 'Pages', 'operator' => 'Is not', 'value' => 'Value');
20
+ $targetElementTypes = array(
21
+ 'param' => 'select',
22
+ 'operator' => 'select',
23
+ 'value' => 'select',
24
+ 'post_selected' => 'select',
25
+ 'page_selected' => 'select',
26
+ 'post_type' => 'select',
27
+ 'post_category' => 'select',
28
+ 'page_type' => 'select',
29
+ 'page_template' => 'select',
30
+ 'post_tags_ids' => 'select'
31
+ );
32
+
33
+ $targetParams = array(
34
+ 'not_rule' => __('Select rule', SG_POPUP_TEXT_DOMAIN),
35
+ 'everywhere' => __('Everywhere', SG_POPUP_TEXT_DOMAIN),
36
+ 'Post' => array(
37
+ 'post_all' => __('All posts', SG_POPUP_TEXT_DOMAIN),
38
+ 'post_selected' => __('Selected posts', SG_POPUP_TEXT_DOMAIN),
39
+ 'post_type' => __('Post type', SG_POPUP_TEXT_DOMAIN),
40
+ 'post_category' => __('Post category', SG_POPUP_TEXT_DOMAIN)
41
+ ),
42
+ 'Page' => array(
43
+ 'page_all' => __('All pages', SG_POPUP_TEXT_DOMAIN),
44
+ 'page_selected' => __('Selected pages', SG_POPUP_TEXT_DOMAIN),
45
+ 'page_type' => __('Page type', SG_POPUP_TEXT_DOMAIN),
46
+ 'page_template' => __('Page template', SG_POPUP_TEXT_DOMAIN)
47
+ ),
48
+ 'Tags' => array(
49
+ 'post_tags' => __('All tags', SG_POPUP_TEXT_DOMAIN),
50
+ 'post_tags_ids' => __('Selected tags', SG_POPUP_TEXT_DOMAIN)
51
+ )
52
+ );
53
+
54
+ $targetOperators = array(
55
+ array('operator' => 'add', 'name' => __('Add', SG_POPUP_TEXT_DOMAIN)),
56
+ array('operator' => 'delete', 'name' => __('Delete', SG_POPUP_TEXT_DOMAIN))
57
+ );
58
+
59
+ $targetDataOperator = array(
60
+ '==' => __('Is', SG_POPUP_TEXT_DOMAIN),
61
+ '!=' => __('Is not', SG_POPUP_TEXT_DOMAIN)
62
+ );
63
+ $targetInitialData = array(
64
+ array('param' => 'everywhere')
65
+ );
66
+
67
+ $targetDataParams['param'] = apply_filters('sgPopupTargetParams', $targetParams);
68
+ $targetDataParams['operator'] = apply_filters('sgPopupTargetOperator', $targetDataOperator);
69
+ $targetDataParams['post_selected'] = apply_filters('sgPopupTargetPostData', array());
70
+ $targetDataParams['page_selected'] = apply_filters('sgPopupTargetPageSelected', array());
71
+ $targetDataParams['post_type'] = apply_filters('sgPopupTargetPostType', ConfigDataHelper::getAllCustomPostTypes());
72
+ $targetDataParams['post_category'] = apply_filters('sgPopupTargetPostCategory', ConfigDataHelper::getPostsAllCategories());
73
+ $targetDataParams['page_type'] = apply_filters('sgPopupTargetPageType', ConfigDataHelper::getPageTypes());
74
+ $targetDataParams['page_template'] = apply_filters('sgPopupPageTemplates', array());
75
+ $targetDataParams['post_tags_ids'] = apply_filters('sgPopupTags', ConfigDataHelper::getAllTags());
76
+ $targetDataParams['everywhere'] = null;
77
+ $targetDataParams['not_rule'] = null;
78
+ $targetDataParams['post_all'] = null;
79
+ $targetDataParams['page_all'] = null;
80
+ $targetDataParams['post_tags'] = null;
81
+
82
+ $targetAttrs = array(
83
+ 'param' => array(
84
+ 'htmlAttrs' => array(
85
+ 'class' => 'js-sg-select2 js-select-basic',
86
+ 'data-select-class' => 'js-select-basic',
87
+ 'data-select-type' => 'basic',
88
+ 'autocomplete' => 'off'
89
+ ),
90
+ 'infoAttrs' => array(
91
+ 'label' => 'Display rule',
92
+ 'info' => __('Specify where the popup should be shown on your site.', SG_POPUP_TEXT_DOMAIN)
93
+ )
94
+
95
+ ),
96
+ 'operator' => array(
97
+ 'htmlAttrs' => array(
98
+ 'class' => 'js-sg-select2 js-select-basic',
99
+ 'data-select-class' => 'js-select-basic',
100
+ 'data-select-type' => 'basic'
101
+ ),
102
+ 'infoAttrs' => array(
103
+ 'label' => 'Is or is not',
104
+ 'info' => __('Allow or Disallow popup showing for the selected rule.', SG_POPUP_TEXT_DOMAIN)
105
+ )
106
+ ),
107
+ 'post_selected' => array(
108
+ 'htmlAttrs' => array(
109
+ 'class' => 'js-sg-select2 js-select-ajax',
110
+ 'data-select-class' => 'js-select-ajax',
111
+ 'data-select-type' => 'ajax',
112
+ 'data-value-param' => 'post',
113
+ 'multiple' => 'multiple'
114
+ ),
115
+ 'infoAttrs' => array(
116
+ 'label' => 'Select Your Posts',
117
+ 'info' => __('Select your specific posts where the popup should be shown.', SG_POPUP_TEXT_DOMAIN)
118
+ )
119
+ ),
120
+ 'page_selected' => array(
121
+ 'htmlAttrs' => array(
122
+ 'class' => 'js-sg-select2 js-select-ajax',
123
+ 'data-select-class' => 'js-select-ajax',
124
+ 'data-select-type' => 'ajax',
125
+ 'data-value-param' => 'page',
126
+ 'multiple' => 'multiple'
127
+ ),
128
+ 'infoAttrs' => array(
129
+ 'label' => 'Select Your Pages',
130
+ 'info' => __('Select the pages on your site where the specific popup will be shown.', SG_POPUP_TEXT_DOMAIN)
131
+ )
132
+ ),
133
+ 'post_type' => array(
134
+ 'htmlAttrs' => array(
135
+ 'class' => 'js-sg-select2 js-select-ajax',
136
+ 'data-select-class' => 'js-select-ajax',
137
+ 'data-select-type' => 'multiple',
138
+ 'data-value-param' => 'postTypes',
139
+ 'isNotPostType' => true,
140
+ 'multiple' => 'multiple'
141
+ ),
142
+ 'infoAttrs' => array(
143
+ 'label' => 'Select Your post types',
144
+ 'info' => __('Specify the post types on your site to show the popup.', SG_POPUP_TEXT_DOMAIN)
145
+ )
146
+ ),
147
+ 'post_category' => array(
148
+ 'htmlAttrs' => array(
149
+ 'class' => 'js-sg-select2 js-select-ajax',
150
+ 'data-select-class' => 'js-select-ajax',
151
+ 'data-select-type' => 'multiple',
152
+ 'data-value-param' => 'postCategories',
153
+ 'isNotPostType' => true,
154
+ 'multiple' => 'multiple'
155
+ ),
156
+ 'infoAttrs' => array(
157
+ 'label' => 'Select post categories',
158
+ 'info' => __('Select the post categories on which the popup should be shown.', SG_POPUP_TEXT_DOMAIN)
159
+ )
160
+ ),
161
+ 'page_type' => array(
162
+ 'htmlAttrs' => array(
163
+ 'class' => 'js-sg-select2 js-select-ajax',
164
+ 'data-select-class' => 'js-select-ajax',
165
+ 'data-select-type' => 'multiple',
166
+ 'data-value-param' => 'postCategories',
167
+ 'isNotPostType' => true,
168
+ 'multiple' => 'multiple'
169
+ ),
170
+ 'infoAttrs' => array(
171
+ 'label' => 'Select specific page types',
172
+ 'info' => __('Specify the page types where the popup will be shown.', SG_POPUP_TEXT_DOMAIN)
173
+ )
174
+ ),
175
+ 'page_template' => array(
176
+ 'htmlAttrs' => array(
177
+ 'class' => 'js-sg-select2 js-select-ajax',
178
+ 'data-select-class' => 'js-select-ajax',
179
+ 'data-select-type' => 'multiple',
180
+ 'data-value-param' => 'pageTemplate',
181
+ 'isNotPostType' => true,
182
+ 'multiple' => 'multiple'
183
+ ),
184
+ 'infoAttrs' => array(
185
+ 'label' => 'Select page template',
186
+ 'info' => __('Select the page templates on which the popup will be shown.', SG_POPUP_TEXT_DOMAIN)
187
+ )
188
+ ),
189
+ 'post_tags_ids' => array(
190
+ 'htmlAttrs' => array(
191
+ 'class' => 'js-sg-select2 js-select-ajax',
192
+ 'data-select-class' => 'js-select-ajax',
193
+ 'data-select-type' => 'multiple',
194
+ 'data-value-param' => 'postTags',
195
+ 'isNotPostType' => true,
196
+ 'multiple' => 'multiple'
197
+ ),
198
+ 'infoAttrs' => array(
199
+ 'label' => 'Select tags',
200
+ 'info' => __('Select the tags on your site for popup showing', SG_POPUP_TEXT_DOMAIN)
201
+ )
202
+ )
203
+ );
204
+
205
+ $popupTarget['columns'] = apply_filters('sgPopupTargetColumns', $targetData);
206
+ $popupTarget['columnTypes'] = apply_filters('sgPopupTargetTypes', $targetElementTypes);
207
+ $popupTarget['paramsData'] = apply_filters('sgPopupTargetData', $targetDataParams);
208
+ $popupTarget['initialData'] = apply_filters('sgPopupTargetInitialData', $targetInitialData);
209
+ $popupTarget['operators'] = apply_filters('sgpbPopupEventsOperators', $targetOperators);
210
+ $popupTarget['attrs'] = apply_filters('sgPopupTargetAttrs', $targetAttrs);
211
+
212
+ $SGPB_DATA_CONFIG_ARRAY['target'] = $popupTarget;
213
+
214
+ /*Target condition config*/
215
+
216
+ /*
217
+ *
218
+ * Events data
219
+ *
220
+ **/
221
+ $eventsData = array('param' => 'Event name', 'value' => 'Delay');
222
+ $hiddenOptionData = array();
223
+
224
+ $eventsRowTypes = array(
225
+ 'param' => 'select',
226
+ 'operator' => 'select',
227
+ 'value' => 'text',
228
+ 'load' => 'number',
229
+ 'repetitive' => 'checkbox',
230
+ 'repetitivePeriod' => 'text',
231
+ SGPB_CLICK_ACTION_KEY => 'select',
232
+ 'clickActionCustomClass' => 'text',
233
+ 'hoverActionCustomClass' => 'text',
234
+ 'defaultClickClassName' => 'conditionalText',
235
+ 'defaultHoverClassName' => 'conditionalText'
236
+ );
237
+
238
+ $params = array(
239
+ 'load' => 'On load',
240
+ SGPB_CSS_CLASS_ACTIONS_KEY => __('Set by CSS class', SG_POPUP_TEXT_DOMAIN),
241
+ SGPB_CLICK_ACTION_KEY => __('On Click', SG_POPUP_TEXT_DOMAIN),
242
+ SGPB_HOVER_ACTION_KEY => __('On Hover', SG_POPUP_TEXT_DOMAIN),
243
+ 'inactivity' => __('Inactivity', SG_POPUP_TEXT_DOMAIN),
244
+ 'onScroll' => __('On Scroll', SG_POPUP_TEXT_DOMAIN)
245
+ );
246
+
247
+ $hiddenOptionData['load'] = array(
248
+ 'options' => array(
249
+ 'repetitive' => 'Repetitive popup'
250
+ )
251
+ );
252
+
253
+ $onLoadData = 0;
254
+
255
+ $eventsDataParams['param'] = $params;
256
+ $eventsDataParams['operator'] = array();
257
+ $eventsDataParams['load'] = $onLoadData;
258
+ $eventsDataParams['clickActionCustomClass'] = '';
259
+ $eventsDataParams['hoverActionCustomClass'] = '';
260
+ $eventsDataParams['defaultClickClassName'] = 'sg-popup-id-';
261
+ $eventsDataParams['defaultHoverClassName'] = 'sg-popup-hover-';
262
+ $eventsDataParams[SGPB_CSS_CLASS_ACTIONS_KEY] = null;
263
+ $eventsDataParams[SGPB_CLICK_ACTION_KEY.'Operator'] = ConfigDataHelper::getClickActionOptions();
264
+ $eventsDataParams[SGPB_HOVER_ACTION_KEY.'Operator'] = ConfigDataHelper::getHoverActionOptions();
265
+ /*Hidden params data*/
266
+ $eventsDataParams['repetitive'] = '';
267
+ $eventsDataParams['repetitivePeriod'] = 0;
268
+
269
+ $eventOperators = array(
270
+ array('operator' => 'add', 'name' => 'Add'),
271
+ array('operator' => 'edit', 'name' => 'Edit'),
272
+ array('operator' => 'delete', 'name' => 'Delete')
273
+ );
274
+
275
+ $eventsInitialData = array(
276
+ array('param' => 'load', 'value' => '', 'hiddenOption' => array())
277
+ );
278
+
279
+ $eventsAttrs = array(
280
+ 'param' => array(
281
+ 'htmlAttrs' => array(
282
+ 'class' => 'js-sg-select2 js-select-basic sgpb-selectbox-settings',
283
+ 'data-select-class' => 'js-select-basic',
284
+ 'data-select-type' => 'basic'
285
+ ),
286
+ 'infoAttrs' => array(
287
+ 'label' => 'Event',
288
+ 'info' => __('Select when the popup should appear on the page.', SG_POPUP_TEXT_DOMAIN)
289
+ )
290
+ ),
291
+ 'operator' => array(
292
+ 'htmlAttrs' => array(
293
+ 'class' => 'js-sg-select2 js-select-basic',
294
+ 'data-select-class' => 'js-select-basic',
295
+ 'data-select-type' => 'basic'
296
+ ),
297
+ 'infoAttrs' => array(
298
+ 'label' => 'Options',
299
+ 'info' => __('Select the condition for the current event.', SG_POPUP_TEXT_DOMAIN)
300
+ )
301
+ ),
302
+ 'load' => array(
303
+ 'htmlAttrs' => array('class' => 'js-sg-onload-text formItem__input formItem__input_select2_num_input', 'placeholder' => __('default custom delay will be used', SG_POPUP_TEXT_DOMAIN), 'min' => 0),
304
+ 'infoAttrs' => array(
305
+ 'label' => 'Delay',
306
+ 'info' => __('Specify how long the popup appearance should be delayed after loading the page (in sec).', SG_POPUP_TEXT_DOMAIN)
307
+ )
308
+ ),
309
+ SGPB_CLICK_ACTION_KEY => array(
310
+ 'htmlAttrs' => array(
311
+ 'class' => 'js-sg-select2 js-select-basic formItem__input formItem__input_select2_num_input',
312
+ 'data-select-class' => 'js-select-basic',
313
+ 'data-select-type' => 'basic'
314
+ ),
315
+ 'infoAttrs' => array(
316
+ 'label' => 'Click Event',
317
+ 'info' => __('Specify the part of the page, in percentages, where the popup should appear after scrolling.', SG_POPUP_TEXT_DOMAIN)
318
+ )
319
+ ),
320
+ SGPB_HOVER_ACTION_KEY => array(
321
+ 'htmlAttrs' => array(
322
+ 'class' => 'js-sg-select2 js-select-basic formItem__input formItem__input_select2_num_input',
323
+ 'data-select-class' => 'js-select-basic',
324
+ 'data-select-type' => 'basic'
325
+ ),
326
+ 'infoAttrs' => array(
327
+ 'label' => 'Hover Event',
328
+ 'info' => __('Specify the part of the page, in percentages, where the popup should appear after scrolling.', SG_POPUP_TEXT_DOMAIN)
329
+ )
330
+ ),
331
+ 'clickActionCustomClass' => array(
332
+ 'htmlAttrs' => array('class' => 'js-sg-inactivity-text formItem__input formItem__input_select2_num_input', 'min' => 0),
333
+ 'infoAttrs' => array(
334
+ 'label' => 'Custom Class',
335
+ 'info' => __('Add the CSS class name of your HTML element which will trigger this popup after click.', SG_POPUP_TEXT_DOMAIN)
336
+ )
337
+ ),
338
+ 'hoverActionCustomClass' => array(
339
+ 'htmlAttrs' => array('class' => 'js-sg-inactivity-text formItem__input formItem__input_select2_num_input', 'min' => 0),
340
+ 'infoAttrs' => array(
341
+ 'label' => 'Custom Class',
342
+ 'info' => __('Add the CSS class name of your HTML element which will trigger this popup after click.', SG_POPUP_TEXT_DOMAIN)
343
+ )
344
+ ),
345
+ 'defaultClickClassName' => array(
346
+ 'htmlAttrs' => array(
347
+ 'class' => 'js-sg-click-event formItem__input formItem__input_select2_num_input',
348
+ 'min' => 0,
349
+ 'readonly' => '',
350
+ 'value' => 'sg-popup-id-',
351
+ 'beforeSaveLabel' => __('Please save popup to generate class name.', SG_POPUP_TEXT_DOMAIN)
352
+ ),
353
+ 'infoAttrs' => array(
354
+ 'label' => 'Default Class',
355
+ 'info' => __('Add the following CSS class into your HTML element.', SG_POPUP_TEXT_DOMAIN)
356
+ )
357
+ ),
358
+ 'defaultHoverClassName' => array(
359
+ 'htmlAttrs' => array(
360
+ 'class' => 'js-sg-hover-event formItem__input formItem__input_select2_num_input',
361
+ 'min' => 0,
362
+ 'readonly' => '',
363
+ 'value' => 'sg-popup-hover-',
364
+ 'beforeSaveLabel' => __('Please save popup to generate class name.', SG_POPUP_TEXT_DOMAIN)
365
+ ),
366
+ 'infoAttrs' => array(
367
+ 'label' => 'Default Class',
368
+ 'info' => __('Add the following CSS class into your HTML element.', SG_POPUP_TEXT_DOMAIN)
369
+ )
370
+ ),
371
+ 'repetitive' => array(
372
+ 'htmlAttrs' => array(
373
+ 'class' => 'sgpb-popup-option sgpb-popup-accordion',
374
+ 'data-name' => 'repetitive',
375
+ 'autocomplete' => 'off'
376
+ ),
377
+ 'infoAttrs' => array(
378
+ 'label' => 'Repetitive open popup',
379
+ 'info' => __('If this option is enabled the same popup will open up after every X seconds you have defined (after closing it).', SG_POPUP_TEXT_DOMAIN)
380
+ ),
381
+ 'childOptions' => array('repetitivePeriod')
382
+ ),
383
+ 'repetitivePeriod' => array(
384
+ 'htmlAttrs' => array(
385
+ 'class' => 'sgpb-popup-option',
386
+ 'autocomplete' => 'off'
387
+ ),
388
+ 'infoAttrs' => array(
389
+ 'label' => 'period',
390
+ 'info' => __('This is info', SG_POPUP_TEXT_DOMAIN)
391
+ )
392
+ )
393
+ );
394
+
395
+ $popupEvents['columns'] = apply_filters('sgPopupEventColumns', $eventsData);
396
+ $popupEvents['columnTypes'] = apply_filters('sgPopupEventTypes', $eventsRowTypes);
397
+ $popupEvents['paramsData'] = apply_filters('sgPopupEventsData', $eventsDataParams);
398
+ $popupEvents['initialData'] = apply_filters('sgPopupEventsInitialData', $eventsInitialData);
399
+ $popupEvents['operators'] = apply_filters('sgPopupEventOperators', $eventOperators);
400
+ $popupEvents['hiddenOptionData'] = apply_filters('sgEventsHiddenData', $hiddenOptionData);
401
+ $popupEvents['attrs'] = apply_filters('sgPopupEventAttrs', $eventsAttrs);
402
+
403
+ $popupEvents['specialDefaultOperator'] = apply_filters('sgPopupEventsOperators', ' ');
404
+ $popupEvents['operatorAllowInConditions'] = apply_filters('sgPopupEventsOperatorAllowInConditions', array(SGPB_CLICK_ACTION_KEY, SGPB_HOVER_ACTION_KEY));
405
+
406
+ $SGPB_DATA_CONFIG_ARRAY['events'] = $popupEvents;
407
+
408
+ /*Target condition config*/
409
+ $targetData = array('param' => 'Pages', 'operator' => 'Is not', 'value' => 'Value');
410
+ $targetElementTypes = array(
411
+ 'param' => 'select',
412
+ 'operator' => 'select',
413
+ 'value' => 'select',
414
+ 'select_role' => 'select',
415
+ );
416
+
417
+ $targetParams = array(
418
+ 'select_role' => __('Select role', SG_POPUP_TEXT_DOMAIN)
419
+ );
420
+
421
+ $targetOperators = array(
422
+ array('operator' => 'add', 'name' => __('Add', SG_POPUP_TEXT_DOMAIN)),
423
+ array('operator' => 'delete', 'name' => __('Delete', SG_POPUP_TEXT_DOMAIN))
424
+ );
425
+
426
+ $targetDataOperator = array(
427
+ '==' => __('Is', SG_POPUP_TEXT_DOMAIN),
428
+ '!=' => __('Is not', SG_POPUP_TEXT_DOMAIN)
429
+ );
430
+
431
+ $targetInitialData = array(
432
+ array('param' => 'select_role', 'operator' => '==', 'value' => '')
433
+ );
434
+
435
+ $targetDataParams['param'] = apply_filters('sgpbPopupSpecialEventsParams', $targetParams);
436
+ $targetDataParams['operator'] = apply_filters('sgpbPopupConditionsOperator', $targetDataOperator);
437
+
438
+ $targetDataParams['select_role'] = null;
439
+
440
+ $targetAttrs = array(
441
+ 'param' => array(
442
+ 'htmlAttrs' => array(
443
+ 'class' => 'js-sg-select2 js-select-basic sgpb-selectbox-settings',
444
+ 'data-select-class' => 'js-select-basic',
445
+ 'data-select-type' => 'basic',
446
+ 'autocomplete' => 'off'
447
+ ),
448
+ 'infoAttrs' => array(
449
+ 'label' => 'Condition',
450
+ 'info' => __('Target visitors to show the popup by different conditions.', SG_POPUP_TEXT_DOMAIN)
451
+ )
452
+ ),
453
+ 'operator' => array(
454
+ 'htmlAttrs' => array(
455
+ 'class' => 'js-sg-select2 js-select-basic',
456
+ 'data-select-class' => 'js-select-basic',
457
+ 'data-select-type' => 'basic'
458
+ ),
459
+ 'infoAttrs' => array(
460
+ 'label' => 'Rule',
461
+ 'info' => __('Allow or Disallow popup showing for the selected conditions.', SG_POPUP_TEXT_DOMAIN)
462
+ )
463
+ )
464
+ );
465
+
466
+ $popupConditions['columns'] = apply_filters('sgPopupConditionsColumns', $targetData);
467
+ $popupConditions['columnTypes'] = apply_filters('sgPopupConditionsTypes', $targetElementTypes);
468
+ $popupConditions['paramsData'] = apply_filters('sgPopupConditionsData', $targetDataParams);
469
+ $popupConditions['initialData'] = apply_filters('sgPopupConditionsInitialData', $targetInitialData);
470
+ $popupConditions['operators'] = apply_filters('sgPopupConditionsOperators', $targetOperators);
471
+ $popupConditions['attrs'] = apply_filters('sgPopupConditionsAttrs', $targetAttrs);
472
+
473
+ $popupConditions['specialDefaultOperator'] = apply_filters('sgPopupConditionsOperators', $targetDataOperator);
474
+ $popupConditions['operatorAllowInConditions'] = apply_filters('sgPopupConditionsOperatorAllowInConditions', array());
475
+
476
+ $SGPB_DATA_CONFIG_ARRAY['conditions'] = $popupConditions;
477
+
478
+ $SGPB_DATA_CONFIG_ARRAY['behavior-after-special-events'] = self::getBehaviorAfterSpecialEventsConfig();
479
+ $SGPB_DATA_CONFIG_ARRAY = apply_filters('sgpbConfigArray', $SGPB_DATA_CONFIG_ARRAY);
480
+ /*Target condition config*/
481
+ }
482
+
483
+ public static function allFreeExtensionsKeys()
484
+ {
485
+ $keys = array();
486
+
487
+ return $keys;
488
+ }
489
+
490
+ public static function allExtensionsKeys()
491
+ {
492
+ $keys = array();
493
+ $keys[] = array(
494
+ 'label' => __('AdBlock', SG_POPUP_TEXT_DOMAIN),
495
+ 'version' => '3.0',
496
+ 'stable_version' => '3.0',
497
+ 'pluginKey' => 'popupbuilder-adblock/PopupBuilderAdBlock.php',
498
+ 'key' => 'sgpbAdBlock',
499
+ 'url' => SG_POPUP_AD_BLOCK_URL
500
+ );
501
+ $keys[] = array(
502
+ 'label' => __('Advanced Closing', SG_POPUP_TEXT_DOMAIN),
503
+ 'version' => '2.0',
504
+ 'stable_version' => '2.0',
505
+ 'pluginKey' => 'popupbuilder-advanced-closing/PopupBuilderAdvancedClosing.php',
506
+ 'key' => 'advancedClosing',
507
+ 'url' => SG_POPUP_ADVANCED_CLOSING_URL
508
+ );
509
+ $keys[] = array(
510
+ 'label' => __('Advanced Targeting', SG_POPUP_TEXT_DOMAIN),
511
+ 'version' => '3.0',
512
+ 'stable_version' => '3.0',
513
+ 'pluginKey' => 'popupbuilder-advanced-targeting/PopupBuilderAdvancedTargeting.php',
514
+ 'key' => 'sgpbAdvancedTargeting',
515
+ 'url' => SG_POPUP_ADVANCED_TARGETING_URL
516
+ );
517
+ $keys[] = array(
518
+ 'label' => __('Age Restriction', SG_POPUP_TEXT_DOMAIN),
519
+ 'version' => '2.0',
520
+ 'stable_version' => '2.0',
521
+ 'pluginKey' => 'popupbuilder-age-verification/PopupBuilderAgeverification.php',
522
+ 'key' => 'ageVerification',
523
+ 'url' => SGPB_AGE_VERIFICATION_PLUGIN_URL
524
+ );
525
+ $keys[] = array(
526
+ 'label' => __('Analytics', SG_POPUP_TEXT_DOMAIN),
527
+ 'version' => '4.0',
528
+ 'stable_version' => '4.0',
529
+ 'pluginKey' => 'popupbuilder-analytics/PopupBuilderAnalytics.php',
530
+ 'key' => 'sgpbAnalitics',
531
+ 'url' => SG_POPUP_ANALYTICS_URL
532
+ );
533
+ $keys[] = array(
534
+ 'label' => __('AWeber', SG_POPUP_TEXT_DOMAIN),
535
+ 'version' => '3.0',
536
+ 'stable_version' => '3.0',
537
+ 'pluginKey' => 'popupbuilder-aweber/PopupBuilderAWeber.php',
538
+ 'key' => 'sgpbAWeber',
539
+ 'url' => SG_POPUP_AWEBER_URL
540
+ );
541
+ $keys[] = array(
542
+ 'label' => __('Contact Form', SG_POPUP_TEXT_DOMAIN),
543
+ 'version' => '3.0',
544
+ 'stable_version' => '3.0',
545
+ 'pluginKey' => 'popupbuilder-contact-form/PopupBuilderContactForm.php',
546
+ 'key' => 'contactForm',
547
+ 'url' => SG_POPUP_CONTACT_FORM_URL
548
+ );
549
+ $keys[] = array(
550
+ 'label' => __('Countdown', SG_POPUP_TEXT_DOMAIN),
551
+ 'version' => '3.0',
552
+ 'stable_version' => '3.0',
553
+ 'pluginKey' => 'popupbuilder-countdown/PopupBuilderCountdown.php',
554
+ 'key' => 'countdown',
555
+ 'url' => SG_POPUP_COUNTDOWN_URL
556
+ );
557
+ $keys[] = array(
558
+ 'label' => __('EDD', SG_POPUP_TEXT_DOMAIN),
559
+ 'version' => '2.0',
560
+ 'stable_version' => '2.0',
561
+ 'pluginKey' => 'popupbuilder-edd/PopupBuilderEdd.php',
562
+ 'key' => 'edd',
563
+ 'url' => SGPB_EDD_PLUGIN_URL
564
+ );
565
+ $keys[] = array(
566
+ 'label' => __('Exit Intent',SG_POPUP_TEXT_DOMAIN),
567
+ 'version' => '4.0',
568
+ 'stable_version' => '4.0',
569
+ 'pluginKey' => 'popupbuilder-exit-intent/PopupBuilderExitIntent.php',
570
+ 'key' => 'sgpbExitIntent',
571
+ 'url' => SG_POPUP_EXIT_INTENT_URL
572
+ );
573
+ $keys[] = array(
574
+ 'label' => __('Gamification', SG_POPUP_TEXT_DOMAIN),
575
+ 'version' => '2.0',
576
+ 'stable_version' => '2.0',
577
+ 'pluginKey' => 'popupbuilder-gamification/PopupBuilderGamification.php',
578
+ 'key' => 'gamification',
579
+ 'url' => SGPB_GAMIFICATION_PLUGIN_URL
580
+ );
581
+ $keys[] = array(
582
+ 'label' => __('Geo Targeting', SG_POPUP_TEXT_DOMAIN),
583
+ 'version' => '3.0',
584
+ 'stable_version' => '3.0',
585
+ 'pluginKey' => 'popupbuilder-geo-targeting/PopupBuilderGeoTargeting.php',
586
+ 'key' => 'geo-targeting',
587
+ 'url' => SG_POPUP_GEO_TARGETING_URL
588
+ );
589
+ $keys[] = array(
590
+ 'label' => __('Iframe', SG_POPUP_TEXT_DOMAIN),
591
+ 'version' => '2.0',
592
+ 'stable_version' => '2.0',
593
+ 'pluginKey' => 'popupbuilder-iframe/PopupBuilderIframe.php',
594
+ 'key' => 'iframe',
595
+ 'url' => SG_POPUP_IFRAME_URL
596
+ );
597
+ $keys[] = array(
598
+ 'label' => __('Inactivity', SG_POPUP_TEXT_DOMAIN),
599
+ 'version' => '2.0',
600
+ 'stable_version' => '2.0',
601
+ 'pluginKey' => 'popupbuilder-inactivity/PopupBuilderInactivity.php',
602
+ 'key' => 'sgpbInactivity',
603
+ 'url' => SG_POPUP_INACTIVITY_URL
604
+ );
605
+ $keys[] = array(
606
+ 'label' => __('Log In', SG_POPUP_TEXT_DOMAIN),
607
+ 'version' => '3.0',
608
+ 'stable_version' => '3.0',
609
+ 'pluginKey' => 'popupbuilder-login/PopupBuilderLogin.php',
610
+ 'key' => 'login',
611
+ 'url' => SG_POPUP_LOGIN_URL
612
+ );
613
+ $keys[] = array(
614
+ 'label' => __('Mailchimp', SG_POPUP_TEXT_DOMAIN),
615
+ 'version' => '4.0',
616
+ 'stable_version' => '4.0',
617
+ 'pluginKey' => 'popupbuilder-mailchimp/PopupBuilderMailchimp.php',
618
+ 'key' => 'sgpbMailchimp',
619
+ 'url' => SG_POPUP_MAILCHIMP_URL
620
+ );
621
+ $keys[] = array(
622
+ 'label' => __('PDF', SG_POPUP_TEXT_DOMAIN),
623
+ 'version' => '2.0',
624
+ 'stable_version' => '2.0',
625
+ 'pluginKey' => 'popupbuilder-pdf/PopupBuilderPdf.php',
626
+ 'key' => 'pdf',
627
+ 'url' => SGPB_PDF_PLUGIN_URL
628
+ );
629
+ $keys[] = array(
630
+ 'label' => __('Push Notification', SG_POPUP_TEXT_DOMAIN),
631
+ 'version' => '2.0',
632
+ 'stable_version' => '2.0',
633
+ 'pluginKey' => 'popupbuilder-push-notification/PopupBuilderPushNotification.php',
634
+ 'key' => 'pushNotification',
635
+ 'url' => SG_POPUP_PUSH_NOTIFICATION_URL
636
+ );
637
+ $keys[] = array(
638
+ 'label' => __('Random', SG_POPUP_TEXT_DOMAIN),
639
+ 'version' => '2.0',
640
+ 'stable_version' => '2.0',
641
+ 'pluginKey' => 'popupbuilder-random/PopupBuilderRandom.php',
642
+ 'key' => 'sgpbRandom',
643
+ 'url' => SG_POPUP_RANDOM_URL
644
+ );
645
+ $keys[] = array(
646
+ 'label' => __('Recent Sales', SG_POPUP_TEXT_DOMAIN),
647
+ 'version' => '2.0',
648
+ 'stable_version' => '2.0',
649
+ 'pluginKey' => 'popupbuilder-recent-sales/PopupBuilderRecentSales.php',
650
+ 'key' => 'sgpbRecentSales',
651
+ 'url' => SG_POPUP_RECENT_SALES_URL
652
+ );
653
+ $keys[] = array(
654
+ 'label' => __('Registration', SG_POPUP_TEXT_DOMAIN),
655
+ 'version' => '2.0',
656
+ 'stable_version' => '2.0',
657
+ 'pluginKey' => 'popupbuilder-registration/PopupBuilderRegistration.php',
658
+ 'key' => 'registration',
659
+ 'url' => SG_POPUP_REGISTRATION_URL
660
+ );
661
+ $keys[] = array(
662
+ 'label' => __('Restriction', SG_POPUP_TEXT_DOMAIN),
663
+ 'version' => '3.0',
664
+ 'stable_version' => '3.0',
665
+ 'pluginKey' => 'popupbuilder-restriction/PopupBuilderAgerestriction.php',
666
+ 'key' => 'ageRestriction',
667
+ 'url' => SG_POPUP_RESTRICTION_URL
668
+ );
669
+ $keys[] = array(
670
+ 'label' => __('Scheduling', SG_POPUP_TEXT_DOMAIN),
671
+ 'version' => '2.0',
672
+ 'stable_version' => '2.0',
673
+ 'pluginKey' => 'popupbuilder-scheduling/PopupBuilderScheduling.php',
674
+ 'key' => 'scheduling',
675
+ 'url' => SG_POPUP_SCHEDULING_URL
676
+ );
677
+ $keys[] = array(
678
+ 'label' => __('Scroll', SG_POPUP_TEXT_DOMAIN),
679
+ 'version' => '3.0',
680
+ 'stable_version' => '3.0',
681
+ 'pluginKey' => 'popupbuilder-scroll/PopupBuilderScroll.php',
682
+ 'key' => 'sgpbScroll',
683
+ 'url' => SG_POPUP_SCROLL_URL
684
+ );
685
+ $keys[] = array(
686
+ 'label' => __('Social', SG_POPUP_TEXT_DOMAIN),
687
+ 'version' => '2.0',
688
+ 'stable_version' => '2.0',
689
+ 'pluginKey' => 'popupbuilder-social/PopupBuilderSocial.php',
690
+ 'key' => 'social',
691
+ 'url' => SG_POPUP_SOCIAL_URL
692
+ );
693
+ $keys[] = array(
694
+ 'label' => __('Subscription Plus', SG_POPUP_TEXT_DOMAIN),
695
+ 'version' => '4.0',
696
+ 'stable_version' => '4.0',
697
+ 'pluginKey' => 'popupbuilder-subscription-plus/PopupBuilderSubscriptionPlus.php',
698
+ 'key' => 'subscriptionPlus',
699
+ 'url' => SG_POPUP_SUBSCRIPTION_PLUS_URL
700
+ );
701
+ $keys[] = array(
702
+ 'label' => __('Video', SG_POPUP_TEXT_DOMAIN),
703
+ 'version' => '2.0',
704
+ 'stable_version' => '2.0',
705
+ 'pluginKey' => 'popupbuilder-video/PopupBuilderVideo.php',
706
+ 'key' => 'video',
707
+ 'url' => SG_POPUP_VIDEO_URL
708
+ );
709
+ $keys[] = array(
710
+ 'label' => __('WooCommerce', SG_POPUP_TEXT_DOMAIN),
711
+ 'version' => '3.0',
712
+ 'stable_version' => '3.0',
713
+ 'pluginKey' => 'popupbuilder-woocommerce/popupbuilderWoocommerce.php',
714
+ 'key' => 'sgpbWOO',
715
+ 'url' => SG_POPUP_WOOCOMMERCE_URL
716
+ );
717
+
718
+ return apply_filters('sgpbExtensionsKeys', $keys);
719
+ }
720
+
721
+ private static function getBehaviorAfterSpecialEventsConfig()
722
+ {
723
+ $columns = array(
724
+ 'param' => 'Event',
725
+ 'operator' => 'Behavior',
726
+ 'value' => 'Value'
727
+ );
728
+
729
+ $columnTypes = array(
730
+ 'param' => 'select',
731
+ 'operator' => 'select',
732
+ 'value' => 'select',
733
+ 'select_event' => 'select',
734
+ 'select_behavior' => 'select',
735
+ 'redirect-url' => 'url',
736
+ 'open-popup' => 'select',
737
+ 'close-popup' => 'number'
738
+ );
739
+
740
+ $params = array(
741
+ 'param' => array(
742
+ 'select_event' => __('Select event', SG_POPUP_TEXT_DOMAIN),
743
+ __('Special events', SG_POPUP_TEXT_DOMAIN) => array(
744
+ SGPB_CONTACT_FORM_7_BEHAVIOR_KEY => __('Contact Form 7 submission', SG_POPUP_TEXT_DOMAIN)
745
+ )
746
+ ),
747
+ 'operator' => array(
748
+ 'select_behavior' => __('Select behavior', SG_POPUP_TEXT_DOMAIN),
749
+ __('Behaviors', SG_POPUP_TEXT_DOMAIN) => array(
750
+ 'redirect-url' => __('Redirect to URL', SG_POPUP_TEXT_DOMAIN),
751
+ 'open-popup' => __('Open another popup', SG_POPUP_TEXT_DOMAIN),
752
+ 'close-popup' => __('Close current popup', SG_POPUP_TEXT_DOMAIN)
753
+ )
754
+ ),
755
+ 'redirect-url' => '',
756
+ 'open-popup' => array(),
757
+ 'close-popup' => '',
758
+ 'select_event' => null,
759
+ 'select_behavior' => null
760
+ );
761
+
762
+ $initialData = array(
763
+ array(
764
+ 'param' => 'select_event',
765
+ 'operator' => ''
766
+ )
767
+ );
768
+
769
+ $attrs = array(
770
+ 'param' => array(
771
+ 'htmlAttrs' => array(
772
+ 'class' => 'js-sg-select2 js-select-basic',
773
+ 'data-select-class' => 'js-select-basic',
774
+ 'data-select-type' => 'basic'
775
+ ),
776
+ 'infoAttrs' => array(
777
+ 'label' => __('Event', SG_POPUP_TEXT_DOMAIN),
778
+ 'info' => __('Select the special event you want to catch.', SG_POPUP_TEXT_DOMAIN)
779
+ )
780
+ ),
781
+ 'operator' => array(
782
+ 'htmlAttrs' => array(
783
+ 'class' => 'js-sg-select2 js-select-basic',
784
+ 'data-select-class' => 'js-select-basic',
785
+ 'data-select-type' => 'basic'
786
+ ),
787
+ 'infoAttrs' => array(
788
+ 'label' => __('Behavior', SG_POPUP_TEXT_DOMAIN),
789
+ 'info' => __('Select what should happen after the special event.', SG_POPUP_TEXT_DOMAIN)
790
+ )
791
+ ),
792
+ 'redirect-url' => array(
793
+ 'htmlAttrs' => array(
794
+ 'class' => 'sg-full-width formItem__input formItem__input_select2_num_input',
795
+ 'placeholder' => 'https://www.example.com',
796
+ 'required' => 'required'
797
+ ),
798
+ 'infoAttrs' => array(
799
+ 'label' => __('URL', SG_POPUP_TEXT_DOMAIN),
800
+ 'info' => __('Enter the URL of the page should be redirected to.', SG_POPUP_TEXT_DOMAIN)
801
+ )
802
+ ),
803
+ 'open-popup' => array(
804
+ 'htmlAttrs' => array(
805
+ 'class' => 'js-sg-select2 js-select-ajax',
806
+ 'data-select-class' => 'js-select-ajax',
807
+ 'data-select-type' => 'ajax',
808
+ 'data-value-param' => SG_POPUP_POST_TYPE,
809
+ 'required' => 'required'
810
+ ),
811
+ 'infoAttrs' => array(
812
+ 'label' => __('Select popup', SG_POPUP_TEXT_DOMAIN),
813
+ 'info' => __('Select the popup that should be opened.', SG_POPUP_TEXT_DOMAIN)
814
+ )
815
+ ),
816
+ 'close-popup' => array(
817
+ 'htmlAttrs' => array(
818
+ 'class' => 'sg-full-width formItem__input formItem__input_select2_num_input',
819
+ 'required' => 'required',
820
+ 'value' => 0,
821
+ 'min' => 0
822
+ ),
823
+ 'infoAttrs' => array(
824
+ 'label' => __('Delay', SG_POPUP_TEXT_DOMAIN),
825
+ 'info' => __('After how many seconds the popup should close.', SG_POPUP_TEXT_DOMAIN)
826
+ )
827
+ )
828
+ );
829
+
830
+ $config = array();
831
+ $config['columns'] = apply_filters('sgPopupSpecialEventsColumns', $columns);
832
+ $config['columnTypes'] = apply_filters('sgPopupSpecialEventsColumnTypes', $columnTypes);
833
+ $config['paramsData'] = apply_filters('sgPopupSpecialEventsParams', $params);
834
+ $config['initialData'] = apply_filters('sgPopupSpecialEventsInitialData', $initialData);
835
+ $config['attrs'] = apply_filters('sgPopupSpecialEventsAttrs', $attrs);
836
+ $config['operators'] = apply_filters('sgpbPopupSpecialEventsOperators', array());
837
+ $config['specialDefaultOperator'] = apply_filters('sgpbPopupSpecialEventsDefaultOperators', ' ');
838
+
839
+ return $config;
840
+ }
841
+
842
+ public static function popupDefaultOptions()
843
+ {
844
+ global $SGPB_OPTIONS;
845
+ global $SGPB_DATA_CONFIG_ARRAY;
846
+
847
+ $targetDefaultValue = array($SGPB_DATA_CONFIG_ARRAY['target']['initialData']);
848
+
849
+ $eventsDefaultData = array($SGPB_DATA_CONFIG_ARRAY['events']['initialData']);
850
+ $conditionsDefaultData = array($SGPB_DATA_CONFIG_ARRAY['conditions']['initialData']);
851
+ $specialEventsDefaultData = array($SGPB_DATA_CONFIG_ARRAY['behavior-after-special-events']['initialData']);
852
+
853
+ $options = array();
854
+
855
+ $options[] = array('name' => 'sgpb-target', 'type' => 'array', 'defaultValue' => $targetDefaultValue);
856
+ $options[] = array('name' => 'sgpb-events', 'type' => 'array', 'defaultValue' => $eventsDefaultData);
857
+ $options[] = array('name' => 'sgpb-conditions', 'type' => 'array', 'defaultValue' => $conditionsDefaultData, 'min-version' => SGPB_POPUP_PRO_MIN_VERSION, 'min-pkg' => SGPB_POPUP_PKG_SILVER);
858
+ $options[] = array('name' => 'sgpb-behavior-after-special-events', 'type' => 'array', 'defaultValue' => $specialEventsDefaultData);
859
+ $options[] = array('name' => 'sgpb-type', 'type' => 'text', 'defaultValue' => 'html');
860
+ $options[] = array('name' => 'sgpb-popup-counting-disabled', 'type' => 'checkbox', 'defaultValue' => '');
861
+ $options[] = array('name' => 'sgpb-esc-key', 'type' => 'checkbox', 'defaultValue' => 'on');
862
+ $options[] = array('name' => 'sgpb-enable-close-button', 'type' => 'checkbox', 'defaultValue' => 'on');
863
+ $options[] = array('name' => 'sgpb-enable-content-scrolling', 'type' => 'checkbox', 'defaultValue' => 'on');
864
+ $options[] = array('name' => 'sgpb-overlay-click', 'type' => 'checkbox', 'defaultValue' => 'on');
865
+ $options[] = array('name' => 'sgpb-content-click', 'type' => 'checkbox', 'defaultValue' => '');
866
+ $options[] = array('name' => 'sgpb-subs-hide-subs-users', 'type' => 'checkbox', 'defaultValue' => 'on');
867
+ $options[] = array('name' => 'sgpb-content-click-behavior', 'type' => 'text', 'defaultValue' => 'close');
868
+ $options[] = array('name' => 'sgpb-click-redirect-to-url', 'type' => 'text', 'defaultValue' => '');
869
+ $options[] = array('name' => 'sgpb-redirect-to-new-tab', 'type' => 'checkbox', 'defaultValue' => '');
870
+ $options[] = array('name' => 'sgpb-copy-to-clipboard-text', 'type' => 'text', 'defaultValue' => '');
871
+ $options[] = array('name' => 'sgpb-copy-to-clipboard-close-popup', 'type' => 'checkbox', 'defaultValue' => 'on');
872
+ $options[] = array('name' => 'sgpb-copy-to-clipboard-alert', 'type' => 'checkbox', 'defaultValue' => 'on');
873
+ $options[] = array('name' => 'sgpb-copy-to-clipboard-message', 'type' => 'text', 'defaultValue' => __('Copied to Clipboard!', SG_POPUP_TEXT_DOMAIN));
874
+ $options[] = array('name' => 'sgpb-disable-popup-closing', 'type' => 'checkbox', 'defaultValue' => '', 'min-version' => SGPB_POPUP_PRO_MIN_VERSION, 'min-pkg' => SGPB_POPUP_PKG_SILVER);
875
+ $options[] = array('name' => 'sgpb-popup-dimension-mode', 'type' => 'text', 'defaultValue' => 'responsiveMode');
876
+ $options[] = array('name' => 'sgpb-popup-dimension-mode', 'type' => 'text', 'defaultValue' => '100');
877
+ $options[] = array('name' => 'sgpb-width', 'type' => 'text', 'defaultValue' => '640px');
878
+ $options[] = array('name' => 'sgpb-height', 'type' => 'text', 'defaultValue' => '480px');
879
+ $options[] = array('name' => 'sgpb-max-width', 'type' => 'text', 'defaultValue' => '');
880
+ $options[] = array('name' => 'sgpb-max-height', 'type' => 'text', 'defaultValue' => '');
881
+ $options[] = array('name' => 'sgpb-min-width', 'type' => 'text', 'defaultValue' => '120px');
882
+ $options[] = array('name' => 'sgpb-min-height', 'type' => 'text', 'defaultValue' => '');
883
+ $options[] = array('name' => 'sgpb-popup-timer-status', 'type' => 'checkbox', 'defaultValue' => '');
884
+ $options[] = array('name' => 'sgpb-popup-start-timer', 'type' => 'text', 'defaultValue' => '');
885
+ $options[] = array('name' => 'sgpb-popup-end-timer', 'type' => 'text', 'defaultValue' => '');
886
+ $options[] = array('name' => 'sgpb-popup-fixed', 'type' => 'checkbox', 'defaultValue' => '');
887
+ $options[] = array('name' => 'sgpb-popup-fixed-position', 'type' => 'text', 'defaultValue' => '');
888
+ $options[] = array('name' => 'sgpb-popup-delay', 'type' => 'text', 'defaultValue' => '0');
889
+ $options[] = array('name' => 'sgpb-popup-order', 'type' => 'text', 'defaultValue' => '0');
890
+ $options[] = array('name' => 'sgpb-disable-page-scrolling', 'type' => 'checkbox', 'defaultValue' => '');
891
+ $options[] = array('name' => 'sgpb-content-padding', 'type' => 'text', 'defaultValue' => 7);
892
+ $options[] = array('name' => 'sgpb-popup-z-index', 'type' => 'text', 'defaultValue' => 9999);
893
+ $options[] = array('name' => 'sgpb-content-custom-class', 'type' => 'text', 'defaultValue' => 'sg-popup-content');
894
+ $options[] = array('name' => 'sgpb-close-after-page-scroll', 'type' => 'checkbox', 'defaultValue' => '', 'min-version' => SGPB_POPUP_PRO_MIN_VERSION, 'min-pkg' => SGPB_POPUP_PKG_SILVER);
895
+ $options[] = array('name' => 'sgpb-auto-close', 'type' => 'checkbox', 'defaultValue' => '', 'min-version' => SGPB_POPUP_PRO_MIN_VERSION, 'min-pkg' => SGPB_POPUP_PKG_SILVER);
896
+ $options[] = array('name' => 'sgpb-auto-close-time', 'type' => 'number', 'defaultValue' => 0);
897
+ $options[] = array('name' => 'sgpb-reopen-after-form-submission', 'type' => 'checkbox', 'defaultValue' => '');
898
+ $options[] = array('name' => 'sgpb-open-sound', 'type' => 'checkbox', 'defaultValue' => '');
899
+ $options[] = array('name' => 'sgpb-sound-url', 'type' => 'text', 'defaultValue' => SG_POPUP_SOUND_URL.SGPB_POPUP_DEFAULT_SOUND);
900
+ $options[] = array('name' => 'sgpb-open-animation', 'type' => 'checkbox', 'defaultValue' => '');
901
+ $options[] = array('name' => 'sgpb-close-animation', 'type' => 'checkbox', 'defaultValue' => '');
902
+ $options[] = array('name' => 'sgpb-open-animation-speed', 'type' => 'text', 'defaultValue' => 1);
903
+ $options[] = array('name' => 'sgpb-close-animation-speed', 'type' => 'text', 'defaultValue' => 1);
904
+ $options[] = array('name' => 'sgpb-popup-themes', 'type' => 'text', 'defaultValue' => 'sgpb-theme-1');
905
+ $options[] = array('name' => 'sgpb-enable-popup-overlay', 'type' => 'checkbox', 'defaultValue' => 'on', 'min-version' => SGPB_POPUP_PRO_MIN_VERSION, 'min-pkg' => SGPB_POPUP_PKG_SILVER);
906
+ $options[] = array('name' => 'sgpb-overlay-custom-class', 'type' => 'text', 'defaultValue' => 'sgpb-popup-overlay');
907
+ $options[] = array('name' => 'sgpb-overlay-color', 'type' => 'text', 'defaultValue' => '');
908
+ $options[] = array('name' => 'sgpb-background-color', 'type' => 'text', 'defaultValue' => '');
909
+ $options[] = array('name' => 'sgpb-overlay-opacity', 'type' => 'text', 'defaultValue' => 0.8);
910
+ $options[] = array('name' => 'sgpb-content-opacity', 'type' => 'text', 'defaultValue' => 0.8);
911
+ $options[] = array('name' => 'sgpb-background-image', 'type' => 'text', 'defaultValue' => '');
912
+ $options[] = array('name' => 'sgpb-show-background', 'type' => 'checkbox', 'defaultValue' => '');
913
+ $options[] = array('name' => 'sgpb-force-rtl', 'type' => 'checkbox', 'defaultValue' => '');
914
+ $options[] = array('name' => 'sgpb-disable-border', 'type' => 'checkbox', 'defaultValue' => '');
915
+ $options[] = array('name' => 'sgpb-background-image-mode', 'type' => 'text', 'defaultValue' => 'no-repeat');
916
+ $options[] = array('name' => 'sgpb-image-url', 'type' => 'text', 'defaultValue' => '');
917
+ $options[] = array('name' => 'sgpb-close-button-delay', 'type' => 'number', 'defaultValue' => 0);
918
+ $options[] = array('name' => 'sgpb-button-position-bottom', 'type' => 'number', 'defaultValue' => 9);
919
+ $options[] = array('name' => 'sgpb-button-position-right', 'type' => 'number', 'defaultValue' => 9);
920
+ $options[] = array('name' => 'sgpb-button-image', 'type' => 'text', 'defaultValue' => '');
921
+ $options[] = array('name' => 'sgpb-button-image-width', 'type' => 'text', 'defaultValue' => 21);
922
+ $options[] = array('name' => 'sgpb-button-image-height', 'type' => 'text', 'defaultValue' => 21);
923
+ $options[] = array('name' => 'sgpb-is-active', 'type' => 'checkbox', 'defaultValue' => 'on');
924
+ $options[] = array('name' => 'sgpb-subs-form-bg-color', 'type' => 'text', 'defaultValue' => '#FFFFFF');
925
+ $options[] = array('name' => 'sgpb-subs-form-bg-opacity', 'type' => 'text', 'defaultValue' => 0.8);
926
+ $options[] = array('name' => 'sgpb-subs-form-padding', 'type' => 'number', 'defaultValue' => 2);
927
+ $options[] = array('name' => 'sgpb-subs-email-placeholder', 'type' => 'text', 'defaultValue' => __('Email *', SG_POPUP_TEXT_DOMAIN));
928
+ $options[] = array('name' => 'sgpb-subs-first-name-status', 'type' => 'checkbox', 'defaultValue' => 'on');
929
+ $options[] = array('name' => 'sgpb-subs-first-placeholder', 'type' => 'text', 'defaultValue' => __('First name', SG_POPUP_TEXT_DOMAIN));
930
+ $options[] = array('name' => 'sgpb-subs-first-name-required', 'type' => 'checkbox', 'defaultValue' => '');
931
+ $options[] = array('name' => 'sgpb-subs-last-name-status', 'type' => 'checkbox', 'defaultValue' => 'on');
932
+ $options[] = array('name' => 'sgpb-subs-last-placeholder', 'type' => 'text', 'defaultValue' => __('Last name', SG_POPUP_TEXT_DOMAIN));
933
+ $options[] = array('name' => 'sgpb-subs-last-name-required', 'type' => 'checkbox', 'defaultValue' => '');
934
+ $options[] = array('name' => 'sgpb-subs-validation-message', 'type' => 'text', 'defaultValue' => __('This field is required.', SG_POPUP_TEXT_DOMAIN));
935
+ $options[] = array('name' => 'sgpb-subs-text-width', 'type' => 'text', 'defaultValue' => '300px');
936
+ $options[] = array('name' => 'sgpb-subs-text-height', 'type' => 'text', 'defaultValue' => '40px');
937
+ $options[] = array('name' => 'sgpb-subs-text-border-width', 'type' => 'text', 'defaultValue' => '2px');
938
+ $options[] = array('name' => 'sgpb-subs-text-border-color', 'type' => 'text', 'defaultValue' => '#e8e8e8');
939
+ $options[] = array('name' => 'sgpb-subs-text-bg-color', 'type' => 'text', 'defaultValue' => '#f1f1f1');
940
+ $options[] = array('name' => 'sgpb-subs-text-color', 'type' => 'text', 'defaultValue' => '#000000');
941
+ $options[] = array('name' => 'sgpb-subs-text-placeholder-color', 'type' => 'text', 'defaultValue' => '#757575');
942
+ $options[] = array('name' => 'sgpb-subs-btn-width', 'type' => 'text', 'defaultValue' => '300px');
943
+ $options[] = array('name' => 'sgpb-subs-btn-height', 'type' => 'text', 'defaultValue' => '40px');
944
+ $options[] = array('name' => 'sgpb-subs-btn-border-radius', 'type' => 'text', 'defaultValue' => '4px');
945
+ $options[] = array('name' => 'sgpb-subs-btn-border-width', 'type' => 'text', 'defaultValue' => '0px');
946
+ $options[] = array('name' => 'sgpb-subs-btn-border-color', 'type' => 'text', 'defaultValue' => '#007fe1');
947
+ $options[] = array('name' => 'sgpb-subs-btn-title', 'type' => 'text', 'defaultValue' => __('Subscribe', SG_POPUP_TEXT_DOMAIN));
948
+ $options[] = array('name' => 'sgpb-subs-btn-progress-title', 'type' => 'text', 'defaultValue' => __('Please wait...', SG_POPUP_TEXT_DOMAIN));
949
+ $options[] = array('name' => 'sgpb-subs-btn-bg-color', 'type' => 'text', 'defaultValue' => '#007fe1');
950
+ $options[] = array('name' => 'sgpb-subs-btn-text-color', 'type' => 'text', 'defaultValue' => '#FFFFFF');
951
+ $options[] = array('name' => 'sgpb-subs-error-message', 'type' => 'text', 'defaultValue' => SGPB_SUBSCRIPTION_ERROR_MESSAGE);
952
+ $options[] = array('name' => 'sgpb-subs-invalid-message', 'type' => 'text', 'defaultValue' => __('Please enter a valid email address', SG_POPUP_TEXT_DOMAIN).'.');
953
+ $options[] = array('name' => 'sgpb-subs-success-behavior', 'type' => 'text', 'defaultValue' => 'showMessage');
954
+ $options[] = array('name' => 'sgpb-subs-success-message', 'type' => 'text', 'defaultValue' => __('You have successfully subscribed to the newsletter', SG_POPUP_TEXT_DOMAIN));
955
+ $options[] = array('name' => 'sgpb-subs-success-redirect-URL', 'type' => 'text', 'defaultValue' => '');
956
+ $options[] = array('name' => 'sgpb-subs-success-redirect-new-tab', 'type' => 'checkbox', 'defaultValue' => '');
957
+ $options[] = array('name' => 'sgpb-subs-gdpr-status', 'type' => 'checkbox', 'defaultValue' => '');
958
+ $options[] = array('name' => 'sgpb-subs-show-form-to-top', 'type' => 'checkbox', 'defaultValue' => '');
959
+ $options[] = array('name' => 'sgpb-subs-gdpr-label', 'type' => 'text', 'defaultValue' => __('Accept Terms', SG_POPUP_TEXT_DOMAIN));
960
+ $options[] = array('name' => 'sgpb-subs-gdpr-text', 'type' => 'text', 'defaultValue' => __(get_bloginfo().' will use the information you provide on this form to be in touch with you and to provide updates and marketing.', SG_POPUP_TEXT_DOMAIN));
961
+ $options[] = array('name' => 'sgpb-subs-fields', 'type' => 'sgpb', 'defaultValue' => '');
962
+ $options[] = array('name' => 'sgpb-fblike-like-url', 'type' => 'text', 'defaultValue' => '');
963
+ $options[] = array('name' => 'sgpb-fblike-layout', 'type' => 'text', 'defaultValue' => 'standard');
964
+ $options[] = array('name' => 'sgpb-fblike-dont-show-share-button', 'type' => 'checkbox', 'defaultValue' => '');
965
+ $options[] = array('name' => 'sgpb-border-color', 'type' => 'text', 'defaultValue' => '#000000');
966
+ $options[] = array('name' => 'sgpb-border-radius', 'type' => 'text', 'defaultValue' => 0);
967
+ $options[] = array('name' => 'sgpb-show-popup-same-user', 'type' => 'checkbox', 'defaultValue' => '');
968
+ $options[] = array('name' => 'sgpb-show-popup-same-user-count', 'type' => 'number', 'defaultValue' => 1);
969
+ $options[] = array('name' => 'sgpb-show-popup-same-user-expiry', 'type' => 'number', 'defaultValue' => 1);
970
+ $options[] = array('name' => 'sgpb-show-popup-same-user-page-level', 'type' => 'checkbox', 'defaultValue' => '');
971
+
972
+ $options[] = array('name' => 'sgpb-enable-floating-button', 'type' => 'checkbox', 'defaultValue' => '');
973
+ $options[] = array('name' => 'sgpb-floating-button-style', 'type' => 'text', 'defaultValue' => 'corner');
974
+ $options[] = array('name' => 'sgpb-floating-button-position', 'type' => 'text', 'defaultValue' => 'bottom-right');
975
+ $options[] = array('name' => 'sgpb-floating-button-position-top', 'type' => 'text', 'defaultValue' => '40');
976
+ $options[] = array('name' => 'sgpb-floating-button-position-right', 'type' => 'text', 'defaultValue' => '50');
977
+ $options[] = array('name' => 'sgpb-floating-button-font-size', 'type' => 'number', 'defaultValue' => 16);
978
+ $options[] = array('name' => 'sgpb-floating-button-border-size', 'type' => 'number', 'defaultValue' => 5);
979
+ $options[] = array('name' => 'sgpb-floating-button-border-radius', 'type' => 'number', 'defaultValue' => 5);
980
+ $options[] = array('name' => 'sgpb-floating-button-border-color', 'type' => 'text', 'defaultValue' => '#5263eb');
981
+ $options[] = array('name' => 'sgpb-floating-button-bg-color', 'type' => 'text', 'defaultValue' => '#5263eb');
982
+ $options[] = array('name' => 'sgpb-floating-button-text-color', 'type' => 'text', 'defaultValue' => '#ffffff');
983
+ $options[] = array('name' => 'sgpb-floating-button-text', 'type' => 'text', 'defaultValue' => __('Click it!'));
984
+
985
+ $SGPB_OPTIONS = apply_filters('sgpbPopupDefaultOptions', $options);
986
+ }
987
+
988
+ public static function getOldExtensionsInfo()
989
+ {
990
+ $data = array(
991
+ array(
992
+ 'folderName' => 'popup-builder-ad-block',
993
+ 'label' => __('AdBlock', SG_POPUP_TEXT_DOMAIN)
994
+ ),
995
+ array(
996
+ 'folderName' => 'popup-builder-analytics',
997
+ 'label' => __('Analytics', SG_POPUP_TEXT_DOMAIN)
998
+ ),
999
+ array(
1000
+ 'folderName' => 'popup-builder-exit-intent',
1001
+ 'label' => __('Exit intent', SG_POPUP_TEXT_DOMAIN)
1002
+ ),
1003
+ array(
1004
+ 'folderName' => 'popup-builder-mailchimp',
1005
+ 'label' => __('Mailchimp', SG_POPUP_TEXT_DOMAIN)
1006
+ ),
1007
+ array(
1008
+ 'folderName' => 'popup-builder-aweber',
1009
+ 'label' => __('AWeber', SG_POPUP_TEXT_DOMAIN)
1010
+ )
1011
+ );
1012
+
1013
+ return $data;
1014
+ }
1015
+
1016
+ public static function addFilters()
1017
+ {
1018
+ ConfigDataHelper::addFilters();
1019
+ }
1020
+
1021
+ public static function transientConfig()
1022
+ {
1023
+ global $SGPB_TRANSIENT_CONFIG;
1024
+
1025
+ $SGPB_TRANSIENT_CONFIG = array(
1026
+ SGPB_TRANSIENT_POPUPS_LOAD,
1027
+ SGPB_TRANSIENT_POPUPS_TERMS,
1028
+ SGPB_TRANSIENT_POPUPS_ALL_CATEGORIES
1029
+ );
1030
+
1031
+ $SGPB_TRANSIENT_CONFIG = apply_filters('sgpbAllTransients', $SGPB_TRANSIENT_CONFIG);
1032
+ }
1033
+ }
com/helpers/AdminHelper.php CHANGED
@@ -1,2126 +1,2126 @@
1
- <?php
2
- namespace sgpb;
3
- use \DateTime;
4
- use \DateTimeZone;
5
- use \SgpbDataConfig;
6
- use \Elementor;
7
- use sgpbsubscriptionplus\SubscriptionPlusAdminHelper;
8
-
9
- class AdminHelper
10
- {
11
- /**
12
- * Get extension options data which are included inside the free version
13
- *
14
- * @since 3.0.8
15
- *
16
- * @return assoc array $extensionOptions
17
- */
18
- public static function getExtensionAvaliabilityOptions()
19
- {
20
- $extensionOptions = array();
21
- // advanced closing option
22
- $extensionOptions[SGPB_POPUP_ADVANCED_CLOSING_PLUGIN_KEY] = array(
23
- 'sgpb-close-after-page-scroll',
24
- 'sgpb-auto-close',
25
- 'sgpb-enable-popup-overlay',
26
- 'sgpb-disable-popup-closing'
27
- );
28
- // schedule extension
29
- $extensionOptions[SGPB_POPUP_SCHEDULING_EXTENSION_KEY] = array(
30
- 'otherConditionsMetaBoxView'
31
- );
32
- // geo targeting extension
33
- $extensionOptions[SGPB_POPUP_GEO_TARGETING_EXTENSION_KEY] = array(
34
- 'popupConditionsSection'
35
- );
36
- // advanced targeting extension
37
- $extensionOptions[SGPB_POPUP_ADVANCED_TARGETING_EXTENSION_KEY] = array(
38
- 'popupConditionsSection'
39
- );
40
-
41
- return $extensionOptions;
42
- }
43
-
44
- public static function getPopupTypesPageURL()
45
- {
46
- return admin_url('edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SG_POPUP_POST_TYPE);
47
- }
48
-
49
- public static function getSettingsURL($args = array())
50
- {
51
- $url = admin_url('/edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SG_POPUP_SETTINGS_PAGE);
52
-
53
- return self::addArgsToURl($url, $args);
54
- }
55
-
56
- public static function getPopupExportURL()
57
- {
58
- $exportURL = admin_url('export.php');
59
- $url = add_query_arg(array(
60
- 'download' => true,
61
- 'content' => SG_POPUP_POST_TYPE,
62
- 'sgpbExportAction' => 1
63
- ), $exportURL);
64
-
65
- return $url;
66
- }
67
-
68
- public static function addArgsToURl($url, $args = array())
69
- {
70
- $resultURl = add_query_arg($args, $url);
71
-
72
- return $resultURl;
73
- }
74
-
75
- public static function buildCreatePopupUrl($popupType)
76
- {
77
- $isAvailable = $popupType->isAvailable();
78
- $name = $popupType->getName();
79
-
80
- $popupUrl = SG_POPUP_ADMIN_URL.'post-new.php?post_type='.SG_POPUP_POST_TYPE.'&sgpb_type='.$name;
81
-
82
- if (!$isAvailable) {
83
- $popupUrl = SG_POPUP_PRO_URL;
84
- }
85
-
86
- return $popupUrl;
87
- }
88
-
89
- public static function getPopupThumbClass($popupType)
90
- {
91
- $isAvailable = $popupType->isAvailable();
92
- $name = $popupType->getName();
93
-
94
- $popupTypeClassName = $name.'-popup';
95
-
96
- if (!$isAvailable) {
97
- $popupTypeClassName .= '-pro';
98
- }
99
-
100
- return $popupTypeClassName;
101
- }
102
-
103
- public static function createSelectBox($data, $selectedValue, $attrs)
104
- {
105
- $attrString = '';
106
- $selected = '';
107
- $selectBoxCloseTag = '</select>';
108
-
109
- if (!empty($attrs) && isset($attrs)) {
110
-
111
- foreach ($attrs as $attrName => $attrValue) {
112
- $attrString .= ''.$attrName.'="'.$attrValue.'" ';
113
- }
114
- }
115
-
116
- $selectBox = '<select '.$attrString.'>';
117
- if (empty($data) || !is_array($data)) {
118
- $selectBox .= $selectBoxCloseTag;
119
- return $selectBox;
120
- }
121
-
122
- foreach ($data as $value => $label) {
123
- // When is multiSelect
124
- if (is_array($selectedValue)) {
125
- $isSelected = in_array($value, $selectedValue);
126
- if ($isSelected) {
127
- $selected = 'selected';
128
- }
129
- }
130
- else if ($selectedValue == $value) {
131
- $selected = 'selected';
132
- }
133
- else if (is_array($value) && in_array($selectedValue, $value)) {
134
- $selected = 'selected';
135
- }
136
-
137
- if (is_array($label)) {
138
- $selectBox .= '<optgroup label="'.$value.'">';
139
- foreach ($label as $key => $optionLabel) {
140
- $selected = '';
141
- if (is_array($selectedValue)) {
142
- $isSelected = in_array($key, $selectedValue);
143
- if ($isSelected) {
144
- $selected = 'selected';
145
- }
146
- }
147
- else if ($selectedValue == $key) {
148
- $selected = 'selected';
149
- }
150
- else if (is_array($key) && in_array($selectedValue, $key)) {
151
- $selected = 'selected';
152
- }
153
-
154
- $selectBox .= '<option value="'.$key.'" '.$selected.'>'.$optionLabel.'</option>';
155
- }
156
- $selectBox .= '</optgroup>';
157
- }
158
- else {
159
- $selectBox .= '<option value="'.$value.'" '.$selected.'>'.$label.'</option>';
160
- }
161
-
162
- $selected = '';
163
- }
164
-
165
- $selectBox .= $selectBoxCloseTag;
166
-
167
- return $selectBox;
168
- }
169
-
170
- public static function createInput($data, $selectedValue, $attrs)
171
- {
172
- $attrString = '';
173
- $savedData = $data;
174
-
175
- if (isset($selectedValue)) {
176
- $savedData = $selectedValue;
177
- }
178
- if (empty($savedData)) {
179
- $savedData = '';
180
- }
181
-
182
- if (!empty($attrs) && isset($attrs)) {
183
-
184
- foreach ($attrs as $attrName => $attrValue) {
185
- if ($attrName == 'class') {
186
- $attrValue .= '';
187
- }
188
- $attrString .= ''.$attrName.'="'.$attrValue.'" ';
189
- }
190
- }
191
-
192
- $input = "<input $attrString value=\"".esc_attr($savedData)."\">";
193
-
194
- return $input;
195
- }
196
-
197
- public static function createCheckBox($data, $selectedValue, $attrs)
198
- {
199
- $attrString = '';
200
- $checked = '';
201
-
202
- if (!empty($selectedValue)) {
203
- $checked = 'checked';
204
- }
205
- if (!empty($attrs) && isset($attrs)) {
206
-
207
- foreach ($attrs as $attrName => $attrValue) {
208
- $attrString .= ''.$attrName.'="'.$attrValue.'" ';
209
- }
210
- }
211
-
212
- $input = "<input $attrString $checked>";
213
-
214
- return $input;
215
- }
216
-
217
- public static function createRadioButtons($elements, $name, $selectedInput, $lineMode = false, $extraHtmlAfterInput = '')
218
- {
219
- $str = '';
220
-
221
- foreach ($elements as $key => $element) {
222
- $value = '';
223
- $checked = '';
224
- $stringWithlabel = '';
225
- $labelClasses = '';
226
- $stringLabel = '';
227
-
228
- if (isset($element['value'])) {
229
- $value = $element['value'];
230
- }
231
- if (isset($element['label_class'])) {
232
- $labelClasses = 'class="'.$element['label_class'].'"';
233
- $stringLabel = '<span class="sgpb-margin-bottom-10">'.esc_attr($value).'</span>';
234
- }
235
-
236
- if (is_array($element) && $element['value'] == $selectedInput) {
237
- $checked = 'checked';
238
- }
239
- else if (!is_array($element) && $element == $selectedInput) {
240
- $checked = 'checked';
241
- }
242
- $attrStr = '';
243
- if (isset($element['data-attributes'])) {
244
- foreach ($element['data-attributes'] as $attrKey => $dataValue) {
245
- $attrStr .= $attrKey.'="'.esc_attr($dataValue).'" ';
246
- }
247
- }
248
- if (!empty($extraHtmlAfterInput)) {
249
- if ($extraHtmlAfterInput == 'img') {
250
- $extraHtmlAfterInput = '<img src="">';
251
- }
252
- else if ($extraHtmlAfterInput == 'bg_img') {
253
- $extraHtmlAfterInput = '<span class="sgpb-popup-theme-img sgpb-margin-x-7"></span>';
254
- }
255
- }
256
-
257
- if ($lineMode) {
258
- if (!empty($extraHtmlAfterInput)) {
259
- $str .= '<label '.$labelClasses.'><input type="radio" name="'.esc_attr($name).'" value="'.esc_attr($value).'" '.$checked.' '.$attrStr.'>'.$extraHtmlAfterInput.$stringLabel.'</label>';
260
- }
261
- else {
262
- $str .= '<input type="radio" name="'.esc_attr($name).'" value="'.esc_attr($value).'" '.$checked.' '.$attrStr.'>';
263
- }
264
- }
265
- else {
266
- $str .= '<div class="row form-group">';
267
- $str .= '<label class="col-md-5 control-label">'.__($element['title'], SG_POPUP_TEXT_DOMAIN).'</label>';
268
- $str .= '<div class="col-sm-7"><input type="radio" name="'.esc_attr($name).'" value="'.esc_attr($value).'" '.$checked.' autocomplete="off">'.$extraHtmlAfterInput.'</div>';
269
- $str .= '</div>';
270
- }
271
- }
272
-
273
- echo $str;
274
- }
275
-
276
- public static function getDateObjFromDate($dueDate, $timezone = 'America/Los_Angeles', $format = 'Y-m-d H:i:s')
277
- {
278
- $dateObj = new DateTime($dueDate, new DateTimeZone($timezone));
279
- $dateObj->format($format);
280
-
281
- return $dateObj;
282
- }
283
-
284
- /**
285
- * Serialize data
286
- *
287
- * @since 1.0.0
288
- *
289
- * @param array $data
290
- *
291
- * @return string $serializedData
292
- */
293
- public static function serializeData($data = array())
294
- {
295
- $serializedData = serialize($data);
296
-
297
- return $serializedData;
298
- }
299
-
300
- /**
301
- * Get correct size to use it safely inside CSS rules
302
- *
303
- * @since 1.0.0
304
- *
305
- * @param string $dimension
306
- *
307
- * @return string $size
308
- */
309
- public static function getCSSSafeSize($dimension)
310
- {
311
- if (empty($dimension)) {
312
- return 'inherit';
313
- }
314
-
315
- $size = (int)$dimension.'px';
316
- // If user write dimension in px or % we give that dimension to target otherwise the default value will be px
317
- if (strpos($dimension, '%') || strpos($dimension, 'px')) {
318
- $size = $dimension;
319
- }
320
-
321
- return $size;
322
- }
323
-
324
- public static function deleteSubscriptionPopupSubscribers($popupId)
325
- {
326
- global $wpdb;
327
-
328
- $prepareSql = $wpdb->prepare('DELETE FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE subscriptionType = %s', $popupId);
329
- $wpdb->query($prepareSql);
330
- }
331
-
332
- public static function subscribersRelatedQuery($query = '', $additionalColumn = '')
333
- {
334
- global $wpdb;
335
- $subscribersTablename = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
336
- $postsTablename = $wpdb->prefix.SGPB_POSTS_TABLE_NAME;
337
-
338
- if ($query == '') {
339
- $query = 'SELECT firstName, lastName, email, cDate, '.$additionalColumn.' '.$postsTablename.'.post_title AS subscriptionTitle FROM '.$subscribersTablename.' ';
340
- }
341
-
342
- $searchQuery = ' unsubscribed <> 1';
343
- $filterCriteria = '';
344
-
345
- $query .= ' LEFT JOIN '.$postsTablename.' ON '.$postsTablename.'.ID='.$subscribersTablename.'.subscriptionType';
346
-
347
- if (isset($_GET['sgpb-subscription-popup-id']) && !empty($_GET['sgpb-subscription-popup-id'])) {
348
- $filterCriteria = esc_sql($_GET['sgpb-subscription-popup-id']);
349
- if ($filterCriteria != 'all') {
350
- $searchQuery .= " AND (subscriptionType = $filterCriteria)";
351
- }
352
- }
353
- if ($filterCriteria != '' && $filterCriteria != 'all' && isset($_GET['s']) && !empty($_GET['s'])) {
354
- $searchQuery .= ' AND ';
355
- }
356
- if (isset($_GET['s']) && !empty($_GET['s'])) {
357
- $searchCriteria = esc_sql($_GET['s']);
358
- $lastPartOfTheQuery = substr($searchQuery, -5);
359
- if (strpos($lastPartOfTheQuery, 'AND') <= 0) {
360
- $searchQuery .= ' AND ';
361
- }
362
- $searchQuery .= "(firstName LIKE '%$searchCriteria%' or lastName LIKE '%$searchCriteria%' or email LIKE '%$searchCriteria%' or $postsTablename.post_title LIKE '%$searchCriteria%')";
363
- }
364
- if (isset($_GET['sgpb-subscribers-date']) && !empty($_GET['sgpb-subscribers-date'])) {
365
- $filterCriteria = esc_sql($_GET['sgpb-subscribers-date']);
366
- if ($filterCriteria != 'all') {
367
- if ($searchQuery != '') {
368
- $searchQuery .= ' AND ';
369
- }
370
- $searchQuery .= " cDate LIKE '$filterCriteria%'";
371
- }
372
- }
373
- if ($searchQuery != '') {
374
- $query .= " WHERE $searchQuery";
375
- }
376
-
377
- return $query;
378
- }
379
-
380
- public static function themeRelatedSettings($popupId, $buttonPosition, $theme)
381
- {
382
- if ($popupId) {
383
- if ($theme == 'sgpb-theme-1' || $theme == 'sgpb-theme-4' || $theme == 'sgpb-theme-5') {
384
- if (!isset($buttonPosition)) {
385
- $buttonPosition = 'bottomRight';
386
- }
387
- }
388
- else if ($theme == 'sgpb-theme-2' || $theme == 'sgpb-theme-3' || $theme == 'sgpb-theme-6') {
389
- if (!isset($buttonPosition)) {
390
- $buttonPosition = 'topRight';
391
- }
392
- }
393
- }
394
- else {
395
- if (isset($theme)) {
396
- if ($theme == 'sgpb-theme-1' || $theme == 'sgpb-theme-4' || $theme == 'sgpb-theme-5') {
397
- $buttonPosition = 'bottomRight';
398
- }
399
- else if ($theme == 'sgpb-theme-2' || $theme == 'sgpb-theme-3' || $theme == 'sgpb-theme-6') {
400
- $buttonPosition = 'topRight';
401
- }
402
- }
403
- else {
404
- /* by default set position for the first theme */
405
- $buttonPosition = 'bottomRight';
406
- }
407
- }
408
-
409
- return $buttonPosition;
410
- }
411
-
412
- /**
413
- * Create html attrs
414
- *
415
- * @since 1.0.0
416
- *
417
- * @param array $attrs
418
- *
419
- * @return string $attrStr
420
- */
421
- public static function createAttrs($attrs)
422
- {
423
- $attrStr = '';
424
-
425
- if (empty($attrs)) {
426
- return $attrStr;
427
- }
428
-
429
- foreach ($attrs as $attrKey => $attrValue) {
430
- $attrStr .= $attrKey.'="'.$attrValue.'" ';
431
- }
432
-
433
- return $attrStr;
434
- }
435
-
436
- public static function getFormattedDate($date)
437
- {
438
- $date = strtotime($date);
439
- $month = date('F', $date);
440
- $year = date('Y', $date);
441
-
442
- return $month.' '.$year;
443
- }
444
-
445
- public static function defaultButtonImage($theme, $closeImage = '')
446
- {
447
- $currentPostType = self::getCurrentPopupType();
448
- if (defined('SGPB_POPUP_TYPE_RECENT_SALES') && $currentPostType == SGPB_POPUP_TYPE_RECENT_SALES) {
449
- $theme = 'sgpb-theme-6';
450
- }
451
- // if no image, set default by theme
452
- if ($closeImage == '') {
453
- if ($theme == 'sgpb-theme-1' || !$theme) {
454
- $closeImage = SG_POPUP_IMG_URL.'theme_1/close.png';
455
- }
456
- else if ($theme == 'sgpb-theme-2') {
457
- $closeImage = SG_POPUP_IMG_URL.'theme_2/close.png';
458
- }
459
- else if ($theme == 'sgpb-theme-3') {
460
- $closeImage = SG_POPUP_IMG_URL.'theme_3/close.png';
461
- }
462
- else if ($theme == 'sgpb-theme-5') {
463
- $closeImage = SG_POPUP_IMG_URL.'theme_5/close.png';
464
- }
465
- else if ($theme == 'sgpb-theme-6') {
466
- $closeImage = SG_POPUP_IMG_URL.'theme_6/close.png';
467
- }
468
- }
469
- else {
470
- $closeImage = self::getImageDataFromUrl($closeImage);
471
- }
472
-
473
- return $closeImage;
474
- }
475
-
476
- public static function getPopupPostAllowedUserRoles()
477
- {
478
- $userSavedRoles = get_option('sgpb-user-roles');
479
-
480
- if (empty($userSavedRoles) || !is_array($userSavedRoles)) {
481
- $userSavedRoles = array('administrator');
482
- }
483
- else {
484
- array_push($userSavedRoles, 'administrator');
485
- }
486
-
487
- return $userSavedRoles;
488
- }
489
-
490
- public static function showMenuForCurrentUser()
491
- {
492
- return self::userCanAccessTo();
493
- }
494
-
495
- public static function getPopupsIdAndTitle($excludesPopups = array())
496
- {
497
- $allPopups = SGPopup::getAllPopups();
498
- $popupIdTitles = array();
499
-
500
- if (empty($allPopups)) {
501
- return $popupIdTitles;
502
- }
503
-
504
- foreach ($allPopups as $popup) {
505
- if (empty($popup)) {
506
- continue;
507
- }
508
-
509
- $id = $popup->getId();
510
- $title = $popup->getTitle();
511
- $type = $popup->getType();
512
-
513
- if (!empty($excludesPopups)) {
514
- foreach ($excludesPopups as $excludesPopupId) {
515
- if ($excludesPopupId != $id) {
516
- $popupIdTitles[$id] = $title.' - '.$type;
517
- }
518
- }
519
- }
520
- else {
521
- $popupIdTitles[$id] = $title.' - '.$type;
522
- }
523
- }
524
-
525
- return $popupIdTitles;
526
- }
527
-
528
- /**
529
- * Merge two array and merge same key values to same array
530
- *
531
- * @since 1.0.0
532
- *
533
- * @param array $array1
534
- * @param array $array2
535
- *
536
- * @return array|bool
537
- *
538
- */
539
- public static function arrayMergeSameKeys($array1, $array2)
540
- {
541
- if (empty($array1)) {
542
- return array();
543
- }
544
-
545
- $modified = false;
546
- $array3 = array();
547
- foreach ($array1 as $key => $value) {
548
- if (isset($array2[$key]) && is_array($array2[$key])) {
549
- $arrDifference = array_diff($array2[$key], $array1[$key]);
550
- if (empty($arrDifference)) {
551
- continue;
552
- }
553
-
554
- $modified = true;
555
- $array3[$key] = array_merge($array2[$key], $array1[$key]);
556
- unset($array2[$key]);
557
- continue;
558
- }
559
-
560
- $modified = true;
561
- $array3[$key] = $value;
562
- }
563
-
564
- // when there are no values
565
- if (!$modified) {
566
- return $modified;
567
- }
568
-
569
- return $array2 + $array3;
570
- }
571
-
572
- public static function getCurrentUserRole()
573
- {
574
- $role = array('administrator');
575
-
576
- if (is_multisite()) {
577
-
578
- $getUsersObj = get_users(
579
- array(
580
- 'blog_id' => get_current_blog_id(),
581
- 'search' => get_current_user_id()
582
- )
583
- );
584
-
585
- if (!empty($getUsersObj[0])) {
586
- $roles = $getUsersObj[0]->roles;
587
-
588
- if (is_array($roles) && !empty($roles)) {
589
- $role = array_merge($role, $getUsersObj[0]->roles);
590
- }
591
- }
592
-
593
- return $role;
594
- }
595
-
596
- global $current_user;
597
- if (!empty($current_user)) {
598
- $role = $current_user->roles;
599
- }
600
-
601
- return $role;
602
- }
603
-
604
- public static function hexToRgba($color, $opacity = false)
605
- {
606
- $default = 'rgb(0,0,0)';
607
-
608
- //Return default if no color provided
609
- if (empty($color)) {
610
- return $default;
611
- }
612
-
613
- //Sanitize $color if "#" is provided
614
- if ($color[0] == '#') {
615
- $color = substr($color, 1);
616
- }
617
-
618
- //Check if color has 6 or 3 characters and get values
619
- if (strlen($color) == 6) {
620
- $hex = array($color[0].$color[1], $color[2].$color[3], $color[4].$color[5]);
621
- }
622
- else if (strlen($color) == 3) {
623
- $hex = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
624
- }
625
- else {
626
- return $default;
627
- }
628
-
629
- //Convert hexadec to rgb
630
- $rgb = array_map('hexdec', $hex);
631
-
632
- //Check if opacity is set(rgba or rgb)
633
- if ($opacity !== false) {
634
- if (abs($opacity) > 1) {
635
- $opacity = 1.0;
636
- }
637
- $output = 'rgba('.implode(',', $rgb).','.$opacity.')';
638
- }
639
- else {
640
- $output = 'rgb('.implode(',', $rgb).')';
641
- }
642
-
643
- //Return rgb(a) color string
644
- return $output;
645
- }
646
-
647
- public static function getAllActiveExtensions()
648
- {
649
- $extensions = SgpbDataConfig::getOldExtensionsInfo();
650
- $labels = array();
651
-
652
- foreach ($extensions as $extension) {
653
- if (file_exists(WP_PLUGIN_DIR.'/'.$extension['folderName'])) {
654
- $labels[] = $extension['label'];
655
- }
656
- }
657
-
658
- return $labels;
659
- }
660
-
661
- public static function renderExtensionsContent()
662
- {
663
- $extensions = self::getAllActiveExtensions();
664
- ob_start();
665
- ?>
666
- <p class="sgpb-extension-notice-close">x</p>
667
- <div class="sgpb-extensions-list-wrapper">
668
- <div class="sgpb-notice-header">
669
- <h3><?php _e('Popup Builder plugin has been successfully updated', SG_POPUP_TEXT_DOMAIN); ?></h3>
670
- <h4><?php _e('The following extensions need to be updated manually', SG_POPUP_TEXT_DOMAIN); ?></h4>
671
- </div>
672
- <ul class="sgpb-extensions-list">
673
- <?php foreach ($extensions as $extensionName): ?>
674
- <a target="_blank" href="https://popup-builder.com/forms/control-panel/"><li><?php echo $extensionName; ?></li></a>
675
- <?php endforeach; ?>
676
- </ul>
677
- </div>
678
- <p class="sgpb-extension-notice-dont-show"><?php _e('Don\'t show again', SG_POPUP_TEXT_DOMAIN)?></p>
679
- <?php
680
- $content = ob_get_contents();
681
- ob_get_clean();
682
-
683
- return $content;
684
- }
685
-
686
- public static function getReverseConvertIds()
687
- {
688
- $idsMappingSaved = get_option('sgpbConvertedIds');
689
- $ids = array();
690
-
691
- if ($idsMappingSaved) {
692
- $ids = $idsMappingSaved;
693
- }
694
-
695
- return array_flip($ids);
696
- }
697
-
698
- public static function getAllFreeExtensions()
699
- {
700
- $allExtensions = SgpbDataConfig::allFreeExtensionsKeys();
701
-
702
- $notActiveExtensions = array();
703
- $activeExtensions = array();
704
-
705
- foreach ($allExtensions as $extension) {
706
- if (!is_plugin_active($extension['pluginKey'])) {
707
- $notActiveExtensions[] = $extension;
708
- }
709
- else {
710
- $activeExtensions[] = $extension;
711
- }
712
- }
713
-
714
- $divideExtension = array(
715
- 'noActive' => $notActiveExtensions,
716
- 'active' => $activeExtensions
717
- );
718
-
719
- return $divideExtension;
720
- }
721
-
722
- public static function getAllExtensions()
723
- {
724
- $allExtensions = SgpbDataConfig::allExtensionsKeys();
725
-
726
- $notActiveExtensions = array();
727
- $activeExtensions = array();
728
-
729
- foreach ($allExtensions as $extension) {
730
- if (!is_plugin_active($extension['pluginKey'])) {
731
- $notActiveExtensions[] = $extension;
732
- }
733
- else {
734
- $activeExtensions[] = $extension;
735
- }
736
- }
737
-
738
- $divideExtension = array(
739
- 'noActive' => $notActiveExtensions,
740
- 'active' => $activeExtensions
741
- );
742
-
743
- return $divideExtension;
744
- }
745
-
746
- public static function renderAlertProblem()
747
- {
748
- ob_start();
749
- ?>
750
- <div id="welcome-panel" class="update-nag sgpb-alert-problem">
751
- <div class="welcome-panel-content">
752
- <p class="sgpb-problem-notice-close">x</p>
753
- <div class="sgpb-alert-problem-text-wrapper">
754
- <h3><?php _e('Popup Builder plugin has been updated to the new version 3.', SG_POPUP_TEXT_DOMAIN); ?></h3>
755
- <h5><?php _e('A lot of changes and improvements have been made.', SG_POPUP_TEXT_DOMAIN); ?></h5>
756
- <h5><?php _e('In case of any issues, please contact us <a href="<?php echo SG_POPUP_TICKET_URL; ?>" target="_blank">here</a>.', SG_POPUP_TEXT_DOMAIN); ?></h5>
757
- </div>
758
- <p class="sgpb-problem-notice-dont-show"><?php _e('Don\'t show again', SG_POPUP_TEXT_DOMAIN); ?></p>
759
- </div>
760
- </div>
761
- <?php
762
- $content = ob_get_clean();
763
-
764
- return $content;
765
- }
766
-
767
- public static function getTaxonomyBySlug($slug = '')
768
- {
769
- $allTerms = get_terms(array('hide_empty' => false));
770
-
771
- $result = array();
772
- if (empty($allTerms)) {
773
- return $result;
774
- }
775
- if ($slug == '') {
776
- return $allTerms;
777
- }
778
- foreach ($allTerms as $term) {
779
- if ($term->slug == $slug) {
780
- return $term;
781
- }
782
- }
783
- }
784
-
785
- public static function getCurrentPopupType()
786
- {
787
- $type = '';
788
- if (!empty($_GET['sgpb_type'])) {
789
- $type = $_GET['sgpb_type'];
790
- }
791
-
792
- $currentPostType = self::getCurrentPostType();
793
-
794
- if ($currentPostType == SG_POPUP_POST_TYPE && !empty($_GET['post'])) {
795
- $popupObj = SGPopup::find($_GET['post']);
796
- if (is_object($popupObj)) {
797
- $type = $popupObj->getType();
798
- }
799
- }
800
-
801
- return $type;
802
- }
803
-
804
- public static function getCurrentPostType()
805
- {
806
- global $post_type;
807
- global $post;
808
- $currentPostType = '';
809
-
810
- if (is_object($post)) {
811
- $currentPostType = $post->post_type;
812
- }
813
-
814
- // in some themes global $post returns null
815
- if (empty($currentPostType)) {
816
- $currentPostType = $post_type;
817
- }
818
-
819
- if (empty($currentPostType) && !empty($_GET['post'])) {
820
- $currentPostType = get_post_type($_GET['post']);
821
- }
822
-
823
- return $currentPostType;
824
- }
825
-
826
- /**
827
- * Get image encoded data from URL
828
- *
829
- * @param $imageUrl
830
- * @param $shouldNotConvertBase64
831
- *
832
- * @return string
833
- */
834
-
835
- public static function getImageDataFromUrl($imageUrl, $shouldNotConvertBase64 = false)
836
- {
837
- $remoteData = wp_remote_get($imageUrl);
838
- if (is_wp_error($remoteData) && $shouldNotConvertBase64) {
839
- return SG_POPUP_IMG_URL.'NoImage.png';
840
- }
841
-
842
- if (!$shouldNotConvertBase64) {
843
- $imageData = wp_remote_retrieve_body($remoteData);
844
- $imageUrl = base64_encode($imageData);
845
- }
846
-
847
- return $imageUrl;
848
- }
849
-
850
- public static function deleteUserFromSubscribers($params = array())
851
- {
852
- global $wpdb;
853
-
854
- $email = '';
855
- $popup = '';
856
- $noSubscriber = true;
857
-
858
- if (isset($params['email'])) {
859
- $email = $params['email'];
860
- }
861
- if (isset($params['popup'])) {
862
- $popup = $params['popup'];
863
- }
864
-
865
- $prepareSql = $wpdb->prepare('SELECT id FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE email = %s && subscriptionType = %s', $email, $popup);
866
- $res = $wpdb->get_row($prepareSql, ARRAY_A);
867
- if (!isset($res['id'])) {
868
- $noSubscriber = false;
869
- }
870
- $params['subscriberId'] = $res['id'];
871
-
872
- $subscriber = self::subscriberExists($params);
873
- if ($subscriber && $noSubscriber) {
874
- self::deleteSubscriber($params);
875
- }
876
- else if (!$noSubscriber) {
877
- _e('<span>Oops, something went wrong, please try again or contact the administrator to check more info.</span>', SG_POPUP_TEXT_DOMAIN);
878
- wp_die();
879
- }
880
- }
881
-
882
- public static function subscriberExists($params = array())
883
- {
884
- if (empty($params)) {
885
- return false;
886
- }
887
-
888
- $receivedToken = $params['token'];
889
- $realToken = md5($params['subscriberId'].$params['email']);
890
- if ($receivedToken == $realToken) {
891
- return true;
892
- }
893
-
894
- }
895
-
896
- public static function deleteSubscriber($params = array())
897
- {
898
- global $wpdb;
899
- $homeUrl = get_home_url();
900
-
901
- if (empty($params)) {
902
- return false;
903
- }
904
- // send email to admin about user unsubscription
905
- self::sendEmailAboutUnsubscribe($params);
906
-
907
- $prepareSql = $wpdb->prepare('UPDATE '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' SET unsubscribed = 1 WHERE id = %s ', $params['subscriberId']);
908
- $wpdb->query($prepareSql);
909
-
910
- _e('<span>You have successfully unsubscribed. <a href="'.esc_attr($homeUrl).'">click here</a> to go to the home page.</span>', SG_POPUP_TEXT_DOMAIN);
911
- wp_die();
912
- }
913
-
914
- public static function sendEmailAboutUnsubscribe($params = array())
915
- {
916
- if (empty($params)) {
917
- return false;
918
- }
919
-
920
- $newsletterOptions = get_option('SGPB_NEWSLETTER_DATA');
921
- $receiverEmail = get_bloginfo('admin_email');
922
- $userEmail = $params['email'];
923
- $emailTitle = __('Unsubscription', SG_POPUP_TEXT_DOMAIN);
924
- $subscriptionFormId = (int)$newsletterOptions['subscriptionFormId'];
925
- $subscriptionFormTitle = get_the_title($subscriptionFormId);
926
-
927
- $message = __('User with '.$userEmail.' email has unsubscribed from '.$subscriptionFormTitle.' mail list', SG_POPUP_TEXT_DOMAIN);
928
-
929
- $headers = 'MIME-Version: 1.0'."\r\n";
930
- $headers .= 'From: WordPress Popup Builder'."\r\n";
931
- $headers .= 'Content-type: text/html; charset=UTF-8'."\r\n"; //set UTF-8
932
-
933
- wp_mail($receiverEmail, $emailTitle, $message, $headers);
934
- }
935
-
936
- public static function addUnsubscribeColumn()
937
- {
938
- global $wpdb;
939
-
940
- $sql = 'ALTER TABLE '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' ADD COLUMN unsubscribed INT NOT NULL DEFAULT 0 ';
941
- $wpdb->query($sql);
942
- }
943
-
944
- public static function isPluginActive($key)
945
- {
946
- $allExtensions = SgpbDataConfig::allExtensionsKeys();
947
- $isActive = false;
948
- foreach ($allExtensions as $extension) {
949
- if (isset($extension['key']) && $extension['key'] == $key) {
950
- if (is_plugin_active($extension['pluginKey'])) {
951
- $isActive = true;
952
- return $isActive;
953
- }
954
- }
955
- }
956
-
957
- return $isActive;
958
- }
959
-
960
- public static function supportBannerNotification()
961
- {
962
- $content = '<div class="sgpb-support-notification-wrapper sgpb-wrapper"><h4 class="sgpb-support-notification-title">'.__('Need some help?', SG_POPUP_TEXT_DOMAIN).'</h4>';
963
- $content .= '<h4 class="sgpb-support-notification-title">'.__('Let us know what you think.', SG_POPUP_TEXT_DOMAIN).'</h4>';
964
- $content .= '<a class="btn btn-info" target="_blank" href="'.SG_POPUP_RATE_US_URL.'"><span class="dashicons sgpb-dashicons-heart sgpb-info-text-white"></span><span class="sg-info-text">'.__('Rate Us', SG_POPUP_TEXT_DOMAIN).'</span></a>';
965
- $content .= '<a class="btn btn-info" target="_blank" href="'.SG_POPUP_TICKET_URL.'"><span class="dashicons sgpb-dashicons-megaphone sgpb-info-text-white"></span>'.__('Support Potal', SG_POPUP_TEXT_DOMAIN).'</a>';
966
- $content .= '<a class="btn btn-info" target="_blank" href="https://wordpress.org/support/plugin/popup-builder"><span class="dashicons sgpb-dashicons-admin-plugins sgpb-info-text-white"></span>'.__('Support Forum', SG_POPUP_TEXT_DOMAIN).'</a>';
967
- $content .= '<a class="btn btn-info" target="_blank" href="'.SG_POPUP_STORE_URL.'"><span class="dashicons sgpb-dashicons-editor-help sgpb-info-text-white"></span>'.__('LIVE chat', SG_POPUP_TEXT_DOMAIN).'</a>';
968
- $content .= '<a class="btn btn-info" target="_blank" href="mailto:support@popup-builder.com?subject=Hello"><span class="dashicons sgpb-dashicons-email-alt sgpb-info-text-white"></span>'.__('Email', SG_POPUP_TEXT_DOMAIN).'</a></div>';
969
- $content .= '<div class="sgpb-support-notification-dont-show">'.__('Bored of this?').'<a class="sgpb-dont-show-again-support-notification" href="javascript:void(0)">'.__(' Press here ').'</a>'.__('and we will not show it again!').'</div>';
970
-
971
- return $content;
972
- }
973
-
974
- public static function getMaxOpenDaysMessage()
975
- {
976
- $getUsageDays = self::getPopupUsageDays();
977
- $firstHeader = __('<h1 class="sgpb-review-h1"><strong class="sgrb-review-strong">This is great!</strong> We have noticed that you are using Popup Builder plugin on your site for '.$getUsageDays.' days, we are thankful for that.</h1>', SG_POPUP_TEXT_DOMAIN);
978
- $popupContent = self::getMaxOpenPopupContent($firstHeader, 'days');
979
-
980
- return $popupContent;
981
- }
982
-
983
- public static function getPopupUsageDays()
984
- {
985
- $installDate = get_option('SGPBInstallDate');
986
-
987
- $timeDate = new \DateTime('now');
988
- $timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
989
- $diff = $timeNow-$installDate;
990
- $days = floor($diff/(60*60*24));
991
-
992
- return $days;
993
- }
994
-
995
- public static function getMaxOpenPopupContent($firstHeader, $type)
996
- {
997
- ob_start();
998
- ?>
999
- <style>
1000
- .sgpb-buttons-wrapper .press{
1001
- box-sizing:border-box;
1002
- cursor:pointer;
1003
- display:inline-block;
1004
- font-size:1em;
1005
- margin:0;
1006
- padding:0.5em 0.75em;
1007
- text-decoration:none;
1008
- transition:background 0.15s linear
1009
- }
1010
- .sgpb-buttons-wrapper .press-grey {
1011
- background-color:#9E9E9E;
1012
- border:2px solid #9E9E9E;
1013
- color: #FFF;
1014
- }
1015
- .sgpb-buttons-wrapper .press-lightblue {
1016
- background-color:#03A9F4;
1017
- border:2px solid #03A9F4;
1018
- color: #FFF;
1019
- }
1020
- .sgpb-buttons-wrapper {
1021
- text-align: center;
1022
- }
1023
- .sgpb-review-wrapper{
1024
- text-align: center;
1025
- padding: 20px;
1026
- }
1027
- .sgpb-review-wrapper p {
1028
- color: black;
1029
- }
1030
- .sgpb-review-h1 {
1031
- font-size: 22px;
1032
- font-weight: normal;
1033
- line-height: 1.384;
1034
- }
1035
- .sgrb-review-h2{
1036
- font-size: 20px;
1037
- font-weight: normal;
1038
- }
1039
- :root {
1040
- --main-bg-color: #1ac6ff;
1041
- }
1042
- .sgrb-review-strong{
1043
- color: var(--main-bg-color);
1044
- }
1045
- .sgrb-review-mt20{
1046
- margin-top: 20px
1047
- }
1048
- </style>
1049
- <div class="sgpb-review-wrapper">
1050
- <div class="sgpb-review-description">
1051
- <?php echo $firstHeader; ?>
1052
- <h2 class="sgrb-review-h2"><?php _e('This is really great for your website score.', SG_POPUP_TEXT_DOMAIN); ?></h2>
1053
- <p class="sgrb-review-mt20"><?php _e('Have your input in the development of our plugin, and we’ll provide better conversions for your site!<br /> Leave your 5-star positive review and help us go further to the perfection!', SG_POPUP_TEXT_DOMAIN); ?></p>
1054
- </div>
1055
- <div class="sgpb-buttons-wrapper">
1056
- <button class="press press-grey sgpb-button-1 sgpb-close-promo-notification" data-action="sg-already-did-review"><?php _e('I already did', SG_POPUP_TEXT_DOMAIN); ?></button>
1057
- <button class="press press-lightblue sgpb-button-3 sgpb-close-promo-notification" data-action="sg-you-worth-it"><?php _e('You worth it!', SG_POPUP_TEXT_DOMAIN); ?></button>
1058
- <button class="press press-grey sgpb-button-2 sgpb-close-promo-notification" data-action="sg-show-popup-period" data-message-type="<?php echo $type; ?>"><?php _e('Maybe later', SG_POPUP_TEXT_DOMAIN); ?></button></div>
1059
- <div> </div>
1060
- </div>
1061
- <?php
1062
- $popupContent = ob_get_clean();
1063
-
1064
- return $popupContent;
1065
- }
1066
-
1067
- public static function shouldOpenReviewPopupForDays()
1068
- {
1069
- $shouldOpen = true;
1070
- $dontShowAgain = get_option('SGPBCloseReviewPopup-notification');
1071
- $periodNextTime = get_option('SGPBOpenNextTime');
1072
- /*if (!$dontShowAgain) {
1073
- return true;
1074
- }
1075
- else {
1076
- return false;
1077
- }*/
1078
- // When period next time does not exits it means the user is old
1079
- if (!$periodNextTime) {
1080
- $usageDays = self::getPopupMainTableCreationDate();
1081
- update_option('SGPBUsageDays', $usageDays);
1082
- if (!defined('SGPB_REVIEW_POPUP_PERIOD')) {
1083
- define('SGPB_REVIEW_POPUP_PERIOD', '500');
1084
- }
1085
- // For old users
1086
- if (defined('SGPB_REVIEW_POPUP_PERIOD') && $usageDays > SGPB_REVIEW_POPUP_PERIOD && !$dontShowAgain) {
1087
- return $shouldOpen;
1088
- }
1089
- $remainingDays = SGPB_REVIEW_POPUP_PERIOD - $usageDays;
1090
-
1091
- $popupTimeZone = \ConfigDataHelper::getDefaultTimezone();
1092
- $timeDate = new DateTime('now', new DateTimeZone($popupTimeZone));
1093
- $timeDate->modify('+'.$remainingDays.' day');
1094
-
1095
- $timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
1096
- update_option('SGPBOpenNextTime', $timeNow);
1097
-
1098
- return false;
1099
- }
1100
-
1101
- $currentData = new \DateTime('now');
1102
- $timeNow = $currentData->format('Y-m-d H:i:s');
1103
- $timeNow = strtotime($timeNow);
1104
-
1105
- if ($periodNextTime > $timeNow) {
1106
- $shouldOpen = false;
1107
- }
1108
-
1109
- return $shouldOpen;
1110
- }
1111
-
1112
- public static function getPopupMainTableCreationDate()
1113
- {
1114
- global $wpdb;
1115
-
1116
- $query = $wpdb->prepare('SELECT table_name, create_time FROM information_schema.tables WHERE table_schema=%s AND table_name=%s', DB_NAME, $wpdb->prefix.'sgpb_subscribers');
1117
- $results = $wpdb->get_results($query, ARRAY_A);
1118
- if (empty($results)) {
1119
- return 0;
1120
- }
1121
-
1122
- $createTime = $results[0]['create_time'];
1123
- $createTime = strtotime($createTime);
1124
- update_option('SGPBInstallDate', $createTime);
1125
- $diff = time() - $createTime;
1126
- $days = floor($diff/(60*60*24));
1127
-
1128
- return $days;
1129
- }
1130
-
1131
- public static function shouldOpenForMaxOpenPopupMessage()
1132
- {
1133
- $counterMaxPopup = self::getMaxOpenPopupId();
1134
-
1135
- if (empty($counterMaxPopup)) {
1136
- return false;
1137
- }
1138
- $dontShowAgain = get_option('SGPBCloseReviewPopup-notification');
1139
- $maxCountDefine = get_option('SGPBMaxOpenCount');
1140
-
1141
- if (!$maxCountDefine) {
1142
- $maxCountDefine = SGPB_ASK_REVIEW_POPUP_COUNT;
1143
- }
1144
-
1145
- return $counterMaxPopup['maxCount'] >= $maxCountDefine && !$dontShowAgain;
1146
- }
1147
-
1148
- public static function getMaxOpenPopupId()
1149
- {
1150
- $popupsCounterData = get_option('SgpbCounter');
1151
- if (!$popupsCounterData) {
1152
- return 0;
1153
- }
1154
-
1155
- $counters = array_values($popupsCounterData);
1156
- $maxCount = max($counters);
1157
- $popupId = array_search($maxCount, $popupsCounterData);
1158
-
1159
- $maxPopupData = array(
1160
- 'popupId' => $popupId,
1161
- 'maxCount' => $maxCount
1162
- );
1163
-
1164
- return $maxPopupData;
1165
- }
1166
-
1167
- public static function getMaxOpenPopupsMessage()
1168
- {
1169
- $counterMaxPopup = self::getMaxOpenPopupId();
1170
- $maxCountDefine = get_option('SGPBMaxOpenCount');
1171
- $popupTitle = get_the_title($counterMaxPopup['popupId']);
1172
-
1173
- if (!empty($counterMaxPopup['maxCount'])) {
1174
- $maxCountDefine = $counterMaxPopup['maxCount'];
1175
- }
1176
-
1177
- $firstHeader = __('<h1 class="sgpb-review-h1"><strong class="sgrb-review-strong">Awesome news!</strong> <b>Popup Builder</b> plugin helped you to share your message via <strong class="sgrb-review-strong">'.$popupTitle.'</strong> popup with your visitors for <strong class="sgrb-review-strong">'.$maxCountDefine.' times!</strong></h1>', SG_POPUP_TEXT_DOMAIN);
1178
- $popupContent = self::getMaxOpenPopupContent($firstHeader, 'count');
1179
-
1180
- return $popupContent;
1181
- }
1182
-
1183
- /**
1184
- * Get email headers
1185
- *
1186
- * @since 3.1.0
1187
- *
1188
- * @param email $fromEmail
1189
- * @param array $args
1190
- *
1191
- * @return string $headers
1192
- */
1193
- public static function getEmailHeader($fromEmail, $args = array())
1194
- {
1195
- $contentType = 'text/html';
1196
- $charset = 'UTF-8';
1197
- $blogInfo = get_bloginfo();
1198
-
1199
- if (!empty($args['contentType'])) {
1200
- $contentType = $args['contentType'];
1201
- }
1202
- if (!empty($args['charset'])) {
1203
- $charset = $args['charset'];
1204
- }
1205
- $headers = 'MIME-Version: 1.0'."\r\n";
1206
- $headers .= 'From: "'.$blogInfo.'" <'.$fromEmail.'>'."\r\n";
1207
- $headers .= 'Content-type: '.$contentType.'; charset='.$charset.''."\r\n"; //set UTF-8
1208
-
1209
- return $headers;
1210
- }
1211
-
1212
- /**
1213
- * Get file content from URL
1214
- *
1215
- * @since 3.1.0
1216
- *
1217
- * @param $url
1218
- *
1219
- * @return string
1220
- */
1221
- public static function getFileFromURL($url)
1222
- {
1223
- $data = '';
1224
- $remoteData = wp_remote_get($url);
1225
-
1226
- if (is_wp_error($remoteData)) {
1227
- return $data;
1228
- }
1229
-
1230
- $data = wp_remote_retrieve_body($remoteData);
1231
-
1232
- return $data;
1233
- }
1234
-
1235
- public static function getRightMetaboxBannerText()
1236
- {
1237
- $bannerText = get_option('sgpb-metabox-banner-remote-get');
1238
-
1239
- return $bannerText;
1240
- }
1241
-
1242
- public static function getGutenbergPopupsIdAndTitle($excludesPopups = array())
1243
- {
1244
- $allPopups = SGPopup::getAllPopups();
1245
- $popupIdTitles = array();
1246
-
1247
- if (empty($allPopups)) {
1248
- return $popupIdTitles;
1249
- }
1250
-
1251
- foreach ($allPopups as $popup) {
1252
- if (empty($popup)) {
1253
- continue;
1254
- }
1255
-
1256
- $id = $popup->getId();
1257
- $title = $popup->getTitle();
1258
- $type = $popup->getType();
1259
-
1260
- if (!empty($excludesPopups)) {
1261
- foreach ($excludesPopups as $excludesPopupId) {
1262
- if ($excludesPopupId != $id) {
1263
- $array = array();
1264
- $array['id'] = $id;
1265
- $array['title'] = $title.' - '.$type;
1266
- $popupIdTitles[] = $array;
1267
- }
1268
- }
1269
- }
1270
- else {
1271
- $array = array();
1272
- $array['id'] = $id;
1273
- $array['title'] = $title.' - '.$type;
1274
- $popupIdTitles[] = $array;
1275
- }
1276
- }
1277
-
1278
- return $popupIdTitles;
1279
- }
1280
-
1281
- public static function getGutenbergPopupsEvents()
1282
- {
1283
- $data = array(
1284
- array('value' => '', 'title' => __('Select Event', SG_POPUP_TEXT_DOMAIN)),
1285
- array('value' => 'inherit', 'title' => __('Inherit', SG_POPUP_TEXT_DOMAIN)),
1286
- array('value' => 'onLoad', 'title' => __('On load', SG_POPUP_TEXT_DOMAIN)),
1287
- array('value' => 'click', 'title' => __('On click', SG_POPUP_TEXT_DOMAIN)),
1288
- array('value' => 'hover', 'title' => __('On hover', SG_POPUP_TEXT_DOMAIN))
1289
- );
1290
-
1291
- return $data;
1292
- }
1293
-
1294
- public static function checkEditorByPopupId($popupId)
1295
- {
1296
- $popupContent = '';
1297
- if (class_exists('\Elementor\Plugin')) {
1298
- $elementorContent = get_post_meta($popupId, '_elementor_edit_mode', true);
1299
- if (!empty($elementorContent) && $elementorContent == 'builder') {
1300
- $popupContent = Elementor\Plugin::instance()->frontend->get_builder_content_for_display($popupId);
1301
- }
1302
- }
1303
- else if (class_exists('Vc_Manager')) {
1304
- $stylesAndScripts = self::renderWPBakeryScriptsAndStyles($popupId);
1305
- $popupContent .= '<style>'.$stylesAndScripts.'</style>';
1306
- }
1307
-
1308
- return $popupContent;
1309
- }
1310
-
1311
- public static function renderWPBakeryScriptsAndStyles($popupId = 0)
1312
- {
1313
- return get_post_meta($popupId, '_wpb_shortcodes_custom_css', true);
1314
- }
1315
-
1316
- /**
1317
- * countdown popup, convert date to seconds
1318
- *
1319
- * @param $dueDate
1320
- * @param $timezone
1321
- * @return false|int|string
1322
- */
1323
- public static function dateToSeconds($dueDate, $timezone)
1324
- {
1325
- if (empty($timezone)) {
1326
- return '';
1327
- }
1328
-
1329
- $dateObj = self::getDateObjFromDate('now', $timezone);
1330
- $timeNow = @strtotime($dateObj);
1331
- $seconds = @strtotime($dueDate)-$timeNow;
1332
- if ($seconds < 0) {
1333
- $seconds = 0;
1334
- }
1335
-
1336
- return $seconds;
1337
- }
1338
-
1339
- /**
1340
- * Get site protocol
1341
- *
1342
- * @since 1.0.0
1343
- *
1344
- * @return string $protocol
1345
- *
1346
- */
1347
- public static function getSiteProtocol()
1348
- {
1349
- $protocol = 'http';
1350
-
1351
- if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
1352
- $protocol = 'https';
1353
- }
1354
-
1355
- return $protocol;
1356
- }
1357
-
1358
- public static function findSubscribersByEmail($subscriberEmail = '', $list = 0)
1359
- {
1360
- global $wpdb;
1361
- $subscriber = array();
1362
-
1363
- $prepareSql = $wpdb->prepare('SELECT * FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE email = %s AND subscriptionType = %d ', $subscriberEmail, $list);
1364
- $subscriber = $wpdb->get_row($prepareSql, ARRAY_A);
1365
- if (!$list) {
1366
- $prepareSql = $wpdb->prepare('SELECT * FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE email = %s ', $subscriberEmail);
1367
- $subscriber = $wpdb->get_results($prepareSql, ARRAY_A);
1368
- }
1369
-
1370
- return $subscriber;
1371
- }
1372
-
1373
- /**
1374
- * Update option
1375
- *
1376
- * @since 3.1.9
1377
- *
1378
- * @return void
1379
- */
1380
- public static function updateOption($optionKey, $optionValue)
1381
- {
1382
- update_option($optionKey, $optionValue);
1383
- }
1384
-
1385
- public static function getOption($optionKey, $default = false)
1386
- {
1387
- return get_option($optionKey, $default);
1388
- }
1389
-
1390
- public static function deleteOption($optionKey)
1391
- {
1392
- delete_option($optionKey);
1393
- }
1394
-
1395
- /**
1396
- * It's change popup registered plugins static paths to dynamic
1397
- *
1398
- * @since 3.1.9
1399
- *
1400
- * @return bool where true mean modified false mean there is not need modification
1401
- */
1402
- public static function makeRegisteredPluginsStaticPathsToDynamic()
1403
- {
1404
- // remove old outdated option sgpbModifiedRegisteredPluginsPaths
1405
- delete_option('sgpbModifiedRegisteredPluginsPaths');
1406
- delete_option('SG_POPUP_BUILDER_REGISTERED_PLUGINS');
1407
- $hasModifiedPaths = AdminHelper::getOption(SGPB_REGISTERED_PLUGINS_PATHS_MODIFIED);
1408
- if ($hasModifiedPaths) {
1409
- return false;
1410
- }
1411
- else {
1412
- Installer::registerPlugin();
1413
- }
1414
- AdminHelper::updateOption(SGPB_REGISTERED_PLUGINS_PATHS_MODIFIED, 1);
1415
-
1416
- $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
1417
- if (empty($registeredPlugins)) {
1418
- return false;
1419
- }
1420
-
1421
- $registeredPlugins = json_decode($registeredPlugins, true);
1422
- if (empty($registeredPlugins)) {
1423
- return false;
1424
- }
1425
-
1426
- foreach ($registeredPlugins as $key => $registeredPlugin) {
1427
- if (empty($registeredPlugin['classPath'])) {
1428
- continue;
1429
- }
1430
- $registeredPlugins[$key]['classPath'] = str_replace(WP_PLUGIN_DIR, '', $registeredPlugin['classPath']);
1431
- if (!empty($registeredPlugin['options']['licence']['file'])) {
1432
- $registeredPlugins[$key]['options']['licence']['file'] = $registeredPlugin['options']['licence']['file'];
1433
- }
1434
- }
1435
- $registeredPlugins = json_encode($registeredPlugins);
1436
-
1437
- AdminHelper::updateOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS, $registeredPlugins);
1438
- return true;
1439
- }
1440
-
1441
- public static function hasInactiveExtensions()
1442
- {
1443
- $hasInactiveExtensions = false;
1444
- $allRegiseredPBPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
1445
- $allRegiseredPBPlugins = @json_decode($allRegiseredPBPlugins, true);
1446
- if (empty($allRegiseredPBPlugins)) {
1447
- return $hasInactiveExtensions;
1448
- }
1449
-
1450
- foreach ($allRegiseredPBPlugins as $pluginPath => $registeredPlugin) {
1451
- if (!isset($registeredPlugin['options']['licence']['key'])) {
1452
- continue;
1453
- }
1454
- if (!isset($registeredPlugin['options']['licence']['file'])) {
1455
- continue;
1456
- }
1457
- $extensionKey = $registeredPlugin['options']['licence']['file'];
1458
- $isPluginActive = is_plugin_active($extensionKey);
1459
- $pluginKey = $registeredPlugin['options']['licence']['key'];
1460
- $isValidLicense = get_option('sgpb-license-status-'.$pluginKey);
1461
-
1462
- // if we even have at least one inactive extension, we don't need to check remaining extensions
1463
- if ($isValidLicense != 'valid' && $isPluginActive) {
1464
- $hasInactiveExtensions = true;
1465
- break;
1466
- }
1467
- }
1468
-
1469
- return $hasInactiveExtensions;
1470
- }
1471
-
1472
- public static function getSubscriptionColumnsById($id)
1473
- {
1474
- $popup = SGPopup::find($id);
1475
- if (empty($popup) || !is_object($popup)) {
1476
- return array();
1477
- }
1478
- $freeSavedOptions = $popup->getOptionValue('sgpb-subs-fields');
1479
-
1480
- if (!empty($freeSavedOptions)) {
1481
- return array('firstName' => 'First name','lastName' => 'Last name', 'email' => 'Email', 'date' => 'Date');
1482
- }
1483
- $formFieldsJson = $popup->getOptionValue('sgpb-subscription-fields-json');
1484
- if (!empty($formFieldsJson)) {
1485
- $data = apply_filters('sgpbGetSubscriptionLabels', array(), $popup);
1486
- $data['date'] = 'Date';
1487
- return $data;
1488
- }
1489
-
1490
- return array();
1491
- }
1492
-
1493
- public static function getCustomFormFieldsByPopupId($popupId)
1494
- {
1495
- if (!class_exists('sgpbsubscriptionplus\SubscriptionPlusAdminHelper')) {
1496
- return array();
1497
- }
1498
-
1499
- if (method_exists('sgpbsubscriptionplus\SubscriptionPlusAdminHelper', 'getCustomFormFieldsByPopupId')) {
1500
- return SubscriptionPlusAdminHelper::getCustomFormFieldsByPopupId($popupId);
1501
- }
1502
-
1503
- return array();
1504
- }
1505
-
1506
- public static function removeAllNonPrintableCharacters($title, $defaultValue)
1507
- {
1508
- $titleRes = $title;
1509
- $pattern = '/[\\\^£$%&*()}{@#~?><>,|=_+¬-]/u';
1510
- $title = preg_replace($pattern, '', $title);
1511
- $title = mb_ereg_replace($pattern, '', $title);
1512
- $title = htmlspecialchars($title, ENT_IGNORE, 'UTF-8');
1513
- $result = str_replace(' ', '', $title);
1514
- if (empty($result)) {
1515
- $titleRes = $defaultValue;
1516
- }
1517
-
1518
- return $titleRes;
1519
- }
1520
-
1521
- public static function renderCustomScripts($popupId)
1522
- {
1523
- $finalResult = '';
1524
- $postMeta = get_post_meta($popupId, 'sg_popup_scripts', true);
1525
- if (empty($postMeta)) {
1526
- return '';
1527
- }
1528
- $defaultData = \ConfigDataHelper::defaultData();
1529
-
1530
- // get scripts
1531
- if (!isset($postMeta['js'])) {
1532
- $postMeta['js'] = array();
1533
- }
1534
- $jsPostMeta = $postMeta['js'];
1535
- $jsDefaultData = $defaultData['customEditorContent']['js']['helperText'];
1536
- $suspiciousStrings = array('document.createElement', 'createElement', 'String.fromCharCode', 'fromCharCode', '<!--', '-->');
1537
- $finalContent = '';
1538
- $suspiciousStringFound = false;
1539
- if (!empty($jsPostMeta)) {
1540
- $customScripts = '<script id="sgpb-custom-script-'.$popupId.'">';
1541
- foreach ($jsDefaultData as $key => $value) {
1542
- $eventName = 'sgpb'.$key;
1543
- if ((!isset($jsPostMeta['sgpb-'.$key]) || empty($jsPostMeta['sgpb-'.$key])) || $key == 'ShouldOpen' || $key == 'ShouldClose') {
1544
- continue;
1545
- }
1546
- $content = @$jsPostMeta['sgpb-'.$key];
1547
- $content = str_replace('popupId', $popupId, $content);
1548
- $content = str_replace("<", "&lt;", $content);
1549
- $content = str_replace(">", "&gt;", $content);
1550
- foreach ($suspiciousStrings as $string) {
1551
- if (strpos($content, $string)) {
1552
- $suspiciousStringFound = true;
1553
- break;
1554
- }
1555
- }
1556
- if ($suspiciousStringFound) {
1557
- break;
1558
- }
1559
- $content = html_entity_decode($content, ENT_QUOTES, 'UTF-8');
1560
-
1561
- $finalContent .= 'jQuery(document).ready(function(){';
1562
- $finalContent .= 'sgAddEvent(window, "'.$eventName.'", function(e) {';
1563
- $finalContent .= 'if (e.detail.popupId == "'.$popupId.'") {';
1564
- $finalContent .= $content;
1565
- $finalContent .= '};';
1566
- $finalContent .= '});';
1567
- $finalContent .= '});';
1568
- }
1569
- $customScripts .= $finalContent;
1570
- $customScripts .= '</script>';
1571
- if (empty($finalContent)) {
1572
- $customScripts = '';
1573
- }
1574
- $finalResult .= $customScripts;
1575
- }
1576
-
1577
- // get styles
1578
- if (isset($postMeta['css'])) {
1579
- $cssPostMeta = $postMeta['css'];
1580
- }
1581
- $finalContent = '';
1582
- if (!empty($cssPostMeta)) {
1583
- $customStyles = '<style id="sgpb-custom-style-'.$popupId.'">';
1584
- $finalContent = str_replace('popupId', $popupId, $cssPostMeta);
1585
- $finalContent = html_entity_decode($finalContent, ENT_QUOTES, 'UTF-8');
1586
-
1587
- $customStyles .= $finalContent;
1588
- $customStyles .= '</style>';
1589
- $finalResult .= $customStyles;
1590
- }
1591
-
1592
-
1593
- return $finalResult;
1594
- }
1595
-
1596
- public static function removeSelectedTypeOptions($type)
1597
- {
1598
- switch ($type) {
1599
- case 'cron':
1600
- $crons = _get_cron_array();
1601
- foreach ($crons as $key => $value) {
1602
- foreach ($value as $key => $body) {
1603
- if (strstr($key, 'sgpb')) {
1604
- wp_clear_scheduled_hook($key);
1605
- }
1606
- }
1607
- }
1608
- break;
1609
- }
1610
- }
1611
-
1612
- public static function getSystemInfoText() {
1613
- global $wpdb;
1614
-
1615
- $browser = self::getBrowser();
1616
-
1617
- // Get theme info
1618
- if (get_bloginfo('version') < '3.4') {
1619
- $themeData = wp_get_theme(get_stylesheet_directory().'/style.css');
1620
- $theme = $themeData['Name'].' '.$themeData['Version'];
1621
- }
1622
- else {
1623
- $themeData = wp_get_theme();
1624
- $theme = $themeData->Name.' '.$themeData->Version;
1625
- }
1626
-
1627
- // Try to identify the hosting provider
1628
- $host = self::getHost();
1629
-
1630
- $systemInfoContent = '### Start System Info ###'."\n\n";
1631
-
1632
- // Start with the basics...
1633
- $systemInfoContent .= '-- Site Info'."\n\n";
1634
- $systemInfoContent .= 'Site URL: '.site_url()."\n";
1635
- $systemInfoContent .= 'Home URL: '.home_url()."\n";
1636
- $systemInfoContent .= 'Multisite: '.(is_multisite() ? 'Yes' : 'No')."\n";
1637
-
1638
- // Can we determine the site's host?
1639
- if ($host) {
1640
- $systemInfoContent .= "\n".'-- Hosting Provider'."\n\n";
1641
- $systemInfoContent .= 'Host: '.$host."\n";
1642
- }
1643
-
1644
- // The local users' browser information, handled by the Browser class
1645
- $systemInfoContent .= "\n".'-- User Browser'."\n\n";
1646
- $systemInfoContent .= $browser;
1647
-
1648
- // WordPress configuration
1649
- $systemInfoContent .= "\n".'-- WordPress Configuration'."\n\n";
1650
- $systemInfoContent .= 'Version: '.get_bloginfo('version')."\n";
1651
- $systemInfoContent .= 'Language: '.(defined('WPLANG') && WPLANG ? WPLANG : 'en_US')."\n";
1652
- $systemInfoContent .= 'Permalink Structure: '.(get_option('permalink_structure') ? get_option('permalink_structure') : 'Default')."\n";
1653
- $systemInfoContent .= 'Active Theme: '.$theme."\n";
1654
- $systemInfoContent .= 'Show On Front: '.get_option('show_on_front')."\n";
1655
-
1656
- // Only show page specs if frontpage is set to 'page'
1657
- if (get_option('show_on_front') == 'page') {
1658
- $frontPageId = get_option('page_on_front');
1659
- $blogPageId = get_option('page_for_posts');
1660
-
1661
- $systemInfoContent .= 'Page On Front: '.($frontPageId != 0 ? get_the_title($frontPageId).' (#'.$frontPageId.')' : 'Unset')."\n";
1662
- $systemInfoContent .= 'Page For Posts: '.($blogPageId != 0 ? get_the_title($blogPageId).' (#'.$blogPageId.')' : 'Unset')."\n";
1663
- }
1664
-
1665
- $systemInfoContent .= 'Table Prefix: '.'Prefix: '.$wpdb->prefix.' Length: '.strlen($wpdb->prefix ).' Status: '.( strlen($wpdb->prefix) > 16 ? 'ERROR: Too long' : 'Acceptable')."\n";
1666
- $systemInfoContent .= 'WP_DEBUG: '.(defined('WP_DEBUG') ? WP_DEBUG ? 'Enabled' : 'Disabled' : 'Not set')."\n";
1667
- $systemInfoContent .= 'Memory Limit: '.WP_MEMORY_LIMIT."\n";
1668
- $systemInfoContent .= 'Registered Post Stati: '.implode(', ', get_post_stati())."\n";
1669
-
1670
- // Must-use plugins
1671
- $muplugins = get_mu_plugins();
1672
- if ($muplugins && count($muplugins)) {
1673
- $systemInfoContent .= "\n".'-- Must-Use Plugins'."\n\n";
1674
-
1675
- foreach ($muplugins as $plugin => $plugin_data) {
1676
- $systemInfoContent .= $plugin_data['Name'].': '.$plugin_data['Version']."\n";
1677
- }
1678
- }
1679
-
1680
- $registered = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
1681
- $registered = json_decode($registered, true);
1682
-
1683
- if (empty($registered)) {
1684
- return false;
1685
- }
1686
- // remove free package data, we don't need it
1687
- array_shift($registered);
1688
-
1689
- $systemInfoContent .= "\n".'-- Popup Builder License Data'."\n\n";
1690
- if (!empty($registered)) {
1691
- foreach ($registered as $singleExntensionData) {
1692
- if (empty($singleExntensionData['options'])) {
1693
- continue;
1694
- }
1695
-
1696
- $key = $singleExntensionData['options']['licence']['key'];
1697
- $name = $singleExntensionData['options']['licence']['itemName'];
1698
- $licenseKey = __('No license');
1699
- if (!empty($key)) {
1700
- $licenseKey = self::getOption('sgpb-license-key-'.$key);
1701
- }
1702
- $licenseStatus = 'Inactive';
1703
- if (self::getOption('sgpb-license-status-'.$key) == 'valid') {
1704
- $licenseStatus = 'Active';
1705
- }
1706
-
1707
- $systemInfoContent .= 'Name: '.$name."\n";
1708
- $systemInfoContent .= 'License key: '.$licenseKey."\n";
1709
- $systemInfoContent .= 'License status: '.$licenseStatus."\n";
1710
- $systemInfoContent .= "\n";
1711
- }
1712
- }
1713
-
1714
- $systemInfoContent .= "\n".'-- All created Popups'."\n\n";
1715
- $allPopups = self::getPopupsIdAndTitle();
1716
- $args['status'] = array('publish', 'draft', 'pending', 'private', 'trash');
1717
- foreach ($allPopups as $id => $popupTitleType) {
1718
- $popup = SGPopup::find($id, $args);
1719
- $popupStatus = ($popup->getOptionValue('sgpb-is-active')) ? 'Enabled' : 'Disabled';
1720
- $systemInfoContent .= 'Id: '.$id."\n";
1721
- $systemInfoContent .= 'Title: '.get_the_title($id)."\n";
1722
- $systemInfoContent .= 'Type: '.$popup->getOptionValue('sgpb-type')."\n";
1723
- $systemInfoContent .= 'Status: '.$popupStatus."\n";
1724
- $systemInfoContent .= "\n";
1725
- }
1726
-
1727
- // WordPress active plugins
1728
- $systemInfoContent .= "\n".'-- WordPress Active Plugins'."\n\n";
1729
-
1730
- $plugins = get_plugins();
1731
- $activePlugins = get_option('active_plugins', array());
1732
- foreach ($plugins as $pluginPath => $plugin) {
1733
-
1734
- if (! in_array($pluginPath, $activePlugins)) {
1735
- continue;
1736
- }
1737
-
1738
- $systemInfoContent .= $plugin['Name'].': '.$plugin['Version']."\n";
1739
- }
1740
- // WordPress inactive plugins
1741
- $systemInfoContent .= "\n".'-- WordPress Inactive Plugins'."\n\n";
1742
-
1743
- foreach ($plugins as $pluginPath => $plugin) {
1744
- if (in_array($pluginPath, $activePlugins)) {
1745
- continue;
1746
- }
1747
- $systemInfoContent .= $plugin['Name'].': '.$plugin['Version']."\n";
1748
- }
1749
-
1750
- if (is_multisite()) {
1751
- // WordPress Multisite active plugins
1752
- $systemInfoContent .= "\n".'-- Network Active Plugins'."\n\n";
1753
-
1754
- $plugins = wp_get_active_network_plugins();
1755
- $activePlugins = get_site_option('active_sitewide_plugins', array());
1756
-
1757
- foreach ($plugins as $pluginPath) {
1758
- $plugin_base = plugin_basename($pluginPath);
1759
-
1760
- if (! array_key_exists($plugin_base, $activePlugins)) {
1761
- continue;
1762
- }
1763
-
1764
- $plugin = get_plugin_data($pluginPath);
1765
- $systemInfoContent .= $plugin['Name'].': '.$plugin['Version']."\n";
1766
- }
1767
- }
1768
-
1769
- // Server configuration (really just versioning)
1770
- $systemInfoContent .= "\n".'-- Webserver Configuration'."\n\n";
1771
- $systemInfoContent .= 'PHP Version: '.PHP_VERSION."\n";
1772
- $systemInfoContent .= 'MySQL Version: '.$wpdb->db_version()."\n";
1773
- $systemInfoContent .= 'Webserver Info: '.$_SERVER['SERVER_SOFTWARE']."\n";
1774
-
1775
- // PHP configs... now we're getting to the important stuff
1776
- $systemInfoContent .= "\n".'-- PHP Configuration'."\n\n";
1777
- $systemInfoContent .= 'Memory Limit: '.ini_get('memory_limit')."\n";
1778
- $systemInfoContent .= 'Upload Max Size: '.ini_get('upload_max_filesize')."\n";
1779
- $systemInfoContent .= 'Post Max Size: '.ini_get('post_max_size')."\n";
1780
- $systemInfoContent .= 'Upload Max Filesize: '.ini_get('upload_max_filesize')."\n";
1781
- $systemInfoContent .= 'Time Limit: '.ini_get('max_execution_time')."\n";
1782
- $systemInfoContent .= 'Max Input Vars: '.ini_get('max_input_vars')."\n";
1783
- $systemInfoContent .= 'Display Errors: '.(ini_get('display_errors') ? 'On ('.ini_get('display_errors').')' : 'N/A')."\n";
1784
-
1785
- // PHP extensions and such
1786
- $systemInfoContent .= "\n".'-- PHP Extensions'."\n\n";
1787
- $systemInfoContent .= 'cURL: '.(function_exists('curl_init') ? 'Supported' : 'Not Supported')."\n";
1788
- $systemInfoContent .= 'fsockopen: '.(function_exists('fsockopen') ? 'Supported' : 'Not Supported')."\n";
1789
- $systemInfoContent .= 'SOAP Client: '.(class_exists('SoapClient') ? 'Installed' : 'Not Installed')."\n";
1790
- $systemInfoContent .= 'Suhosin: '.(extension_loaded('suhosin') ? 'Installed' : 'Not Installed')."\n";
1791
-
1792
- // Session stuff
1793
- $systemInfoContent .= "\n".'-- Session Configuration'."\n\n";
1794
- $systemInfoContent .= 'Session: '.(isset($_SESSION ) ? 'Enabled' : 'Disabled')."\n";
1795
-
1796
- // The rest of this is only relevant is session is enabled
1797
- if (isset($_SESSION)) {
1798
- $systemInfoContent .= 'Session Name: '.esc_html( ini_get('session.name'))."\n";
1799
- $systemInfoContent .= 'Cookie Path: '.esc_html( ini_get('session.cookie_path'))."\n";
1800
- $systemInfoContent .= 'Save Path: '.esc_html( ini_get('session.save_path'))."\n";
1801
- $systemInfoContent .= 'Use Cookies: '.(ini_get('session.use_cookies') ? 'On' : 'Off')."\n";
1802
- $systemInfoContent .= 'Use Only Cookies: '.(ini_get('session.use_only_cookies') ? 'On' : 'Off')."\n";
1803
- }
1804
-
1805
- $systemInfoContent = apply_filters('sgpbSystemInformation', $systemInfoContent);
1806
-
1807
- $systemInfoContent .= "\n".'### End System Info ###';
1808
-
1809
- return $systemInfoContent;
1810
- }
1811
-
1812
- public static function getHost()
1813
- {
1814
- if (defined('WPE_APIKEY')) {
1815
- return 'WP Engine';
1816
- }
1817
- else if (defined('PAGELYBIN')) {
1818
- return 'Pagely';
1819
- }
1820
- else if (DB_HOST == 'localhost:/tmp/mysql5.sock') {
1821
- return 'ICDSoft';
1822
- }
1823
- else if (DB_HOST == 'mysqlv5') {
1824
- return 'NetworkSolutions';
1825
- }
1826
- else if (strpos(DB_HOST, 'ipagemysql.com') !== false) {
1827
- return 'iPage';
1828
- }
1829
- else if (strpos(DB_HOST, 'ipowermysql.com') !== false) {
1830
- return 'IPower';
1831
- }
1832
- else if (strpos(DB_HOST, '.gridserver.com') !== false) {
1833
- return 'MediaTemple Grid';
1834
- }
1835
- else if (strpos(DB_HOST, '.pair.com') !== false) {
1836
- return 'pair Networks';
1837
- }
1838
- else if (strpos(DB_HOST, '.stabletransit.com') !== false) {
1839
- return 'Rackspace Cloud';
1840
- }
1841
- else if (strpos(DB_HOST, '.sysfix.eu') !== false) {
1842
- return 'SysFix.eu Power Hosting';
1843
- }
1844
- else if (strpos($_SERVER['SERVER_NAME'], 'Flywheel') !== false) {
1845
- return 'Flywheel';
1846
- }
1847
- else {
1848
- // Adding a general fallback for data gathering
1849
- return 'DBH: '.DB_HOST.', SRV: '.$_SERVER['SERVER_NAME'];
1850
- }
1851
- }
1852
-
1853
- public static function getBrowser()
1854
- {
1855
- $uAgent = 'Unknown';
1856
- if (isset($_SERVER['HTTP_USER_AGENT'])) {
1857
- $uAgent = $_SERVER['HTTP_USER_AGENT'];
1858
- }
1859
- $bname = $platform = $ub = $version = 'Unknown';
1860
- $browserInfoContent = '';
1861
-
1862
- //First get the platform?
1863
- if (preg_match('/linux/i', $uAgent)) {
1864
- $platform = 'Linux';
1865
- }
1866
- else if (preg_match('/macintosh|mac os x/i', $uAgent)) {
1867
- $platform = 'Apple';
1868
- }
1869
- else if (preg_match('/windows|win32/i', $uAgent)) {
1870
- $platform = 'Windows';
1871
- }
1872
-
1873
- if (preg_match('/MSIE/i',$uAgent) && !preg_match('/Opera/i',$uAgent)) {
1874
- $bname = 'Internet Explorer';
1875
- $ub = 'MSIE';
1876
- }
1877
- else if (preg_match('/Firefox/i',$uAgent)) {
1878
- $bname = 'Mozilla Firefox';
1879
- $ub = 'Firefox';
1880
- }
1881
- else if (preg_match('/OPR/i',$uAgent)) {
1882
- $bname = 'Opera';
1883
- $ub = 'Opera';
1884
- }
1885
- else if (preg_match('/Chrome/i',$uAgent) && !preg_match('/Edge/i',$uAgent)) {
1886
- $bname = 'Google Chrome';
1887
- $ub = 'Chrome';
1888
- }
1889
- else if (preg_match('/Safari/i',$uAgent) && !preg_match('/Edge/i',$uAgent)) {
1890
- $bname = 'Apple Safari';
1891
- $ub = 'Safari';
1892
- }
1893
- else if (preg_match('/Netscape/i',$uAgent)) {
1894
- $bname = 'Netscape';
1895
- $ub = 'Netscape';
1896
- }
1897
- else if (preg_match('/Edge/i',$uAgent)) {
1898
- $bname = 'Edge';
1899
- $ub = 'Edge';
1900
- }
1901
- else if (preg_match('/Trident/i',$uAgent)) {
1902
- $bname = 'Internet Explorer';
1903
- $ub = 'MSIE';
1904
- }
1905
-
1906
- // finally get the correct version number
1907
- $known = array('Version', $ub, 'other');
1908
- $pattern = '#(?<browser>'.implode('|', $known).')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
1909
- $matches = array();
1910
- preg_match_all($pattern, $uAgent, $matches);
1911
-
1912
- // see how many we have
1913
- $i = count($matches['browser']);
1914
- //we will have two since we are not using 'other' argument yet
1915
- if ($i != 1) {
1916
- //see if version is before or after the name
1917
- if (strripos($uAgent,"Version") < strripos($uAgent,$ub)) {
1918
- $version= $matches['version'][0];
1919
- }
1920
- else {
1921
- $version= $matches['version'][1];
1922
- }
1923
- }
1924
- else {
1925
- $version= $matches['version'][0];
1926
- }
1927
-
1928
- // check if we have a number
1929
- if ($version == null || $version == "") {$version = "?" ;}
1930
-
1931
- $browserInfoContent .= 'Platform: '.$platform."\n";
1932
- $browserInfoContent .= 'Browser Name: '.$bname."\n";
1933
- $browserInfoContent .= 'Browser Version: '.$version."\n";
1934
- $browserInfoContent .= 'User Agent: '.$uAgent."\n";
1935
-
1936
- return $browserInfoContent;
1937
- }
1938
-
1939
- // checking user roles capability to do actions
1940
- public static function userCanAccessTo()
1941
- {
1942
- // if this is not admin side screen we don't need to check roles and capabilities
1943
- if (!is_admin()) {
1944
- return true;
1945
- }
1946
-
1947
- $allow = false;
1948
-
1949
- $savedUserRolesInPopup = self::getPopupPostAllowedUserRoles();
1950
- $currentUserRole = self::getCurrentUserRole();
1951
-
1952
- // we need to check if there are any intersections between saved user roles and current user
1953
- $hasIntersection = array_intersect($currentUserRole, $savedUserRolesInPopup);
1954
- if (!empty($hasIntersection)) {
1955
- $allow = true;
1956
- }
1957
-
1958
- return $allow;
1959
- }
1960
-
1961
- public static function filterUserCapabilitiesForTheUserRoles($hook = 'save')
1962
- {
1963
- global $wp_roles;
1964
-
1965
- $allAvailableWpRoles = $wp_roles->roles;
1966
- $savedUserRoles = get_option('sgpb-user-roles');
1967
- // we need to remove from all roles, either when deactivating the plugin and when there is no saved roles
1968
- if (empty($savedUserRoles) || $hook == 'deactivate') {
1969
- $savedUserRoles = array();
1970
- }
1971
- $rolesToBeRestricted = array();
1972
- // selected user roles, which have access to the PB
1973
- foreach ($allAvailableWpRoles as $allAvailableWpRole) {
1974
- if (isset($allAvailableWpRole['name']) && in_array(lcfirst($allAvailableWpRole['name']), $savedUserRoles)) {
1975
- $indexToUnset = lcfirst($allAvailableWpRole['name']);
1976
- continue;
1977
- }
1978
- $rolesToBeRestricted[] = lcfirst($allAvailableWpRole['name']);
1979
- }
1980
-
1981
- $caps = array(
1982
- 'read_private_sgpb_popups',
1983
- 'edit_sgpb_popup',
1984
- 'edit_sgpb_popups',
1985
- 'edit_others_sgpb_popups',
1986
- 'edit_published_sgpb_popups',
1987
- 'publish_sgpb_popups',
1988
- 'delete_sgpb_popups',
1989
- 'delete_published_posts',
1990
- 'delete_others_sgpb_popups',
1991
- 'delete_private_sgpb_popups',
1992
- 'delete_private_sgpb_popup',
1993
- 'delete_published_sgpb_popups',
1994
- 'sgpb_manage_options',
1995
- 'manage_popup_terms',
1996
- 'manage_popup_categories_terms'
1997
- );
1998
-
1999
- if ($hook == 'activate') {
2000
- $rolesToBeRestricted = $savedUserRoles;
2001
- }
2002
- foreach ($rolesToBeRestricted as $roleToBeRestricted) {
2003
- if ($roleToBeRestricted == 'administrator' || $roleToBeRestricted == 'admin') {
2004
- continue;
2005
- }
2006
- foreach ($caps as $cap) {
2007
- // only for the activation hook we need to add our capabilities back
2008
- if ($hook == 'activate') {
2009
- $wp_roles->add_cap($roleToBeRestricted, $cap);
2010
- }
2011
- else {
2012
- $wp_roles->remove_cap($roleToBeRestricted, $cap);
2013
- }
2014
- }
2015
- }
2016
- }
2017
-
2018
- public static function removeUnnecessaryCodeFromPopups()
2019
- {
2020
- $alreadyClearded = self::getOption('sgpb-unnecessary-scripts-removed-1');
2021
- if ($alreadyClearded) {
2022
- return true;
2023
- }
2024
-
2025
- global $wpdb;
2026
- $getAllDataSql = $wpdb->prepare('SELECT id FROM '.$wpdb->prefix.'posts WHERE post_type = %s', SG_POPUP_POST_TYPE);
2027
- $popupsId = $wpdb->get_results($getAllDataSql, ARRAY_A);
2028
- if (empty($popupsId)) {
2029
- return true;
2030
- }
2031
- foreach ($popupsId as $popupId) {
2032
- if (empty($popupId['id'])) {
2033
- continue;
2034
- }
2035
- $id = $popupId['id'];
2036
- $customScripts = get_post_meta($id, 'sg_popup_scripts', true);
2037
- if (empty($customScripts)) {
2038
- continue;
2039
- }
2040
- if (isset($customScripts['js'])) {
2041
- unset($customScripts['js']);
2042
- update_post_meta($id, 'sg_popup_scripts', $customScripts);
2043
- }
2044
- }
2045
-
2046
- self::updateOption('sgpb-unnecessary-scripts-removed-1', 1);
2047
- }
2048
-
2049
- public static function sendTestNewsletter($newsletterData = array())
2050
- {
2051
- $mailSubject = $newsletterData['newsletterSubject'];
2052
- $fromEmail = $newsletterData['fromEmail'];
2053
- $emailMessage = $newsletterData['messageBody'];
2054
- $blogInfo = get_bloginfo();
2055
- $headers = array(
2056
- 'From: "'.$blogInfo.'" <'.$fromEmail.'>' ,
2057
- 'MIME-Version: 1.0' ,
2058
- 'Content-type: text/html; charset=UTF-8'
2059
- );
2060
-
2061
- $emails = get_option('admin_email');
2062
- if (!empty($newsletterData['testSendingEmails'])) {
2063
- $emails = $newsletterData['testSendingEmails'];
2064
- $emails = str_replace(' ', '', $emails);
2065
-
2066
- $receiverEmailsArray = array();
2067
- $emails = explode(',', $emails);
2068
- foreach ($emails as $mail) {
2069
- if (is_email($mail)) {
2070
- $receiverEmailsArray[] = $mail;
2071
- }
2072
- }
2073
- $emails = $receiverEmailsArray;
2074
- }
2075
-
2076
- $mailStatus = wp_mail($emails, $mailSubject, $emailMessage, $headers);
2077
-
2078
- wp_die($newsletterData['testSendingStatus']);
2079
- }
2080
-
2081
- // wp uploaded images
2082
- public static function getImageAltTextByUrl($imageUrl = '')
2083
- {
2084
- $imageId = attachment_url_to_postid($imageUrl);
2085
- $altText = get_post_meta($imageId, '_wp_attachment_image_alt', true);
2086
-
2087
- return $altText;
2088
- }
2089
-
2090
- public static function hasBlocks($content)
2091
- {
2092
- if (function_exists('has_blocks')) {
2093
- return has_blocks($content);
2094
- }
2095
-
2096
- return false !== strpos( (string) $content, '<!-- wp:' );
2097
- }
2098
- /**
2099
- * Retrieve duplicate post link for post.
2100
- *
2101
- * @param int $id Optional. Post ID.
2102
- * @param string $context Optional, default to display. How to write the '&', defaults to '&amp;'.
2103
- * @return string
2104
- */
2105
- public static function popupGetClonePostLink($id = 0, $context = 'display')
2106
- {
2107
- if (!$post = get_post($id)) {
2108
- return;
2109
- }
2110
- $actionName = "popupSaveAsNew";
2111
-
2112
- if ('display' == $context) {
2113
- $action = '?action='.$actionName.'&amp;post='.$post->ID;
2114
- } else {
2115
- $action = '?action='.$actionName.'&post='.$post->ID;
2116
- }
2117
-
2118
- $postTypeObject = get_post_type_object($post->post_type);
2119
-
2120
- if (!$postTypeObject) {
2121
- return;
2122
- }
2123
-
2124
- return wp_nonce_url(apply_filters('popupGetClonePostLink', admin_url("admin.php".$action), $post->ID, $context), 'duplicate-post_' . $post->ID);
2125
- }
2126
- }
1
+ <?php
2
+ namespace sgpb;
3
+ use \DateTime;
4
+ use \DateTimeZone;
5
+ use \SgpbDataConfig;
6
+ use \Elementor;
7
+ use sgpbsubscriptionplus\SubscriptionPlusAdminHelper;
8
+
9
+ class AdminHelper
10
+ {
11
+ /**
12
+ * Get extension options data which are included inside the free version
13
+ *
14
+ * @since 3.0.8
15
+ *
16
+ * @return assoc array $extensionOptions
17
+ */
18
+ public static function getExtensionAvaliabilityOptions()
19
+ {
20
+ $extensionOptions = array();
21
+ // advanced closing option
22
+ $extensionOptions[SGPB_POPUP_ADVANCED_CLOSING_PLUGIN_KEY] = array(
23
+ 'sgpb-close-after-page-scroll',
24
+ 'sgpb-auto-close',
25
+ 'sgpb-enable-popup-overlay',
26
+ 'sgpb-disable-popup-closing'
27
+ );
28
+ // schedule extension
29
+ $extensionOptions[SGPB_POPUP_SCHEDULING_EXTENSION_KEY] = array(
30
+ 'otherConditionsMetaBoxView'
31
+ );
32
+ // geo targeting extension
33
+ $extensionOptions[SGPB_POPUP_GEO_TARGETING_EXTENSION_KEY] = array(
34
+ 'popupConditionsSection'
35
+ );
36
+ // advanced targeting extension
37
+ $extensionOptions[SGPB_POPUP_ADVANCED_TARGETING_EXTENSION_KEY] = array(
38
+ 'popupConditionsSection'
39
+ );
40
+
41
+ return $extensionOptions;
42
+ }
43
+
44
+ public static function getPopupTypesPageURL()
45
+ {
46
+ return admin_url('edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SG_POPUP_POST_TYPE);
47
+ }
48
+
49
+ public static function getSettingsURL($args = array())
50
+ {
51
+ $url = admin_url('/edit.php?post_type='.SG_POPUP_POST_TYPE.'&page='.SG_POPUP_SETTINGS_PAGE);
52
+
53
+ return self::addArgsToURl($url, $args);
54
+ }
55
+
56
+ public static function getPopupExportURL()
57
+ {
58
+ $exportURL = admin_url('export.php');
59
+ $url = add_query_arg(array(
60
+ 'download' => true,
61
+ 'content' => SG_POPUP_POST_TYPE,
62
+ 'sgpbExportAction' => 1
63
+ ), $exportURL);
64
+
65
+ return $url;
66
+ }
67
+
68
+ public static function addArgsToURl($url, $args = array())
69
+ {
70
+ $resultURl = add_query_arg($args, $url);
71
+
72
+ return $resultURl;
73
+ }
74
+
75
+ public static function buildCreatePopupUrl($popupType)
76
+ {
77
+ $isAvailable = $popupType->isAvailable();
78
+ $name = $popupType->getName();
79
+
80
+ $popupUrl = SG_POPUP_ADMIN_URL.'post-new.php?post_type='.SG_POPUP_POST_TYPE.'&sgpb_type='.$name;
81
+
82
+ if (!$isAvailable) {
83
+ $popupUrl = SG_POPUP_PRO_URL;
84
+ }
85
+
86
+ return $popupUrl;
87
+ }
88
+
89
+ public static function getPopupThumbClass($popupType)
90
+ {
91
+ $isAvailable = $popupType->isAvailable();
92
+ $name = $popupType->getName();
93
+
94
+ $popupTypeClassName = $name.'-popup';
95
+
96
+ if (!$isAvailable) {
97
+ $popupTypeClassName .= '-pro';
98
+ }
99
+
100
+ return $popupTypeClassName;
101
+ }
102
+
103
+ public static function createSelectBox($data, $selectedValue, $attrs)
104
+ {
105
+ $attrString = '';
106
+ $selected = '';
107
+ $selectBoxCloseTag = '</select>';
108
+
109
+ if (!empty($attrs) && isset($attrs)) {
110
+
111
+ foreach ($attrs as $attrName => $attrValue) {
112
+ $attrString .= ''.$attrName.'="'.$attrValue.'" ';
113
+ }
114
+ }
115
+
116
+ $selectBox = '<select '.$attrString.'>';
117
+ if (empty($data) || !is_array($data)) {
118
+ $selectBox .= $selectBoxCloseTag;
119
+ return $selectBox;
120
+ }
121
+
122
+ foreach ($data as $value => $label) {
123
+ // When is multiSelect
124
+ if (is_array($selectedValue)) {
125
+ $isSelected = in_array($value, $selectedValue);
126
+ if ($isSelected) {
127
+ $selected = 'selected';
128
+ }
129
+ }
130
+ else if ($selectedValue == $value) {
131
+ $selected = 'selected';
132
+ }
133
+ else if (is_array($value) && in_array($selectedValue, $value)) {
134
+ $selected = 'selected';
135
+ }
136
+
137
+ if (is_array($label)) {
138
+ $selectBox .= '<optgroup label="'.$value.'">';
139
+ foreach ($label as $key => $optionLabel) {
140
+ $selected = '';
141
+ if (is_array($selectedValue)) {
142
+ $isSelected = in_array($key, $selectedValue);
143
+ if ($isSelected) {
144
+ $selected = 'selected';
145
+ }
146
+ }
147
+ else if ($selectedValue == $key) {
148
+ $selected = 'selected';
149
+ }
150
+ else if (is_array($key) && in_array($selectedValue, $key)) {
151
+ $selected = 'selected';
152
+ }
153
+
154
+ $selectBox .= '<option value="'.$key.'" '.$selected.'>'.$optionLabel.'</option>';
155
+ }
156
+ $selectBox .= '</optgroup>';
157
+ }
158
+ else {
159
+ $selectBox .= '<option value="'.$value.'" '.$selected.'>'.$label.'</option>';
160
+ }
161
+
162
+ $selected = '';
163
+ }
164
+
165
+ $selectBox .= $selectBoxCloseTag;
166
+
167
+ return $selectBox;
168
+ }
169
+
170
+ public static function createInput($data, $selectedValue, $attrs)
171
+ {
172
+ $attrString = '';
173
+ $savedData = $data;
174
+
175
+ if (isset($selectedValue)) {
176
+ $savedData = $selectedValue;
177
+ }
178
+ if (empty($savedData)) {
179
+ $savedData = '';
180
+ }
181
+
182
+ if (!empty($attrs) && isset($attrs)) {
183
+
184
+ foreach ($attrs as $attrName => $attrValue) {
185
+ if ($attrName == 'class') {
186
+ $attrValue .= '';
187
+ }
188
+ $attrString .= ''.$attrName.'="'.$attrValue.'" ';
189
+ }
190
+ }
191
+
192
+ $input = "<input $attrString value=\"".esc_attr($savedData)."\">";
193
+
194
+ return $input;
195
+ }
196
+
197
+ public static function createCheckBox($data, $selectedValue, $attrs)
198
+ {
199
+ $attrString = '';
200
+ $checked = '';
201
+
202
+ if (!empty($selectedValue)) {
203
+ $checked = 'checked';
204
+ }
205
+ if (!empty($attrs) && isset($attrs)) {
206
+
207
+ foreach ($attrs as $attrName => $attrValue) {
208
+ $attrString .= ''.$attrName.'="'.$attrValue.'" ';
209
+ }
210
+ }
211
+
212
+ $input = "<input $attrString $checked>";
213
+
214
+ return $input;
215
+ }
216
+
217
+ public static function createRadioButtons($elements, $name, $selectedInput, $lineMode = false, $extraHtmlAfterInput = '')
218
+ {
219
+ $str = '';
220
+
221
+ foreach ($elements as $key => $element) {
222
+ $value = '';
223
+ $checked = '';
224
+ $stringWithlabel = '';
225
+ $labelClasses = '';
226
+ $stringLabel = '';
227
+
228
+ if (isset($element['value'])) {
229
+ $value = $element['value'];
230
+ }
231
+ if (isset($element['label_class'])) {
232
+ $labelClasses = 'class="'.$element['label_class'].'"';
233
+ $stringLabel = '<span class="sgpb-margin-bottom-10">'.esc_attr($value).'</span>';
234
+ }
235
+
236
+ if (is_array($element) && $element['value'] == $selectedInput) {
237
+ $checked = 'checked';
238
+ }
239
+ else if (!is_array($element) && $element == $selectedInput) {
240
+ $checked = 'checked';
241
+ }
242
+ $attrStr = '';
243
+ if (isset($element['data-attributes'])) {
244
+ foreach ($element['data-attributes'] as $attrKey => $dataValue) {
245
+ $attrStr .= $attrKey.'="'.esc_attr($dataValue).'" ';
246
+ }
247
+ }
248
+ if (!empty($extraHtmlAfterInput)) {
249
+ if ($extraHtmlAfterInput == 'img') {
250
+ $extraHtmlAfterInput = '<img src="">';
251
+ }
252
+ else if ($extraHtmlAfterInput == 'bg_img') {
253
+ $extraHtmlAfterInput = '<span class="sgpb-popup-theme-img sgpb-margin-x-7"></span>';
254
+ }
255
+ }
256
+
257
+ if ($lineMode) {
258
+ if (!empty($extraHtmlAfterInput)) {
259
+ $str .= '<label '.$labelClasses.'><input type="radio" name="'.esc_attr($name).'" value="'.esc_attr($value).'" '.$checked.' '.$attrStr.'>'.$extraHtmlAfterInput.$stringLabel.'</label>';
260
+ }
261
+ else {
262
+ $str .= '<input type="radio" name="'.esc_attr($name).'" value="'.esc_attr($value).'" '.$checked.' '.$attrStr.'>';
263
+ }
264
+ }
265
+ else {
266
+ $str .= '<div class="row form-group">';
267
+ $str .= '<label class="col-md-5 control-label">'.__($element['title'], SG_POPUP_TEXT_DOMAIN).'</label>';
268
+ $str .= '<div class="col-sm-7"><input type="radio" name="'.esc_attr($name).'" value="'.esc_attr($value).'" '.$checked.' autocomplete="off">'.$extraHtmlAfterInput.'</div>';
269
+ $str .= '</div>';
270
+ }
271
+ }
272
+
273
+ echo $str;
274
+ }
275
+
276
+ public static function getDateObjFromDate($dueDate, $timezone = 'America/Los_Angeles', $format = 'Y-m-d H:i:s')
277
+ {
278
+ $dateObj = new DateTime($dueDate, new DateTimeZone($timezone));
279
+ $dateObj->format($format);
280
+
281
+ return $dateObj;
282
+ }
283
+
284
+ /**
285
+ * Serialize data
286
+ *
287
+ * @since 1.0.0
288
+ *
289
+ * @param array $data
290
+ *
291
+ * @return string $serializedData
292
+ */
293
+ public static function serializeData($data = array())
294
+ {
295
+ $serializedData = serialize($data);
296
+
297
+ return $serializedData;
298
+ }
299
+
300
+ /**
301
+ * Get correct size to use it safely inside CSS rules
302
+ *
303
+ * @since 1.0.0
304
+ *
305
+ * @param string $dimension
306
+ *
307
+ * @return string $size
308
+ */
309
+ public static function getCSSSafeSize($dimension)
310
+ {
311
+ if (empty($dimension)) {
312
+ return 'inherit';
313
+ }
314
+
315
+ $size = (int)$dimension.'px';
316
+ // If user write dimension in px or % we give that dimension to target otherwise the default value will be px
317
+ if (strpos($dimension, '%') || strpos($dimension, 'px')) {
318
+ $size = $dimension;
319
+ }
320
+
321
+ return $size;
322
+ }
323
+
324
+ public static function deleteSubscriptionPopupSubscribers($popupId)
325
+ {
326
+ global $wpdb;
327
+
328
+ $prepareSql = $wpdb->prepare('DELETE FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE subscriptionType = %s', $popupId);
329
+ $wpdb->query($prepareSql);
330
+ }
331
+
332
+ public static function subscribersRelatedQuery($query = '', $additionalColumn = '')
333
+ {
334
+ global $wpdb;
335
+ $subscribersTablename = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME;
336
+ $postsTablename = $wpdb->prefix.SGPB_POSTS_TABLE_NAME;
337
+
338
+ if ($query == '') {
339
+ $query = 'SELECT firstName, lastName, email, cDate, '.$additionalColumn.' '.$postsTablename.'.post_title AS subscriptionTitle FROM '.$subscribersTablename.' ';
340
+ }
341
+
342
+ $searchQuery = ' unsubscribed <> 1';
343
+ $filterCriteria = '';
344
+
345
+ $query .= ' LEFT JOIN '.$postsTablename.' ON '.$postsTablename.'.ID='.$subscribersTablename.'.subscriptionType';
346
+
347
+ if (isset($_GET['sgpb-subscription-popup-id']) && !empty($_GET['sgpb-subscription-popup-id'])) {
348
+ $filterCriteria = esc_sql($_GET['sgpb-subscription-popup-id']);
349
+ if ($filterCriteria != 'all') {
350
+ $searchQuery .= " AND (subscriptionType = $filterCriteria)";
351
+ }
352
+ }
353
+ if ($filterCriteria != '' && $filterCriteria != 'all' && isset($_GET['s']) && !empty($_GET['s'])) {
354
+ $searchQuery .= ' AND ';
355
+ }
356
+ if (isset($_GET['s']) && !empty($_GET['s'])) {
357
+ $searchCriteria = esc_sql($_GET['s']);
358
+ $lastPartOfTheQuery = substr($searchQuery, -5);
359
+ if (strpos($lastPartOfTheQuery, 'AND') <= 0) {
360
+ $searchQuery .= ' AND ';
361
+ }
362
+ $searchQuery .= "(firstName LIKE '%$searchCriteria%' or lastName LIKE '%$searchCriteria%' or email LIKE '%$searchCriteria%' or $postsTablename.post_title LIKE '%$searchCriteria%')";
363
+ }
364
+ if (isset($_GET['sgpb-subscribers-date']) && !empty($_GET['sgpb-subscribers-date'])) {
365
+ $filterCriteria = esc_sql($_GET['sgpb-subscribers-date']);
366
+ if ($filterCriteria != 'all') {
367
+ if ($searchQuery != '') {
368
+ $searchQuery .= ' AND ';
369
+ }
370
+ $searchQuery .= " cDate LIKE '$filterCriteria%'";
371
+ }
372
+ }
373
+ if ($searchQuery != '') {
374
+ $query .= " WHERE $searchQuery";
375
+ }
376
+
377
+ return $query;
378
+ }
379
+
380
+ public static function themeRelatedSettings($popupId, $buttonPosition, $theme)
381
+ {
382
+ if ($popupId) {
383
+ if ($theme == 'sgpb-theme-1' || $theme == 'sgpb-theme-4' || $theme == 'sgpb-theme-5') {
384
+ if (!isset($buttonPosition)) {
385
+ $buttonPosition = 'bottomRight';
386
+ }
387
+ }
388
+ else if ($theme == 'sgpb-theme-2' || $theme == 'sgpb-theme-3' || $theme == 'sgpb-theme-6') {
389
+ if (!isset($buttonPosition)) {
390
+ $buttonPosition = 'topRight';
391
+ }
392
+ }
393
+ }
394
+ else {
395
+ if (isset($theme)) {
396
+ if ($theme == 'sgpb-theme-1' || $theme == 'sgpb-theme-4' || $theme == 'sgpb-theme-5') {
397
+ $buttonPosition = 'bottomRight';
398
+ }
399
+ else if ($theme == 'sgpb-theme-2' || $theme == 'sgpb-theme-3' || $theme == 'sgpb-theme-6') {
400
+ $buttonPosition = 'topRight';
401
+ }
402
+ }
403
+ else {
404
+ /* by default set position for the first theme */
405
+ $buttonPosition = 'bottomRight';
406
+ }
407
+ }
408
+
409
+ return $buttonPosition;
410
+ }
411
+
412
+ /**
413
+ * Create html attrs
414
+ *
415
+ * @since 1.0.0
416
+ *
417
+ * @param array $attrs
418
+ *
419
+ * @return string $attrStr
420
+ */
421
+ public static function createAttrs($attrs)
422
+ {
423
+ $attrStr = '';
424
+
425
+ if (empty($attrs)) {
426
+ return $attrStr;
427
+ }
428
+
429
+ foreach ($attrs as $attrKey => $attrValue) {
430
+ $attrStr .= $attrKey.'="'.$attrValue.'" ';
431
+ }
432
+
433
+ return $attrStr;
434
+ }
435
+
436
+ public static function getFormattedDate($date)
437
+ {
438
+ $date = strtotime($date);
439
+ $month = date('F', $date);
440
+ $year = date('Y', $date);
441
+
442
+ return $month.' '.$year;
443
+ }
444
+
445
+ public static function defaultButtonImage($theme, $closeImage = '')
446
+ {
447
+ $currentPostType = self::getCurrentPopupType();
448
+ if (defined('SGPB_POPUP_TYPE_RECENT_SALES') && $currentPostType == SGPB_POPUP_TYPE_RECENT_SALES) {
449
+ $theme = 'sgpb-theme-6';
450
+ }
451
+ // if no image, set default by theme
452
+ if ($closeImage == '') {
453
+ if ($theme == 'sgpb-theme-1' || !$theme) {
454
+ $closeImage = SG_POPUP_IMG_URL.'theme_1/close.png';
455
+ }
456
+ else if ($theme == 'sgpb-theme-2') {
457
+ $closeImage = SG_POPUP_IMG_URL.'theme_2/close.png';
458
+ }
459
+ else if ($theme == 'sgpb-theme-3') {
460
+ $closeImage = SG_POPUP_IMG_URL.'theme_3/close.png';
461
+ }
462
+ else if ($theme == 'sgpb-theme-5') {
463
+ $closeImage = SG_POPUP_IMG_URL.'theme_5/close.png';
464
+ }
465
+ else if ($theme == 'sgpb-theme-6') {
466
+ $closeImage = SG_POPUP_IMG_URL.'theme_6/close.png';
467
+ }
468
+ }
469
+ else {
470
+ $closeImage = self::getImageDataFromUrl($closeImage);
471
+ }
472
+
473
+ return $closeImage;
474
+ }
475
+
476
+ public static function getPopupPostAllowedUserRoles()
477
+ {
478
+ $userSavedRoles = get_option('sgpb-user-roles');
479
+
480
+ if (empty($userSavedRoles) || !is_array($userSavedRoles)) {
481
+ $userSavedRoles = array('administrator');
482
+ }
483
+ else {
484
+ array_push($userSavedRoles, 'administrator');
485
+ }
486
+
487
+ return $userSavedRoles;
488
+ }
489
+
490
+ public static function showMenuForCurrentUser()
491
+ {
492
+ return self::userCanAccessTo();
493
+ }
494
+
495
+ public static function getPopupsIdAndTitle($excludesPopups = array())
496
+ {
497
+ $allPopups = SGPopup::getAllPopups();
498
+ $popupIdTitles = array();
499
+
500
+ if (empty($allPopups)) {
501
+ return $popupIdTitles;
502
+ }
503
+
504
+ foreach ($allPopups as $popup) {
505
+ if (empty($popup)) {
506
+ continue;
507
+ }
508
+
509
+ $id = $popup->getId();
510
+ $title = $popup->getTitle();
511
+ $type = $popup->getType();
512
+
513
+ if (!empty($excludesPopups)) {
514
+ foreach ($excludesPopups as $excludesPopupId) {
515
+ if ($excludesPopupId != $id) {
516
+ $popupIdTitles[$id] = $title.' - '.$type;
517
+ }
518
+ }
519
+ }
520
+ else {
521
+ $popupIdTitles[$id] = $title.' - '.$type;
522
+ }
523
+ }
524
+
525
+ return $popupIdTitles;
526
+ }
527
+
528
+ /**
529
+ * Merge two array and merge same key values to same array
530
+ *
531
+ * @since 1.0.0
532
+ *
533
+ * @param array $array1
534
+ * @param array $array2
535
+ *
536
+ * @return array|bool
537
+ *
538
+ */
539
+ public static function arrayMergeSameKeys($array1, $array2)
540
+ {
541
+ if (empty($array1)) {
542
+ return array();
543
+ }
544
+
545
+ $modified = false;
546
+ $array3 = array();
547
+ foreach ($array1 as $key => $value) {
548
+ if (isset($array2[$key]) && is_array($array2[$key])) {
549
+ $arrDifference = array_diff($array2[$key], $array1[$key]);
550
+ if (empty($arrDifference)) {
551
+ continue;
552
+ }
553
+
554
+ $modified = true;
555
+ $array3[$key] = array_merge($array2[$key], $array1[$key]);
556
+ unset($array2[$key]);
557
+ continue;
558
+ }
559
+
560
+ $modified = true;
561
+ $array3[$key] = $value;
562
+ }
563
+
564
+ // when there are no values
565
+ if (!$modified) {
566
+ return $modified;
567
+ }
568
+
569
+ return $array2 + $array3;
570
+ }
571
+
572
+ public static function getCurrentUserRole()
573
+ {
574
+ $role = array('administrator');
575
+
576
+ if (is_multisite()) {
577
+
578
+ $getUsersObj = get_users(
579
+ array(
580
+ 'blog_id' => get_current_blog_id(),
581
+ 'search' => get_current_user_id()
582
+ )
583
+ );
584
+
585
+ if (!empty($getUsersObj[0])) {
586
+ $roles = $getUsersObj[0]->roles;
587
+
588
+ if (is_array($roles) && !empty($roles)) {
589
+ $role = array_merge($role, $getUsersObj[0]->roles);
590
+ }
591
+ }
592
+
593
+ return $role;
594
+ }
595
+
596
+ global $current_user;
597
+ if (!empty($current_user)) {
598
+ $role = $current_user->roles;
599
+ }
600
+
601
+ return $role;
602
+ }
603
+
604
+ public static function hexToRgba($color, $opacity = false)
605
+ {
606
+ $default = 'rgb(0,0,0)';
607
+
608
+ //Return default if no color provided
609
+ if (empty($color)) {
610
+ return $default;
611
+ }
612
+
613
+ //Sanitize $color if "#" is provided
614
+ if ($color[0] == '#') {
615
+ $color = substr($color, 1);
616
+ }
617
+
618
+ //Check if color has 6 or 3 characters and get values
619
+ if (strlen($color) == 6) {
620
+ $hex = array($color[0].$color[1], $color[2].$color[3], $color[4].$color[5]);
621
+ }
622
+ else if (strlen($color) == 3) {
623
+ $hex = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
624
+ }
625
+ else {
626
+ return $default;
627
+ }
628
+
629
+ //Convert hexadec to rgb
630
+ $rgb = array_map('hexdec', $hex);
631
+
632
+ //Check if opacity is set(rgba or rgb)
633
+ if ($opacity !== false) {
634
+ if (abs($opacity) > 1) {
635
+ $opacity = 1.0;
636
+ }
637
+ $output = 'rgba('.implode(',', $rgb).','.$opacity.')';
638
+ }
639
+ else {
640
+ $output = 'rgb('.implode(',', $rgb).')';
641
+ }
642
+
643
+ //Return rgb(a) color string
644
+ return $output;
645
+ }
646
+
647
+ public static function getAllActiveExtensions()
648
+ {
649
+ $extensions = SgpbDataConfig::getOldExtensionsInfo();
650
+ $labels = array();
651
+
652
+ foreach ($extensions as $extension) {
653
+ if (file_exists(WP_PLUGIN_DIR.'/'.$extension['folderName'])) {
654
+ $labels[] = $extension['label'];
655
+ }
656
+ }
657
+
658
+ return $labels;
659
+ }
660
+
661
+ public static function renderExtensionsContent()
662
+ {
663
+ $extensions = self::getAllActiveExtensions();
664
+ ob_start();
665
+ ?>
666
+ <p class="sgpb-extension-notice-close">x</p>
667
+ <div class="sgpb-extensions-list-wrapper">
668
+ <div class="sgpb-notice-header">
669
+ <h3><?php _e('Popup Builder plugin has been successfully updated', SG_POPUP_TEXT_DOMAIN); ?></h3>
670
+ <h4><?php _e('The following extensions need to be updated manually', SG_POPUP_TEXT_DOMAIN); ?></h4>
671
+ </div>
672
+ <ul class="sgpb-extensions-list">
673
+ <?php foreach ($extensions as $extensionName): ?>
674
+ <a target="_blank" href="https://popup-builder.com/forms/control-panel/"><li><?php echo $extensionName; ?></li></a>
675
+ <?php endforeach; ?>
676
+ </ul>
677
+ </div>
678
+ <p class="sgpb-extension-notice-dont-show"><?php _e('Don\'t show again', SG_POPUP_TEXT_DOMAIN)?></p>
679
+ <?php
680
+ $content = ob_get_contents();
681
+ ob_get_clean();
682
+
683
+ return $content;
684
+ }
685
+
686
+ public static function getReverseConvertIds()
687
+ {
688
+ $idsMappingSaved = get_option('sgpbConvertedIds');
689
+ $ids = array();
690
+
691
+ if ($idsMappingSaved) {
692
+ $ids = $idsMappingSaved;
693
+ }
694
+
695
+ return array_flip($ids);
696
+ }
697
+
698
+ public static function getAllFreeExtensions()
699
+ {
700
+ $allExtensions = SgpbDataConfig::allFreeExtensionsKeys();
701
+
702
+ $notActiveExtensions = array();
703
+ $activeExtensions = array();
704
+
705
+ foreach ($allExtensions as $extension) {
706
+ if (!is_plugin_active($extension['pluginKey'])) {
707
+ $notActiveExtensions[] = $extension;
708
+ }
709
+ else {
710
+ $activeExtensions[] = $extension;
711
+ }
712
+ }
713
+
714
+ $divideExtension = array(
715
+ 'noActive' => $notActiveExtensions,
716
+ 'active' => $activeExtensions
717
+ );
718
+
719
+ return $divideExtension;
720
+ }
721
+
722
+ public static function getAllExtensions()
723
+ {
724
+ $allExtensions = SgpbDataConfig::allExtensionsKeys();
725
+
726
+ $notActiveExtensions = array();
727
+ $activeExtensions = array();
728
+
729
+ foreach ($allExtensions as $extension) {
730
+ if (!is_plugin_active($extension['pluginKey'])) {
731
+ $notActiveExtensions[] = $extension;
732
+ }
733
+ else {
734
+ $activeExtensions[] = $extension;
735
+ }
736
+ }
737
+
738
+ $divideExtension = array(
739
+ 'noActive' => $notActiveExtensions,
740
+ 'active' => $activeExtensions
741
+ );
742
+
743
+ return $divideExtension;
744
+ }
745
+
746
+ public static function renderAlertProblem()
747
+ {
748
+ ob_start();
749
+ ?>
750
+ <div id="welcome-panel" class="update-nag sgpb-alert-problem">
751
+ <div class="welcome-panel-content">
752
+ <p class="sgpb-problem-notice-close">x</p>
753
+ <div class="sgpb-alert-problem-text-wrapper">
754
+ <h3><?php _e('Popup Builder plugin has been updated to the new version 3.', SG_POPUP_TEXT_DOMAIN); ?></h3>
755
+ <h5><?php _e('A lot of changes and improvements have been made.', SG_POPUP_TEXT_DOMAIN); ?></h5>
756
+ <h5><?php _e('In case of any issues, please contact us <a href="<?php echo SG_POPUP_TICKET_URL; ?>" target="_blank">here</a>.', SG_POPUP_TEXT_DOMAIN); ?></h5>
757
+ </div>
758
+ <p class="sgpb-problem-notice-dont-show"><?php _e('Don\'t show again', SG_POPUP_TEXT_DOMAIN); ?></p>
759
+ </div>
760
+ </div>
761
+ <?php
762
+ $content = ob_get_clean();
763
+
764
+ return $content;
765
+ }
766
+
767
+ public static function getTaxonomyBySlug($slug = '')
768
+ {
769
+ $allTerms = get_terms(array('hide_empty' => false));
770
+
771
+ $result = array();
772
+ if (empty($allTerms)) {
773
+ return $result;
774
+ }
775
+ if ($slug == '') {
776
+ return $allTerms;
777
+ }
778
+ foreach ($allTerms as $term) {
779
+ if ($term->slug == $slug) {
780
+ return $term;
781
+ }
782
+ }
783
+ }
784
+
785
+ public static function getCurrentPopupType()
786
+ {
787
+ $type = '';
788
+ if (!empty($_GET['sgpb_type'])) {
789
+ $type = $_GET['sgpb_type'];
790
+ }
791
+
792
+ $currentPostType = self::getCurrentPostType();
793
+
794
+ if ($currentPostType == SG_POPUP_POST_TYPE && !empty($_GET['post'])) {
795
+ $popupObj = SGPopup::find($_GET['post']);
796
+ if (is_object($popupObj)) {
797
+ $type = $popupObj->getType();
798
+ }
799
+ }
800
+
801
+ return $type;
802
+ }
803
+
804
+ public static function getCurrentPostType()
805
+ {
806
+ global $post_type;
807
+ global $post;
808
+ $currentPostType = '';
809
+
810
+ if (is_object($post)) {
811
+ $currentPostType = $post->post_type;
812
+ }
813
+
814
+ // in some themes global $post returns null
815
+ if (empty($currentPostType)) {
816
+ $currentPostType = $post_type;
817
+ }
818
+
819
+ if (empty($currentPostType) && !empty($_GET['post'])) {
820
+ $currentPostType = get_post_type($_GET['post']);
821
+ }
822
+
823
+ return $currentPostType;
824
+ }
825
+
826
+ /**
827
+ * Get image encoded data from URL
828
+ *
829
+ * @param $imageUrl
830
+ * @param $shouldNotConvertBase64
831
+ *
832
+ * @return string
833
+ */
834
+
835
+ public static function getImageDataFromUrl($imageUrl, $shouldNotConvertBase64 = false)
836
+ {
837
+ $remoteData = wp_remote_get($imageUrl);
838
+ if (is_wp_error($remoteData) && $shouldNotConvertBase64) {
839
+ return SG_POPUP_IMG_URL.'NoImage.png';
840
+ }
841
+
842
+ if (!$shouldNotConvertBase64) {
843
+ $imageData = wp_remote_retrieve_body($remoteData);
844
+ $imageUrl = base64_encode($imageData);
845
+ }
846
+
847
+ return $imageUrl;
848
+ }
849
+
850
+ public static function deleteUserFromSubscribers($params = array())
851
+ {
852
+ global $wpdb;
853
+
854
+ $email = '';
855
+ $popup = '';
856
+ $noSubscriber = true;
857
+
858
+ if (isset($params['email'])) {
859
+ $email = $params['email'];
860
+ }
861
+ if (isset($params['popup'])) {
862
+ $popup = $params['popup'];
863
+ }
864
+
865
+ $prepareSql = $wpdb->prepare('SELECT id FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE email = %s && subscriptionType = %s', $email, $popup);
866
+ $res = $wpdb->get_row($prepareSql, ARRAY_A);
867
+ if (!isset($res['id'])) {
868
+ $noSubscriber = false;
869
+ }
870
+ $params['subscriberId'] = $res['id'];
871
+
872
+ $subscriber = self::subscriberExists($params);
873
+ if ($subscriber && $noSubscriber) {
874
+ self::deleteSubscriber($params);
875
+ }
876
+ else if (!$noSubscriber) {
877
+ _e('<span>Oops, something went wrong, please try again or contact the administrator to check more info.</span>', SG_POPUP_TEXT_DOMAIN);
878
+ wp_die();
879
+ }
880
+ }
881
+
882
+ public static function subscriberExists($params = array())
883
+ {
884
+ if (empty($params)) {
885
+ return false;
886
+ }
887
+
888
+ $receivedToken = $params['token'];
889
+ $realToken = md5($params['subscriberId'].$params['email']);
890
+ if ($receivedToken == $realToken) {
891
+ return true;
892
+ }
893
+
894
+ }
895
+
896
+ public static function deleteSubscriber($params = array())
897
+ {
898
+ global $wpdb;
899
+ $homeUrl = get_home_url();
900
+
901
+ if (empty($params)) {
902
+ return false;
903
+ }
904
+ // send email to admin about user unsubscription
905
+ self::sendEmailAboutUnsubscribe($params);
906
+
907
+ $prepareSql = $wpdb->prepare('UPDATE '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' SET unsubscribed = 1 WHERE id = %s ', $params['subscriberId']);
908
+ $wpdb->query($prepareSql);
909
+
910
+ _e('<span>You have successfully unsubscribed. <a href="'.esc_attr($homeUrl).'">click here</a> to go to the home page.</span>', SG_POPUP_TEXT_DOMAIN);
911
+ wp_die();
912
+ }
913
+
914
+ public static function sendEmailAboutUnsubscribe($params = array())
915
+ {
916
+ if (empty($params)) {
917
+ return false;
918
+ }
919
+
920
+ $newsletterOptions = get_option('SGPB_NEWSLETTER_DATA');
921
+ $receiverEmail = get_bloginfo('admin_email');
922
+ $userEmail = $params['email'];
923
+ $emailTitle = __('Unsubscription', SG_POPUP_TEXT_DOMAIN);
924
+ $subscriptionFormId = (int)$newsletterOptions['subscriptionFormId'];
925
+ $subscriptionFormTitle = get_the_title($subscriptionFormId);
926
+
927
+ $message = __('User with '.$userEmail.' email has unsubscribed from '.$subscriptionFormTitle.' mail list', SG_POPUP_TEXT_DOMAIN);
928
+
929
+ $headers = 'MIME-Version: 1.0'."\r\n";
930
+ $headers .= 'From: WordPress Popup Builder'."\r\n";
931
+ $headers .= 'Content-type: text/html; charset=UTF-8'."\r\n"; //set UTF-8
932
+
933
+ wp_mail($receiverEmail, $emailTitle, $message, $headers);
934
+ }
935
+
936
+ public static function addUnsubscribeColumn()
937
+ {
938
+ global $wpdb;
939
+
940
+ $sql = 'ALTER TABLE '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' ADD COLUMN unsubscribed INT NOT NULL DEFAULT 0 ';
941
+ $wpdb->query($sql);
942
+ }
943
+
944
+ public static function isPluginActive($key)
945
+ {
946
+ $allExtensions = SgpbDataConfig::allExtensionsKeys();
947
+ $isActive = false;
948
+ foreach ($allExtensions as $extension) {
949
+ if (isset($extension['key']) && $extension['key'] == $key) {
950
+ if (is_plugin_active($extension['pluginKey'])) {
951
+ $isActive = true;
952
+ return $isActive;
953
+ }
954
+ }
955
+ }
956
+
957
+ return $isActive;
958
+ }
959
+
960
+ public static function supportBannerNotification()
961
+ {
962
+ $content = '<div class="sgpb-support-notification-wrapper sgpb-wrapper"><h4 class="sgpb-support-notification-title">'.__('Need some help?', SG_POPUP_TEXT_DOMAIN).'</h4>';
963
+ $content .= '<h4 class="sgpb-support-notification-title">'.__('Let us know what you think.', SG_POPUP_TEXT_DOMAIN).'</h4>';
964
+ $content .= '<a class="btn btn-info" target="_blank" href="'.SG_POPUP_RATE_US_URL.'"><span class="dashicons sgpb-dashicons-heart sgpb-info-text-white"></span><span class="sg-info-text">'.__('Rate Us', SG_POPUP_TEXT_DOMAIN).'</span></a>';
965
+ $content .= '<a class="btn btn-info" target="_blank" href="'.SG_POPUP_TICKET_URL.'"><span class="dashicons sgpb-dashicons-megaphone sgpb-info-text-white"></span>'.__('Support Potal', SG_POPUP_TEXT_DOMAIN).'</a>';
966
+ $content .= '<a class="btn btn-info" target="_blank" href="https://wordpress.org/support/plugin/popup-builder"><span class="dashicons sgpb-dashicons-admin-plugins sgpb-info-text-white"></span>'.__('Support Forum', SG_POPUP_TEXT_DOMAIN).'</a>';
967
+ $content .= '<a class="btn btn-info" target="_blank" href="'.SG_POPUP_STORE_URL.'"><span class="dashicons sgpb-dashicons-editor-help sgpb-info-text-white"></span>'.__('LIVE chat', SG_POPUP_TEXT_DOMAIN).'</a>';
968
+ $content .= '<a class="btn btn-info" target="_blank" href="mailto:support@popup-builder.com?subject=Hello"><span class="dashicons sgpb-dashicons-email-alt sgpb-info-text-white"></span>'.__('Email', SG_POPUP_TEXT_DOMAIN).'</a></div>';
969
+ $content .= '<div class="sgpb-support-notification-dont-show">'.__('Bored of this?').'<a class="sgpb-dont-show-again-support-notification" href="javascript:void(0)">'.__(' Press here ').'</a>'.__('and we will not show it again!').'</div>';
970
+
971
+ return $content;
972
+ }
973
+
974
+ public static function getMaxOpenDaysMessage()
975
+ {
976
+ $getUsageDays = self::getPopupUsageDays();
977
+ $firstHeader = __('<h1 class="sgpb-review-h1"><strong class="sgrb-review-strong">This is great!</strong> We have noticed that you are using Popup Builder plugin on your site for '.$getUsageDays.' days, we are thankful for that.</h1>', SG_POPUP_TEXT_DOMAIN);
978
+ $popupContent = self::getMaxOpenPopupContent($firstHeader, 'days');
979
+
980
+ return $popupContent;
981
+ }
982
+
983
+ public static function getPopupUsageDays()
984
+ {
985
+ $installDate = get_option('SGPBInstallDate');
986
+
987
+ $timeDate = new \DateTime('now');
988
+ $timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
989
+ $diff = $timeNow-$installDate;
990
+ $days = floor($diff/(60*60*24));
991
+
992
+ return $days;
993
+ }
994
+
995
+ public static function getMaxOpenPopupContent($firstHeader, $type)
996
+ {
997
+ ob_start();
998
+ ?>
999
+ <style>
1000
+ .sgpb-buttons-wrapper .press{
1001
+ box-sizing:border-box;
1002
+ cursor:pointer;
1003
+ display:inline-block;
1004
+ font-size:1em;
1005
+ margin:0;
1006
+ padding:0.5em 0.75em;
1007
+ text-decoration:none;
1008
+ transition:background 0.15s linear
1009
+ }
1010
+ .sgpb-buttons-wrapper .press-grey {
1011
+ background-color:#9E9E9E;
1012
+ border:2px solid #9E9E9E;
1013
+ color: #FFF;
1014
+ }
1015
+ .sgpb-buttons-wrapper .press-lightblue {
1016
+ background-color:#03A9F4;
1017
+ border:2px solid #03A9F4;
1018
+ color: #FFF;
1019
+ }
1020
+ .sgpb-buttons-wrapper {
1021
+ text-align: center;
1022
+ }
1023
+ .sgpb-review-wrapper{
1024
+ text-align: center;
1025
+ padding: 20px;
1026
+ }
1027
+ .sgpb-review-wrapper p {
1028
+ color: black;
1029
+ }
1030
+ .sgpb-review-h1 {
1031
+ font-size: 22px;
1032
+ font-weight: normal;
1033
+ line-height: 1.384;
1034
+ }
1035
+ .sgrb-review-h2{
1036
+ font-size: 20px;
1037
+ font-weight: normal;
1038
+ }
1039
+ :root {
1040
+ --main-bg-color: #1ac6ff;
1041
+ }
1042
+ .sgrb-review-strong{
1043
+ color: var(--main-bg-color);
1044
+ }
1045
+ .sgrb-review-mt20{
1046
+ margin-top: 20px
1047
+ }
1048
+ </style>
1049
+ <div class="sgpb-review-wrapper">
1050
+ <div class="sgpb-review-description">
1051
+ <?php echo $firstHeader; ?>
1052
+ <h2 class="sgrb-review-h2"><?php _e('This is really great for your website score.', SG_POPUP_TEXT_DOMAIN); ?></h2>
1053
+ <p class="sgrb-review-mt20"><?php _e('Have your input in the development of our plugin, and we’ll provide better conversions for your site!<br /> Leave your 5-star positive review and help us go further to the perfection!', SG_POPUP_TEXT_DOMAIN); ?></p>
1054
+ </div>
1055
+ <div class="sgpb-buttons-wrapper">
1056
+ <button class="press press-grey sgpb-button-1 sgpb-close-promo-notification" data-action="sg-already-did-review"><?php _e('I already did', SG_POPUP_TEXT_DOMAIN); ?></button>
1057
+ <button class="press press-lightblue sgpb-button-3 sgpb-close-promo-notification" data-action="sg-you-worth-it"><?php _e('You worth it!', SG_POPUP_TEXT_DOMAIN); ?></button>
1058
+ <button class="press press-grey sgpb-button-2 sgpb-close-promo-notification" data-action="sg-show-popup-period" data-message-type="<?php echo $type; ?>"><?php _e('Maybe later', SG_POPUP_TEXT_DOMAIN); ?></button></div>
1059
+ <div> </div>
1060
+ </div>
1061
+ <?php
1062
+ $popupContent = ob_get_clean();
1063
+
1064
+ return $popupContent;
1065
+ }
1066
+
1067
+ public static function shouldOpenReviewPopupForDays()
1068
+ {
1069
+ $shouldOpen = true;
1070
+ $dontShowAgain = get_option('SGPBCloseReviewPopup-notification');
1071
+ $periodNextTime = get_option('SGPBOpenNextTime');
1072
+ /*if (!$dontShowAgain) {
1073
+ return true;
1074
+ }
1075
+ else {
1076
+ return false;
1077
+ }*/
1078
+ // When period next time does not exits it means the user is old
1079
+ if (!$periodNextTime) {
1080
+ $usageDays = self::getPopupMainTableCreationDate();
1081
+ update_option('SGPBUsageDays', $usageDays);
1082
+ if (!defined('SGPB_REVIEW_POPUP_PERIOD')) {
1083
+ define('SGPB_REVIEW_POPUP_PERIOD', '500');
1084
+ }
1085
+ // For old users
1086
+ if (defined('SGPB_REVIEW_POPUP_PERIOD') && $usageDays > SGPB_REVIEW_POPUP_PERIOD && !$dontShowAgain) {
1087
+ return $shouldOpen;
1088
+ }
1089
+ $remainingDays = SGPB_REVIEW_POPUP_PERIOD - $usageDays;
1090
+
1091
+ $popupTimeZone = \ConfigDataHelper::getDefaultTimezone();
1092
+ $timeDate = new DateTime('now', new DateTimeZone($popupTimeZone));
1093
+ $timeDate->modify('+'.$remainingDays.' day');
1094
+
1095
+ $timeNow = strtotime($timeDate->format('Y-m-d H:i:s'));
1096
+ update_option('SGPBOpenNextTime', $timeNow);
1097
+
1098
+ return false;
1099
+ }
1100
+
1101
+ $currentData = new \DateTime('now');
1102
+ $timeNow = $currentData->format('Y-m-d H:i:s');
1103
+ $timeNow = strtotime($timeNow);
1104
+
1105
+ if ($periodNextTime > $timeNow) {
1106
+ $shouldOpen = false;
1107
+ }
1108
+
1109
+ return $shouldOpen;
1110
+ }
1111
+
1112
+ public static function getPopupMainTableCreationDate()
1113
+ {
1114
+ global $wpdb;
1115
+
1116
+ $query = $wpdb->prepare('SELECT table_name, create_time FROM information_schema.tables WHERE table_schema=%s AND table_name=%s', DB_NAME, $wpdb->prefix.'sgpb_subscribers');
1117
+ $results = $wpdb->get_results($query, ARRAY_A);
1118
+ if (empty($results)) {
1119
+ return 0;
1120
+ }
1121
+
1122
+ $createTime = $results[0]['create_time'];
1123
+ $createTime = strtotime($createTime);
1124
+ update_option('SGPBInstallDate', $createTime);
1125
+ $diff = time() - $createTime;
1126
+ $days = floor($diff/(60*60*24));
1127
+
1128
+ return $days;
1129
+ }
1130
+
1131
+ public static function shouldOpenForMaxOpenPopupMessage()
1132
+ {
1133
+ $counterMaxPopup = self::getMaxOpenPopupId();
1134
+
1135
+ if (empty($counterMaxPopup)) {
1136
+ return false;
1137
+ }
1138
+ $dontShowAgain = get_option('SGPBCloseReviewPopup-notification');
1139
+ $maxCountDefine = get_option('SGPBMaxOpenCount');
1140
+
1141
+ if (!$maxCountDefine) {
1142
+ $maxCountDefine = SGPB_ASK_REVIEW_POPUP_COUNT;
1143
+ }
1144
+
1145
+ return $counterMaxPopup['maxCount'] >= $maxCountDefine && !$dontShowAgain;
1146
+ }
1147
+
1148
+ public static function getMaxOpenPopupId()
1149
+ {
1150
+ $popupsCounterData = get_option('SgpbCounter');
1151
+ if (!$popupsCounterData) {
1152
+ return 0;
1153
+ }
1154
+
1155
+ $counters = array_values($popupsCounterData);
1156
+ $maxCount = max($counters);
1157
+ $popupId = array_search($maxCount, $popupsCounterData);
1158
+
1159
+ $maxPopupData = array(
1160
+ 'popupId' => $popupId,
1161
+ 'maxCount' => $maxCount
1162
+ );
1163
+
1164
+ return $maxPopupData;
1165
+ }
1166
+
1167
+ public static function getMaxOpenPopupsMessage()
1168
+ {
1169
+ $counterMaxPopup = self::getMaxOpenPopupId();
1170
+ $maxCountDefine = get_option('SGPBMaxOpenCount');
1171
+ $popupTitle = get_the_title($counterMaxPopup['popupId']);
1172
+
1173
+ if (!empty($counterMaxPopup['maxCount'])) {
1174
+ $maxCountDefine = $counterMaxPopup['maxCount'];
1175
+ }
1176
+
1177
+ $firstHeader = __('<h1 class="sgpb-review-h1"><strong class="sgrb-review-strong">Awesome news!</strong> <b>Popup Builder</b> plugin helped you to share your message via <strong class="sgrb-review-strong">'.$popupTitle.'</strong> popup with your visitors for <strong class="sgrb-review-strong">'.$maxCountDefine.' times!</strong></h1>', SG_POPUP_TEXT_DOMAIN);
1178
+ $popupContent = self::getMaxOpenPopupContent($firstHeader, 'count');
1179
+
1180
+ return $popupContent;
1181
+ }
1182
+
1183
+ /**
1184
+ * Get email headers
1185
+ *
1186
+ * @since 3.1.0
1187
+ *
1188
+ * @param email $fromEmail
1189
+ * @param array $args
1190
+ *
1191
+ * @return string $headers
1192
+ */
1193
+ public static function getEmailHeader($fromEmail, $args = array())
1194
+ {
1195
+ $contentType = 'text/html';
1196
+ $charset = 'UTF-8';
1197
+ $blogInfo = get_bloginfo();
1198
+
1199
+ if (!empty($args['contentType'])) {
1200
+ $contentType = $args['contentType'];
1201
+ }
1202
+ if (!empty($args['charset'])) {
1203
+ $charset = $args['charset'];
1204
+ }
1205
+ $headers = 'MIME-Version: 1.0'."\r\n";
1206
+ $headers .= 'From: "'.$blogInfo.'" <'.$fromEmail.'>'."\r\n";
1207
+ $headers .= 'Content-type: '.$contentType.'; charset='.$charset.''."\r\n"; //set UTF-8
1208
+
1209
+ return $headers;
1210
+ }
1211
+
1212
+ /**
1213
+ * Get file content from URL
1214
+ *
1215
+ * @since 3.1.0
1216
+ *
1217
+ * @param $url
1218
+ *
1219
+ * @return string
1220
+ */
1221
+ public static function getFileFromURL($url)
1222
+ {
1223
+ $data = '';
1224
+ $remoteData = wp_remote_get($url);
1225
+
1226
+ if (is_wp_error($remoteData)) {
1227
+ return $data;
1228
+ }
1229
+
1230
+ $data = wp_remote_retrieve_body($remoteData);
1231
+
1232
+ return $data;
1233
+ }
1234
+
1235
+ public static function getRightMetaboxBannerText()
1236
+ {
1237
+ $bannerText = get_option('sgpb-metabox-banner-remote-get');
1238
+
1239
+ return $bannerText;
1240
+ }
1241
+
1242
+ public static function getGutenbergPopupsIdAndTitle($excludesPopups = array())
1243
+ {
1244
+ $allPopups = SGPopup::getAllPopups();
1245
+ $popupIdTitles = array();
1246
+
1247
+ if (empty($allPopups)) {
1248
+ return $popupIdTitles;
1249
+ }
1250
+
1251
+ foreach ($allPopups as $popup) {
1252
+ if (empty($popup)) {
1253
+ continue;
1254
+ }
1255
+
1256
+ $id = $popup->getId();
1257
+ $title = $popup->getTitle();
1258
+ $type = $popup->getType();
1259
+
1260
+ if (!empty($excludesPopups)) {
1261
+ foreach ($excludesPopups as $excludesPopupId) {
1262
+ if ($excludesPopupId != $id) {
1263
+ $array = array();
1264
+ $array['id'] = $id;
1265
+ $array['title'] = $title.' - '.$type;
1266
+ $popupIdTitles[] = $array;
1267
+ }
1268
+ }
1269
+ }
1270
+ else {
1271
+ $array = array();
1272
+ $array['id'] = $id;
1273
+ $array['title'] = $title.' - '.$type;
1274
+ $popupIdTitles[] = $array;
1275
+ }
1276
+ }
1277
+
1278
+ return $popupIdTitles;
1279
+ }
1280
+
1281
+ public static function getGutenbergPopupsEvents()
1282
+ {
1283
+ $data = array(
1284
+ array('value' => '', 'title' => __('Select Event', SG_POPUP_TEXT_DOMAIN)),
1285
+ array('value' => 'inherit', 'title' => __('Inherit', SG_POPUP_TEXT_DOMAIN)),
1286
+ array('value' => 'onLoad', 'title' => __('On load', SG_POPUP_TEXT_DOMAIN)),
1287
+ array('value' => 'click', 'title' => __('On click', SG_POPUP_TEXT_DOMAIN)),
1288
+ array('value' => 'hover', 'title' => __('On hover', SG_POPUP_TEXT_DOMAIN))
1289
+ );
1290
+
1291
+ return $data;
1292
+ }
1293
+
1294
+ public static function checkEditorByPopupId($popupId)
1295
+ {
1296
+ $popupContent = '';
1297
+ if (class_exists('\Elementor\Plugin')) {
1298
+ $elementorContent = get_post_meta($popupId, '_elementor_edit_mode', true);
1299
+ if (!empty($elementorContent) && $elementorContent == 'builder') {
1300
+ $popupContent = Elementor\Plugin::instance()->frontend->get_builder_content_for_display($popupId);
1301
+ }
1302
+ }
1303
+ else if (class_exists('Vc_Manager')) {
1304
+ $stylesAndScripts = self::renderWPBakeryScriptsAndStyles($popupId);
1305
+ $popupContent .= '<style>'.$stylesAndScripts.'</style>';
1306
+ }
1307
+
1308
+ return $popupContent;
1309
+ }
1310
+
1311
+ public static function renderWPBakeryScriptsAndStyles($popupId = 0)
1312
+ {
1313
+ return get_post_meta($popupId, '_wpb_shortcodes_custom_css', true);
1314
+ }
1315
+
1316
+ /**
1317
+ * countdown popup, convert date to seconds
1318
+ *
1319
+ * @param $dueDate
1320
+ * @param $timezone
1321
+ * @return false|int|string
1322
+ */
1323
+ public static function dateToSeconds($dueDate, $timezone)
1324
+ {
1325
+ if (empty($timezone)) {
1326
+ return '';
1327
+ }
1328
+
1329
+ $dateObj = self::getDateObjFromDate('now', $timezone);
1330
+ $timeNow = @strtotime($dateObj);
1331
+ $seconds = @strtotime($dueDate)-$timeNow;
1332
+ if ($seconds < 0) {
1333
+ $seconds = 0;
1334
+ }
1335
+
1336
+ return $seconds;
1337
+ }
1338
+
1339
+ /**
1340
+ * Get site protocol
1341
+ *
1342
+ * @since 1.0.0
1343
+ *
1344
+ * @return string $protocol
1345
+ *
1346
+ */
1347
+ public static function getSiteProtocol()
1348
+ {
1349
+ $protocol = 'http';
1350
+
1351
+ if (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') {
1352
+ $protocol = 'https';
1353
+ }
1354
+
1355
+ return $protocol;
1356
+ }
1357
+
1358
+ public static function findSubscribersByEmail($subscriberEmail = '', $list = 0)
1359
+ {
1360
+ global $wpdb;
1361
+ $subscriber = array();
1362
+
1363
+ $prepareSql = $wpdb->prepare('SELECT * FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE email = %s AND subscriptionType = %d ', $subscriberEmail, $list);
1364
+ $subscriber = $wpdb->get_row($prepareSql, ARRAY_A);
1365
+ if (!$list) {
1366
+ $prepareSql = $wpdb->prepare('SELECT * FROM '.$wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME.' WHERE email = %s ', $subscriberEmail);
1367
+ $subscriber = $wpdb->get_results($prepareSql, ARRAY_A);
1368
+ }
1369
+
1370
+ return $subscriber;
1371
+ }
1372
+
1373
+ /**
1374
+ * Update option
1375
+ *
1376
+ * @since 3.1.9
1377
+ *
1378
+ * @return void
1379
+ */
1380
+ public static function updateOption($optionKey, $optionValue)
1381
+ {
1382
+ update_option($optionKey, $optionValue);
1383
+ }
1384
+
1385
+ public static function getOption($optionKey, $default = false)
1386
+ {
1387
+ return get_option($optionKey, $default);
1388
+ }
1389
+
1390
+ public static function deleteOption($optionKey)
1391
+ {
1392
+ delete_option($optionKey);
1393
+ }
1394
+
1395
+ /**
1396
+ * It's change popup registered plugins static paths to dynamic
1397
+ *
1398
+ * @since 3.1.9
1399
+ *
1400
+ * @return bool where true mean modified false mean there is not need modification
1401
+ */
1402
+ public static function makeRegisteredPluginsStaticPathsToDynamic()
1403
+ {
1404
+ // remove old outdated option sgpbModifiedRegisteredPluginsPaths
1405
+ delete_option('sgpbModifiedRegisteredPluginsPaths');
1406
+ delete_option('SG_POPUP_BUILDER_REGISTERED_PLUGINS');
1407
+ $hasModifiedPaths = AdminHelper::getOption(SGPB_REGISTERED_PLUGINS_PATHS_MODIFIED);
1408
+ if ($hasModifiedPaths) {
1409
+ return false;
1410
+ }
1411
+ else {
1412
+ Installer::registerPlugin();
1413
+ }
1414
+ AdminHelper::updateOption(SGPB_REGISTERED_PLUGINS_PATHS_MODIFIED, 1);
1415
+
1416
+ $registeredPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
1417
+ if (empty($registeredPlugins)) {
1418
+ return false;
1419
+ }
1420
+
1421
+ $registeredPlugins = json_decode($registeredPlugins, true);
1422
+ if (empty($registeredPlugins)) {
1423
+ return false;
1424
+ }
1425
+
1426
+ foreach ($registeredPlugins as $key => $registeredPlugin) {
1427
+ if (empty($registeredPlugin['classPath'])) {
1428
+ continue;
1429
+ }
1430
+ $registeredPlugins[$key]['classPath'] = str_replace(WP_PLUGIN_DIR, '', $registeredPlugin['classPath']);
1431
+ if (!empty($registeredPlugin['options']['licence']['file'])) {
1432
+ $registeredPlugins[$key]['options']['licence']['file'] = $registeredPlugin['options']['licence']['file'];
1433
+ }
1434
+ }
1435
+ $registeredPlugins = json_encode($registeredPlugins);
1436
+
1437
+ AdminHelper::updateOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS, $registeredPlugins);
1438
+ return true;
1439
+ }
1440
+
1441
+ public static function hasInactiveExtensions()
1442
+ {
1443
+ $hasInactiveExtensions = false;
1444
+ $allRegiseredPBPlugins = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
1445
+ $allRegiseredPBPlugins = @json_decode($allRegiseredPBPlugins, true);
1446
+ if (empty($allRegiseredPBPlugins)) {
1447
+ return $hasInactiveExtensions;
1448
+ }
1449
+
1450
+ foreach ($allRegiseredPBPlugins as $pluginPath => $registeredPlugin) {
1451
+ if (!isset($registeredPlugin['options']['licence']['key'])) {
1452
+ continue;
1453
+ }
1454
+ if (!isset($registeredPlugin['options']['licence']['file'])) {
1455
+ continue;
1456
+ }
1457
+ $extensionKey = $registeredPlugin['options']['licence']['file'];
1458
+ $isPluginActive = is_plugin_active($extensionKey);
1459
+ $pluginKey = $registeredPlugin['options']['licence']['key'];
1460
+ $isValidLicense = get_option('sgpb-license-status-'.$pluginKey);
1461
+
1462
+ // if we even have at least one inactive extension, we don't need to check remaining extensions
1463
+ if ($isValidLicense != 'valid' && $isPluginActive) {
1464
+ $hasInactiveExtensions = true;
1465
+ break;
1466
+ }
1467
+ }
1468
+
1469
+ return $hasInactiveExtensions;
1470
+ }
1471
+
1472
+ public static function getSubscriptionColumnsById($id)
1473
+ {
1474
+ $popup = SGPopup::find($id);
1475
+ if (empty($popup) || !is_object($popup)) {
1476
+ return array();
1477
+ }
1478
+ $freeSavedOptions = $popup->getOptionValue('sgpb-subs-fields');
1479
+
1480
+ if (!empty($freeSavedOptions)) {
1481
+ return array('firstName' => 'First name','lastName' => 'Last name', 'email' => 'Email', 'date' => 'Date');
1482
+ }
1483
+ $formFieldsJson = $popup->getOptionValue('sgpb-subscription-fields-json');
1484
+ if (!empty($formFieldsJson)) {
1485
+ $data = apply_filters('sgpbGetSubscriptionLabels', array(), $popup);
1486
+ $data['date'] = 'Date';
1487
+ return $data;
1488
+ }
1489
+
1490
+ return array();
1491
+ }
1492
+
1493
+ public static function getCustomFormFieldsByPopupId($popupId)
1494
+ {
1495
+ if (!class_exists('sgpbsubscriptionplus\SubscriptionPlusAdminHelper')) {
1496
+ return array();
1497
+ }
1498
+
1499
+ if (method_exists('sgpbsubscriptionplus\SubscriptionPlusAdminHelper', 'getCustomFormFieldsByPopupId')) {
1500
+ return SubscriptionPlusAdminHelper::getCustomFormFieldsByPopupId($popupId);
1501
+ }
1502
+
1503
+ return array();
1504
+ }
1505
+
1506
+ public static function removeAllNonPrintableCharacters($title, $defaultValue)
1507
+ {
1508
+ $titleRes = $title;
1509
+ $pattern = '/[\\\^£$%&*()}{@#~?><>,|=_+¬-]/u';
1510
+ $title = preg_replace($pattern, '', $title);
1511
+ $title = mb_ereg_replace($pattern, '', $title);
1512
+ $title = htmlspecialchars($title, ENT_IGNORE, 'UTF-8');
1513
+ $result = str_replace(' ', '', $title);
1514
+ if (empty($result)) {
1515
+ $titleRes = $defaultValue;
1516
+ }
1517
+
1518
+ return $titleRes;
1519
+ }
1520
+
1521
+ public static function renderCustomScripts($popupId)
1522
+ {
1523
+ $finalResult = '';
1524
+ $postMeta = get_post_meta($popupId, 'sg_popup_scripts', true);
1525
+ if (empty($postMeta)) {
1526
+ return '';
1527
+ }
1528
+ $defaultData = \ConfigDataHelper::defaultData();
1529
+
1530
+ // get scripts
1531
+ if (!isset($postMeta['js'])) {
1532
+ $postMeta['js'] = array();
1533
+ }
1534
+ $jsPostMeta = $postMeta['js'];
1535
+ $jsDefaultData = $defaultData['customEditorContent']['js']['helperText'];
1536
+ $suspiciousStrings = array('document.createElement', 'createElement', 'String.fromCharCode', 'fromCharCode', '<!--', '-->');
1537
+ $finalContent = '';
1538
+ $suspiciousStringFound = false;
1539
+ if (!empty($jsPostMeta)) {
1540
+ $customScripts = '<script id="sgpb-custom-script-'.$popupId.'">';
1541
+ foreach ($jsDefaultData as $key => $value) {
1542
+ $eventName = 'sgpb'.$key;
1543
+ if ((!isset($jsPostMeta['sgpb-'.$key]) || empty($jsPostMeta['sgpb-'.$key])) || $key == 'ShouldOpen' || $key == 'ShouldClose') {
1544
+ continue;
1545
+ }
1546
+ $content = @$jsPostMeta['sgpb-'.$key];
1547
+ $content = str_replace('popupId', $popupId, $content);
1548
+ $content = str_replace("<", "&lt;", $content);
1549
+ $content = str_replace(">", "&gt;", $content);
1550
+ foreach ($suspiciousStrings as $string) {
1551
+ if (strpos($content, $string)) {
1552
+ $suspiciousStringFound = true;
1553
+ break;
1554
+ }
1555
+ }
1556
+ if ($suspiciousStringFound) {
1557
+ break;
1558
+ }
1559
+ $content = html_entity_decode($content, ENT_QUOTES, 'UTF-8');
1560
+
1561
+ $finalContent .= 'jQuery(document).ready(function(){';
1562
+ $finalContent .= 'sgAddEvent(window, "'.$eventName.'", function(e) {';
1563
+ $finalContent .= 'if (e.detail.popupId == "'.$popupId.'") {';
1564
+ $finalContent .= $content;
1565
+ $finalContent .= '};';
1566
+ $finalContent .= '});';
1567
+ $finalContent .= '});';
1568
+ }
1569
+ $customScripts .= $finalContent;
1570
+ $customScripts .= '</script>';
1571
+ if (empty($finalContent)) {
1572
+ $customScripts = '';
1573
+ }
1574
+ $finalResult .= $customScripts;
1575
+ }
1576
+
1577
+ // get styles
1578
+ if (isset($postMeta['css'])) {
1579
+ $cssPostMeta = $postMeta['css'];
1580
+ }
1581
+ $finalContent = '';
1582
+ if (!empty($cssPostMeta)) {
1583
+ $customStyles = '<style id="sgpb-custom-style-'.$popupId.'">';
1584
+ $finalContent = str_replace('popupId', $popupId, $cssPostMeta);
1585
+ $finalContent = html_entity_decode($finalContent, ENT_QUOTES, 'UTF-8');
1586
+
1587
+ $customStyles .= $finalContent;
1588
+ $customStyles .= '</style>';
1589
+ $finalResult .= $customStyles;
1590
+ }
1591
+
1592
+
1593
+ return $finalResult;
1594
+ }
1595
+
1596
+ public static function removeSelectedTypeOptions($type)
1597
+ {
1598
+ switch ($type) {
1599
+ case 'cron':
1600
+ $crons = _get_cron_array();
1601
+ foreach ($crons as $key => $value) {
1602
+ foreach ($value as $key => $body) {
1603
+ if (strstr($key, 'sgpb')) {
1604
+ wp_clear_scheduled_hook($key);
1605
+ }
1606
+ }
1607
+ }
1608
+ break;
1609
+ }
1610
+ }
1611
+
1612
+ public static function getSystemInfoText() {
1613
+ global $wpdb;
1614
+
1615
+ $browser = self::getBrowser();
1616
+
1617
+ // Get theme info
1618
+ if (get_bloginfo('version') < '3.4') {
1619
+ $themeData = wp_get_theme(get_stylesheet_directory().'/style.css');
1620
+ $theme = $themeData['Name'].' '.$themeData['Version'];
1621
+ }
1622
+ else {
1623
+ $themeData = wp_get_theme();
1624
+ $theme = $themeData->Name.' '.$themeData->Version;
1625
+ }
1626
+
1627
+ // Try to identify the hosting provider
1628
+ $host = self::getHost();
1629
+
1630
+ $systemInfoContent = '### Start System Info ###'."\n\n";
1631
+
1632
+ // Start with the basics...
1633
+ $systemInfoContent .= '-- Site Info'."\n\n";
1634
+ $systemInfoContent .= 'Site URL: '.site_url()."\n";
1635
+ $systemInfoContent .= 'Home URL: '.home_url()."\n";
1636
+ $systemInfoContent .= 'Multisite: '.(is_multisite() ? 'Yes' : 'No')."\n";
1637
+
1638
+ // Can we determine the site's host?
1639
+ if ($host) {
1640
+ $systemInfoContent .= "\n".'-- Hosting Provider'."\n\n";
1641
+ $systemInfoContent .= 'Host: '.$host."\n";
1642
+ }
1643
+
1644
+ // The local users' browser information, handled by the Browser class
1645
+ $systemInfoContent .= "\n".'-- User Browser'."\n\n";
1646
+ $systemInfoContent .= $browser;
1647
+
1648
+ // WordPress configuration
1649
+ $systemInfoContent .= "\n".'-- WordPress Configuration'."\n\n";
1650
+ $systemInfoContent .= 'Version: '.get_bloginfo('version')."\n";
1651
+ $systemInfoContent .= 'Language: '.(defined('WPLANG') && WPLANG ? WPLANG : 'en_US')."\n";
1652
+ $systemInfoContent .= 'Permalink Structure: '.(get_option('permalink_structure') ? get_option('permalink_structure') : 'Default')."\n";
1653
+ $systemInfoContent .= 'Active Theme: '.$theme."\n";
1654
+ $systemInfoContent .= 'Show On Front: '.get_option('show_on_front')."\n";
1655
+
1656
+ // Only show page specs if frontpage is set to 'page'
1657
+ if (get_option('show_on_front') == 'page') {
1658
+ $frontPageId = get_option('page_on_front');
1659
+ $blogPageId = get_option('page_for_posts');
1660
+
1661
+ $systemInfoContent .= 'Page On Front: '.($frontPageId != 0 ? get_the_title($frontPageId).' (#'.$frontPageId.')' : 'Unset')."\n";
1662
+ $systemInfoContent .= 'Page For Posts: '.($blogPageId != 0 ? get_the_title($blogPageId).' (#'.$blogPageId.')' : 'Unset')."\n";
1663
+ }
1664
+
1665
+ $systemInfoContent .= 'Table Prefix: '.'Prefix: '.$wpdb->prefix.' Length: '.strlen($wpdb->prefix ).' Status: '.( strlen($wpdb->prefix) > 16 ? 'ERROR: Too long' : 'Acceptable')."\n";
1666
+ $systemInfoContent .= 'WP_DEBUG: '.(defined('WP_DEBUG') ? WP_DEBUG ? 'Enabled' : 'Disabled' : 'Not set')."\n";
1667
+ $systemInfoContent .= 'Memory Limit: '.WP_MEMORY_LIMIT."\n";
1668
+ $systemInfoContent .= 'Registered Post Stati: '.implode(', ', get_post_stati())."\n";
1669
+
1670
+ // Must-use plugins
1671
+ $muplugins = get_mu_plugins();
1672
+ if ($muplugins && count($muplugins)) {
1673
+ $systemInfoContent .= "\n".'-- Must-Use Plugins'."\n\n";
1674
+
1675
+ foreach ($muplugins as $plugin => $plugin_data) {
1676
+ $systemInfoContent .= $plugin_data['Name'].': '.$plugin_data['Version']."\n";
1677
+ }
1678
+ }
1679
+
1680
+ $registered = AdminHelper::getOption(SGPB_POPUP_BUILDER_REGISTERED_PLUGINS);
1681
+ $registered = json_decode($registered, true);
1682
+
1683
+ if (empty($registered)) {
1684
+ return false;
1685
+ }
1686
+ // remove free package data, we don't need it
1687
+ array_shift($registered);
1688
+
1689
+ $systemInfoContent .= "\n".'-- Popup Builder License Data'."\n\n";
1690
+ if (!empty($registered)) {
1691
+ foreach ($registered as $singleExntensionData) {
1692
+ if (empty($singleExntensionData['options'])) {
1693
+ continue;
1694
+ }
1695
+
1696
+ $key = $singleExntensionData['options']['licence']['key'];
1697
+ $name = $singleExntensionData['options']['licence']['itemName'];
1698
+ $licenseKey = __('No license');
1699
+ if (!empty($key)) {
1700
+ $licenseKey = self::getOption('sgpb-license-key-'.$key);
1701
+ }
1702
+ $licenseStatus = 'Inactive';
1703
+ if (self::getOption('sgpb-license-status-'.$key) == 'valid') {
1704
+ $licenseStatus = 'Active';
1705
+ }
1706
+
1707
+ $systemInfoContent .= 'Name: '.$name."\n";
1708
+ $systemInfoContent .= 'License key: '.$licenseKey."\n";
1709
+ $systemInfoContent .= 'License status: '.$licenseStatus."\n";
1710
+ $systemInfoContent .= "\n";
1711
+ }
1712
+ }
1713
+
1714
+ $systemInfoContent .= "\n".'-- All created Popups'."\n\n";
1715
+ $allPopups = self::getPopupsIdAndTitle();
1716
+ $args['status'] = array('publish', 'draft', 'pending', 'private', 'trash');
1717
+ foreach ($allPopups as $id => $popupTitleType) {
1718
+ $popup = SGPopup::find($id, $args);
1719
+ $popupStatus = ($popup->getOptionValue('sgpb-is-active')) ? 'Enabled' : 'Disabled';
1720
+ $systemInfoContent .= 'Id: '.$id."\n";
1721
+ $systemInfoContent .= 'Title: '.get_the_title($id)."\n";
1722
+ $systemInfoContent .= 'Type: '.$popup->getOptionValue('sgpb-type')."\n";
1723
+ $systemInfoContent .= 'Status: '.$popupStatus."\n";
1724
+ $systemInfoContent .= "\n";
1725
+ }
1726
+
1727
+ // WordPress active plugins
1728
+ $systemInfoContent .= "\n".'-- WordPress Active Plugins'."\n\n";
1729
+
1730
+ $plugins = get_plugins();
1731
+ $activePlugins = get_option('active_plugins', array());
1732
+ foreach ($plugins as $pluginPath => $plugin) {
1733
+
1734
+ if (! in_array($pluginPath, $activePlugins)) {
1735
+ continue;
1736
+ }
1737
+
1738
+ $systemInfoContent .= $plugin['Name'].': '.$plugin['Version']."\n";
1739
+ }
1740
+ // WordPress inactive plugins
1741
+ $systemInfoContent .= "\n".'-- WordPress Inactive Plugins'."\n\n";
1742
+
1743
+ foreach ($plugins as $pluginPath => $plugin) {
1744
+ if (in_array($pluginPath, $activePlugins)) {
1745
+ continue;
1746
+ }
1747
+ $systemInfoContent .= $plugin['Name'].': '.$plugin['Version']."\n";
1748
+ }
1749
+
1750
+ if (is_multisite()) {
1751
+ // WordPress Multisite active plugins
1752
+ $systemInfoContent .= "\n".'-- Network Active Plugins'."\n\n";
1753
+
1754
+ $plugins = wp_get_active_network_plugins();
1755
+ $activePlugins = get_site_option('active_sitewide_plugins', array());
1756
+
1757
+ foreach ($plugins as $pluginPath) {
1758
+ $plugin_base = plugin_basename($pluginPath);
1759
+
1760
+ if (! array_key_exists($plugin_base, $activePlugins)) {
1761
+ continue;
1762
+ }
1763
+
1764
+ $plugin = get_plugin_data($pluginPath);
1765
+ $systemInfoContent .= $plugin['Name'].': '.$plugin['Version']."\n";
1766
+ }
1767
+ }
1768
+
1769
+ // Server configuration (really just versioning)
1770
+ $systemInfoContent .= "\n".'-- Webserver Configuration'."\n\n";
1771
+ $systemInfoContent .= 'PHP Version: '.PHP_VERSION."\n";
1772
+ $systemInfoContent .= 'MySQL Version: '.$wpdb->db_version()."\n";
1773
+ $systemInfoContent .= 'Webserver Info: '.$_SERVER['SERVER_SOFTWARE']."\n";
1774
+
1775
+ // PHP configs... now we're getting to the important stuff
1776
+ $systemInfoContent .= "\n".'-- PHP Configuration'."\n\n";
1777
+ $systemInfoContent .= 'Memory Limit: '.ini_get('memory_limit')."\n";
1778
+ $systemInfoContent .= 'Upload Max Size: '.ini_get('upload_max_filesize')."\n";
1779
+ $systemInfoContent .= 'Post Max Size: '.ini_get('post_max_size')."\n";
1780
+ $systemInfoContent .= 'Upload Max Filesize: '.ini_get('upload_max_filesize')."\n";
1781
+ $systemInfoContent .= 'Time Limit: '.ini_get('max_execution_time')."\n";
1782
+ $systemInfoContent .= 'Max Input Vars: '.ini_get('max_input_vars')."\n";
1783
+ $systemInfoContent .= 'Display Errors: '.(ini_get('display_errors') ? 'On ('.ini_get('display_errors').')' : 'N/A')."\n";
1784
+
1785
+ // PHP extensions and such
1786
+ $systemInfoContent .= "\n".'-- PHP Extensions'."\n\n";
1787
+ $systemInfoContent .= 'cURL: '.(function_exists('curl_init') ? 'Supported' : 'Not Supported')."\n";
1788
+ $systemInfoContent .= 'fsockopen: '.(function_exists('fsockopen') ? 'Supported' : 'Not Supported')."\n";
1789
+ $systemInfoContent .= 'SOAP Client: '.(class_exists('SoapClient') ? 'Installed' : 'Not Installed')."\n";
1790
+ $systemInfoContent .= 'Suhosin: '.(extension_loaded('suhosin') ? 'Installed' : 'Not Installed')."\n";
1791
+
1792
+ // Session stuff
1793
+ $systemInfoContent .= "\n".'-- Session Configuration'."\n\n";
1794
+ $systemInfoContent .= 'Session: '.(isset($_SESSION ) ? 'Enabled' : 'Disabled')."\n";
1795
+
1796
+ // The rest of this is only relevant is session is enabled
1797
+ if (isset($_SESSION)) {
1798
+ $systemInfoContent .= 'Session Name: '.esc_html( ini_get('session.name'))."\n";
1799
+ $systemInfoContent .= 'Cookie Path: '.esc_html( ini_get('session.cookie_path'))."\n";
1800
+ $systemInfoContent .= 'Save Path: '.esc_html( ini_get('session.save_path'))."\n";
1801
+ $systemInfoContent .= 'Use Cookies: '.(ini_get('session.use_cookies') ? 'On' : 'Off')."\n";
1802
+ $systemInfoContent .= 'Use Only Cookies: '.(ini_get('session.use_only_cookies') ? 'On' : 'Off')."\n";
1803
+ }
1804
+
1805
+ $systemInfoContent = apply_filters('sgpbSystemInformation', $systemInfoContent);
1806
+
1807
+ $systemInfoContent .= "\n".'### End System Info ###';
1808
+
1809
+ return $systemInfoContent;
1810
+ }
1811
+
1812
+ public static function getHost()
1813
+ {
1814
+ if (defined('WPE_APIKEY')) {
1815
+ return 'WP Engine';
1816
+ }
1817
+ else if (defined('PAGELYBIN')) {
1818
+ return 'Pagely';
1819
+ }
1820
+ else if (DB_HOST == 'localhost:/tmp/mysql5.sock') {
1821
+ return 'ICDSoft';
1822
+ }
1823
+ else if (DB_HOST == 'mysqlv5') {
1824
+ return 'NetworkSolutions';
1825
+ }
1826
+ else if (strpos(DB_HOST, 'ipagemysql.com') !== false) {
1827
+ return 'iPage';
1828
+ }
1829
+ else if (strpos(DB_HOST, 'ipowermysql.com') !== false) {
1830
+ return 'IPower';
1831
+ }
1832
+ else if (strpos(DB_HOST, '.gridserver.com') !== false) {
1833
+ return 'MediaTemple Grid';
1834
+ }
1835
+ else if (strpos(DB_HOST, '.pair.com') !== false) {
1836
+ return 'pair Networks';
1837
+ }
1838
+ else if (strpos(DB_HOST, '.stabletransit.com') !== false) {
1839
+ return 'Rackspace Cloud';
1840
+ }
1841
+ else if (strpos(DB_HOST, '.sysfix.eu') !== false) {
1842
+ return 'SysFix.eu Power Hosting';
1843
+ }
1844
+ else if (strpos($_SERVER['SERVER_NAME'], 'Flywheel') !== false) {
1845
+ return 'Flywheel';
1846
+ }
1847
+ else {
1848
+ // Adding a general fallback for data gathering
1849
+ return 'DBH: '.DB_HOST.', SRV: '.$_SERVER['SERVER_NAME'];
1850
+ }
1851
+ }
1852
+
1853
+ public static function getBrowser()
1854
+ {
1855
+ $uAgent = 'Unknown';
1856
+ if (isset($_SERVER['HTTP_USER_AGENT'])) {
1857
+ $uAgent = $_SERVER['HTTP_USER_AGENT'];
1858
+ }
1859
+ $bname = $platform = $ub = $version = 'Unknown';
1860
+ $browserInfoContent = '';
1861
+
1862
+ //First get the platform?
1863
+ if (preg_match('/linux/i', $uAgent)) {
1864
+ $platform = 'Linux';
1865
+ }
1866
+ else if (preg_match('/macintosh|mac os x/i', $uAgent)) {
1867
+ $platform = 'Apple';
1868
+ }
1869
+ else if (preg_match('/windows|win32/i', $uAgent)) {
1870
+ $platform = 'Windows';
1871
+ }
1872
+
1873
+ if (preg_match('/MSIE/i',$uAgent) && !preg_match('/Opera/i',$uAgent)) {
1874
+ $bname = 'Internet Explorer';
1875
+ $ub = 'MSIE';
1876
+ }
1877
+ else if (preg_match('/Firefox/i',$uAgent)) {
1878
+ $bname = 'Mozilla Firefox';
1879
+ $ub = 'Firefox';
1880
+ }
1881
+ else if (preg_match('/OPR/i',$uAgent)) {
1882
+ $bname = 'Opera';
1883
+ $ub = 'Opera';
1884
+ }
1885
+ else if (preg_match('/Chrome/i',$uAgent) && !preg_match('/Edge/i',$uAgent)) {
1886
+ $bname = 'Google Chrome';
1887
+ $ub = 'Chrome';
1888
+ }
1889
+ else if (preg_match('/Safari/i',$uAgent) && !preg_match('/Edge/i',$uAgent)) {
1890
+ $bname = 'Apple Safari';
1891
+ $ub = 'Safari';
1892
+ }
1893
+ else if (preg_match('/Netscape/i',$uAgent)) {
1894
+ $bname = 'Netscape';
1895
+ $ub = 'Netscape';
1896
+ }
1897
+ else if (preg_match('/Edge/i',$uAgent)) {
1898
+ $bname = 'Edge';
1899
+ $ub = 'Edge';
1900
+ }
1901
+ else if (preg_match('/Trident/i',$uAgent)) {
1902
+ $bname = 'Internet Explorer';
1903
+ $ub = 'MSIE';
1904
+ }
1905
+
1906
+ // finally get the correct version number
1907
+ $known = array('Version', $ub, 'other');
1908
+ $pattern = '#(?<browser>'.implode('|', $known).')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
1909
+ $matches = array();
1910
+ preg_match_all($pattern, $uAgent, $matches);
1911
+
1912
+ // see how many we have
1913
+ $i = count($matches['browser']);
1914
+ //we will have two since we are not using 'other' argument yet
1915
+ if ($i != 1) {
1916
+ //see if version is before or after the name
1917
+ if (strripos($uAgent,"Version") < strripos($uAgent,$ub)) {
1918
+ $version= $matches['version'][0];
1919
+ }
1920
+ else {
1921
+ $version= $matches['version'][1];
1922
+ }
1923
+ }
1924
+ else {
1925
+ $version= $matches['version'][0];
1926
+ }
1927
+
1928
+ // check if we have a number
1929
+ if ($version == null || $version == "") {$version = "?" ;}
1930
+
1931
+ $browserInfoContent .= 'Platform: '.$platform."\n";
1932
+ $browserInfoContent .= 'Browser Name: '.$bname."\n";
1933
+ $browserInfoContent .= 'Browser Version: '.$version."\n";
1934
+ $browserInfoContent .= 'User Agent: '.$uAgent."\n";
1935
+
1936
+ return $browserInfoContent;
1937
+ }
1938
+
1939
+ // checking user roles capability to do actions
1940
+ public static function userCanAccessTo()
1941
+ {
1942
+ // if this is not admin side screen we don't need to check roles and capabilities
1943
+ if (!is_admin()) {
1944
+ return true;
1945
+ }
1946
+
1947
+ $allow = false;
1948
+
1949
+ $savedUserRolesInPopup = self::getPopupPostAllowedUserRoles();
1950
+ $currentUserRole = self::getCurrentUserRole();
1951
+
1952
+ // we need to check if there are any intersections between saved user roles and current user
1953
+ $hasIntersection = array_intersect($currentUserRole, $savedUserRolesInPopup);
1954
+ if (!empty($hasIntersection)) {
1955
+ $allow = true;
1956
+ }
1957
+
1958
+ return $allow;
1959
+ }
1960
+
1961
+ public static function filterUserCapabilitiesForTheUserRoles($hook = 'save')
1962
+ {
1963
+ global $wp_roles;
1964
+
1965
+ $allAvailableWpRoles = $wp_roles->roles;
1966
+ $savedUserRoles = get_option('sgpb-user-roles');
1967
+ // we need to remove from all roles, either when deactivating the plugin and when there is no saved roles
1968
+ if (empty($savedUserRoles) || $hook == 'deactivate') {
1969
+ $savedUserRoles = array();
1970
+ }
1971
+ $rolesToBeRestricted = array();
1972
+ // selected user roles, which have access to the PB
1973
+ foreach ($allAvailableWpRoles as $allAvailableWpRole) {
1974
+ if (isset($allAvailableWpRole['name']) && in_array(lcfirst($allAvailableWpRole['name']), $savedUserRoles)) {
1975
+ $indexToUnset = lcfirst($allAvailableWpRole['name']);
1976
+ continue;
1977
+ }
1978
+ $rolesToBeRestricted[] = lcfirst($allAvailableWpRole['name']);
1979
+ }
1980
+
1981
+ $caps = array(
1982
+ 'read_private_sgpb_popups',
1983
+ 'edit_sgpb_popup',
1984
+ 'edit_sgpb_popups',
1985
+ 'edit_others_sgpb_popups',
1986
+ 'edit_published_sgpb_popups',
1987
+ 'publish_sgpb_popups',
1988
+ 'delete_sgpb_popups',
1989
+ 'delete_published_posts',
1990
+ 'delete_others_sgpb_popups',
1991
+ 'delete_private_sgpb_popups',
1992
+ 'delete_private_sgpb_popup',
1993
+ 'delete_published_sgpb_popups',
1994
+ 'sgpb_manage_options',
1995
+ 'manage_popup_terms',
1996
+ 'manage_popup_categories_terms'
1997
+ );
1998
+
1999
+ if ($hook == 'activate') {
2000
+ $rolesToBeRestricted = $savedUserRoles;
2001
+ }
2002
+ foreach ($rolesToBeRestricted as $roleToBeRestricted) {
2003
+ if ($roleToBeRestricted == 'administrator' || $roleToBeRestricted == 'admin') {
2004
+ continue;
2005
+ }
2006
+ foreach ($caps as $cap) {
2007
+ // only for the activation hook we need to add our capabilities back
2008
+ if ($hook == 'activate') {
2009
+ $wp_roles->add_cap($roleToBeRestricted, $cap);
2010
+ }
2011
+ else {
2012
+ $wp_roles->remove_cap($roleToBeRestricted, $cap);
2013
+ }
2014
+ }
2015
+ }
2016
+ }
2017
+
2018
+ public static function removeUnnecessaryCodeFromPopups()
2019
+ {
2020
+ $alreadyClearded = self::getOption('sgpb-unnecessary-scripts-removed-1');
2021
+ if ($alreadyClearded) {
2022
+ return true;
2023
+ }
2024
+
2025
+ global $wpdb;
2026
+ $getAllDataSql = $wpdb->prepare('SELECT id FROM '.$wpdb->prefix.'posts WHERE post_type = %s', SG_POPUP_POST_TYPE);
2027
+ $popupsId = $wpdb->get_results($getAllDataSql, ARRAY_A);
2028
+ if (empty($popupsId)) {
2029
+ return true;
2030
+ }
2031
+ foreach ($popupsId as $popupId) {
2032
+ if (empty($popupId['id'])) {
2033
+ continue;
2034
+ }
2035
+ $id = $popupId['id'];
2036
+ $customScripts = get_post_meta($id, 'sg_popup_scripts', true);
2037
+ if (empty($customScripts)) {
2038
+ continue;
2039
+ }
2040
+ if (isset($customScripts['js'])) {
2041
+ unset($customScripts['js']);
2042
+ update_post_meta($id, 'sg_popup_scripts', $customScripts);
2043
+ }
2044
+ }
2045
+
2046
+ self::updateOption('sgpb-unnecessary-scripts-removed-1', 1);
2047
+ }
2048
+
2049
+ public static function sendTestNewsletter($newsletterData = array())
2050
+ {
2051
+ $mailSubject = $newsletterData['newsletterSubject'];
2052
+ $fromEmail = $newsletterData['fromEmail'];
2053
+ $emailMessage = $newsletterData['messageBody'];
2054
+ $blogInfo = get_bloginfo();
2055
+ $headers = array(
2056
+ 'From: "'.$blogInfo.'" <'.$fromEmail.'>' ,
2057
+ 'MIME-Version: 1.0' ,
2058
+ 'Content-type: text/html; charset=UTF-8'
2059
+ );
2060
+
2061
+ $emails = get_option('admin_email');
2062
+ if (!empty($newsletterData['testSendingEmails'])) {
2063
+ $emails = $newsletterData['testSendingEmails'];
2064
+ $emails = str_replace(' ', '', $emails);
2065
+
2066
+ $receiverEmailsArray = array();
2067
+ $emails = explode(',', $emails);
2068
+ foreach ($emails as $mail) {
2069
+ if (is_email($mail)) {
2070
+ $receiverEmailsArray[] = $mail;
2071
+ }
2072
+ }
2073
+ $emails = $receiverEmailsArray;
2074
+ }
2075
+
2076
+ $mailStatus = wp_mail($emails, $mailSubject, $emailMessage, $headers);
2077
+
2078
+ wp_die($newsletterData['testSendingStatus']);
2079
+ }
2080
+
2081
+ // wp uploaded images
2082
+ public static function getImageAltTextByUrl($imageUrl = '')
2083
+ {
2084
+ $imageId = attachment_url_to_postid($imageUrl);
2085
+ $altText = get_post_meta($imageId, '_wp_attachment_image_alt', true);
2086
+
2087
+ return $altText;
2088
+ }
2089
+
2090
+ public static function hasBlocks($content)
2091
+ {
2092
+ if (function_exists('has_blocks')) {
2093
+ return has_blocks($content);
2094
+ }
2095
+
2096
+ return false !== strpos( (string) $content, '<!-- wp:' );
2097
+ }
2098
+ /**
2099
+ * Retrieve duplicate post link for post.
2100
+ *
2101
+ * @param int $id Optional. Post ID.
2102
+ * @param string $context Optional, default to display. How to write the '&', defaults to '&amp;'.
2103
+ * @return string
2104
+ */
2105
+ public static function popupGetClonePostLink($id = 0, $context = 'display')
2106
+ {
2107
+ if (!$post = get_post($id)) {
2108
+ return;
2109
+ }
2110
+ $actionName = "popupSaveAsNew";
2111
+
2112
+ if ('display' == $context) {
2113
+ $action = '?action='.$actionName.'&amp;post='.$post->ID;
2114
+ } else {
2115
+ $action = '?action='.$actionName.'&post='.$post->ID;
2116
+ }
2117
+
2118
+ $postTypeObject = get_post_type_object($post->post_type);
2119
+
2120
+ if (!$postTypeObject) {
2121
+ return;
2122
+ }
2123
+
2124
+ return wp_nonce_url(apply_filters('popupGetClonePostLink', admin_url("admin.php".$action), $post->ID, $context), 'duplicate-post_' . $post->ID);
2125
+ }
2126
+ }
com/helpers/ConfigDataHelper.php CHANGED
@@ -1,1227 +1,1227 @@
1
- <?php
2
- class ConfigDataHelper
3
- {
4
- public static $customPostType;
5
-
6
- public static function getPostTypeData($args = array())
7
- {
8
- $query = self::getQueryDataByArgs($args);
9
-
10
- $posts = array();
11
- foreach ($query->posts as $post) {
12
- $posts[$post->ID] = $post->post_title;
13
- }
14
-
15
- return $posts;
16
- }
17
-
18
- public static function getQueryDataByArgs($args = array())
19
- {
20
- $defaultArgs = array(
21
- 'offset' => '',
22
- 'orderby' => 'date',
23
- 'order' => 'DESC',
24
- 'post_status' => 'publish',
25
- 'suppress_filters' => true,
26
- 'post_type' => 'post',
27
- 'posts_per_page' => 1000
28
- );
29
- $args = wp_parse_args($args, $defaultArgs);
30
- $query = new WP_Query($args);
31
-
32
- return $query;
33
- }
34
-
35
- public static function getAllCustomPosts()
36
- {
37
- $args = array(
38
- 'public' => true,
39
- '_builtin' => false
40
- );
41
-
42
- $allCustomPosts = get_post_types($args);
43
-
44
- if (isset($allCustomPosts[SG_POPUP_POST_TYPE])) {
45
- unset($allCustomPosts[SG_POPUP_POST_TYPE]);
46
- }
47
-
48
- return $allCustomPosts;
49
- }
50
-
51
- public static function addFilters()
52
- {
53
- self::addPostTypeToFilters();
54
- }
55
-
56
- private static function addPostTypeToFilters()
57
- {
58
- add_filter('sgPopupTargetParams', array(__CLASS__, 'addPopupTargetParams'), 1, 1);
59
- add_filter('sgPopupTargetData', array(__CLASS__, 'addPopupTargetData'), 1, 1);
60
- add_filter('sgPopupTargetTypes', array(__CLASS__, 'addPopupTargetTypes'), 1, 1);
61
- add_filter('sgPopupTargetAttrs', array(__CLASS__, 'addPopupTargetAttrs'), 1, 1);
62
- add_filter('sgPopupPageTemplates', array(__CLASS__, 'addPopupPageTemplates'), 1, 1);
63
- }
64
-
65
- public static function addPopupTargetParams($targetParams)
66
- {
67
- $allCustomPostTypes = self::getAllCustomPosts();
68
- // for conditions, to exclude other post types, tags etc.
69
- if (isset($targetParams['select_role'])) {
70
- return $targetParams;
71
- }
72
-
73
- foreach ($allCustomPostTypes as $customPostType) {
74
- $targetParams[$customPostType] = array(
75
- $customPostType.'_all' => 'All '.ucfirst($customPostType).'s',
76
- $customPostType.'_archive' => 'Archives '.ucfirst($customPostType).'s',
77
- $customPostType.'_selected' => 'Select '.ucfirst($customPostType).'s',
78
- $customPostType.'_categories' => 'Select '.ucfirst($customPostType).' categories'
79
- );
80
- }
81
-
82
- return $targetParams;
83
- }
84
-
85
- public static function addPopupTargetData($targetData)
86
- {
87
- $allCustomPostTypes = self::getAllCustomPosts();
88
-
89
- foreach ($allCustomPostTypes as $customPostType) {
90
- $targetData[$customPostType.'_all'] = null;
91
- $targetData[$customPostType.'_selected'] = '';
92
- $targetData[$customPostType.'_categories'] = self::getCustomPostCategories($customPostType);
93
- }
94
-
95
- return $targetData;
96
- }
97
-
98
- public static function getCustomPostCategories($postTypeName)
99
- {
100
- $taxonomyObjects = get_object_taxonomies($postTypeName);
101
- if ($postTypeName == 'product') {
102
- $taxonomyObjects = array('product_cat');
103
- }
104
- $categories = self::getPostsAllCategories($postTypeName, $taxonomyObjects);
105
-
106
- return $categories;
107
- }
108
-
109
- public static function addPopupTargetTypes($targetTypes)
110
- {
111
- $allCustomPostTypes = self::getAllCustomPosts();
112
-
113
- foreach ($allCustomPostTypes as $customPostType) {
114
- $targetTypes[$customPostType.'_selected'] = 'select';
115
- $targetTypes[$customPostType.'_categories'] = 'select';
116
- }
117
-
118
- return $targetTypes;
119
- }
120
-
121
- public static function addPopupTargetAttrs($targetAttrs)
122
- {
123
- $allCustomPostTypes = self::getAllCustomPosts();
124
-
125
- foreach ($allCustomPostTypes as $customPostType) {
126
- $targetAttrs[$customPostType.'_selected']['htmlAttrs'] = array('class' => 'js-sg-select2 js-select-ajax', 'data-select-class' => 'js-select-ajax', 'data-select-type' => 'ajax', 'data-value-param' => $customPostType, 'multiple' => 'multiple');
127
- $targetAttrs[$customPostType.'_selected']['infoAttrs'] = array('label' => __('Select ', SG_POPUP_TEXT_DOMAIN).$customPostType);
128
-
129
- $targetAttrs[$customPostType.'_categories']['htmlAttrs'] = array('class' => 'js-sg-select2 js-select-ajax', 'data-select-class' => 'js-select-ajax', 'isNotPostType' => true, 'data-value-param' => $customPostType, 'multiple' => 'multiple');
130
- $targetAttrs[$customPostType.'_categories']['infoAttrs'] = array('label' => __('Select ', SG_POPUP_TEXT_DOMAIN).$customPostType.' categories');
131
- }
132
-
133
- return $targetAttrs;
134
- }
135
-
136
- public static function addPopupPageTemplates($templates)
137
- {
138
- $pageTemplates = self::getPageTemplates();
139
-
140
- $pageTemplates += $templates;
141
-
142
- return $pageTemplates;
143
- }
144
-
145
- public static function getAllCustomPostTypes()
146
- {
147
- $args = array(
148
- 'public' => true,
149
- '_builtin' => false
150
- );
151
-
152
- $allCustomPosts = get_post_types($args);
153
- if (!empty($allCustomPosts[SG_POPUP_POST_TYPE])) {
154
- unset($allCustomPosts[SG_POPUP_POST_TYPE]);
155
- }
156
-
157
- return $allCustomPosts;
158
- }
159
-
160
- public static function getPostsAllCategories($postType = 'post', $taxonomies = array())
161
- {
162
- $cats = get_transient(SGPB_TRANSIENT_POPUPS_ALL_CATEGORIES);
163
- if ($cats === false) {
164
- $cats = get_terms(
165
- array(
166
- 'taxonomy' => $taxonomies,
167
- 'hide_empty' => false,
168
- 'type' => $postType,
169
- 'orderby' => 'name',
170
- 'order' => 'ASC'
171
- )
172
- );
173
- set_transient(SGPB_TRANSIENT_POPUPS_ALL_CATEGORIES, $cats, SGPB_TRANSIENT_TIMEOUT_WEEK);
174
- }
175
-
176
- $supportedTaxonomies = array('category');
177
- if (!empty($taxonomies)) {
178
- $supportedTaxonomies = $taxonomies;
179
- }
180
-
181
- $catsParams = array();
182
- foreach ($cats as $cat) {
183
- if (isset($cat->taxonomy)) {
184
- if (!in_array($cat->taxonomy, $supportedTaxonomies)) {
185
- continue;
186
- }
187
- }
188
- $id = $cat->term_id;
189
- $name = $cat->name;
190
- $catsParams[$id] = $name;
191
- }
192
-
193
- return $catsParams;
194
- }
195
-
196
- public static function getPageTypes()
197
- {
198
- $postTypes = array();
199
-
200
- $postTypes['is_home_page'] = __('Home Page', SG_POPUP_TEXT_DOMAIN);
201
- $postTypes['is_home'] = __('Posts Page', SG_POPUP_TEXT_DOMAIN);
202
- $postTypes['is_search'] = __('Search Pages', SG_POPUP_TEXT_DOMAIN);
203
- $postTypes['is_404'] = __('404 Pages', SG_POPUP_TEXT_DOMAIN);
204
- if (function_exists('is_shop')) {
205
- $postTypes['is_shop'] = __('Shop Page', SG_POPUP_TEXT_DOMAIN);
206
- }
207
- if (function_exists('is_archive')) {
208
- $postTypes['is_archive'] = __('Archive Page', SG_POPUP_TEXT_DOMAIN);
209
- }
210
-
211
- return $postTypes;
212
- }
213
-
214
- public static function getPageTemplates()
215
- {
216
- $pageTemplates = array(
217
- 'page.php' => __('Default Template', SG_POPUP_TEXT_DOMAIN)
218
- );
219
-
220
- $templates = wp_get_theme()->get_page_templates();
221
- if (empty($templates)) {
222
- return $pageTemplates;
223
- }
224
-
225
- foreach ($templates as $key => $value) {
226
- $pageTemplates[$key] = $value;
227
- }
228
-
229
- return $pageTemplates;
230
- }
231
-
232
- public static function getAllTags()
233
- {
234
- $allTags = array();
235
- $tags = get_tags(array(
236
- 'hide_empty' => false
237
- ));
238
-
239
- foreach ($tags as $tag) {
240
- $allTags[$tag->slug] = $tag->name;
241
- }
242
-
243
- return $allTags;
244
- }
245
-
246
- public static function defaultData()
247
- {
248
- $data = array();
249
-
250
- $data['contentClickOptions'] = array(
251
- 'template' => array(
252
- 'fieldWrapperAttr' => array(
253
- 'class' => 'col-md-7 sgpb-choice-option-wrapper'
254
- ),
255
- 'labelAttr' => array(
256
- 'class' => 'formItem__title'
257
- ),
258
- 'groupWrapperAttr' => array(
259
- 'class' => 'subFormItem sgpb-choice-wrapper formItem'
260
- )
261
- ),
262
- 'buttonPosition' => 'right',
263
- 'nextNewLine' => true,
264
- 'fields' => array(
265
- array(
266
- 'attr' => array(
267
- 'type' => 'radio',
268
- 'name' => 'sgpb-content-click-behavior',
269
- 'value' => 'close'
270
- ),
271
- 'label' => array(
272
- 'name' => __('Close Popup', SG_POPUP_TEXT_DOMAIN).':'
273
- )
274
- ),
275
- array(
276
- 'attr' => array(
277
- 'type' => 'radio',
278
- 'name' => 'sgpb-content-click-behavior',
279
- 'data-attr-href' => 'content-click-redirect',
280
- 'value' => 'redirect'
281
- ),
282
- 'label' => array(
283
- 'name' => __('Redirect', SG_POPUP_TEXT_DOMAIN).':'
284
- )
285
- ),
286
- array(
287
- 'attr' => array(
288
- 'type' => 'radio',
289
- 'name' => 'sgpb-content-click-behavior',
290
- 'data-attr-href' => 'content-copy-to-clipboard',
291
- 'value' => 'copy'
292
- ),
293
- 'label' => array(
294
- 'name' => __('Copy to clipboard', SG_POPUP_TEXT_DOMAIN).':'
295
- )
296
- )
297
- )
298
- );
299
-
300
- $data['customEditorContent'] = array(
301
- 'js' => array(
302
- 'helperText' => array(
303
- 'ShouldOpen' => '<b>Opening events:</b><br><br><b>#1</b> Add the code you want to run <b>before</b> the popup opening. This will be a condition for opening the popup, that is processed and defined before the popup opening. If the return value is <b>"true"</b> then the popup will open, if the value is <b>"false"</b> the popup won\'t open.',
304
- 'WillOpen' => '<b>#2</b> Add the code you want to run <b>before</b> the popup opens. This will be the code that will work in the process of opening the popup. <b>true/false</b> conditions will not work in this phase.',
305
- 'DidOpen' => '<b>#3</b> Add the code you want to run <b>after</b> the popup opens. This code will work when the popup is already open on the page.',
306
- 'ShouldClose' => '<b>Closing events:</b><br><br><b>#1</b> Add the code that will be fired <b>before</b> the popup closes. This will be a condition for the popup closing. If the return value is <b>"true"</b> then the popup will close, if the value is <b>"false"</b> the popup won\'t close.',
307
- 'WillClose' => '<b>#2</b> Add the code you want to run <b>before</b> the popup closes. This will be the code that will work in the process of closing the popup. <b>true/false</b> conditions will not work in this phase.',
308
- 'DidClose' => '<b>#3</b> Add the code you want to run <b>after</b> the popup closes. This code will work when the popup is already closed on the page.'
309
- ),
310
- 'description' => array(
311
- '<span class="formItem__text">
312
- '.__('If you need the popup id number in the custom code, you may use the following variable to get the ID:', SG_POPUP_TEXT_DOMAIN).'
313
- <b>popupId</b>
314
- </span>'
315
- )
316
- ),
317
- 'css' => array(
318
- // we need this oldDefaultValue for the backward compatibility
319
- 'oldDefaultValue' => array(
320
- '/*popup content wrapper*/'."\n".
321
- '.sgpb-content-popupId {'."\n\n".'}'."\n\n".
322
-
323
- '/*overlay*/'."\n".
324
- '.sgpb-popup-overlay-popupId {'."\n\n".'}'."\n\n".
325
-
326
- '/*popup wrapper*/'."\n".
327
- '.sgpb-popup-builder-content-popupId {'."\n\n".'}'."\n\n"
328
- ),
329
- 'helperText' => array(
330
- '<br>/*popup content wrapper*/',
331
- '.sgpb-content-popupId',
332
- '<br>/*overlay*/',
333
- '.sgpb-popup-overlay-popupId',
334
- '<br>/*popup wrapper*/',
335
- '.sgpb-popup-builder-content-popupId'
336
- ),
337
- 'description' => array(
338
- '<span class="formItem__text">
339
- '.__('If you need the popup id number in the custom code, you may use the following variable to get the ID:', SG_POPUP_TEXT_DOMAIN).'
340
- <b>popupId</b>
341
- </span>'
342
- )
343
- )
344
- );
345
-
346
- $data['htmlCustomButtonArgs'] = array(
347
- 'template' => array(
348
- 'fieldWrapperAttr' => array(
349
- 'class' => 'col-md-6 sgpb-choice-option-wrapper'
350
- ),
351
- 'labelAttr' => array(
352
- 'class' => 'col-md-6 sgpb-choice-option-wrapper sgpb-sub-option-label'
353
- ),
354
- 'groupWrapperAttr' => array(
355
- 'class' => 'row form-group sgpb-choice-wrapper'
356
- )
357
- ),
358
- 'buttonPosition' => 'right',
359
- 'nextNewLine' => true,
360
- 'fields' => array(
361
- array(
362
- 'attr' => array(
363
- 'type' => 'radio',
364
- 'name' => 'sgpb-custom-button',
365
- 'class' => 'custom-button-copy-to-clipboard',
366
- 'data-attr-href' => 'sgpb-custom-button-copy',
367
- 'value' => 'copyToClipBoard'
368
- ),
369
- 'label' => array(
370
- 'name' => __('Copy to clipboard', SG_POPUP_TEXT_DOMAIN).':'
371
- )
372
- ),
373
- array(
374
- 'attr' => array(
375
- 'type' => 'radio',
376
- 'name' => 'sgpb-custom-button',
377
- 'class' => 'custom-button-copy-to-clipboard',
378
- 'data-attr-href' => 'sgpb-custom-button-redirect-to-URL',
379
- 'value' => 'redirectToURL'
380
- ),
381
- 'label' => array(
382
- 'name' => __('Redirect to URL', SG_POPUP_TEXT_DOMAIN).':'
383
- )
384
- ),
385
- array(
386
- 'attr' => array(
387
- 'type' => 'radio',
388
- 'name' => 'sgpb-custom-button',
389
- 'class' => 'subs-success-open-popup',
390
- 'data-attr-href' => 'sgpb-custom-button-open-popup',
391
- 'value' => 'openPopup'
392
- ),
393
- 'label' => array(
394
- 'name' => __('Open popup', SG_POPUP_TEXT_DOMAIN).':'
395
- )
396
- ),
397
- array(
398
- 'attr' => array(
399
- 'type' => 'radio',
400
- 'name' => 'sgpb-custom-button',
401
- 'class' => 'sgpb-custom-button-hide-popup',
402
- 'value' => 'hidePopup'
403
- ),
404
- 'label' => array(
405
- 'name' => __('Hide popup', SG_POPUP_TEXT_DOMAIN).':'
406
- )
407
- )
408
- )
409
- );
410
-
411
- $data['popupDimensions'] = array(
412
- 'template' => array(
413
- 'fieldWrapperAttr' => array(
414
- 'class' => 'col-md-7 sgpb-choice-option-wrapper'
415
- ),
416
- 'labelAttr' => array(
417
- 'class' => 'formItem__title'
418
- ),
419
- 'groupWrapperAttr' => array(
420
- 'class' => 'subFormItem sgpb-choice-wrapper sgpb-display-flex sgpb-align-item-center formItem'
421
- )
422
- ),
423
- 'buttonPosition' => 'right',
424
- 'nextNewLine' => true,
425
- 'fields' => array(
426
- array(
427
- 'attr' => array(
428
- 'type' => 'radio',
429
- 'name' => 'sgpb-popup-dimension-mode',
430
- 'class' => 'test class',
431
- 'data-attr-href' => 'responsive-dimension-wrapper',
432
- 'value' => 'responsiveMode'
433
- ),
434
- 'label' => array(
435
- 'name' => __('Responsive mode', SG_POPUP_TEXT_DOMAIN).':',
436
- 'info' => __('The sizes of the popup will be counted automatically, according to the content size of the popup. You can select the size in percentages, with this mode, to specify the size on the screen', SG_POPUP_TEXT_DOMAIN).'.'
437
- )
438
- ),
439
- array(
440
- 'attr' => array(
441
- 'type' => 'radio',
442
- 'name' => 'sgpb-popup-dimension-mode',
443
- 'class' => 'test class',
444
- 'data-attr-href' => 'custom-dimension-wrapper',
445
- 'value' => 'customMode'
446
- ),
447
- 'label' => array(
448
- 'name' => __('Custom mode', SG_POPUP_TEXT_DOMAIN).':',
449
- 'info' => __('Add your own custom dimensions for the popup to get the exact sizing for your popup', SG_POPUP_TEXT_DOMAIN).'.'
450
- )
451
- )
452
- )
453
- );
454
-
455
- $data['theme'] = array(
456
- array(
457
- 'value' => 'sgpb-theme-1',
458
- 'data-attributes' => array(
459
- 'class' => 'js-sgpb-popup-themes sgpb-popup-theme-1',
460
- 'data-popup-theme-number' => 1
461
- )
462
- ),
463
- array(
464
- 'value' => 'sgpb-theme-2',
465
- 'data-attributes' => array(
466
- 'class' => 'js-sgpb-popup-themes sgpb-popup-theme-2',
467
- 'data-popup-theme-number' => 2
468
- )
469
- ),
470
- array(
471
- 'value' => 'sgpb-theme-3',
472
- 'data-attributes' => array(
473
- 'class' => 'js-sgpb-popup-themes sgpb-popup-theme-3',
474
- 'data-popup-theme-number' => 3
475
- )
476
- ),
477
- array(
478
- 'value' => 'sgpb-theme-4',
479
- 'data-attributes' => array(
480
- 'class' => 'js-sgpb-popup-themes sgpb-popup-theme-4',
481
- 'data-popup-theme-number' => 4
482
- )
483
- ),
484
- array(
485
- 'value' => 'sgpb-theme-5',
486
- 'data-attributes' => array(
487
- 'class' => 'js-sgpb-popup-themes sgpb-popup-theme-5',
488
- 'data-popup-theme-number' => 5
489
- )
490
- ),
491
- array(
492
- 'value' => 'sgpb-theme-6',
493
- 'data-attributes' => array(
494
- 'class' => 'js-sgpb-popup-themes sgpb-popup-theme-6',
495
- 'data-popup-theme-number' => 6
496
- )
497
- )
498
- );
499
-
500
- $data['responsiveDimensions'] = array(
501
- 'auto' => __('Auto', SG_POPUP_TEXT_DOMAIN),
502
- '10' => '10%',
503
- '20' => '20%',
504
- '30' => '30%',
505
- '40' => '40%',
506
- '50' => '50%',
507
- '60' => '60%',
508
- '70' => '70%',
509
- '80' => '80%',
510
- '90' => '90%',
511
- '100' => '100%',
512
- 'fullScreen' => __('Full screen', SG_POPUP_TEXT_DOMAIN)
513
- );
514
-
515
- $data['freeConditionsAdvancedTargeting'] = array(
516
- 'devices' => __('Devices', SG_POPUP_TEXT_DOMAIN),
517
- 'user-status' => __('User Status', SG_POPUP_TEXT_DOMAIN),
518
- 'after-x' => __('After x pages visit', SG_POPUP_TEXT_DOMAIN),
519
- 'user-role' => __('User Role', SG_POPUP_TEXT_DOMAIN),
520
- 'detect-by-url' => __('Referral URL detection', SG_POPUP_TEXT_DOMAIN),
521
- 'cookie-detection' => __('Cookie Detection', SG_POPUP_TEXT_DOMAIN),
522
- 'operation-system' => __('Operating System', SG_POPUP_TEXT_DOMAIN),
523
- 'browser-detection' => __('Web Browser', SG_POPUP_TEXT_DOMAIN),
524
- 'query-string' => __('URL Query String', SG_POPUP_TEXT_DOMAIN)
525
- );
526
-
527
- $data['freeConditionsGeoTargeting'] = array(
528
- 'countries' => __('Countries', SG_POPUP_TEXT_DOMAIN),
529
- 'cities' => __('Cities', SG_POPUP_TEXT_DOMAIN),
530
- 'states' => __('States', SG_POPUP_TEXT_DOMAIN),
531
- 'visitor-ip' => __('Visitor IP', SG_POPUP_TEXT_DOMAIN)
532
- );
533
-
534
- $data['closeButtonPositions'] = array(
535
- 'topLeft' => __('top-left', SG_POPUP_TEXT_DOMAIN),
536
- 'topRight' => __('top-right', SG_POPUP_TEXT_DOMAIN),
537
- 'bottomLeft' => __('bottom-left', SG_POPUP_TEXT_DOMAIN),
538
- 'bottomRight' => __('bottom-right', SG_POPUP_TEXT_DOMAIN)
539
- );
540
-
541
- $data['closeButtonPositionsFirstTheme'] = array(
542
- 'bottomLeft' => __('bottom-left', SG_POPUP_TEXT_DOMAIN),
543
- 'bottomRight' => __('bottom-right', SG_POPUP_TEXT_DOMAIN)
544
- );
545
-
546
- $data['pxPercent'] = array(
547
- 'px' => 'px',
548
- '%' => '%'
549
- );
550
-
551
- $data['countdownFormat'] = array(
552
- SG_COUNTDOWN_COUNTER_SECONDS_SHOW => 'DD:HH:MM:SS',
553
- SG_COUNTDOWN_COUNTER_SECONDS_HIDE => 'DD:HH:MM'
554
- );
555
-
556
- $data['countdownTimezone'] = self::getPopupTimeZone();
557
-
558
- $data['countdownLanguage'] = array(
559
- 'English' => 'English',
560
- 'German' => 'Deutsche',
561
- 'Spanish' => 'Español',
562
- 'Arabic' => 'عربى',
563
- 'Italian' => 'Italiano',
564
- 'Dutch' => 'Dutch',
565
- 'Norwegian' => 'Norsk',
566
- 'Portuguese' => 'Português',
567
- 'Russian' => 'Русский',
568
- 'Swedish' => 'Svenska',
569
- 'Czech' => 'Čeština',
570
- 'Chinese' => '中文'
571
- );
572
-
573
- $data['weekDaysArray'] = array(
574
- 'Mon' => __('Monday', SG_POPUP_TEXT_DOMAIN),
575
- 'Tue' => __('Tuesday', SG_POPUP_TEXT_DOMAIN),
576
- 'Wed' => __('Wednesday', SG_POPUP_TEXT_DOMAIN),
577
- 'Thu' => __('Thursday', SG_POPUP_TEXT_DOMAIN),
578
- 'Fri' => __('Friday', SG_POPUP_TEXT_DOMAIN),
579
- 'Sat' => __('Saturday', SG_POPUP_TEXT_DOMAIN),
580
- 'Sun' => __('Sunday', SG_POPUP_TEXT_DOMAIN)
581
- );
582
-
583
- $data['messageResize'] = array(
584
- 'both' => __('Both', SG_POPUP_TEXT_DOMAIN),
585
- 'horizontal' => __('Horizontal', SG_POPUP_TEXT_DOMAIN),
586
- 'vertical' => __('Vertical', SG_POPUP_TEXT_DOMAIN),
587
- 'none' => __('None', SG_POPUP_TEXT_DOMAIN),
588
- 'inherit' => __('Inherit', SG_POPUP_TEXT_DOMAIN)
589
- );
590
-
591
- $data['socialShareOptions'] = array(
592
- 'template' => array(
593
- 'fieldWrapperAttr' => array(
594
- 'class' => 'col-md-7 sgpb-choice-option-wrapper'
595
- ),
596
- 'labelAttr' => array(
597
- 'class' => 'col-md-5 sgpb-choice-option-wrapper'
598
- ),
599
- 'groupWrapperAttr' => array(
600
- 'class' => 'row form-group sgpb-choice-wrapper'
601
- )
602
- ),
603
- 'buttonPosition' => 'right',
604
- 'nextNewLine' => true,
605
- 'fields' => array(
606
- array(
607
- 'attr' => array(
608
- 'type' => 'radio',
609
- 'name' => 'sgpb-social-share-url-type',
610
- 'class' => 'sgpb-share-url-type',
611
- 'data-attr-href' => '',
612
- 'value' => 'activeUrl'
613
- ),
614
- 'label' => array(
615
- 'name' => __('Use active URL', SG_POPUP_TEXT_DOMAIN).':'
616
- )
617
- ),
618
- array(
619
- 'attr' => array(
620
- 'type' => 'radio',
621
- 'name' => 'sgpb-social-share-url-type',
622
- 'class' => 'sgpb-share-url-type',
623
- 'data-attr-href' => 'sgpb-social-share-url-wrapper',
624
- 'value' => 'shareUrl'
625
- ),
626
- 'label' => array(
627
- 'name' => __('Share URL', SG_POPUP_TEXT_DOMAIN).':'
628
- )
629
- )
630
- )
631
- );
632
-
633
- $data['countdownDateFormat'] = array(
634
- 'template' => array(
635
- 'fieldWrapperAttr' => array(
636
- 'class' => 'col-md-5 sgpb-choice-option-wrapper'
637
- ),
638
- 'labelAttr' => array(
639
- 'class' => 'col-md-5 sgpb-choice-option-wrapper sgpb-sub-option-label'
640
- ),
641
- 'groupWrapperAttr' => array(
642
- 'class' => 'row form-group sgpb-choice-wrapper'
643
- )
644
- ),
645
- 'buttonPosition' => 'right',
646
- 'nextNewLine' => true,
647
- 'fields' => array(
648
- array(
649
- 'attr' => array(
650
- 'type' => 'radio',
651
- 'name' => 'sgpb-countdown-date-format',
652
- 'class' => 'sgpb-countdown-date-format-from-date',
653
- 'data-attr-href' => 'sgpb-countdown-date-format-from-date',
654
- 'value' => 'date'
655
- ),
656
- 'label' => array(
657
- 'name' => __('Due Date', SG_POPUP_TEXT_DOMAIN).':'
658
- )
659
- ),
660
- array(
661
- 'attr' => array(
662
- 'type' => 'radio',
663
- 'name' => 'sgpb-countdown-date-format',
664
- 'class' => 'sgpb-countdown-date-format-from-date',
665
- 'data-attr-href' => 'sgpb-countdown-date-format-from-input',
666
- 'value' => 'input'
667
- ),
668
- 'label' => array(
669
- 'name' => __('Timer', SG_POPUP_TEXT_DOMAIN).':'
670
-