Popup Builder – Responsive WordPress Pop up - Version 3.41

Version Description

Current Version of Popup Builder is 3.4

Download this release

Release Info

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

Code changes from version 3.4 to 3.41

com/classes/Actions.php CHANGED
@@ -559,6 +559,13 @@ class Actions
559
  $fromEmail = $newsletterOptions['fromEmail'];
560
  $emailMessage = $newsletterOptions['messageBody'];
561
 
 
 
 
 
 
 
 
562
  // When email is not valid we don't continue
563
  if (!preg_match('/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/', $fromEmail)) {
564
  wp_clear_scheduled_hook('sgpb_send_newsletter');
@@ -605,13 +612,8 @@ class Actions
605
  );
606
 
607
  foreach ($subscribers as $subscriber) {
608
- $patternFirstName = '/\[First name]/';
609
- $patternLastName = '/\[Last name]/';
610
- $patternBlogName = '/\[Blog name]/';
611
- $patternUserName = '/\[User name]/';
612
- $patternUnsubscribe = '/\[Unsubscribe]/';
613
-
614
  $replacementId = $subscriber['id'];
 
615
  $replacementFirstName = $subscriber['firstName'];
616
  $replacementLastName = $subscriber['lastName'];
617
  $replacementBlogName = $newsletterOptions['blogname'];
@@ -624,11 +626,18 @@ class Actions
624
  $replacementUnsubscribe = '<br><a href="'.$replacementUnsubscribe.'">'.__('Unsubscribe', SG_POPUP_TEXT_DOMAIN).'</a>';
625
 
626
  // Replace First name and Last name from email message
627
- $emailMessageCustom = preg_replace($patternFirstName, $replacementFirstName, $emailMessage);
628
- $emailMessageCustom = preg_replace($patternLastName, $replacementLastName, $emailMessageCustom);
629
- $emailMessageCustom = preg_replace($patternBlogName, $replacementBlogName, $emailMessageCustom);
630
- $emailMessageCustom = preg_replace($patternUserName, $replacementUserName, $emailMessageCustom);
631
- $emailMessageCustom = preg_replace($patternUnsubscribe, $replacementUnsubscribe, $emailMessageCustom);
 
 
 
 
 
 
 
632
  $emailMessageCustom = stripslashes($emailMessageCustom);
633
 
634
  $emailMessageCustom = apply_filters('sgpNewsletterSendingMessage', $emailMessageCustom);
559
  $fromEmail = $newsletterOptions['fromEmail'];
560
  $emailMessage = $newsletterOptions['messageBody'];
561
 
562
+ $allAvailableShortcodes = array();
563
+ $allAvailableShortcodes['patternFirstName'] = '/\[First name]/';
564
+ $allAvailableShortcodes['patternLastName'] = '/\[Last name]/';
565
+ $allAvailableShortcodes['patternBlogName'] = '/\[Blog name]/';
566
+ $allAvailableShortcodes['patternUserName'] = '/\[User name]/';
567
+ $allAvailableShortcodes['patternUnsubscribe'] = '/\[Unsubscribe]/';
568
+
569
  // When email is not valid we don't continue
570
  if (!preg_match('/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/', $fromEmail)) {
571
  wp_clear_scheduled_hook('sgpb_send_newsletter');
612
  );
613
 
614
  foreach ($subscribers as $subscriber) {
 
 
 
 
 
 
615
  $replacementId = $subscriber['id'];
616
+ $allAvailableShortcodes = apply_filters('sgpbNewsletterShortcodes', $allAvailableShortcodes, $subscriptionFormId, $replacementId);
617
  $replacementFirstName = $subscriber['firstName'];
618
  $replacementLastName = $subscriber['lastName'];
619
  $replacementBlogName = $newsletterOptions['blogname'];
626
  $replacementUnsubscribe = '<br><a href="'.$replacementUnsubscribe.'">'.__('Unsubscribe', SG_POPUP_TEXT_DOMAIN).'</a>';
627
 
628
  // Replace First name and Last name from email message
629
+ $emailMessageCustom = preg_replace($allAvailableShortcodes['patternFirstName'], $replacementFirstName, $emailMessage);
630
+ $emailMessageCustom = preg_replace($allAvailableShortcodes['patternLastName'], $replacementLastName, $emailMessageCustom);
631
+ $emailMessageCustom = preg_replace($allAvailableShortcodes['patternBlogName'], $replacementBlogName, $emailMessageCustom);
632
+ $emailMessageCustom = preg_replace($allAvailableShortcodes['patternUserName'], $replacementUserName, $emailMessageCustom);
633
+ $emailMessageCustom = preg_replace($allAvailableShortcodes['patternUnsubscribe'], $replacementUnsubscribe, $emailMessageCustom);
634
+ if (!empty($allAvailableShortcodes['extraShortcodesWithValues'])) {
635
+ $customFields = $allAvailableShortcodes['extraShortcodesWithValues'];
636
+ foreach ($customFields as $customFieldKey => $customFieldValue) {
637
+ $finalShortcode = '/\['.$customFieldKey.']/';
638
+ $emailMessageCustom = preg_replace($finalShortcode, $customFieldValue, $emailMessageCustom);
639
+ }
640
+ }
641
  $emailMessageCustom = stripslashes($emailMessageCustom);
642
 
643
  $emailMessageCustom = apply_filters('sgpNewsletterSendingMessage', $emailMessageCustom);
com/classes/popups/HtmlPopup.php CHANGED
@@ -42,4 +42,4 @@ class HtmlPopup extends SGPopup
42
  {
43
  return array();
44
  }
45
- }
42
  {
43
  return array();
44
  }
45
+ }
com/config/configPackage.php CHANGED
@@ -3,6 +3,6 @@ if (!defined('ABSPATH')) {
3
  exit();
4
  }
5
 
6
- define('SG_POPUP_VERSION', '3.4');
7
  define('SGPB_POPUP_PKG', SGPB_POPUP_PKG_FREE);
8
  define('POPUP_BUILDER_BASENAME', 'popupbuilder-platinum/popup-builder.php');
3
  exit();
4
  }
5
 
6
+ define('SG_POPUP_VERSION', '3.41');
7
  define('SGPB_POPUP_PKG', SGPB_POPUP_PKG_FREE);
8
  define('POPUP_BUILDER_BASENAME', 'popupbuilder-platinum/popup-builder.php');
com/helpers/AdminHelper.php CHANGED
@@ -4,6 +4,7 @@ use \DateTime;
4
  use \DateTimeZone;
5
  use \SgpbDataConfig;
6
  use \Elementor;
 
7
 
8
  class AdminHelper
9
  {
@@ -487,7 +488,7 @@ class AdminHelper
487
  if (!is_admin()) {
488
  return true;
489
  }
490
-
491
  $savedUserRoles = self::getPopupPostAllowedUserRoles();
492
  $currentUserRole = self::getCurrentUserRole();
493
  if (!is_array($savedUserRoles) || !is_array($currentUserRole)) {
@@ -1653,4 +1654,17 @@ class AdminHelper
1653
 
1654
  return array();
1655
  }
1656
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  use \DateTimeZone;
5
  use \SgpbDataConfig;
6
  use \Elementor;
7
+ use sgpbsubscriptionplus\SubscriptionPlusAdminHelper;
8
 
9
  class AdminHelper
10
  {
488
  if (!is_admin()) {
489
  return true;
490
  }
491
+
492
  $savedUserRoles = self::getPopupPostAllowedUserRoles();
493
  $currentUserRole = self::getCurrentUserRole();
494
  if (!is_array($savedUserRoles) || !is_array($currentUserRole)) {
1654
 
1655
  return array();
1656
  }
1657
+
1658
+ public static function getCustomFormFieldsByPopupId($popupId)
1659
+ {
1660
+ if (!class_exists('sgpbsubscriptionplus\SubscriptionPlusAdminHelper')) {
1661
+ return array();
1662
+ }
1663
+
1664
+ if (method_exists('sgpbsubscriptionplus\SubscriptionPlusAdminHelper', 'getCustomFormFieldsByPopupId')) {
1665
+ return SubscriptionPlusAdminHelper::getCustomFormFieldsByPopupId($popupId);
1666
+ }
1667
+
1668
+ return array();
1669
+ }
1670
+ }
com/helpers/Functions.php CHANGED
@@ -219,4 +219,30 @@ class Functions
219
 
220
  return $dir;
221
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  }
219
 
220
  return $dir;
221
  }
222
+
223
+ public static function getIpAddress()
224
+ {
225
+ $ipAddress = 'UNKNOWN';
226
+
227
+ if (getenv('HTTP_CLIENT_IP')) {
228
+ $ipAddress = getenv('HTTP_CLIENT_IP');
229
+ }
230
+ else if (getenv('HTTP_X_FORWARDED_FOR')) {
231
+ $ipAddress = getenv('HTTP_X_FORWARDED_FOR');
232
+ }
233
+ else if (getenv('HTTP_X_FORWARDED')) {
234
+ $ipAddress = getenv('HTTP_X_FORWARDED');
235
+ }
236
+ else if (getenv('HTTP_FORWARDED_FOR')) {
237
+ $ipAddress = getenv('HTTP_FORWARDED_FOR');
238
+ }
239
+ else if (getenv('HTTP_FORWARDED')) {
240
+ $ipAddress = getenv('HTTP_FORWARDED');
241
+ }
242
+ else if (getenv('REMOTE_ADDR')) {
243
+ $ipAddress = getenv('REMOTE_ADDR');
244
+ }
245
+
246
+ return $ipAddress;
247
+ }
248
  }
popup-builder.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Popup Builder
4
  * Plugin URI: https://popup-builder.com
5
  * Description: The most complete popup plugin. Html, image, iframe, shortcode, video and many other popup types. Manage popup dimensions, effects, themes and more.
6
- * Version: 3.4
7
  * Author: Sygnoos
8
  * Author URI: https://sygnoos.com
9
  * License: GPLv2
3
  * Plugin Name: Popup Builder
4
  * Plugin URI: https://popup-builder.com
5
  * Description: The most complete popup plugin. Html, image, iframe, shortcode, video and many other popup types. Manage popup dimensions, effects, themes and more.
6
+ * Version: 3.41
7
  * Author: Sygnoos
8
  * Author URI: https://sygnoos.com
9
  * License: GPLv2
public/js/Newsletter.js CHANGED
@@ -1,79 +1,79 @@
1
  function SGPBNewsletter()
2
  {
3
- this.init();
4
  }
5
 
6
  SGPBNewsletter.prototype.getTinymceContent = function()
7
  {
8
- if (jQuery('.wp-editor-wrap').hasClass('tmce-active')) {
9
- return tinyMCE.activeEditor.getContent();
10
- }
11
 
12
- return jQuery('#sgpb-newsletter-text').val();
13
  };
14
 
15
  SGPBNewsletter.prototype.init = function ()
16
  {
17
- var sendButton = jQuery('.js-send-newsletter');
18
 
19
- if (!sendButton.length) {
20
- return false;
21
- }
22
- var that = this;
23
 
24
- sendButton.bind('click', function(e) {
25
- e.preventDefault();
26
- var validationStatus = true;
27
- var fromEmail = jQuery('.sgpb-newsletter-from-email').val();
28
- var subscriptionFormId = jQuery('.js-sg-newsletter-forms option:selected').val();
29
- subscriptionFormId = parseInt(subscriptionFormId);
30
- var validateEmail = fromEmail.search(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,10})+$/);
31
 
32
- if (isNaN(subscriptionFormId)) {
33
- jQuery('.sgpb-newsletter-popup-error').removeClass('sg-hide-element');
34
- validationStatus = false;
35
- }
36
 
37
- /*When the sent email isn't valid or the user hasn't selected any subscription form.*/
38
- if (validateEmail == -1 ) {
39
- validationStatus = false;
40
- jQuery('.sgpb-newsletter-from-email-error').removeClass('sg-hide-element');
41
- return false;
42
- }
43
 
44
- if (!validationStatus) {
45
- return false;
46
- }
47
- jQuery('.sgpb-newsletter-validation').addClass('sg-hide-element');
48
 
49
- var emailsInFlow = jQuery('.sgpb-emails-in-flow').val();
50
- emailsInFlow = parseInt(emailsInFlow);
51
- var newsletterSubject = jQuery('.sgpb-newsletter-subject').val();
52
- var messageBody = that.getTinymceContent();
53
 
54
- var data = {
55
- nonce: SGPB_JS_PARAMS.nonce,
56
- action: 'sgpb_send_newsletter',
57
- newsletterData: {
58
- subscriptionFormId: subscriptionFormId,
59
- beforeSend: function() {
60
- jQuery('.sgpb-js-newsletter-spinner').removeClass('sgpb-hide');
61
- jQuery('.sgpb-newsletter-notice').addClass('sgpb-hide');
62
- },
63
- fromEmail: fromEmail,
64
- emailsInFlow: emailsInFlow,
65
- newsletterSubject: newsletterSubject,
66
- messageBody: messageBody
67
- }
68
- };
69
 
70
- jQuery.post(ajaxurl, data, function() {
71
- jQuery('.sgpb-newsletter-notice').removeClass('sgpb-hide');
72
- jQuery('.sgpb-js-newsletter-spinner').addClass('sgpb-hide');
73
- });
74
- });
75
  };
76
 
77
  jQuery(document).ready(function () {
78
  new SGPBNewsletter();
79
- });
1
  function SGPBNewsletter()
2
  {
3
+ this.init();
4
  }
5
 
6
  SGPBNewsletter.prototype.getTinymceContent = function()
7
  {
8
+ if (jQuery('.wp-editor-wrap').hasClass('tmce-active')) {
9
+ return tinyMCE.activeEditor.getContent();
10
+ }
11
 
12
+ return jQuery('#sgpb-newsletter-text').val();
13
  };
14
 
15
  SGPBNewsletter.prototype.init = function ()
16
  {
17
+ var sendButton = jQuery('.js-send-newsletter');
18
 
19
+ if (!sendButton.length) {
20
+ return false;
21
+ }
22
+ var that = this;
23
 
24
+ sendButton.bind('click', function(e) {
25
+ e.preventDefault();
26
+ var validationStatus = true;
27
+ var fromEmail = jQuery('.sgpb-newsletter-from-email').val();
28
+ var subscriptionFormId = jQuery('.js-sg-newsletter-forms option:selected').val();
29
+ subscriptionFormId = parseInt(subscriptionFormId);
30
+ var validateEmail = fromEmail.search(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,10})+$/);
31
 
32
+ if (isNaN(subscriptionFormId)) {
33
+ jQuery('.sgpb-newsletter-popup-error').removeClass('sg-hide-element');
34
+ validationStatus = false;
35
+ }
36
 
37
+ /*When the sent email isn't valid or the user hasn't selected any subscription form.*/
38
+ if (validateEmail == -1 ) {
39
+ validationStatus = false;
40
+ jQuery('.sgpb-newsletter-from-email-error').removeClass('sg-hide-element');
41
+ return false;
42
+ }
43
 
44
+ if (!validationStatus) {
45
+ return false;
46
+ }
47
+ jQuery('.sgpb-newsletter-validation').addClass('sg-hide-element');
48
 
49
+ var emailsInFlow = jQuery('.sgpb-emails-in-flow').val();
50
+ emailsInFlow = parseInt(emailsInFlow);
51
+ var newsletterSubject = jQuery('.sgpb-newsletter-subject').val();
52
+ var messageBody = that.getTinymceContent();
53
 
54
+ var data = {
55
+ nonce: SGPB_JS_PARAMS.nonce,
56
+ action: 'sgpb_send_newsletter',
57
+ newsletterData: {
58
+ subscriptionFormId: subscriptionFormId,
59
+ beforeSend: function() {
60
+ jQuery('.sgpb-js-newsletter-spinner').removeClass('sgpb-hide');
61
+ jQuery('.sgpb-newsletter-notice').addClass('sgpb-hide');
62
+ },
63
+ fromEmail: fromEmail,
64
+ emailsInFlow: emailsInFlow,
65
+ newsletterSubject: newsletterSubject,
66
+ messageBody: messageBody
67
+ }
68
+ };
69
 
70
+ jQuery.post(ajaxurl, data, function() {
71
+ jQuery('.sgpb-newsletter-notice').removeClass('sgpb-hide');
72
+ jQuery('.sgpb-js-newsletter-spinner').addClass('sgpb-hide');
73
+ });
74
+ });
75
  };
76
 
77
  jQuery(document).ready(function () {
78
  new SGPBNewsletter();
79
+ });
public/js/PopupBuilder.js CHANGED
@@ -2487,7 +2487,7 @@ SgpbEventListener.prototype.sgpbClick = function(listenerObj, eventData)
2487
  if (typeof eventData.operator != 'undefined' && eventData.operator == 'clickActionCustomClass') {
2488
  targetClick = jQuery('a[href*="#sg-popup-id-' + popupId + '"], .sg-popup-id-' + popupId + ', .sgpb-popup-id-' + popupId+', .'+eventData.value);
2489
  }
2490
- if (!targetClick.length) {
2491
  continue;
2492
  }
2493
  var delay = parseInt(popupOptions['sgpb-popup-delay']) * 1000;
@@ -2496,7 +2496,6 @@ SgpbEventListener.prototype.sgpbClick = function(listenerObj, eventData)
2496
  if (!jQuery(this).attr('data-popup-id')) {
2497
  jQuery(this).attr('data-popup-id', popupId);
2498
  }
2499
-
2500
  jQuery(this).bind('click', function(e) {
2501
  if (clickCount > 1) {
2502
  return true;
2487
  if (typeof eventData.operator != 'undefined' && eventData.operator == 'clickActionCustomClass') {
2488
  targetClick = jQuery('a[href*="#sg-popup-id-' + popupId + '"], .sg-popup-id-' + popupId + ', .sgpb-popup-id-' + popupId+', .'+eventData.value);
2489
  }
2490
+ if (!targetClick.length || !targetClick.hasClass('sg-popup-id-'+popupId )) {
2491
  continue;
2492
  }
2493
  var delay = parseInt(popupOptions['sgpb-popup-delay']) * 1000;
2496
  if (!jQuery(this).attr('data-popup-id')) {
2497
  jQuery(this).attr('data-popup-id', popupId);
2498
  }
 
2499
  jQuery(this).bind('click', function(e) {
2500
  if (clickCount > 1) {
2501
  return true;
public/views/newsletter.php CHANGED
@@ -14,6 +14,10 @@
14
  'autocomplete' => 'off'
15
  )
16
  );
 
 
 
 
17
  ?>
18
  <div class="sgpb-wrapper sgpb-newsletter">
19
  <div class="row">
@@ -120,9 +124,16 @@
120
  <span><?php _e('Newsletter Shortcodes', SG_POPUP_TEXT_DOMAIN); ?></span>
121
  </h3>
122
  <div class="sgpb-options-content">
 
 
 
 
 
 
 
123
  <div class="row form-group">
124
  <div class="col-md-6">
125
- <span><?php _e('[First name]', SG_POPUP_TEXT_DOMAIN); ?></span>
126
  </div>
127
  <div class="col-md-6">
128
  <?php _e('Subscriber First name', SG_POPUP_TEXT_DOMAIN); ?>
@@ -130,7 +141,7 @@
130
  </div>
131
  <div class="row form-group">
132
  <div class="col-md-6">
133
- <span><?php _e('[Last name]', SG_POPUP_TEXT_DOMAIN); ?></span>
134
  </div>
135
  <div class="col-md-6">
136
  <?php _e('Subscriber Last name', SG_POPUP_TEXT_DOMAIN); ?>
@@ -138,7 +149,7 @@
138
  </div>
139
  <div class="row form-group">
140
  <div class="col-md-6">
141
- <span><?php _e('[Blog name]', SG_POPUP_TEXT_DOMAIN); ?></span>
142
  </div>
143
  <div class="col-md-6">
144
  <?php _e('Your blog name', SG_POPUP_TEXT_DOMAIN); ?>
@@ -146,7 +157,7 @@
146
  </div>
147
  <div class="row form-group">
148
  <div class="col-md-6">
149
- <span><?php _e('[User name]', SG_POPUP_TEXT_DOMAIN); ?></span>
150
  </div>
151
  <div class="col-md-6">
152
  <?php _e('Your user name', SG_POPUP_TEXT_DOMAIN); ?>
@@ -154,12 +165,49 @@
154
  </div>
155
  <div class="row form-group">
156
  <div class="col-md-6">
157
- <span><?php _e('[Unsubscribe]', SG_POPUP_TEXT_DOMAIN); ?></span>
158
  </div>
159
  <div class="col-md-6">
160
  <?php _e('Unsubscribe', SG_POPUP_TEXT_DOMAIN); ?>
161
  </div>
162
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  </div>
164
  </div>
165
  </div>
14
  'autocomplete' => 'off'
15
  )
16
  );
17
+
18
+ reset($subscriptionIdTitle);
19
+ $defaultSelectedPopupId = key($subscriptionIdTitle);
20
+ $subscriptionPopupsCustomFields = AdminHelper::getCustomFormFieldsByPopupId($defaultSelectedPopupId);
21
  ?>
22
  <div class="sgpb-wrapper sgpb-newsletter">
23
  <div class="row">
124
  <span><?php _e('Newsletter Shortcodes', SG_POPUP_TEXT_DOMAIN); ?></span>
125
  </h3>
126
  <div class="sgpb-options-content">
127
+ <div class="row form-group">
128
+ <div class="col-md-12">
129
+ <label>
130
+ <?php _e('Default shortcodes', SG_POPUP_TEXT_DOMAIN); ?>:
131
+ </label>
132
+ </div>
133
+ </div>
134
  <div class="row form-group">
135
  <div class="col-md-6">
136
+ <code><?php _e('[First name]', SG_POPUP_TEXT_DOMAIN); ?></code>
137
  </div>
138
  <div class="col-md-6">
139
  <?php _e('Subscriber First name', SG_POPUP_TEXT_DOMAIN); ?>
141
  </div>
142
  <div class="row form-group">
143
  <div class="col-md-6">
144
+ <code><?php _e('[Last name]', SG_POPUP_TEXT_DOMAIN); ?></code>
145
  </div>
146
  <div class="col-md-6">
147
  <?php _e('Subscriber Last name', SG_POPUP_TEXT_DOMAIN); ?>
149
  </div>
150
  <div class="row form-group">
151
  <div class="col-md-6">
152
+ <code><?php _e('[Blog name]', SG_POPUP_TEXT_DOMAIN); ?></code>
153
  </div>
154
  <div class="col-md-6">
155
  <?php _e('Your blog name', SG_POPUP_TEXT_DOMAIN); ?>
157
  </div>
158
  <div class="row form-group">
159
  <div class="col-md-6">
160
+ <code><?php _e('[User name]', SG_POPUP_TEXT_DOMAIN); ?></code>
161
  </div>
162
  <div class="col-md-6">
163
  <?php _e('Your user name', SG_POPUP_TEXT_DOMAIN); ?>
165
  </div>
166
  <div class="row form-group">
167
  <div class="col-md-6">
168
+ <code><?php _e('[Unsubscribe]', SG_POPUP_TEXT_DOMAIN); ?></code>
169
  </div>
170
  <div class="col-md-6">
171
  <?php _e('Unsubscribe', SG_POPUP_TEXT_DOMAIN); ?>
172
  </div>
173
  </div>
174
+ <?php if (!empty($subscriptionPopupsCustomFields)) :?>
175
+ <div class="row">
176
+ <div class="col-md-6">
177
+ <label>
178
+ <?php _e('Custom fields\' shortcodes', SG_POPUP_TEXT_DOMAIN); ?>:
179
+ </label>
180
+ </div>
181
+ </div>
182
+ <div class="row form-group">
183
+ <div class="col-md-5">
184
+ </div>
185
+ <div class="col-md-6">
186
+ <img src="<?php echo SG_POPUP_IMG_URL.'ajaxSpinner.gif'; ?>" width="20px" class="sgpb-hide sgpb-js-newsletter-custom-fields-spinner">
187
+ </div>
188
+ </div>
189
+ <div class="sgpb-newsletter-custom-fields-wrapper">
190
+ <?php
191
+ foreach ($subscriptionPopupsCustomFields as $field) {
192
+ if (empty($field)) {
193
+ continue;
194
+ }
195
+ ?>
196
+
197
+ <div class="row form-group">
198
+ <div class="col-md-6">
199
+ <code>[<?php echo @$field['fieldName'];?>]</code>
200
+ </div>
201
+ <div class="col-md-6">
202
+ <?php echo @$field['fieldName']; ?>
203
+ </div>
204
+ </div>
205
+
206
+ <?php
207
+ }
208
+ ?>
209
+ </div>
210
+ <?php endif; ?>
211
  </div>
212
  </div>
213
  </div>
readme.txt CHANGED
@@ -9,7 +9,7 @@ Tags: popup, pop up, wordpress popup, popup maker, exit popup, popup builder, wo
9
  Requires at least: 3.8
10
  Tested up to: 5.2
11
  Requires PHP: 5.3.3
12
- Stable tag: 3.4
13
  License: GPLv2 or later
14
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
15
 
@@ -185,6 +185,11 @@ Go to the Popup Builder settings and set your desired options.
185
 
186
  == Changelog ==
187
 
 
 
 
 
 
188
  = Version 3.4 =
189
  * Popup Builder post type removed from Yoast sitemap and other SEO plugins.
190
  * Custom JS variable improvements.
9
  Requires at least: 3.8
10
  Tested up to: 5.2
11
  Requires PHP: 5.3.3
12
+ Stable tag: 3.41
13
  License: GPLv2 or later
14
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
15
 
185
 
186
  == Changelog ==
187
 
188
+ = Version 3.41 =
189
+ * Added new shortcodes which can be used inside the Newsletter
190
+ * PHP > 7 notices fixed
191
+ * Code optimization and typo fixes
192
+
193
  = Version 3.4 =
194
  * Popup Builder post type removed from Yoast sitemap and other SEO plugins.
195
  * Custom JS variable improvements.