Popups, Welcome Bar, Optins and Lead Generation Plugin – Icegram - Version 1.10.39

Version Description

1.10.39

  • Fix: Campaigns were not showing if display rules are set to role specific
  • Update: WordPress 5.4 compatibility test

1.10.38

  • UI enhancements

1.10.37

  • Bugfix release

1.10.36

  • Added Christmas Gallery Items

1.10.35

  • Security Fixes

1.10.34

  • Added Black Friday Cyber Monday Gallery Items

1.10.33

  • Revised Gallery Templates for Halloween

1.10.32

  • Added new featured gallery items

1.10.31

  • Revised Gallery Templates

10.30.1

  • Bug Fix release

1.10.28.2

  • Bug Fix release

1.10.28.1

  • Bug Fix release

1.10.28

  • Revised Gallery Templates

1.10.27

  • Bug Fix release

1.10.26

  • Bug Fix release

1.10.25

  • Revised Gallery Templates for Black Friday and Cyber Monday

1.10.24

  • Revised Gallery Templates for Halloween

1.10.23

  • Revised Gallery Templates

1.10.22

  • Fixed popup blocker issue while previewing campaign

1.10.21

  • Compatibility with latest Email Subscribers

1.10.20

  • Compatibility with latest GDPR

1.10.19

  • Compatibility with Rainmaker

1.10.18

  • Improved the UI/UX of the Icegram Gallery

1.10.17

  • Revised Gallery Templates

1.10.16

  • Fixed "The plugin does not have a valid header" issue

1.10.15

  • Added Christmas Gallery templates

1.10.14

  • Compatibility with WordPress 4.9

1.10.13

  • Added Black Friday and Cyber Monday Gallery templates

1.10.12

  • Compatibility with MailPoet 3

1.10.11

  • Added Halloween Gallery templates

1.10.10

  • Revised Gallery Templates

1.10.9.1

  • Bug Fix release

1.10.9

  • Revised Gallery Templates

1.10.8

  • compatibility with Contact Form 7(v4.8)

1.10.7

  • Added more templates in Gallery

1.10.6

  • Search bar, filters added to Icegram's Gallery

1.10.5

  • Improvements in Call To Actions

1.10.4

  • Directly choose Gallery Template while creating a New Campaign

1.10.3

  • Email Subscribers compatibility

1.10.2

  • Update mobile Detect library

1.10.1

  • Bug Fix release

1.10

  • Merge all addons in one

1.9.24

  • Small improvements in responsiveness of Popups and Action bars

1.9.23

  • Bug Fix release

1.9.22

  • No Google penalty for mobile popups, an automatic solution

1.9.21

  • Revamp admin UI

1.9.20.1

  • Bug Fix release

1.9.20

  • Rainmaker compatibility

1.9.19

  • Secured Icegram from XSS vulnerability

1.9.18

  • Compatibility with Icegram's CTA add-on and Rainmaker

1.9.17

  • Performance enhancements

1.9.16

  • Custom forms imported in Rainmaker

1.9.15

  • Added the Gallery of ready to use Icegram Campaigns

1.9.14

  • Added quick action for campaign preview.

1.9.13

  • revamp of popup themes - Airmail, Convert, Inspire, Persuade.

1.9.12

  • Add new custom CSS and JS code block.

1.9.11.1

  • Remove warning in the admin panel.

1.9.11

  • Compatibility with Gravity Forms.

1.9.10

  • Fix for schedule campaign option

1.9.9

  • Compatibility with Contact Form 7.

1.9.8.1

  • Added sprite image for close buttons and other fixes.

1.9.8

  • Enhanced the top Action bar position

1.9.7.1

  • Incorrect plugin name

1.9.7

  • Messengers are now responsive. Many small improvements.

1.9.6

  • Many small changes and other fixes.

1.9.5

  • Added animations for few more message types. Action bars are now responsive.

1.9.4

  • Bugfix release for forms.

1.9.3

  • Bugfix release for "Target link" not working.

1.9.2

  • Shortcode problems solved. New anti-spam mechanism for forms.

1.9.1

  • Few improvements in form functionality.

1.9

  • Form embed functionality improvements, Added forms styles.

1.8.10

  • Fixes for minified js and CSS. Changes for WP themes compatibility.

1.8.9

  • Many small changes. Plus major changes for caching compatibility.

1.8.8

  • Improved shortcode handling, WishList member compatibility, and other fixes.

1.8.7

  • Popups now support custom background and text colors. And a handful of fixes!

1.8.6

  • Fix for "white screen" errors, updated device detection, more readable call to action button colors

1.8.5

  • Bugfix release for device targeting, preview before publishing not working.

1.8.4

  • Popups are now responsive! Plus Visual Composer compatibility and other fixes.

1.8.3

  • Campaign and message duplicate feature added. Plus some other improvements.

1.8.2

  • Bugfix release for preview not working.

1.8.1

  • Recommended upgrade. Many improvements.

1.8

  • Target campaigns to any page with wildcard URL support in "Where" conditions and CTA Click based retargeting.

1.7.1

  • Dismiss admin notice provision, retargeting compatibility with caches and bug fixes.

1.7

  • Improvements in styling, form embeds and retargeting.

1.6

  • Improvements in optin form embedding, bug fixes and more. Required update.

1.5

  • Easy opt-in / subscription form parser and many other enhancements. Required update.

1.4

  • Many small improvements. Support for analytics added. WordPress 4.0 compatible.

1.3

  • 7 premium addons available now. Plus a lot of improvements. Recommended upgrade.

1.2

  • Lots of enhancements... WPML support, pluggable architecture, many internal changes. Do upgrade.

1.1.1

  • Compatibility with W3TC and Localization

1.1

  • First release on WordPress.org

1.0

  • Initial Release
Download this release

Release Info

Developer Icegram
Plugin Icon 128x128 Popups, Welcome Bar, Optins and Lead Generation Plugin – Icegram
Version 1.10.39
Comparing to
See all releases

Code changes from version 1.10.38 to 1.10.39

assets/images/bfcm-2019.png DELETED
Binary file
assets/images/bfcm-last-2019.png DELETED
Binary file
assets/images/covid-19.png ADDED
Binary file
classes/class-icegram-campaign.php CHANGED
@@ -1,9 +1,11 @@
1
  <?php
2
- if ( !defined( 'ABSPATH' ) ) exit;
 
 
3
  /**
4
- * Icegram Campaign class
5
- */
6
- if ( !class_exists( 'Icegram_Campaign' ) ) {
7
  class Icegram_Campaign {
8
 
9
  var $_post;
@@ -14,43 +16,49 @@ if ( !class_exists( 'Icegram_Campaign' ) ) {
14
 
15
  function __construct( $id = '' ) {
16
 
17
- if ( !empty( $id ) ) {
18
 
19
  $this->_post = get_post( $id );
20
- if(!is_object($this->_post)) return;
21
- $this->title = $this->_post->post_title;
 
 
22
  //icegram_campaign_meta_key
23
- $meta_key = apply_filters('icegram_campaign_meta_key' ,'messages' ,$this->_post->ID);
24
- $this->messages = get_post_meta( $this->_post->ID, $meta_key, true );
25
- $this->rules = get_post_meta( $this->_post->ID, 'icegram_campaign_target_rules', true );
26
- $this->rules_summary['where'] = array(
27
- 'homepage' => ( !empty( $this->rules['homepage'] ) ) ? $this->rules['homepage'] : '',
28
- 'other_page' => ( !empty( $this->rules['other_page'] ) && $this->rules['other_page'] == 'yes' && !empty( $this->rules['page_id'] ) ) ? $this->rules['page_id'] : '',
29
- 'blog' => ( !empty( $this->rules['blog'] ) ) ? $this->rules['blog'] : '',
30
- 'sitewide' => ( !empty( $this->rules['sitewide'] ) ) ? $this->rules['sitewide'] : '',
31
- 'local_url' => ( !empty( $this->rules['local_url'] ) ) ? $this->rules['local_url'] : ''
32
- );
33
- $this->rules_summary['when'] = array(
34
- 'when' => ( !empty( $this->rules['when'] ) ) ? $this->rules['when'] : '',
35
- 'from' => ( !empty( $this->rules['from'] ) ) ? $this->rules['from'] : '',
36
- 'to' => ( !empty( $this->rules['to'] ) ) ? $this->rules['to'] : ''
37
- );
38
  $this->rules_summary['device'] = array(
39
- 'mobile' => ( !empty( $this->rules['mobile'] ) ) ? $this->rules['mobile'] : '',
40
- 'tablet' => ( !empty( $this->rules['tablet'] ) ) ? $this->rules['tablet'] : '',
41
- 'laptop' => ( !empty( $this->rules['laptop'] ) ) ? $this->rules['laptop'] : ''
42
- );
43
- $this->rules_summary['users'] = ( !empty( $this->rules['logged_in'] ) && $this->rules['logged_in'] == 'logged_in' )
44
- ? ( ( !empty( $this->rules['users'] ) ) ? $this->rules['users'] : array( 'none' ) )
45
- : (!empty($this->rules['logged_in']) ? array($this->rules['logged_in']) : array('all'));
46
-
47
- $this->rules_summary['retargeting'] = array( 'retargeting' => ( !empty( $this->rules['retargeting'] ) ) ? $this->rules['retargeting'] : '' ,
48
- 'expiry_time' => ( !empty( $this->rules['retargeting']) ) ? $this->rules['expiry_time'] : '' );
49
- $this->rules_summary['retargeting_clicked'] = array( 'retargeting_clicked' => ( !empty( $this->rules['retargeting_clicked'] ) ) ? $this->rules['retargeting_clicked'] : '' ,
50
- 'expiry_time_clicked' => ( !empty( $this->rules['retargeting_clicked']) ) ? $this->rules['expiry_time_clicked'] : '' );
51
-
52
- }
53
-
 
 
 
 
54
  add_filter( 'icegram_campaign_validation', array( $this, '_is_valid_user_roles' ), 10, 3 );
55
  add_filter( 'icegram_campaign_validation', array( $this, '_is_valid_device' ), 10, 3 );
56
  add_filter( 'icegram_campaign_validation', array( $this, '_is_valid_time' ), 10, 3 );
@@ -59,120 +67,129 @@ if ( !class_exists( 'Icegram_Campaign' ) ) {
59
  }
60
 
61
  function get_message_meta_by_id( $message_id ) {
62
- foreach ($this->messages as $value) {
63
- if ($value['id'] == $message_id) {
64
  return $value;
65
  }
66
  }
67
  }
68
 
69
  function get_rule_value( $rule_type ) {
70
- return (isset($this->rules_summary[$rule_type])) ? $this->rules_summary[$rule_type] : '';
71
  }
72
 
73
  function is_valid( $options = array() ) {
74
- if( !empty( $this->_post->ID ) && $this->_post->post_status === 'publish') {
75
  return apply_filters( 'icegram_campaign_validation', true, $this, $options );
76
  }
 
77
  return false;
78
  }
79
 
80
  function _is_valid_user_roles( $campaign_valid, $campaign, $options ) {
81
- if( !$campaign_valid ) {
82
  return $campaign_valid;
83
  }
84
-
85
- if(in_array( 'not_logged_in', $campaign->rules_summary['users'], true ) && !is_user_logged_in() ){
86
- return true;
87
- }
88
- elseif ( in_array( 'all', $campaign->rules_summary['users'], true ) ) {
89
  return true;
90
- } elseif ( is_user_logged_in() && !in_array( 'none', $campaign->rules_summary['users'], true ) ) {
91
  $current_user = wp_get_current_user();
92
- if ( in_array( (array)$current_user->roles, $campaign->rules_summary['users'], true ) ) {
93
- return true;
 
 
 
 
 
94
  }
95
  }
 
96
  return false;
97
  }
98
-
99
  function _is_valid_device( $campaign_valid, $campaign, $options ) {
100
- if( !$campaign_valid ) {
101
  return $campaign_valid;
102
  }
103
  $current_platform = Icegram::get_platform();
104
- if ( !empty( $campaign->rules_summary['device'][ $current_platform ] ) && $campaign->rules_summary['device'][ $current_platform ] == 'yes' ) {
105
  return true;
106
  }
 
107
  return false;
108
  }
109
-
110
  function _is_valid_time( $campaign_valid, $campaign, $options ) {
111
- if( !$campaign_valid ) {
112
  return $campaign_valid;
113
  }
114
- if ( !empty( $campaign->rules_summary['when']['when'] ) && $campaign->rules_summary['when']['when'] == 'always' ) {
115
  return true;
116
  }
117
- if ( ( !empty( $campaign->rules_summary['when']['from'] ) && current_time('timestamp') > strtotime( $campaign->rules_summary['when']['from'] . " 00:00:00") ) && ( !empty( $campaign->rules_summary['when']['to'] ) && strtotime( $campaign->rules_summary['when']['to'] . " 23:59:59") > current_time('timestamp') ) ) {
118
  return true;
119
  }
120
 
121
  return false;
122
  }
123
-
124
  function _is_valid_page( $campaign_valid, $campaign, $options ) {
125
-
126
  $page_id = Icegram::get_current_page_id();
127
- if( !$campaign_valid || !empty($options['skip_page_check']) ) {
128
  return $campaign_valid;
129
  }
130
- if ( (!empty( $campaign->rules_summary['where']['sitewide'] ) && $campaign->rules_summary['where']['sitewide'] == 'yes' )) {
131
- if (!empty($campaign->rules['exclude_page_id']) && in_array($page_id, $campaign->rules['exclude_page_id'])){
132
  return false;
133
- }else{
134
  return true;
135
  }
136
  }
137
- if ( !empty( $campaign->rules_summary['where']['homepage'] ) && $campaign->rules_summary['where']['homepage'] == 'yes' && ((isset($_REQUEST['is_home']) && $_REQUEST['is_home'] === 'true') || is_home() || is_front_page() )) {
138
- return true;
139
  }
140
- if ( !empty( $page_id ) ) {
141
- if ( !empty( $campaign->rules_summary['where']['other_page'] ) && in_array( $page_id, $campaign->rules_summary['where']['other_page'] ) ) {
142
  return true;
143
  }
144
  }
145
- if ( (!empty( $campaign->rules_summary['where']['local_url'] ) && $campaign->rules_summary['where']['local_url'] == 'yes' )) {
146
-
147
- $current_page_url = Icegram::get_current_page_url();
148
  // TODO::change this check with remote mode
149
  //return if call made from remote url
150
- if(!empty($_POST['ig_remote_url'])){
151
  return;
152
  }
153
- foreach ($campaign->rules['local_urls'] as $local_url_pattern) {
154
- if(empty($local_url_pattern)){
155
- $local_url_pattern = home_url().'/';
156
  }
157
- $result = $this->is_valid_url($local_url_pattern, $current_page_url);
158
- if($result){
159
  return $result;
160
- }else{
161
  continue;
162
  }
163
  }
164
  }
 
165
  return false;
166
  }
167
 
168
- static function is_valid_url($pattern, $current_page_url){
169
- $pattern = preg_quote($pattern,'/');
170
- if(strpos($pattern, '*') !== false){
171
- $pattern = str_replace('\*', '[-a-zA-Z0-9+&@#\/%?=~_|!:,.;]*', $pattern);
172
  }
173
-
174
- $result = (bool) preg_match('/'.$pattern.'$/i', $current_page_url);
175
- return $result;
 
176
  }
177
  }
178
  }
1
  <?php
2
+ if ( ! defined( 'ABSPATH' ) ) {
3
+ exit;
4
+ }
5
  /**
6
+ * Icegram Campaign class
7
+ */
8
+ if ( ! class_exists( 'Icegram_Campaign' ) ) {
9
  class Icegram_Campaign {
10
 
11
  var $_post;
16
 
17
  function __construct( $id = '' ) {
18
 
19
+ if ( ! empty( $id ) ) {
20
 
21
  $this->_post = get_post( $id );
22
+ if ( ! is_object( $this->_post ) ) {
23
+ return;
24
+ }
25
+ $this->title = $this->_post->post_title;
26
  //icegram_campaign_meta_key
27
+ $meta_key = apply_filters( 'icegram_campaign_meta_key', 'messages', $this->_post->ID );
28
+ $this->messages = get_post_meta( $this->_post->ID, $meta_key, true );
29
+ $this->rules = get_post_meta( $this->_post->ID, 'icegram_campaign_target_rules', true );
30
+ $this->rules_summary['where'] = array(
31
+ 'homepage' => ( ! empty( $this->rules['homepage'] ) ) ? $this->rules['homepage'] : '',
32
+ 'other_page' => ( ! empty( $this->rules['other_page'] ) && $this->rules['other_page'] == 'yes' && ! empty( $this->rules['page_id'] ) ) ? $this->rules['page_id'] : '',
33
+ 'blog' => ( ! empty( $this->rules['blog'] ) ) ? $this->rules['blog'] : '',
34
+ 'sitewide' => ( ! empty( $this->rules['sitewide'] ) ) ? $this->rules['sitewide'] : '',
35
+ 'local_url' => ( ! empty( $this->rules['local_url'] ) ) ? $this->rules['local_url'] : ''
36
+ );
37
+ $this->rules_summary['when'] = array(
38
+ 'when' => ( ! empty( $this->rules['when'] ) ) ? $this->rules['when'] : '',
39
+ 'from' => ( ! empty( $this->rules['from'] ) ) ? $this->rules['from'] : '',
40
+ 'to' => ( ! empty( $this->rules['to'] ) ) ? $this->rules['to'] : ''
41
+ );
42
  $this->rules_summary['device'] = array(
43
+ 'mobile' => ( ! empty( $this->rules['mobile'] ) ) ? $this->rules['mobile'] : '',
44
+ 'tablet' => ( ! empty( $this->rules['tablet'] ) ) ? $this->rules['tablet'] : '',
45
+ 'laptop' => ( ! empty( $this->rules['laptop'] ) ) ? $this->rules['laptop'] : ''
46
+ );
47
+ $this->rules_summary['users'] = ( ! empty( $this->rules['logged_in'] ) && $this->rules['logged_in'] == 'logged_in' )
48
+ ? ( ( ! empty( $this->rules['users'] ) ) ? $this->rules['users'] : array( 'none' ) )
49
+ : ( ! empty( $this->rules['logged_in'] ) ? array( $this->rules['logged_in'] ) : array( 'all' ) );
50
+
51
+ $this->rules_summary['retargeting'] = array(
52
+ 'retargeting' => ( ! empty( $this->rules['retargeting'] ) ) ? $this->rules['retargeting'] : '',
53
+ 'expiry_time' => ( ! empty( $this->rules['retargeting'] ) ) ? $this->rules['expiry_time'] : ''
54
+ );
55
+ $this->rules_summary['retargeting_clicked'] = array(
56
+ 'retargeting_clicked' => ( ! empty( $this->rules['retargeting_clicked'] ) ) ? $this->rules['retargeting_clicked'] : '',
57
+ 'expiry_time_clicked' => ( ! empty( $this->rules['retargeting_clicked'] ) ) ? $this->rules['expiry_time_clicked'] : ''
58
+ );
59
+
60
+ }
61
+
62
  add_filter( 'icegram_campaign_validation', array( $this, '_is_valid_user_roles' ), 10, 3 );
63
  add_filter( 'icegram_campaign_validation', array( $this, '_is_valid_device' ), 10, 3 );
64
  add_filter( 'icegram_campaign_validation', array( $this, '_is_valid_time' ), 10, 3 );
67
  }
68
 
69
  function get_message_meta_by_id( $message_id ) {
70
+ foreach ( $this->messages as $value ) {
71
+ if ( $value['id'] == $message_id ) {
72
  return $value;
73
  }
74
  }
75
  }
76
 
77
  function get_rule_value( $rule_type ) {
78
+ return ( isset( $this->rules_summary[ $rule_type ] ) ) ? $this->rules_summary[ $rule_type ] : '';
79
  }
80
 
81
  function is_valid( $options = array() ) {
82
+ if ( ! empty( $this->_post->ID ) && $this->_post->post_status === 'publish' ) {
83
  return apply_filters( 'icegram_campaign_validation', true, $this, $options );
84
  }
85
+
86
  return false;
87
  }
88
 
89
  function _is_valid_user_roles( $campaign_valid, $campaign, $options ) {
90
+ if ( ! $campaign_valid ) {
91
  return $campaign_valid;
92
  }
93
+
94
+ if ( in_array( 'not_logged_in', $campaign->rules_summary['users'], true ) && ! is_user_logged_in() ) {
95
+ return true;
96
+ } elseif ( in_array( 'all', $campaign->rules_summary['users'], true ) ) {
 
97
  return true;
98
+ } elseif ( is_user_logged_in() && ! in_array( 'none', $campaign->rules_summary['users'], true ) ) {
99
  $current_user = wp_get_current_user();
100
+
101
+ $roles = (array) $current_user->roles;
102
+
103
+ foreach ( $roles as $role ) {
104
+ if ( in_array( $role, $campaign->rules_summary['users'], true ) ) {
105
+ return true;
106
+ }
107
  }
108
  }
109
+
110
  return false;
111
  }
112
+
113
  function _is_valid_device( $campaign_valid, $campaign, $options ) {
114
+ if ( ! $campaign_valid ) {
115
  return $campaign_valid;
116
  }
117
  $current_platform = Icegram::get_platform();
118
+ if ( ! empty( $campaign->rules_summary['device'][ $current_platform ] ) && $campaign->rules_summary['device'][ $current_platform ] == 'yes' ) {
119
  return true;
120
  }
121
+
122
  return false;
123
  }
124
+
125
  function _is_valid_time( $campaign_valid, $campaign, $options ) {
126
+ if ( ! $campaign_valid ) {
127
  return $campaign_valid;
128
  }
129
+ if ( ! empty( $campaign->rules_summary['when']['when'] ) && $campaign->rules_summary['when']['when'] == 'always' ) {
130
  return true;
131
  }
132
+ if ( ( ! empty( $campaign->rules_summary['when']['from'] ) && current_time( 'timestamp' ) > strtotime( $campaign->rules_summary['when']['from'] . " 00:00:00" ) ) && ( ! empty( $campaign->rules_summary['when']['to'] ) && strtotime( $campaign->rules_summary['when']['to'] . " 23:59:59" ) > current_time( 'timestamp' ) ) ) {
133
  return true;
134
  }
135
 
136
  return false;
137
  }
138
+
139
  function _is_valid_page( $campaign_valid, $campaign, $options ) {
140
+
141
  $page_id = Icegram::get_current_page_id();
142
+ if ( ! $campaign_valid || ! empty( $options['skip_page_check'] ) ) {
143
  return $campaign_valid;
144
  }
145
+ if ( ( ! empty( $campaign->rules_summary['where']['sitewide'] ) && $campaign->rules_summary['where']['sitewide'] == 'yes' ) ) {
146
+ if ( ! empty( $campaign->rules['exclude_page_id'] ) && in_array( $page_id, $campaign->rules['exclude_page_id'] ) ) {
147
  return false;
148
+ } else {
149
  return true;
150
  }
151
  }
152
+ if ( ! empty( $campaign->rules_summary['where']['homepage'] ) && $campaign->rules_summary['where']['homepage'] == 'yes' && ( ( isset( $_REQUEST['is_home'] ) && $_REQUEST['is_home'] === 'true' ) || is_home() || is_front_page() ) ) {
153
+ return true;
154
  }
155
+ if ( ! empty( $page_id ) ) {
156
+ if ( ! empty( $campaign->rules_summary['where']['other_page'] ) && in_array( $page_id, $campaign->rules_summary['where']['other_page'] ) ) {
157
  return true;
158
  }
159
  }
160
+ if ( ( ! empty( $campaign->rules_summary['where']['local_url'] ) && $campaign->rules_summary['where']['local_url'] == 'yes' ) ) {
161
+
162
+ $current_page_url = Icegram::get_current_page_url();
163
  // TODO::change this check with remote mode
164
  //return if call made from remote url
165
+ if ( ! empty( $_POST['ig_remote_url'] ) ) {
166
  return;
167
  }
168
+ foreach ( $campaign->rules['local_urls'] as $local_url_pattern ) {
169
+ if ( empty( $local_url_pattern ) ) {
170
+ $local_url_pattern = home_url() . '/';
171
  }
172
+ $result = $this->is_valid_url( $local_url_pattern, $current_page_url );
173
+ if ( $result ) {
174
  return $result;
175
+ } else {
176
  continue;
177
  }
178
  }
179
  }
180
+
181
  return false;
182
  }
183
 
184
+ static function is_valid_url( $pattern, $current_page_url ) {
185
+ $pattern = preg_quote( $pattern, '/' );
186
+ if ( strpos( $pattern, '*' ) !== false ) {
187
+ $pattern = str_replace( '\*', '[-a-zA-Z0-9+&@#\/%?=~_|!:,.;]*', $pattern );
188
  }
189
+
190
+ $result = (bool) preg_match( '/' . $pattern . '$/i', $current_page_url );
191
+
192
+ return $result;
193
  }
194
  }
195
  }
classes/feedback/class-ig-feedback.php CHANGED
@@ -4,21 +4,21 @@ if ( ! defined( 'ABSPATH' ) ) {
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
- if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
8
  /**
9
  * IG Feedback
10
  *
11
  * The IG Feedback class adds functionality to get quick interactive feedback from users.
12
  * There are different types of feedabck widget like Stars, Emoji, Thubms Up/ Down, Number etc.
13
  *
14
- * @class IG_Feedback_V_1_2_0
15
  * @since 1.0.0
16
  * @copyright Copyright (c) 2019, Icegram
17
  * @license https://opensource.org/licenses/gpl-license GNU Public License
18
  * @author Icegram
19
  * @package feedback
20
  */
21
- class IG_Feedback_V_1_2_0 {
22
 
23
  /**
24
  * Version of Feedback Library
@@ -27,7 +27,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
27
  * @var string
28
  *
29
  */
30
- public $version = '1.2.0';
31
  /**
32
  * The API URL where we will send feedback data.
33
  *
@@ -403,7 +403,8 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
403
  'delay' => 3, // In Seconds
404
  'consent_text' => 'You are agree to our terms and condition',
405
  'email' => $this->get_contact_email(),
406
- 'name' => ''
 
407
  );
408
 
409
  $params = wp_parse_args( $params, $default_params );
@@ -636,9 +637,11 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
636
  <label class="ig-label"">Feedback</label><br/>
637
  <textarea name="feedback_data[details]" id="ig-feedback-data-message"></textarea>
638
  </p>
639
- <p>
640
- <input type="checkbox" name="feedback_data[collect_system_info]" checked="checked" id="ig-feedback-data-consent"/><?php echo $params['consent_text']; ?>
641
- </p>
 
 
642
  </form>
643
  </div>
644
 
@@ -696,12 +699,11 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
696
  }
697
  }
698
 
699
- var feedbackButtonID = 'ig-feedback-button-<?php echo $this->plugin; ?>';
700
-
701
- $('#wpwrap').append('<div class="ig-es-feedback-button" id="' + feedbackButtonID + '">Feedback</div>');
702
 
703
- $('#' + feedbackButtonID).on('click', function () {
704
 
 
705
  Swal.mixin({
706
  footer: '<?php echo $this->footer; ?>',
707
  position: '<?php echo $params['position']; ?>',
@@ -744,7 +746,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
744
  return;
745
  }
746
 
747
- var system_info = false;
748
  if (consent === 'checked') {
749
  system_info = true;
750
  }
@@ -886,12 +888,12 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
886
  <form class="ig-general-feedback" id="ig-general-feedback">
887
  <p><?php echo $desc; ?></p>
888
 
889
- <p class="ig-general-feedback">
890
  <?php foreach ( $poll_options as $value => $option ) { ?>
891
  <input type="radio" name="feedback_data[poll_options]" value="<?php echo $value; ?>"><b style="color: <?php echo $option['color']; ?>"><?php echo $option['text']; ?></b><br/>
892
  <?php } ?>
893
  </p>
894
- <p class="ig-feedback-data-poll-message" id="ig-feedback-data-poll-message">
895
  <textarea name="feedback_data[details]" id="ig-feedback-data-poll-additional-message" placeholder="Additional feedback"></textarea>
896
  </p>
897
  </form>
@@ -963,7 +965,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_2_0' ) ) {
963
  onOpen: () => {
964
 
965
  },
966
-
967
  preConfirm: () => {
968
  var $overlay = $('#ig-general-feedback-<?php echo $this->plugin; ?>');
969
  var $form = $overlay.find('form');
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
+ if ( ! class_exists( 'IG_Feedback_V_1_2_2' ) ) {
8
  /**
9
  * IG Feedback
10
  *
11
  * The IG Feedback class adds functionality to get quick interactive feedback from users.
12
  * There are different types of feedabck widget like Stars, Emoji, Thubms Up/ Down, Number etc.
13
  *
14
+ * @class IG_Feedback_V_1_2_2
15
  * @since 1.0.0
16
  * @copyright Copyright (c) 2019, Icegram
17
  * @license https://opensource.org/licenses/gpl-license GNU Public License
18
  * @author Icegram
19
  * @package feedback
20
  */
21
+ class IG_Feedback_V_1_2_2 {
22
 
23
  /**
24
  * Version of Feedback Library
27
  * @var string
28
  *
29
  */
30
+ public $version = '1.2.2';
31
  /**
32
  * The API URL where we will send feedback data.
33
  *
403
  'delay' => 3, // In Seconds
404
  'consent_text' => 'You are agree to our terms and condition',
405
  'email' => $this->get_contact_email(),
406
+ 'name' => '',
407
+ 'consent' => false
408
  );
409
 
410
  $params = wp_parse_args( $params, $default_params );
637
  <label class="ig-label"">Feedback</label><br/>
638
  <textarea name="feedback_data[details]" id="ig-feedback-data-message"></textarea>
639
  </p>
640
+ <?php if ( isset( $params['consent'] ) && $params['consent'] === true ) { ?>
641
+ <p>
642
+ <input type="checkbox" name="feedback_data[collect_system_info]" checked="checked" id="ig-feedback-data-consent"/><?php echo $params['consent_text']; ?>
643
+ </p>
644
+ <?php } ?>
645
  </form>
646
  </div>
647
 
699
  }
700
  }
701
 
702
+ var feedbackButtonClass = 'ig-feedback-button-<?php echo $this->plugin; ?>';
 
 
703
 
704
+ $('#wpwrap').append('<div class="ig-es-feedback-button ' + feedbackButtonClass + '">Feedback</div>');
705
 
706
+ $('.' + feedbackButtonClass).on('click', function () {
707
  Swal.mixin({
708
  footer: '<?php echo $this->footer; ?>',
709
  position: '<?php echo $params['position']; ?>',
746
  return;
747
  }
748
 
749
+ var system_info = true;
750
  if (consent === 'checked') {
751
  system_info = true;
752
  }
888
  <form class="ig-general-feedback" id="ig-general-feedback">
889
  <p><?php echo $desc; ?></p>
890
 
891
+ <p class="ig-general-feedback mb-3">
892
  <?php foreach ( $poll_options as $value => $option ) { ?>
893
  <input type="radio" name="feedback_data[poll_options]" value="<?php echo $value; ?>"><b style="color: <?php echo $option['color']; ?>"><?php echo $option['text']; ?></b><br/>
894
  <?php } ?>
895
  </p>
896
+ <p class="ig-feedback-data-poll-message mb-3" id="ig-feedback-data-poll-message">
897
  <textarea name="feedback_data[details]" id="ig-feedback-data-poll-additional-message" placeholder="Additional feedback"></textarea>
898
  </p>
899
  </form>
965
  onOpen: () => {
966
 
967
  },
968
+
969
  preConfirm: () => {
970
  var $overlay = $('#ig-general-feedback-<?php echo $this->plugin; ?>');
971
  var $form = $overlay.find('form');
classes/feedback/class-ig-tracker.php CHANGED
@@ -4,15 +4,15 @@ if ( ! defined( 'ABSPATH' ) ) {
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
- if ( ! class_exists( 'IG_Tracker_V_1_2_0' ) ) {
8
 
9
  /**
10
- * Class IG_Tracker_V_1_2_0
11
  *
12
  * Icegram tracker handler class is responsible for sending anonymous plugin
13
  * data to Icegram servers for users that actively allowed data tracking.
14
  *
15
- * @class IG_Tracker_V_1_2_0
16
  * @since 1.0.0
17
  *
18
  * @copyright Copyright (c) 2019, Icegram
@@ -20,7 +20,7 @@ if ( ! class_exists( 'IG_Tracker_V_1_2_0' ) ) {
20
  * @author Icegram
21
  * @package feedback
22
  */
23
- class IG_Tracker_V_1_2_0 {
24
 
25
  /**
26
  * Get Active, Inactive or all plugins info
@@ -112,6 +112,60 @@ if ( ! class_exists( 'IG_Tracker_V_1_2_0' ) ) {
112
  return self::get_plugins( 'inactive', $details );
113
  }
114
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
115
  /**
116
  * Get Current Theme Info
117
  *
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
+ if ( ! class_exists( 'IG_Tracker_V_1_2_2' ) ) {
8
 
9
  /**
10
+ * Class IG_Tracker_V_1_2_2
11
  *
12
  * Icegram tracker handler class is responsible for sending anonymous plugin
13
  * data to Icegram servers for users that actively allowed data tracking.
14
  *
15
+ * @class IG_Tracker_V_1_2_2
16
  * @since 1.0.0
17
  *
18
  * @copyright Copyright (c) 2019, Icegram
20
  * @author Icegram
21
  * @package feedback
22
  */
23
+ class IG_Tracker_V_1_2_2 {
24
 
25
  /**
26
  * Get Active, Inactive or all plugins info
112
  return self::get_plugins( 'inactive', $details );
113
  }
114
 
115
+ /**
116
+ * Check whether plugin is active or not.
117
+ *
118
+ * @param string $plugin
119
+ *
120
+ * @return bool
121
+ *
122
+ * @since 1.2.2
123
+ */
124
+ public static function is_plugin_activated( $plugin = '' ) {
125
+ if ( empty( $plugin ) ) {
126
+ return false;
127
+ }
128
+
129
+ $active_plugins = self::get_active_plugins();
130
+
131
+ if ( count( $active_plugins ) == 0 ) {
132
+ return false;
133
+ }
134
+
135
+ if ( in_array( $plugin, $active_plugins ) ) {
136
+ return true;
137
+ }
138
+
139
+ return false;
140
+ }
141
+
142
+ /**
143
+ * Is plugin installed?
144
+ *
145
+ * @param string $plugin
146
+ *
147
+ * @return bool
148
+ *
149
+ * @since 1.2.2
150
+ */
151
+ public static function is_plugin_installed( $plugin = '' ) {
152
+ if ( empty( $plugin ) ) {
153
+ return false;
154
+ }
155
+
156
+ $all_plugins = self::get_plugins();
157
+
158
+ if ( count( $all_plugins ) == 0 ) {
159
+ return false;
160
+ }
161
+
162
+ if ( in_array( $plugin, $all_plugins ) ) {
163
+ return true;
164
+ }
165
+
166
+ return false;
167
+ }
168
+
169
  /**
170
  * Get Current Theme Info
171
  *
icegram.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Icegram - Popups, Optins, CTAs & lot more...
4
  * Plugin URI: https://www.icegram.com/
5
  * Description: All in one solution to inspire, convert and engage your audiences. Action bars, Popup windows, Messengers, Toast notifications and more. Awesome themes and powerful rules.
6
- * Version: 1.10.38
7
  * Author: icegram
8
  * Author URI: https://www.icegram.com/
9
  * Copyright (c) 2014-19 Icegram
@@ -35,10 +35,10 @@ class Icegram {
35
  function __construct() {
36
  global $ig_feedback, $ig_tracker;
37
 
38
- $feedback_version = '1.2.0';
39
  $ig_tracker = 'IG_Tracker_V_' . str_replace( '.', '_', $feedback_version );
40
 
41
- $this->version = "1.10.38";
42
  $this->shortcode_instances = array();
43
  $this->mode = 'local';
44
  $this->plugin_url = untrailingslashit( plugins_url( '/', __FILE__ ) );
@@ -166,33 +166,32 @@ class Icegram {
166
  }
167
  }
168
 
 
 
 
169
  public function add_admin_notices() {
170
-
171
- global $ig_feedback;
172
 
173
  $screen = get_current_screen();
174
  if ( ! in_array( $screen->id, array( 'ig_campaign', 'ig_message', 'edit-ig_message', 'edit-ig_campaign' ), true ) ) {
175
  return;
176
  }
177
 
178
- //bfcm 2019 :start
179
- $timezone_format = _x( 'Y-m-d', 'timezone date format' );
180
- $ig_current_date = strtotime( date_i18n( $timezone_format ) );
181
- $ig_offer_start = strtotime( "2019-11-22" );
182
- $ig_offer_end = strtotime( "2019-12-03" );
183
- if ( ( $ig_current_date >= $ig_offer_start ) && ( $ig_current_date <= $ig_offer_end ) ) {
184
  include_once( 'ig-offer.php' );
185
  }
186
- //bfcm 2019 :end
187
 
188
  }
189
 
190
  public function dismiss_admin_notice() {
191
  if ( isset( $_GET['ig_dismiss_admin_notice'] ) && $_GET['ig_dismiss_admin_notice'] == '1' && isset( $_GET['ig_option_name'] ) ) {
192
  $option_name = sanitize_text_field( $_GET['ig_option_name'] );
193
- update_option( $option_name . '_icegram', true );
194
- if ( $option_name === 'ig_offer_bfcm_done_2019' || $option_name === 'ig_offer_last_day_bfcm_done_2019' ) {
195
- header( "Location: https://www.icegram.com/?utm_source=in_app&utm_medium=ig_banner&utm_campaign=ig-bfcm-2019" );
 
 
 
196
  exit();
197
  } else {
198
  $referer = wp_get_referer();
@@ -757,11 +756,13 @@ class Icegram {
757
  $icegram_pre_data['post_obj']['shortcodes'] = $this->shortcode_instances;
758
  $icegram_pre_data['post_obj']['cache_compatibility'] = $this->cache_compatibility;
759
  $icegram_pre_data['post_obj']['device'] = $this->get_platform();
 
760
  wp_register_script( 'icegram_main_js', $this->plugin_url . '/assets/js/main.min.js', array( 'jquery' ), $this->version, true );
761
  if ( ! wp_script_is( 'icegram_main_js' ) ) {
762
  wp_enqueue_script( 'icegram_main_js' );
763
  wp_localize_script( 'icegram_main_js', 'icegram_pre_data', $icegram_pre_data );
764
  }
 
765
  }
766
 
767
  function display_messages() {
@@ -1220,7 +1221,8 @@ class Icegram {
1220
  // Filter handler within this file (and possibly others) will append to this SQL
1221
  // and provide arguments for wpdb->prepare if needed.
1222
  // First element in the array is SQL, remaining are values for placeholders in SQL
1223
- $sql_params = apply_filters( 'icegram_get_valid_campaigns_sql', array( $sql ), array() );
 
1224
  $campaign_ids = $wpdb->get_col( $wpdb->prepare( array_shift( $sql_params ), $sql_params ) );
1225
  }
1226
  $valid_campaigns = array();
@@ -1233,6 +1235,7 @@ class Icegram {
1233
  }
1234
 
1235
  }
 
1236
  $valid_campaigns = apply_filters( 'icegram_valid_campaigns', $valid_campaigns );
1237
 
1238
  return $valid_campaigns;
@@ -2005,9 +2008,40 @@ class Icegram {
2005
  }
2006
  }
2007
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2008
  }
2009
 
2010
  function initialize_icegram() {
 
2011
  global $icegram;
2012
  // i18n / l10n - load translations
2013
  load_plugin_textdomain( 'icegram', false, dirname( plugin_basename( __FILE__ ) ) . '/lang/' );
3
  * Plugin Name: Icegram - Popups, Optins, CTAs & lot more...
4
  * Plugin URI: https://www.icegram.com/
5
  * Description: All in one solution to inspire, convert and engage your audiences. Action bars, Popup windows, Messengers, Toast notifications and more. Awesome themes and powerful rules.
6
+ * Version: 1.10.39
7
  * Author: icegram
8
  * Author URI: https://www.icegram.com/
9
  * Copyright (c) 2014-19 Icegram
35
  function __construct() {
36
  global $ig_feedback, $ig_tracker;
37
 
38
+ $feedback_version = '1.2.2';
39
  $ig_tracker = 'IG_Tracker_V_' . str_replace( '.', '_', $feedback_version );
40
 
41
+ $this->version = "1.10.39";
42
  $this->shortcode_instances = array();
43
  $this->mode = 'local';
44
  $this->plugin_url = untrailingslashit( plugins_url( '/', __FILE__ ) );
166
  }
167
  }
168
 
169
+ /**
170
+ * Show promotion
171
+ */
172
  public function add_admin_notices() {
173
+ global $icegram;
 
174
 
175
  $screen = get_current_screen();
176
  if ( ! in_array( $screen->id, array( 'ig_campaign', 'ig_message', 'edit-ig_message', 'edit-ig_campaign' ), true ) ) {
177
  return;
178
  }
179
 
180
+ if ( ! $icegram->is_premium_installed() ) {
 
 
 
 
 
181
  include_once( 'ig-offer.php' );
182
  }
 
183
 
184
  }
185
 
186
  public function dismiss_admin_notice() {
187
  if ( isset( $_GET['ig_dismiss_admin_notice'] ) && $_GET['ig_dismiss_admin_notice'] == '1' && isset( $_GET['ig_option_name'] ) ) {
188
  $option_name = sanitize_text_field( $_GET['ig_option_name'] );
189
+ update_option( $option_name . '_icegram', 'yes', false );
190
+
191
+ // Covid-19 Offer
192
+ if ( $option_name === 'ig_offer_covid_19' ) {
193
+ $url = "https://www.icegram.com/pricing/?utm_source=in_app&utm_medium=ig_banner&utm_campaign=offer_covid_19";
194
+ header( "Location: {$url}" );
195
  exit();
196
  } else {
197
  $referer = wp_get_referer();
756
  $icegram_pre_data['post_obj']['shortcodes'] = $this->shortcode_instances;
757
  $icegram_pre_data['post_obj']['cache_compatibility'] = $this->cache_compatibility;
758
  $icegram_pre_data['post_obj']['device'] = $this->get_platform();
759
+
760
  wp_register_script( 'icegram_main_js', $this->plugin_url . '/assets/js/main.min.js', array( 'jquery' ), $this->version, true );
761
  if ( ! wp_script_is( 'icegram_main_js' ) ) {
762
  wp_enqueue_script( 'icegram_main_js' );
763
  wp_localize_script( 'icegram_main_js', 'icegram_pre_data', $icegram_pre_data );
764
  }
765
+
766
  }
767
 
768
  function display_messages() {
1221
  // Filter handler within this file (and possibly others) will append to this SQL
1222
  // and provide arguments for wpdb->prepare if needed.
1223
  // First element in the array is SQL, remaining are values for placeholders in SQL
1224
+ $sql_params = apply_filters( 'icegram_get_valid_campaigns_sql', array( $sql ), array() );
1225
+
1226
  $campaign_ids = $wpdb->get_col( $wpdb->prepare( array_shift( $sql_params ), $sql_params ) );
1227
  }
1228
  $valid_campaigns = array();
1235
  }
1236
 
1237
  }
1238
+
1239
  $valid_campaigns = apply_filters( 'icegram_valid_campaigns', $valid_campaigns );
1240
 
1241
  return $valid_campaigns;
2008
  }
2009
  }
2010
 
2011
+ /**
2012
+ * Check if premium plugin installed
2013
+ *
2014
+ * @return boolean
2015
+ *
2016
+ * @since 1.10.39
2017
+ */
2018
+ public function is_premium_installed() {
2019
+ global $ig_tracker;
2020
+
2021
+ $icegram_premium = 'icegram-engage/icegram-engage.php';
2022
+
2023
+ return $ig_tracker::is_plugin_installed( $icegram_premium );
2024
+ }
2025
+
2026
+ /**
2027
+ * Check if premium plugin active
2028
+ *
2029
+ * @return boolean
2030
+ *
2031
+ * @since 1.10.39
2032
+ */
2033
+ public function is_premium_activated() {
2034
+ global $ig_tracker;
2035
+
2036
+ $icegram_premium = 'icegram-engage/icegram-engage.php';
2037
+
2038
+ return $ig_tracker::is_plugin_activated( $icegram_premium );
2039
+ }
2040
+
2041
  }
2042
 
2043
  function initialize_icegram() {
2044
+ /* @var Icegram Object */
2045
  global $icegram;
2046
  // i18n / l10n - load translations
2047
  load_plugin_textdomain( 'icegram', false, dirname( plugin_basename( __FILE__ ) ) . '/lang/' );
ig-offer.php CHANGED
@@ -1,24 +1,20 @@
1
  <style type="text/css">
2
- .ig_offer{
3
- width: 60%;
4
- margin: 0 auto;
5
- text-align: center;
6
- padding-top: 1.2em;
7
- }
8
- .ig_offer img{
9
- /*width: 100%;*/
10
- }
11
  </style>
12
- <?php
13
- if( (get_option('ig_offer_bfcm_done_2019_icegram') !== 1) && ($ig_current_date >= strtotime("2019-11-22")) && ($ig_current_date <= strtotime("2019-11-30")) ) { ?>
14
- <div class="ig_offer">
15
- <a target="_blank" href="?ig_dismiss_admin_notice=1&ig_option_name=ig_offer_bfcm_done_2019"><img src="<?php echo $this->plugin_url ?>/assets/images/bfcm-2019.png" /></a>
16
- </div>
17
 
18
- <?php }
19
- if( (get_option('ig_offer_last_day_bfcm_done_2019_icegram') !== 1 ) && ($ig_current_date >= strtotime("2019-12-02")) && ($ig_current_date <= strtotime("2019-12-03")) ) { ?>
20
- <div class="ig_offer">
21
- <a target="_blank" href="?ig_dismiss_admin_notice=1&ig_option_name=ig_offer_last_day_bfcm_done_2019"><img src="<?php echo $this->plugin_url ?>/assets/images/bfcm-last-2019.png" /></a>
22
- </div>
23
 
24
- <?php } ?>
 
 
 
 
 
1
  <style type="text/css">
2
+ .ig_offer {
3
+ width: 60%;
4
+ margin: 0 auto;
5
+ text-align: center;
6
+ padding-top: 1.2em;
7
+ }
8
+
 
 
9
  </style>
10
+ <?php
 
 
 
 
11
 
12
+ $timezone_format = _x( 'Y-m-d', 'timezone date format' );
13
+ $ig_current_date = strtotime( date_i18n( $timezone_format ) );
 
 
 
14
 
15
+ // Covid-19 Campaign
16
+ if ( ( get_option( 'ig_offer_covid_19_icegram' ) !== 'yes' ) && ( $ig_current_date >= strtotime( "2020-04-08" ) ) && ( $ig_current_date <= strtotime( "2020-04-30" ) ) ) { ?>
17
+ <div class="ig_es_offer">
18
+ <a target="_blank" href="?ig_dismiss_admin_notice=1&ig_option_name=ig_offer_covid_19"><img src="<?php echo $this->plugin_url; ?>/assets/images/covid-19.png"/></a>
19
+ </div>
20
+ <?php } ?>
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
- === Popups, Welcome Bar, Options and Lead Generation Plugin - Icegram ===
2
  Contributors: icegram, storeapps, niravmehta, sandhyam, malayladu, putler
3
  Donate link: https://www.icegram.com/
4
  Tags: popup, optin, hellobar, lead capture, form, marketing, notification, messenger, targeting, monster, ninja ,wordpress lead generation, wordpress lightbox optin, wordpress lightbox optin form, wordpress lightbox optins, wordpress mobile optin forms, wordpress mobile popup, wordpress mobile popups, wordpress optin form, wordpress overlay popup, wordpress popup, wordpress popup form, wordpress popup plugin, wordpress popup solution, wordpress popups, popups, subscribe, wp popups, optin bars, action grabber, promotion, popup message, leads, lists, builder, action bar, floating bar, footer bar, hellobar alternative, pop over, Popup plugin, aweber, campaign monitor, constant contact, email list, exit-intent, onclick popup, analytics, Hubspot, popup ads, pop-up, Mailing list pop-up, re-targeting, Animation, Popups with Animation, Responsive Popup, split testing, AB testing
5
  Requires at least: 3.9
6
- Tested up to: 5.3.2
7
- Stable tag: 1.10.38
8
  License: GPLv3
9
 
10
  The best WP popup plugin that lets you create a popup within seconds. Customize popup, target popups to show offers, email signups, social buttons, etc and instantly increase conversions on your website.
@@ -237,6 +237,11 @@ Contact Us, provide as much detail of the problem as you can. We will try to sol
237
 
238
  == Upgrade Notice ==
239
 
 
 
 
 
 
240
  **1.10.38**
241
 
242
  * UI enhancements
1
+ === Popups, Welcome Bar, Optins and Lead Generation Plugin - Icegram ===
2
  Contributors: icegram, storeapps, niravmehta, sandhyam, malayladu, putler
3
  Donate link: https://www.icegram.com/
4
  Tags: popup, optin, hellobar, lead capture, form, marketing, notification, messenger, targeting, monster, ninja ,wordpress lead generation, wordpress lightbox optin, wordpress lightbox optin form, wordpress lightbox optins, wordpress mobile optin forms, wordpress mobile popup, wordpress mobile popups, wordpress optin form, wordpress overlay popup, wordpress popup, wordpress popup form, wordpress popup plugin, wordpress popup solution, wordpress popups, popups, subscribe, wp popups, optin bars, action grabber, promotion, popup message, leads, lists, builder, action bar, floating bar, footer bar, hellobar alternative, pop over, Popup plugin, aweber, campaign monitor, constant contact, email list, exit-intent, onclick popup, analytics, Hubspot, popup ads, pop-up, Mailing list pop-up, re-targeting, Animation, Popups with Animation, Responsive Popup, split testing, AB testing
5
  Requires at least: 3.9
6
+ Tested up to: 5.4
7
+ Stable tag: 1.10.39
8
  License: GPLv3
9
 
10
  The best WP popup plugin that lets you create a popup within seconds. Customize popup, target popups to show offers, email signups, social buttons, etc and instantly increase conversions on your website.
237
 
238
  == Upgrade Notice ==
239
 
240
+ **1.10.39**
241
+
242
+ * Fix: Campaigns were not showing if display rules are set to role specific
243
+ * Update: WordPress 5.4 compatibility test
244
+
245
  **1.10.38**
246
 
247
  * UI enhancements