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

Version Description

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.37
Comparing to
See all releases

Code changes from version 1.10.36 to 1.10.37

classes/class-icegram-message-admin.php CHANGED
@@ -1,56 +1,61 @@
1
  <?php
2
- if ( !defined( 'ABSPATH' ) ) exit;
 
 
3
  /**
4
- * Icegram Message Admin class
5
- */
6
- if ( !class_exists( 'Icegram_Message_Admin' ) ) {
7
 
8
  class Icegram_Message_Admin {
9
-
10
  var $message_themes;
11
  var $is_icegram_editor;
12
 
13
  private function __construct() {
14
-
15
  add_action( 'add_meta_boxes', array( &$this, 'add_message_meta_boxes' ) );
16
- add_action( 'wp_ajax_get_message_setting', array( &$this , 'message_form_fields' ) );
17
-
18
  add_action( 'save_post', array( &$this, 'update_message_settings' ), 10, 2 );
19
- add_filter( 'wp_insert_post_data', array( &$this, 'save_message_in_post_content' ) );
20
 
21
- add_filter( 'manage_edit-ig_message_columns', array( $this, 'edit_columns' ) );
22
  add_action( 'manage_ig_message_posts_custom_column', array( $this, 'custom_columns' ), 2 );
23
  add_filter( 'icegram_available_headlines', array( &$this, 'available_headlines' ) );
24
 
25
- //duplicate message
26
- add_filter( 'post_row_actions', array(&$this , 'add_message_action'), 10, 2 );
27
- add_action('admin_init', array(&$this ,'duplicate_message') ,10, 1);
28
 
29
  }
30
- public static function getInstance(){
31
- static $ig_message_admin = null;
32
- if (null === $ig_message_admin) {
33
- $ig_message_admin = new Icegram_Message_Admin();
34
- }
35
- return $ig_message_admin;
 
 
36
  }
37
-
38
  // Initialize message metabox
39
  function add_message_meta_boxes() {
40
  global $icegram;
41
- add_meta_box( 'message-settings', __( 'Message Settings', 'icegram' ), array ( &$this, 'message_form_fields' ), 'ig_message', 'normal', 'high' );
42
-
43
  }
44
-
45
  // Display all message settings fields
46
  function message_form_fields( $post = '', $action = array() ) {
47
  global $icegram, $pagenow;
48
- if( ( is_object( $post ) && $post->post_type != 'ig_message' ) )
49
  return;
 
50
  ?>
51
-
52
- <style type="text/css">
53
- <?php
54
  foreach ( $icegram->message_types as $message_type => $message ) {
55
  if( !empty( $message['admin_style'] ) ) {
56
  $message_type = 'ig_'.$message_type;
@@ -77,446 +82,504 @@ if ( !class_exists( 'Icegram_Message_Admin' ) ) {
77
 
78
  }
79
  ?>
80
- </style>
81
  <?php
82
- $message_id = !empty( $action['message_id'] ) ? $action['message_id'] : $post->ID;
83
- $message_data = get_post_meta( $message_id, 'icegram_message_data', true );
84
- $message_headlines = $icegram->available_headlines;
85
- $settings = $this->message_settings_to_show();
86
- $positions = $this->message_positions_to_show();
87
  if ( $pagenow == 'post-new.php' ) {
88
- $message_title_key = array_rand( $message_headlines );
89
- $default_message_title = $message_headlines[$message_title_key];
90
  } else {
91
  $default_message_title = $message_title_key = '';
92
  }
93
- $message_headline = ( isset( $message_data['headline'] ) ) ? $message_data['headline'] : $default_message_title;
94
 
95
- if( empty( $message_data ) ) {
96
- $message_type = !empty( $action['message_type'] ) ? $action['message_type'] : '';
97
  $message_data = $this->default_message_data( $message_type );
98
  }
99
 
100
- if( !empty( $action['message_type'] ) ) {
101
  $message_data['type'] = $action['message_type'];
102
  }
103
 
104
- wp_nonce_field( 'icegram_message_save_data', 'icegram_message_meta_nonce' );
105
- if( !empty( $action['message_id'] ) ) {
106
  ?>
107
- <div class="thickbox_edit_message" id="<?php echo $action['message_id']; ?>">
108
- <?php
109
- }
110
  ?>
111
- <div class="wp_attachment_details edit-form-section message-setting-fields">
112
- <input id="message_type" class="message_type" name="message_data[<?php echo $message_id; ?>][type]" type="hidden" value="<?php echo esc_attr($message_data['type']) ?>"></input>
113
- <input id="message_theme_ig_<?php echo esc_attr($message_data['type']) ?>" name="message_data[<?php echo $message_id; ?>][theme][<?php echo esc_attr($message_data['type']) ?>]" type="hidden" value="<?php echo esc_attr($message_data['theme'])?>"></input>
114
  <?php // action add for interstitial message setting
115
- do_action( 'icegram_after_message_theme_settings', $message_id, $message_data );
116
  ?>
117
-
118
- <p class="message_row <?php echo "ig_".implode( ' ig_', $settings['headline'] )?>">
119
- <label for="message_headline" class="message_label">
120
- <strong><?php _e( 'Headline', 'icegram' ); ?></strong>
121
- <span class="help_tip admin_field_icon" data-tip="<?php _e( 'Shown with highest prominence. Click on idea button on right to get a new headline.', 'icegram' ); ?>"></span>
122
- </label>
123
  <?php
124
  $message_headline = ( isset( $message_data['headline'] ) ) ? $message_data['headline'] : $default_message_title;
125
  ?>
126
- <input type="text" class="message_field" name="message_data[<?php echo $message_id; ?>][headline]" id="message_title" value="<?php echo esc_attr( $message_headline ); ?>" data-headline="<?php echo $message_title_key; ?>" />
127
- <a class="button message_headline_button tips" data-tip="<?php _e( 'Give Me Another Headline', 'icegram' ); ?>">
128
- <span class="headline-buttons-icon admin_field_icon"></span>
129
- </a>
130
- </p>
131
- <p class="message_row <?php echo "ig_".implode( ' ig_', $settings['icon'] )?>">
132
- <label for="upload_image" class="message_label">
133
- <strong><?php _e( 'Icon / Avatar Image', 'icegram' ); ?></strong>
134
- <span class="help_tip admin_field_icon" data-tip="<?php _e( 'This image will appear in message content.', 'icegram' ); ?>"></span>
135
- </label>
136
- <input id="upload_image" type="text" class="message_field" name="message_data[<?php echo $message_id; ?>][icon]" value="<?php if( isset( $message_data['icon'] ) ) echo esc_attr( $message_data['icon'] ); ?>"/>
137
- <a class="button message_image_button tips" data-tip="<?php _e( 'Upload / Select an image', 'icegram' ); ?>" onclick="tb_show('<?php _e( 'Upload / Select Image' ); ?>', 'media-upload.php?type=image&TB_iframe=true', false);" >
138
- <span class="image-buttons-icon admin_field_icon"></span>
139
- </a>
140
- </p>
141
-
 
 
142
  <?php
143
- $editor_args = array(
144
- 'textarea_name' => 'message_data[' . $message_id . '][message]',
145
- 'textarea_rows' => 10,
146
- 'editor_class' => 'wp-editor-message',
147
- 'media_buttons' => true,
148
- 'tinymce' => true
149
- );
150
  ?>
151
- <p class="message_row <?php echo "ig_".implode( ' ig_', $settings['message'] )?>">
152
- <style type="text/css">.wp-editor-tools:after {display: inline-block !important; }</style>
153
- <label for="message_body" class="message_body message_label"><strong><?php _e( 'Message Body', 'icegram' ); ?></strong></label>
154
- <?php
155
- $message = ( !empty( $message_data['message'] ) ) ? $message_data['message'] : '';
156
- //TODO :: check need of exit-redirect Type
157
- if(in_array($message_data['type'], array('toast', 'badge', 'ribbon' , 'exit-redirect'))){
158
- $message = str_replace('[ig_form]', '', $message);
159
- }
 
 
160
  ?>
161
 
162
- <?php wp_editor( $message, 'edit'.$message_id, $editor_args ); ?>
163
- </p>
164
  <?php foreach ( $icegram->message_types as $message ) {
165
- if( empty( $message['settings']['animation']['values'] ) ) continue;
 
 
166
  $animations = $message['settings']['animation']['values']
167
  ?>
168
- <p class="message_row <?php echo "ig_".$message['type']; ?>">
169
- <label for="message_animation_<?php echo $message['type'] ?>" class="message_label"><strong><?php _e( 'Animation', 'icegram' ); ?></strong></label>
170
- <select id="message_animation_<?php echo $message['type'] ?>" name="message_data[<?php echo $message_id; ?>][animation][<?php echo $message['type'] ?>]" class="icegram_chosen_page message_animation message_animation_<?php echo $message['type']; ?>">
171
- <?php asort($animations);
172
- $animations = array('no-anim' => 'No Animation') + $animations;
173
- foreach ( $animations as $value => $label ) { ?>
174
- <option value="<?php echo esc_attr( $value ) ?>" <?php echo ( !empty( $message_data['animation'] ) && esc_attr( $value ) == $message_data['animation'] ) ? 'selected' : ''; ?>><?php echo esc_html( $label ) ?></option>
175
- <?php } ?>
176
- </select>
177
- </p>
178
- <?php } ?>
179
-
180
- <!-- Embed Form options -->
181
-
182
- <?php
183
-
184
- $form_html = ( !empty( $message_data['form_html'] ) ) ? $message_data['form_html'] : '';
185
- $form_html_original = ( !empty( $message_data['form_html_original'] ) ) ? $message_data['form_html_original'] : '';
186
- $form_header = ( !empty( $message_data['form_header'] ) ) ? $message_data['form_header'] : '';
187
- $form_footer = ( !empty( $message_data['form_footer'] ) ) ? $message_data['form_footer'] : '';
188
- $form_bg_color = ( !empty( $message_data['form_bg_color'] ) ) ? $message_data['form_bg_color'] : '';
189
- $form_text_color = ( !empty( $message_data['form_text_color'] ) ) ? $message_data['form_text_color'] : '';
190
- $form_has_label = ( !empty( $message_data['form_has_label'] ) ) ? checked( $message_data['form_has_label'], 'yes', 0 ) : '';
191
- $form_layouts = $this->message_form_layouts_to_show();
192
- $default_form_layout = !empty($icegram->message_types[$message_data['type']]['settings']['form_layout']['default']) ? $icegram->message_types[$message_data['type']]['settings']['form_layout']['default'] : '';
193
- $use_form_check = ( !empty( $message_data['use_form'] ) )
194
- ? checked( $message_data['use_form'], 'yes', 0)
195
- : '';
196
- $show_form_options = empty($use_form_check) ? 'style="display:none;"' : '';
197
- ?>
198
- <p class="message_row message_form_options_check <?php echo "ig_".implode( ' ig_', $settings['embed_form'] )?>" message_id="<?php echo $message_id; ?>">
199
- <label for="message_use_form" class="message_label"><strong><?php _e( 'Form', 'icegram' ); ?></strong></label> <label >
200
- <input class="show_form_options" type="checkbox" name="message_data[<?php echo $message_id; ?>][use_form]" id="message_use_form" value="yes" <?php echo $use_form_check ?>/> <?php _e('Use Opt-in / Subscription / Lead capture form' , 'icegram' ); ?></label>
201
- </p>
202
-
203
- <div class="message_form_options" <?php echo $show_form_options; ?> message_id="<?php echo $message_id; ?>">
204
- <p class="message_row <?php echo "ig_".implode( ' ig_', $settings['embed_form'] )?>">
205
- <label for="message_form_style" class="message_label">&nbsp;</label>
206
- <select id="message_form_style" name="message_data[<?php echo $message_id; ?>][form_style]" class="icegram_chosen_page message_form_style " >
207
- <?php
208
  $available_form_styles = $this->available_form_styles();
209
  foreach ( $available_form_styles as $style ) {
210
- $bg_img = "background-image: url(" . $icegram->plugin_url.'/assets/images/' . strtolower(str_replace( ' ', '_', $style['name'])) . ".png)";
211
  ?>
212
- <option style="<?php echo $bg_img; ?>" <?php echo ( !empty( $message_data['form_style'] ) && strtolower(str_replace( ' ', '_', $style['name'])) == $message_data['form_style'] ) ? 'selected' : ''; ?> value="<?php echo esc_attr( strtolower(str_replace( ' ', '_', $style['name'])) ) ?>" class="<?php echo strtolower(str_replace( ' ', '_', $style['name'])) ?>" <?php echo ( !empty( $message_data['form_style'] ) && esc_attr( strtolower($style['name']) ) == $message_data['form_style'] ) ? 'selected' : ''; ?>><?php echo esc_html( $style['name'] ) ?></option>
 
213
  <?php } ?>
214
- </select>
215
- </p>
216
-
217
- <p class="form_layouts message_row <?php echo "ig_".implode( ' ig_', $settings['embed_form'] )?>">
218
- <label for="message_form_layouts" class="message_label">&nbsp;</label>
219
- <div class="form_radio_group" >
220
- <span class="location <?php if( !empty( $form_layouts['left'] ) ) { echo "ig_".implode( ' ig_', $form_layouts['left'] ); } ?>" >
221
- <label style="background-position:0px 23px;" for="form_layout_left_<?php echo $message_id;?>" title="<?php _e('Left', 'icegram' ); ?>">
222
- <input class="message_form_layout" type="radio" id="form_layout_left_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][form_layout]" value="left" <?php echo ( !empty($message_data['form_layout']) && "left" == $message_data['form_layout'] ) ? 'checked' : ( empty($message_data['form_layout']) && "left" == $default_form_layout ? 'checked' : '') ; ?> />
223
- <?php _e('Left', 'icegram' ); ?>
 
 
 
224
  </label>
225
  </span>
226
 
227
- <span class="location <?php if( !empty( $form_layouts['right'] ) ) { echo "ig_".implode( ' ig_', $form_layouts['right'] ); } ?>">
228
- <label style="background-position:-100px 23px;" for="form_layout_right_<?php echo $message_id;?>" title="<?php _e('Right', 'icegram' ); ?>">
229
- <input class="message_form_layout" type="radio" id="form_layout_right_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][form_layout]" value="right" <?php echo ( !empty( $message_data['form_layout'] ) && "right" == $message_data['form_layout'] ) ? 'checked' : ( empty($message_data['form_layout']) && "right" == $default_form_layout ? 'checked' : '') ; ?> />
230
- <?php _e('Right', 'icegram' ); ?>
 
 
 
231
  </label>
232
  </span>
233
 
234
- <span class="location <?php if( !empty( $form_layouts['bottom'] ) ) { echo "ig_".implode( ' ig_', $form_layouts['bottom'] ); } ?>">
235
- <label style="background-position:-200px 23px;"for="form_layout_bottom_<?php echo $message_id;?>" title="<?php _e('Bottom', 'icegram' ); ?>">
236
- <input class="message_form_layout" type="radio" id="form_layout_bottom_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][form_layout]" value="bottom" <?php echo ( !empty( $message_data['form_layout'] ) && "bottom" == $message_data['form_layout'] ) ? 'checked' : ( empty($message_data['form_layout']) && "bottom" == $default_form_layout ? 'checked' : '') ; ?> />
237
- <?php _e('Bottom', 'icegram' ); ?>
 
 
 
238
  </label>
239
  </span>
240
 
241
- <?php
242
- $inline_position_checked = ( !empty( $message_data['form_layout'] ) && "inline" == $message_data['form_layout'] ) ? 'checked' : ( empty($message_data['form_layout']) && "inline" == $default_form_layout ? 'checked' : '') ;
243
- $show_color_options = !empty( $inline_position_checked ) ? 'style="display:none;"' : '';
244
- ?>
245
- <span class="location <?php if( !empty( $form_layouts['inline'] ) ) { echo "ig_".implode( ' ig_', $form_layouts['inline'] ); } ?>">
246
- <label style="background-position:-300px 23px;" for="form_layout_inline_<?php echo $message_id;?>" title="<?php _e('Inline', 'icegram' ); ?>">
247
- <input class="message_form_layout" type="radio" id="form_layout_inline_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][form_layout]" value="inline" <?php echo $inline_position_checked;?> />
248
- <?php _e('Inline', 'icegram' ); ?>
 
 
249
  </label>
250
  </span>
251
- </div>
252
-
253
- </p>
254
  <?php
255
 
256
- $color_field_html = '<p class="message_form_color message_row ig_"'.implode( ' ig_', $settings['embed_form'] ) .'" '. $show_color_options.'>
257
  <label for="message_form_bg_color" class="message_label">&nbsp;</label>
258
- <input type="text" class="message_field color-field" data-color-label="'.__( 'Background Color', 'icegram' ).'" name="message_data['.$message_id.'][form_bg_color]" id="message_form_bg_color" value="'. $form_bg_color .'" />
259
- <input type="text" class="message_field color-field" data-color-label="'.__( 'Text Color', 'icegram' ).'" name="message_data['.$message_id.'][form_text_color]" id="message_form_text_color" value="'.$form_text_color.'" style="margin-left:5em !important" />
260
  </p>';
261
- echo $color_field_html ;
262
- $active_plugins = get_option( 'active_plugins', array() );
263
- if (is_multisite()) {
264
- $active_plugins = array_merge($active_plugins, get_site_option('active_sitewide_plugins', array()));
265
- }
266
 
267
  ?>
268
 
269
- <p class="message_row <?php echo "ig_".implode( ' ig_', $settings['embed_form'] )?>">
270
- <label class="message_label">&nbsp;</label>
271
- <textarea class="message_field message_form_header" rows="2" autocomplete="off" cols="65" name="message_data[<?php echo $message_id; ?>][form_header]" id="" value="" placeholder="<?php _e('Text / HTML to show before the form', 'icegram' ); ?>"><?php echo esc_attr( $form_header ); ?></textarea>
272
- </p>
273
- <p class="message_row <?php echo "ig_".implode( ' ig_', $settings['embed_form'] )?>">
274
- <label class="message_label">&nbsp;</label>
275
  <?php
276
- $form_embed_html = '';
277
- $force_use_rm = false;
278
- if( in_array('email-subscribers/email-subscribers.php', $active_plugins) ){
 
 
 
279
  $es_plugin_meta_data = get_plugin_data( WP_PLUGIN_DIR . '/email-subscribers/email-subscribers.php' );
280
  $es_current_version = ! empty( $es_plugin_meta_data['Version'] ) ? $es_plugin_meta_data['Version'] : '';
 
 
281
 
282
- $force_use_rm = ( version_compare( $es_current_version, '4.0', '<' )) ? true : false;
 
 
 
283
  }
284
- //Add Rainmaker form
285
- $rm_html = __("Add form embed code") .'<strong>'. __(" or easily embed using ", "icegram" ). '<a style="font-style:normal;" href="' . admin_url("plugin-install.php?tab=search&type=term&s=icegram-rainmaker") .'" target="_blank" alt="Rainmaker - Forms, Leads and CRM">Icegram\'s Rainmaker' . '</a> plugin </strong>';
286
- $rm_html = (true === $force_use_rm ) ? $rm_html : '';
 
 
 
287
  $hide_embed = '';
288
- if(in_array('icegram-rainmaker/icegram-rainmaker.php', $active_plugins) && ( !empty($message_data["rainmaker_form_code"]) || $force_use_rm )){
289
  $rainmaker_form_list = Rainmaker::get_rm_form_id_name_map();
290
- $rm_html = __("Use Rainmaker form ", "icegram" );
291
- $rm_html .= '<select class="rainmaker_form_list" style="max-width:30%" name="message_data['. $message_id .'][rainmaker_form_code]">
292
- <option value="" selected>'. __("Select form ", "icegram" ) .'</option>' ;
293
- foreach ( $rainmaker_form_list as $id => $name ){
294
- $rm_html .= '<option '. ( (!empty( $message_data["rainmaker_form_code"] ) && $id == $message_data["rainmaker_form_code"] ) ? 'selected' : '' ) .' value="' . $id .'">' . $name .'</option>';
295
- }
296
- $rm_html .= '</select><span style="font-style:italic">'. __(' or add ', 'icegram') . '<a class="embed_form_code_toggle" style="cursor: pointer;">'. __('form embed code', 'icegram' ) .'</a></span>';
297
- $hide_embed = (empty($message_data["rainmaker_form_code"]) && !empty($form_html_original)) ? '' : 'style="display:none"';
298
  $form_embed_html = $rm_html;
299
  }
300
 
301
  //Add Email Subscribers form
302
- $es_html = __("Add form embed code") .'<strong>'. __(" or easily embed using ", "icegram" ). '<a style="font-style:normal;" href="' . admin_url("plugin-install.php?tab=search&type=term&s=email-subscribers") .'" target="_blank" alt="Email Subscribers & Newsletters">Email Subscribers & Newsletters' . '</a> plugin </strong>';
303
- if( in_array('email-subscribers/email-subscribers.php', $active_plugins) && !$force_use_rm ){
304
- $forms_db = new ES_DB_Forms();
305
- $es_form_list = call_user_func(array($forms_db, 'get_forms_id_name_map'));
306
- $es_html = __("Use Email Subscribers form ", "icegram" );
307
- $es_html .= '<select class="es_form_list" style="max-width:30%" name="message_data['. $message_id .'][es_form_code]">
308
- <option value="" selected>'. __("Select form ", "icegram" ) .'</option>' ;
309
- foreach ( $es_form_list as $id => $name ){
310
- $es_html .= '<option '. ( (!empty( $message_data["es_form_code"] ) && $id == $message_data["es_form_code"] ) ? 'selected' : '' ) .' value="' . $id .'">' . $name .'</option>';
311
- }
312
- $es_html .= '</select><span style="font-style:italic">'. __(' or add ', 'icegram') . '<a class="embed_form_code_toggle" style="cursor: pointer;">'. __('form embed code', 'icegram' ) .'</a></span>';
313
- $hide_embed = (empty($message_data["es_form_code"]) && !empty($form_html_original)) ? '' : 'style="display:none"';
314
  }
315
- $form_embed_html = !empty($rm_html) ? $rm_html : $es_html ;
316
  ?>
317
- <label class="message_label">&nbsp;</label>
318
- <span class="message_label" style="padding-bottom:.3em"> <?php echo $form_embed_html; ?></span>
319
- <label class="message_label">&nbsp;</label>
320
- <textarea class="message_field message_form_html_original" <?php echo $hide_embed ?> rows="6" autocomplete="off" cols="65" name="message_data[<?php echo $message_id; ?>][form_html_original]" id="message_form_html_original_<?php echo $message_id; ?>" value="" placeholder="<?php _e('Paste HTML / shortcode of your form here...', 'icegram' ); ?>"><?php if( isset( $form_html_original ) ) echo esc_attr( $form_html_original ); ?></textarea>
321
- <br>
322
- <label class="message_label">&nbsp;</label>
323
- <label style="font-size:.9em;"><input class="message_form_has_label" type="checkbox" name="message_data[<?php echo $message_id; ?>][form_has_label]" value="yes" <?php echo $form_has_label ?> />
324
- <?php _e('Show labels above fields' , 'icegram' ); ?></label>
325
- </p>
326
-
327
- <p class="message_row <?php echo "ig_".implode( ' ig_', $settings['embed_form'] )?>">
328
- <label class="message_label">&nbsp;</label>
329
- <textarea class="message_field message_form_footer" rows="2" autocomplete="off" cols="65" name="message_data[<?php echo $message_id; ?>][form_footer]" id="" value="" placeholder="<?php _e('Text / HTML to show after the form', 'icegram' ); ?>"><?php echo esc_attr( $form_footer ); ?></textarea>
330
- </p>
331
- <div class="form_inline_shortcode campaign_shortcode light message_row <?php echo "ig_".implode( ' ig_', $settings['embed_form'] )?>" style="font-size:.9em;display:inline;">
332
- <?php echo __( 'Insert <code>[ig_form]</code> where you want to show this form in message body.', 'icegram' ); ?>
333
- </div>
334
- </div>
335
-
336
- <!-- Embed Form options : End -->
 
 
 
337
 
338
  <?php
339
 
340
- $show_cta_actions = array_merge($settings['label'], $settings['link']);
341
- $show_only_link = array_diff($settings['link'], $settings['label']);
342
-
343
  ?>
344
- <p class="message_row <?php echo "ig_".implode( ' ig_', $show_cta_actions )?>">
345
- <label for="message_label" class="message_label">
346
- <strong>
347
- <span class="message_row <?php echo "ig_".implode( ' ig_', $settings['label'] )?>"> <?php _e( 'Call To Action', 'icegram' ); ?> </span>
348
- <span class="message_row <?php echo "ig_".implode( ' ig_', $show_only_link )?>"> <?php _e( 'Call To Action', 'icegram' ); ?> </span>
349
- </strong>
350
- </label>
351
- <span class="message_row option_title <?php echo "ig_".implode( ' ig_', $settings['label'] )?>"><?php _e("Main Call To Action Button", "icegram"); ?></span>
352
- </p>
353
-
354
- <p class="message_row <?php echo "ig_".implode( ' ig_', $settings['label'] )?>">
355
- <label for="message_label" class="message_label"> &nbsp;
356
- <span class="help_tip admin_field_icon" data-tip="<?php _e( 'Your call to action text. Something unusual will increase conversions.', 'icegram' ); ?>"></span>
357
- </label><span class="message_row <?php echo "ig_".implode( ' ig_', $settings['label'] )?>"><span class="message_label sub_option_label"><?php _e("Label", "icegram"); ?></span>
358
- <input type="text" class="message_field" name="message_data[<?php echo $message_id; ?>][label]" id="message_label" value="<?php if( isset( $message_data['label'] ) ) echo esc_attr( $message_data['label'] ); ?>" /> </span>
359
- </p>
 
 
360
 
361
  <?php
362
- do_action( 'icegram_after_button_label', $message_id, $message_data );
363
- ?>
364
  <?php
365
 
366
- $target_link_field = '<p class="message_row ig_'.implode( ' ig_', $settings['link'] ).'">
367
- <span class="message_row ig_'.implode( ' ig_', $settings['label'] ) .'">
368
  <label for="message_link" class="message_label">&nbsp;
369
- <span class="help_tip admin_field_icon" data-tip="'.__('Enter destination URL here. Clicking will redirect to this link.' ,'icegram').'"></span>
370
  </label>
371
  </span>
372
- <span class="message_row ig_'.implode( ' ig_', $show_only_link ) .'">
373
- <span style="float:left" class="help_tip admin_field_icon" data-tip="'.__('Enter destination URL here. Clicking will redirect to this link.' ,'icegram').'"></span>
374
  </span>
375
- <span class="message_label sub_option_label">' . __("Target Link", "icegram") . '</span>
376
- <input type="text" class="message_field message_link" name="message_data['.$message_id.'][link]"
377
- id="message_link" value="'.esc_attr( ( isset($message_data['link']) ? $message_data['link'] : '') ) .'" />
378
- </p>';
379
 
380
- $target_link_field .= '<p class="message_row ig_'.implode( ' ig_', $settings["link"] ) .'">
381
  <label for="message" class="message_label">&nbsp;</label>
382
- <label style="color:#BBB;">&nbsp;<input type="checkbox" disabled checked="checked"/>'. __("Open in new tab ","icegram") .'</label>
383
  <span>
384
- <a href="https://www.icegram.com/documentation/how-to-open-cta-link-in-a-new-tab-using-icegram/?utm_source=ig_field&utm_medium=ig_inapp_promo&utm_campaign=ig_inapp_promo" target="_blank">'.__("How to do this?", "icegram") .'</a>
385
  </span>
386
  </p>';
387
- $icegram_message_target_link = apply_filters('icegram_message_field_link' , array( 'html' => $target_link_field ,'message_id' => $message_id ,'message_data' => $message_data, 'settings' => $settings) );
388
  echo $icegram_message_target_link['html'];
389
  ?>
390
- <p class="message_row <?php echo "ig_".implode( ' ig_', $show_cta_actions )?>">
391
- <label for="message_label" class="message_label"> &nbsp;</label>
392
- <span class="ig_admin_hr">&nbsp;</span>
393
- </p>
394
-
395
- <?php
396
- $text_color = ( !empty( $message_data['text_color'] ) ) ? $message_data['text_color'] : '';
397
- $bg_color = ( !empty( $message_data['bg_color'] ) ) ? $message_data['bg_color'] : '';
398
- $cta_bg_color = ( !empty( $message_data['cta_bg_color'] ) ) ? $message_data['cta_bg_color'] : '';
399
- $cta_text_color = ( !empty( $message_data['cta_text_color'] ) ) ? $message_data['cta_text_color'] : '';
400
- $colors_options_check = ( !empty( $message_data['use_theme_defaults'] ) )
401
- ? checked( $message_data['use_theme_defaults'], 'yes', 0)
402
- : ( (!empty($bg_color) || !empty($text_color) || !empty($cta_bg_color) || !empty($cta_text_color)) ? '' : 'checked="checked"' );
403
-
404
- $show_color_options = (!empty($colors_options_check)) ? 'style="display: none;"' : '';
405
- $color_field_html = '<p class="message_row ig_'.implode( ' ig_', $settings['bg_color']).'">
406
  <label for="message_bg_color" class="message_label">&nbsp;</label>
407
- <span class="message_label sub_option_label" > '.__( 'Body', 'icegram' ).'</span>
408
- <input type="text" class="message_field color-field" data-color-label="'.__( 'Background', 'icegram' ).'" name="message_data['.$message_id.'][bg_color]" id="message_bg_color" value="'.$bg_color.'" />
409
- <input type="text" class="message_field color-field" data-color-label="'.__( 'Text', 'icegram' ).'" name="message_data['.$message_id.'][text_color]" id="message_text_color" value="'.$text_color.'" />
410
  </p>
411
- <p class="message_row ig_'.implode( ' ig_', $settings['label'] ).'">
412
  <label for="message_cta_bg_color" class="message_label">&nbsp;</label>
413
- <span class="message_label sub_option_label" >'.__( 'Button', 'icegram' ) .'</span>
414
- <input type="text" class="message_field color-field" data-color-label="'.__( 'Background', 'icegram' ).'" name="message_data['.$message_id.'][cta_bg_color]" id="message_cta_bg_color" value="'.$cta_bg_color.'" />
415
- <input type="text" class="message_field color-field" data-color-label="'.__( 'Text', 'icegram' ).'" name="message_data['.$message_id.'][cta_text_color]" id="message_cta_text_color" value="'.$cta_text_color.'" />
416
  </p>';
417
- // </div>';
418
- $color_field = apply_filters('icegram_color_fields' , array( 'html' => $color_field_html ,'message_id' => $message_id ,'message_data' => $message_data, 'settings' => $settings) );
419
- $color_field_html = '<div class="message_colors_options_container" '.$show_color_options.'>'.$color_field['html'].'</div>';
420
 
421
- $colors_options_html = '<p class="message_row ig_'.implode( ' ig_', $settings['bg_color']).'">
422
- <label for="message_use_theme_defaults" class="message_label"><strong>'. __( 'Colors', 'icegram' ).'</strong></label> <label >
423
- <input class="show_color_options" type="checkbox" name="message_data['.$message_id.'][use_theme_defaults]" id="message_use_theme_defaults" value="yes" '. $colors_options_check .'/> '. __( 'Use theme\'s default colors', 'icegram') .'</label> '.$color_field_html.'
424
  </p>';
425
  echo $colors_options_html;
426
 
427
  ?>
428
- <p class="message_row position <?php echo "ig_".implode( ' ig_', $settings['position'] )?>">
429
- <label for="message_position" class="message_label"><strong><?php _e( 'Position', 'icegram' ); ?></strong></label>
430
- <span class="message_field location-selector message_label">
431
- <input type="radio" id="radio01_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="00" <?php echo ( !empty( $message_data['position'] ) && "00" == $message_data['position'] ) ? 'checked' : ''; ?> />
432
- <label for="radio01_<?php echo $message_id;?>" title="Top Left">
433
- <span class="location <?php if( !empty( $positions['00'] ) ) { echo "ig_".implode( ' ig_', $positions['00'] ); } ?> top left" data-position="top left"></span>
 
 
434
  </label>
435
- <input type="radio" id="radio02_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="01" <?php echo ( !empty( $message_data['position'] ) && "01" == $message_data['position'] ) ? 'checked' : ''; ?> />
436
- <label for="radio02_<?php echo $message_id;?>" title="Top">
437
- <span class="location <?php if( !empty( $positions['01'] ) ) { echo "ig_".implode( ' ig_', $positions['01'] ); } ?> top" data-position="top"></span>
 
 
438
  </label>
439
- <input type="radio" id="radio03_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="02" <?php echo ( !empty( $message_data['position'] ) && "02" == $message_data['position'] ) ? 'checked' : ''; ?> />
440
- <label for="radio03_<?php echo $message_id;?>" title="Top Right">
441
- <span class="location <?php if( !empty( $positions['02'] ) ) { echo "ig_".implode( ' ig_', $positions['02'] ); } ?> top right" data-position="top right"></span>
 
 
442
  </label>
443
- <input type="radio" id="radio04_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="10" <?php echo ( !empty( $message_data['position'] ) && "10" == $message_data['position'] ) ? 'checked' : ''; ?> />
444
- <label for="radio04_<?php echo $message_id;?>" title="Middle Left">
445
- <span class="location <?php if( !empty( $positions['10'] ) ) { echo "ig_".implode( ' ig_', $positions['10'] ); } ?> middle left" data-position="middle left"></span>
 
 
446
  </label>
447
- <input type="radio" id="radio05_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="11" <?php echo ( !empty( $message_data['position'] ) && "11" == $message_data['position'] ) ? 'checked' : ''; ?> />
448
- <label for="radio05_<?php echo $message_id;?>" title="Middle">
449
- <span class="location <?php if( !empty( $positions['11'] ) ) { echo "ig_".implode( ' ig_', $positions['11'] ); } ?> middle middle" data-position="middle middle"></span>
 
 
450
  </label>
451
- <input type="radio" id="radio06_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="12" <?php echo ( !empty( $message_data['position'] ) && "12" == $message_data['position'] ) ? 'checked' : ''; ?> />
452
- <label for="radio06_<?php echo $message_id;?>" title="Middle Right">
453
- <span class="location <?php if( !empty( $positions['12'] ) ) { echo "ig_".implode( ' ig_', $positions['12'] ); } ?> middle right" data-position="middle right"></span>
 
 
454
  </label>
455
- <input type="radio" id="radio07_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="20" <?php echo ( !empty( $message_data['position'] ) && "20" == $message_data['position'] ) ? 'checked' : ''; ?> />
456
- <label for="radio07_<?php echo $message_id;?>" title="Bottom Left">
457
- <span class="location <?php if( !empty( $positions['20'] ) ) { echo "ig_".implode( ' ig_', $positions['20'] ); } ?> bottom left" data-position="bottom left"></span>
 
 
458
  </label>
459
- <input type="radio" id="radio08_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="21" <?php echo ( !empty( $message_data['position'] ) && "21" == $message_data['position'] || !isset( $message_data['position'] ) ) ? 'checked' : ''; ?> />
460
- <label for="radio08_<?php echo $message_id;?>" title="Bottom">
461
- <span class="location <?php if( !empty( $positions['21'] ) ) { echo "ig_".implode( ' ig_', $positions['21'] ); } ?> bottom" data-position="bottom"></span>
 
 
462
  </label>
463
- <input type="radio" id="radio09_<?php echo $message_id;?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="22" <?php echo ( !empty( $message_data['position'] ) && "22" == $message_data['position'] ) ? 'checked' : ''; ?> />
464
- <label for="radio09_<?php echo $message_id;?>" title="Bottom Right">
465
- <span class="location <?php if( !empty( $positions['22'] ) ) { echo "ig_".implode( ' ig_', $positions['22'] ); } ?> bottom right" data-position="bottom right"></span>
 
 
466
  </label>
467
  </span>
468
- </p>
469
  <?php
470
- do_action( 'icegram_after_message_settings', $message_id, $message_data );
471
  ?>
472
- <!-- Custom code -->
473
  <?php
474
- $dummy_css = '#ig_this_message .ig_headline{ /* font-size: 3em !important; */ }';
475
- $dummy_js = '<script type="text/javascript"> /* add your js code here */ </script>';
476
- $message_custom_css = ( !empty( $message_data['custom_css'] ) ) ? $message_data['custom_css'] : $dummy_css;
477
- $message_custom_js = ( !empty( $message_data['custom_js'] ) ) ? $message_data['custom_js'] : $dummy_js;
478
- $use_custom_code_check = ( !empty( $message_data['use_custom_code'] ) )
479
- ? checked( $message_data['use_custom_code'], 'yes', 0)
480
- : '';
481
- $show_custom_code_options = empty($use_custom_code_check) ? 'style="display:none;"' : '';
482
 
483
  ?>
484
- <p class="message_row message_custom_code_options_check <?php echo "ig_".implode( ' ig_', $settings['custom_code'] )?>" message_id="<?php echo $message_id; ?>">
485
- <label for="message_custom_code" class="message_label"><strong><?php _e( 'Custom Code', 'icegram' ); ?></strong></label>
486
- <label><input class="show_custom_code_options" type="checkbox" name="message_data[<?php echo $message_id; ?>][use_custom_code]" id="message_use_custom_code" value="yes" <?php echo $use_custom_code_check ?>/> <?php _e('Add custom code for this message' , 'icegram' ); ?></label>
487
- </p>
488
- <div class="message_custom_code_options" <?php echo $show_custom_code_options; ?> message_id="<?php echo $message_id; ?>">
489
- <label class="message_label">&nbsp;</label>
490
- <span class="message_label"> <?php _e('CSS', 'icegram' ); ?></span>
491
- <br>
492
- <label class="message_label">&nbsp;</label>
493
- <textarea class="message_field message_custom_css" rows="6" autocomplete="off" cols="65" name="message_data[<?php echo $message_id; ?>][custom_css]" id="message_message_custom_css_<?php echo $message_id; ?>" value="" placeholder="<?php //_e('Add Custom CSS for this message here...', 'icegram' ); ?>"><?php if( isset( $message_custom_css ) ) echo esc_attr( $message_custom_css ); ?></textarea>
494
- <br>
495
- <label class="message_label">&nbsp;</label>
496
- <span class="message_label"> <?php _e('JS', 'icegram' ); ?></span>
497
- <br>
498
- <label class="message_label">&nbsp;</label>
499
- <textarea class="message_field message_custom_js" rows="6" autocomplete="off" cols="65" name="message_data[<?php echo $message_id; ?>][custom_js]" id="message_message_custom_js_<?php echo $message_id; ?>" value="" placeholder="<?php _e('Add Custom javaScript for this message here...', 'icegram' ); ?>"><?php if( isset( $message_custom_js ) ) echo esc_attr( $message_custom_js ); ?></textarea>
500
- </div>
501
-
502
- <!-- Custom code : End -->
503
- </div>
504
- <input type="hidden" name="message_data[<?php echo $message_id; ?>][id]" value="<?php echo $message_id; ?>">
505
- <input type="hidden" class="message_id" name="message_id" value="<?php echo $message_id; ?>">
 
 
 
 
 
 
506
  <?php
507
 
508
- if( !empty( $action['message_id'] ) ) {
509
  ?></div>
510
  <?php
511
  } else {
512
-
513
  ?>
514
- <p class="message_row">
515
- <label class="message_label">&nbsp;</label>
516
- <span>
517
  <span class="shortcode_description admin_field_icon"></span>
518
- <?php
519
- echo sprintf(__( 'You may add <code>[%s]</code> where you want to show this message.', 'icegram' ), 'icegram messages="' .$post->ID . '"' );
520
  ?>
521
  </span></p>
522
  <?php
@@ -527,56 +590,71 @@ if ( !class_exists( 'Icegram_Message_Admin' ) ) {
527
  // Used to save the settings which are being made in the message form and added to message page appropriately
528
  function update_message_settings( $post_id, $post ) {
529
 
530
- if (empty( $post_id ) || empty( $post ) || empty( $_POST['message_data'] ) || empty( $_POST['message_data'][$post_id] ) ) return;
531
- if (defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE) return;
532
- if (is_int( wp_is_post_revision( $post ) )) return;
533
- if (is_int( wp_is_post_autosave( $post ) )) return;
534
- if ( empty( $_POST['icegram_message_meta_nonce'] ) || ! wp_verify_nonce( $_POST['icegram_message_meta_nonce'], 'icegram_message_save_data' ) ) return;
535
- if (! current_user_can( 'edit_post', $post_id )) return;
536
- if ($post->post_type != 'ig_message') return;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
537
 
538
- $message_data = $_POST['message_data'][$post_id];
539
- $type = $message_data['type'];
540
 
541
- if( isset( $message_data['theme'][$type] ) ) {
542
- $message_data['theme'] = $message_data['theme'][$type];
543
  } else {
544
  unset( $message_data['theme'] );
545
  }
546
- if( isset( $message_data['animation'][$type] ) ) {
547
- $message_data['animation'] = $message_data['animation'][$type];
548
  } else {
549
  unset( $message_data['animation'] );
550
  }
551
- if( isset( $message_data['position'][$type] ) ) {
552
- $message_data['position'] = $message_data['position'][$type];
553
- } elseif( isset( $message_data['position']['ig_default'] ) ) {
554
  $message_data['position'] = $message_data['position']['ig_default'];
555
  }
556
 
557
  $message_data = apply_filters( 'icegram_update_message_data', $message_data, $post_id );
558
  update_post_meta( $post_id, 'icegram_message_data', $message_data );
559
- update_post_meta( $post_id, 'icegram_message_preview_data', $message_data );
560
-
561
  }
562
 
563
  // Additionally save message body content in post_content of post table
564
  function save_message_in_post_content( $post_data ) {
565
 
566
- if( !empty( $_POST['post_type'] ) && $_POST['post_type'] == 'ig_message' && !empty( $_POST['message_data'] ) ) {
567
- $message_id = $_POST['ID'];
568
- $post_data['post_content'] = $_POST['message_data'][$message_id]['message'];
569
-
570
- if( isset( $_POST['message_data'][$message_id]['post_title'] ) ) {
571
 
572
- if( !empty( $_POST['message_data'][$message_id]['post_title'] ) ) {
573
- $post_data['post_title'] = $_POST['message_data'][$message_id]['post_title'];
 
 
574
  } else {
575
- $post_data['post_title'] = $_POST['message_data'][$message_id]['headline'];
576
  }
577
-
578
  }
579
- }
 
580
  return $post_data;
581
  }
582
 
@@ -585,11 +663,11 @@ if ( !class_exists( 'Icegram_Message_Admin' ) ) {
585
 
586
  $date = $existing_columns['date'];
587
  unset( $existing_columns['date'] );
588
-
589
- $existing_columns['message_type'] = __( 'Type', 'icegram' );
590
- $existing_columns['message_theme'] = __( 'Theme', 'icegram' );
591
- $existing_columns['message_thumbnail'] = __( 'Thumbnail', 'icegram' );
592
- $existing_columns['date'] = $date;
593
 
594
  return apply_filters( 'icegram_manage_message_columns', $existing_columns );
595
 
@@ -597,42 +675,43 @@ if ( !class_exists( 'Icegram_Message_Admin' ) ) {
597
 
598
  // Add message columns data to message dashboard
599
  function custom_columns( $column ) {
600
- global $post ,$icegram;
601
 
602
- if( ( is_object( $post ) && $post->post_type != 'ig_message' ) )
603
  return;
 
604
 
605
- $message_data = get_post_meta( $post->ID, 'icegram_message_data', true );
606
  if ( empty( $message_data['type'] ) ) {
607
  return;
608
  }
609
- $class_name = 'Icegram_Message_Type_' . str_replace(' ', '_', ucwords(str_replace('-', ' ', $message_data['type'])));
610
- if( !class_exists( $class_name ) ) {
611
- return;
612
- }
613
- $type = ucwords( str_replace( "-", ' ', $message_data['type'] ) );
614
- $theme = ucwords( str_replace( "-", ' ', $message_data['theme'] ) );
615
-
616
- $bg_img = $icegram->message_types[ $message_data['type'] ]['themes'][ $message_data['theme'] ]['baseurl'] . $message_data['theme'] . ".png";
617
-
618
- switch ($column) {
619
  case 'message_type':
620
- echo esc_attr($type);
621
  break;
622
 
623
  case 'message_theme':
624
- echo esc_attr($theme);
625
  break;
626
 
627
  case 'message_thumbnail':
628
  // echo "<img src='$bg_img' style='max-width: 200px; max-height: 100px;'>";
629
- echo "<img src='".esc_attr($bg_img)."' style='max-width: 100%; max-height: 100px;'>";
630
  break;
631
 
632
  default:
633
  do_action( 'icegram_manage_message_custom_column', $column, $message_data );
634
  break;
635
-
636
  }
637
 
638
  }
@@ -644,9 +723,10 @@ if ( !class_exists( 'Icegram_Message_Admin' ) ) {
644
  $settings = array();
645
  foreach ( $icegram->message_types as $type => $value ) {
646
  foreach ( $value['settings'] as $setting => $property ) {
647
- $settings[$setting][] = $type;
648
  }
649
  }
 
650
  return apply_filters( 'icegram_message_settings_to_show', $settings );
651
 
652
  }
@@ -657,16 +737,17 @@ if ( !class_exists( 'Icegram_Message_Admin' ) ) {
657
  global $icegram;
658
  $form_layouts = array();
659
  foreach ( $icegram->message_types as $type => $value ) {
660
- if( empty( $value['settings']['form_layout'] ) )
661
  continue;
 
662
 
663
- if( !empty( $value['settings']['form_layout']['values'] ) ) {
664
  foreach ( $value['settings']['form_layout']['values'] as $form_layout ) {
665
- $form_layouts[$form_layout][] = $type;
666
- }
667
  }
668
  }
669
-
670
  // return apply_filters( 'icegram_message_form_layouts_to_show', $form_layouts );
671
  return $form_layouts;
672
 
@@ -679,116 +760,126 @@ if ( !class_exists( 'Icegram_Message_Admin' ) ) {
679
  global $icegram;
680
  $positions = array();
681
  foreach ( $icegram->message_types as $type => $value ) {
682
- if( empty( $value['settings']['position'] ) )
683
  continue;
 
684
 
685
- if( !empty( $value['settings']['position']['values'] ) ) {
686
  foreach ( $value['settings']['position']['values'] as $position ) {
687
- $positions[$position][] = $type;
688
- }
689
  }
690
  }
 
691
  return apply_filters( 'icegram_message_positions_to_show', $positions );
692
 
693
  }
694
-
695
  // Default message data for newly created message
696
  function default_message_data( $message_type = '' ) {
697
 
698
  global $icegram;
699
  $default_themes = array();
700
  foreach ( $icegram->message_types as $type => $value ) {
701
- if( isset( $value['settings']['theme']['default'] ) ) {
702
- $default_themes[$type] = $value['settings']['theme']['default'];
703
  }
704
  }
705
- if( !empty( $message_type ) ) {
706
- $default_message = $icegram->message_types[$message_type];
707
  } else {
708
- $default_message = reset( $icegram->message_types );
709
  }
710
- $default_message_data = array( 'type' => $default_message['type'],
711
- 'position' => ( !empty( $default_message['settings']['position']['values'][0] ) ) ? $default_message['settings']['position']['values'][0] : '',
712
- 'text_color' => ( !empty( $default_message['settings']['text_color']['default'] ) ) ? $default_message['settings']['text_color']['default'] : '',
713
- 'bg_color' => ( !empty( $default_message['settings']['bg_color']['default'] ) ) ? $default_message['settings']['bg_color']['default'] : '',
714
- 'theme' => $default_themes
715
- );
 
 
716
  return apply_filters( 'icegram_default_message_data', $default_message_data );
717
  }
718
 
719
  // Form styles for the form
720
  //TODO :: check this and do changes if required
721
- function available_form_styles( ) {
722
  $available_form_styles = array(
723
- array('name' => 'Style 0'),
724
- array('name' => 'Style 1'),
725
- array('name' => 'Style 2'),
726
- array('name' => 'Style 3'),
727
- array('name' => 'Style 4')
728
- ) ;
 
729
  return $available_form_styles;
730
  }
 
731
  // All headline to generate randomly for messages
732
  function available_headlines( $available_headlines = array() ) {
733
  $available_headlines = array_merge( $available_headlines, array(
734
- __( 'Here Is A Method That Is Helping ____ To ____', 'icegram' ),
735
- __( '__ Little Known Ways To ____', 'icegram' ),
736
- __( 'Get Rid Of ____ Once And For All', 'icegram' ),
737
- __( 'How To ____ So You Can ____', 'icegram' ),
738
- __( 'They Didn\'t Think I Could ____, But I Did', 'icegram' ),
739
- __( 'How ____ Made Me ____', 'icegram' ),
740
- __( 'Are You ____ ?', 'icegram' ),
741
- __( 'Warning: ____ !', 'icegram' ),
742
- __( 'Do You Make These Mistakes With ____ ?', 'icegram' ),
743
- __( '7 Ways To ____', 'icegram' ),
744
- __( 'If You\'re ____, You Can ____', 'icegram' ),
745
- __( 'Turn your ____ into a ____', 'icegram' ),
746
- __( 'Want To Be A ____?', 'icegram' ),
747
- __( 'The Ugly Truth About Your Beautiful ____', 'icegram' ),
748
- __( 'The Secret to ____ Is Simply ____!', 'icegram' ),
749
- __( 'The Quickest Way I Know To ____', 'icegram' ),
750
- __( 'The Lazy Man\'s Way To ____', 'icegram' ),
751
- __( 'The Amazing Story Of ____ That Requires So Little Of ____ You Could ____', 'icegram' ),
752
- __( 'The Amazing Secret Of The ____ Genius Who Is Afraid Of ____', 'icegram' ),
753
- __( 'The 10 Wackiest Ideas That ____... And How You Can Too!', 'icegram' ),
754
- __( 'The Inside Secrets To ____ With Crazy, Outlandish And Outrageous ____', 'icegram' ),
755
- __( '____ Like A ____', 'icegram' ),
756
- __( 'Remember When You Could Have ____, And You Didn\'t?', 'icegram' ),
757
- __( 'Is The ____ Worth $x To You?', 'icegram' ),
758
- __( 'Increase your ____, reduce ____, maintain ____ and ____ with ____', 'icegram' ),
759
- __( 'If You Can ____ You Can ____', 'icegram' ),
760
- __( 'I Discovered How To ____... Now I\'m Revealing My Secret', 'icegram' ),
761
- __( 'How To Turn Your ____ Into The Most ____', 'icegram' ),
762
- __( 'How To Take The Headache Out Of ____', 'icegram' ),
763
- __( 'How To ____ ... Legally', 'icegram' ),
764
- __( 'How To ____ That ____', 'icegram' ),
765
- __( 'How To Discover The ____ That Lies Hidden In Your ____', 'icegram' ),
766
- __( 'How To ____ Even When Your Not ____', 'icegram' ),
767
- __( '____ With No ____!', 'icegram' ),
768
- __( 'Greatest Goldmine of ____ Ever Jammed Into One Big ____', 'icegram' ),
769
- __( 'Free ____ Tells How To Get Better ____', 'icegram' ),
770
- __( 'FREE ____ Worth $____ for the first 100 People to take Advantage of this Offer', 'icegram' ),
771
- __( 'Don\'t Try This With Any Other ____', 'icegram' ),
772
- __( 'Do You Honestly Want To ____?', 'icegram' ),
773
- __( 'Discover The Magic ____ That Will Bring You ____ & ____!', 'icegram' ),
774
- __( '____ Man Reveals A Short-Cut To ____', 'icegram' ),
775
- __( 'Confessions Of A ____', 'icegram' ),
776
- __( 'Are You Ready To ____?', 'icegram' ),
777
- __( 'An Open Letter To Everyone Who ____ More Than ____ Per ____', 'icegram' ),
778
- __( 'An Amazing ____ You Can Carry In Your ____', 'icegram' ),
779
- __( '21 Secret ____ that will ____... NOW!', 'icegram' )
780
- ) );
 
781
  return $available_headlines;
782
  }
783
 
784
- function add_message_action( $actions, $post ){
785
- if ($post->post_type != 'ig_message') return $actions;
786
- $actions['duplicate_message'] = '<a class="ig-duplicate-message" href="post.php?message_id='.$post->ID.'&action=duplicate-message" >'.__('Duplicate' ,'icegram').'</a>';
 
 
 
787
  return $actions;
788
  }
789
 
790
- function duplicate_message(){
791
- if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'duplicate-message' && !empty($_REQUEST['message_id'])){
792
  Icegram::duplicate( $_REQUEST['message_id'] );
793
  }
794
  }
1
  <?php
2
+ if ( ! defined( 'ABSPATH' ) ) {
3
+ exit;
4
+ }
5
  /**
6
+ * Icegram Message Admin class
7
+ */
8
+ if ( ! class_exists( 'Icegram_Message_Admin' ) ) {
9
 
10
  class Icegram_Message_Admin {
11
+
12
  var $message_themes;
13
  var $is_icegram_editor;
14
 
15
  private function __construct() {
16
+
17
  add_action( 'add_meta_boxes', array( &$this, 'add_message_meta_boxes' ) );
18
+ add_action( 'wp_ajax_get_message_setting', array( &$this, 'message_form_fields' ) );
19
+
20
  add_action( 'save_post', array( &$this, 'update_message_settings' ), 10, 2 );
21
+ add_filter( 'wp_insert_post_data', array( &$this, 'save_message_in_post_content' ) );
22
 
23
+ add_filter( 'manage_edit-ig_message_columns', array( $this, 'edit_columns' ) );
24
  add_action( 'manage_ig_message_posts_custom_column', array( $this, 'custom_columns' ), 2 );
25
  add_filter( 'icegram_available_headlines', array( &$this, 'available_headlines' ) );
26
 
27
+ //duplicate message
28
+ add_filter( 'post_row_actions', array( &$this, 'add_message_action' ), 10, 2 );
29
+ add_action( 'admin_init', array( &$this, 'duplicate_message' ), 10, 1 );
30
 
31
  }
32
+
33
+ public static function getInstance() {
34
+ static $ig_message_admin = null;
35
+ if ( null === $ig_message_admin ) {
36
+ $ig_message_admin = new Icegram_Message_Admin();
37
+ }
38
+
39
+ return $ig_message_admin;
40
  }
41
+
42
  // Initialize message metabox
43
  function add_message_meta_boxes() {
44
  global $icegram;
45
+ add_meta_box( 'message-settings', __( 'Message Settings', 'icegram' ), array( &$this, 'message_form_fields' ), 'ig_message', 'normal', 'high' );
46
+
47
  }
48
+
49
  // Display all message settings fields
50
  function message_form_fields( $post = '', $action = array() ) {
51
  global $icegram, $pagenow;
52
+ if ( ( is_object( $post ) && $post->post_type != 'ig_message' ) ) {
53
  return;
54
+ }
55
  ?>
56
+
57
+ <style type="text/css">
58
+ <?php
59
  foreach ( $icegram->message_types as $message_type => $message ) {
60
  if( !empty( $message['admin_style'] ) ) {
61
  $message_type = 'ig_'.$message_type;
82
 
83
  }
84
  ?>
85
+ </style>
86
  <?php
87
+ $message_id = ! empty( $action['message_id'] ) ? $action['message_id'] : $post->ID;
88
+ $message_data = get_post_meta( $message_id, 'icegram_message_data', true );
89
+ $message_headlines = $icegram->available_headlines;
90
+ $settings = $this->message_settings_to_show();
91
+ $positions = $this->message_positions_to_show();
92
  if ( $pagenow == 'post-new.php' ) {
93
+ $message_title_key = array_rand( $message_headlines );
94
+ $default_message_title = $message_headlines[ $message_title_key ];
95
  } else {
96
  $default_message_title = $message_title_key = '';
97
  }
98
+ $message_headline = ( isset( $message_data['headline'] ) ) ? $message_data['headline'] : $default_message_title;
99
 
100
+ if ( empty( $message_data ) ) {
101
+ $message_type = ! empty( $action['message_type'] ) ? $action['message_type'] : '';
102
  $message_data = $this->default_message_data( $message_type );
103
  }
104
 
105
+ if ( ! empty( $action['message_type'] ) ) {
106
  $message_data['type'] = $action['message_type'];
107
  }
108
 
109
+ wp_nonce_field( 'icegram_message_save_data', 'icegram_message_meta_nonce' );
110
+ if ( ! empty( $action['message_id'] ) ) {
111
  ?>
112
+ <div class="thickbox_edit_message" id="<?php echo $action['message_id']; ?>">
113
+ <?php
114
+ }
115
  ?>
116
+ <div class="wp_attachment_details edit-form-section message-setting-fields">
117
+ <input id="message_type" class="message_type" name="message_data[<?php echo $message_id; ?>][type]" type="hidden" value="<?php echo esc_attr( $message_data['type'] ) ?>"></input>
118
+ <input id="message_theme_ig_<?php echo esc_attr( $message_data['type'] ) ?>" name="message_data[<?php echo $message_id; ?>][theme][<?php echo esc_attr( $message_data['type'] ) ?>]" type="hidden" value="<?php echo esc_attr( $message_data['theme'] ) ?>"></input>
119
  <?php // action add for interstitial message setting
120
+ do_action( 'icegram_after_message_theme_settings', $message_id, $message_data );
121
  ?>
122
+
123
+ <p class="message_row <?php echo "ig_" . implode( ' ig_', $settings['headline'] ) ?>">
124
+ <label for="message_headline" class="message_label">
125
+ <strong><?php _e( 'Headline', 'icegram' ); ?></strong>
126
+ <span class="help_tip admin_field_icon" data-tip="<?php _e( 'Shown with highest prominence. Click on idea button on right to get a new headline.', 'icegram' ); ?>"></span>
127
+ </label>
128
  <?php
129
  $message_headline = ( isset( $message_data['headline'] ) ) ? $message_data['headline'] : $default_message_title;
130
  ?>
131
+ <input type="text" class="message_field" name="message_data[<?php echo $message_id; ?>][headline]" id="message_title" value="<?php echo esc_attr( $message_headline ); ?>" data-headline="<?php echo $message_title_key; ?>"/>
132
+ <a class="button message_headline_button tips" data-tip="<?php _e( 'Give Me Another Headline', 'icegram' ); ?>">
133
+ <span class="headline-buttons-icon admin_field_icon"></span>
134
+ </a>
135
+ </p>
136
+ <p class="message_row <?php echo "ig_" . implode( ' ig_', $settings['icon'] ) ?>">
137
+ <label for="upload_image" class="message_label">
138
+ <strong><?php _e( 'Icon / Avatar Image', 'icegram' ); ?></strong>
139
+ <span class="help_tip admin_field_icon" data-tip="<?php _e( 'This image will appear in message content.', 'icegram' ); ?>"></span>
140
+ </label>
141
+ <input id="upload_image" type="text" class="message_field" name="message_data[<?php echo $message_id; ?>][icon]" value="<?php if ( isset( $message_data['icon'] ) ) {
142
+ echo esc_attr( $message_data['icon'] );
143
+ } ?>"/>
144
+ <a class="button message_image_button tips" data-tip="<?php _e( 'Upload / Select an image', 'icegram' ); ?>" onclick="tb_show('<?php _e( 'Upload / Select Image' ); ?>', 'media-upload.php?type=image&TB_iframe=true', false);">
145
+ <span class="image-buttons-icon admin_field_icon"></span>
146
+ </a>
147
+ </p>
148
+
149
  <?php
150
+ $editor_args = array(
151
+ 'textarea_name' => 'message_data[' . $message_id . '][message]',
152
+ 'textarea_rows' => 10,
153
+ 'editor_class' => 'wp-editor-message',
154
+ 'media_buttons' => true,
155
+ 'tinymce' => true
156
+ );
157
  ?>
158
+ <p class="message_row <?php echo "ig_" . implode( ' ig_', $settings['message'] ) ?>">
159
+ <style type="text/css">.wp-editor-tools:after {
160
+ display: inline-block !important;
161
+ }</style>
162
+ <label for="message_body" class="message_body message_label"><strong><?php _e( 'Message Body', 'icegram' ); ?></strong></label>
163
+ <?php
164
+ $message = ( ! empty( $message_data['message'] ) ) ? $message_data['message'] : '';
165
+ //TODO :: check need of exit-redirect Type
166
+ if ( in_array( $message_data['type'], array( 'toast', 'badge', 'ribbon', 'exit-redirect' ) ) ) {
167
+ $message = str_replace( '[ig_form]', '', $message );
168
+ }
169
  ?>
170
 
171
+ <?php wp_editor( $message, 'edit' . $message_id, $editor_args ); ?>
172
+ </p>
173
  <?php foreach ( $icegram->message_types as $message ) {
174
+ if ( empty( $message['settings']['animation']['values'] ) ) {
175
+ continue;
176
+ }
177
  $animations = $message['settings']['animation']['values']
178
  ?>
179
+ <p class="message_row <?php echo "ig_" . $message['type']; ?>">
180
+ <label for="message_animation_<?php echo $message['type'] ?>" class="message_label"><strong><?php _e( 'Animation', 'icegram' ); ?></strong></label>
181
+ <select id="message_animation_<?php echo $message['type'] ?>" name="message_data[<?php echo $message_id; ?>][animation][<?php echo $message['type'] ?>]" class="icegram_chosen_page message_animation message_animation_<?php echo $message['type']; ?>">
182
+ <?php asort( $animations );
183
+ $animations = array( 'no-anim' => 'No Animation' ) + $animations;
184
+ foreach ( $animations as $value => $label ) { ?>
185
+ <option value="<?php echo esc_attr( $value ) ?>" <?php echo ( ! empty( $message_data['animation'] ) && esc_attr( $value ) == $message_data['animation'] ) ? 'selected' : ''; ?>><?php echo esc_html( $label ) ?></option>
186
+ <?php } ?>
187
+ </select>
188
+ </p>
189
+ <?php } ?>
190
+
191
+ <!-- Embed Form options -->
192
+
193
+ <?php
194
+
195
+ $form_html = ( ! empty( $message_data['form_html'] ) ) ? $message_data['form_html'] : '';
196
+ $form_html_original = ( ! empty( $message_data['form_html_original'] ) ) ? $message_data['form_html_original'] : '';
197
+ $form_header = ( ! empty( $message_data['form_header'] ) ) ? $message_data['form_header'] : '';
198
+ $form_footer = ( ! empty( $message_data['form_footer'] ) ) ? $message_data['form_footer'] : '';
199
+ $form_bg_color = ( ! empty( $message_data['form_bg_color'] ) ) ? $message_data['form_bg_color'] : '';
200
+ $form_text_color = ( ! empty( $message_data['form_text_color'] ) ) ? $message_data['form_text_color'] : '';
201
+ $form_has_label = ( ! empty( $message_data['form_has_label'] ) ) ? checked( $message_data['form_has_label'], 'yes', 0 ) : '';
202
+ $form_layouts = $this->message_form_layouts_to_show();
203
+ $default_form_layout = ! empty( $icegram->message_types[ $message_data['type'] ]['settings']['form_layout']['default'] ) ? $icegram->message_types[ $message_data['type'] ]['settings']['form_layout']['default'] : '';
204
+ $use_form_check = ( ! empty( $message_data['use_form'] ) )
205
+ ? checked( $message_data['use_form'], 'yes', 0 )
206
+ : '';
207
+ $show_form_options = empty( $use_form_check ) ? 'style="display:none;"' : '';
208
+ ?>
209
+ <p class="message_row message_form_options_check <?php echo "ig_" . implode( ' ig_', $settings['embed_form'] ) ?>" message_id="<?php echo $message_id; ?>">
210
+ <label for="message_use_form" class="message_label"><strong><?php _e( 'Form', 'icegram' ); ?></strong></label> <label>
211
+ <input class="show_form_options" type="checkbox" name="message_data[<?php echo $message_id; ?>][use_form]" id="message_use_form" value="yes" <?php echo $use_form_check ?>/> <?php _e( 'Use Opt-in / Subscription / Lead capture form', 'icegram' ); ?></label>
212
+ </p>
213
+
214
+ <div class="message_form_options" <?php echo $show_form_options; ?> message_id="<?php echo $message_id; ?>">
215
+ <p class="message_row <?php echo "ig_" . implode( ' ig_', $settings['embed_form'] ) ?>">
216
+ <label for="message_form_style" class="message_label">&nbsp;</label>
217
+ <select id="message_form_style" name="message_data[<?php echo $message_id; ?>][form_style]" class="icegram_chosen_page message_form_style ">
218
+ <?php
219
  $available_form_styles = $this->available_form_styles();
220
  foreach ( $available_form_styles as $style ) {
221
+ $bg_img = "background-image: url(" . $icegram->plugin_url . '/assets/images/' . strtolower( str_replace( ' ', '_', $style['name'] ) ) . ".png)";
222
  ?>
223
+ <option style="<?php echo $bg_img; ?>" <?php echo ( ! empty( $message_data['form_style'] ) && strtolower( str_replace( ' ', '_', $style['name'] ) ) == $message_data['form_style'] ) ? 'selected' : ''; ?> value="<?php echo esc_attr( strtolower( str_replace( ' ', '_', $style['name'] ) ) ) ?>"
224
+ class="<?php echo strtolower( str_replace( ' ', '_', $style['name'] ) ) ?>" <?php echo ( ! empty( $message_data['form_style'] ) && esc_attr( strtolower( $style['name'] ) ) == $message_data['form_style'] ) ? 'selected' : ''; ?>><?php echo esc_html( $style['name'] ) ?></option>
225
  <?php } ?>
226
+ </select>
227
+ </p>
228
+
229
+ <p class="form_layouts message_row <?php echo "ig_" . implode( ' ig_', $settings['embed_form'] ) ?>">
230
+ <label for="message_form_layouts" class="message_label">&nbsp;</label>
231
+ <div class="form_radio_group">
232
+ <span class="location <?php if ( ! empty( $form_layouts['left'] ) ) {
233
+ echo "ig_" . implode( ' ig_', $form_layouts['left'] );
234
+ } ?>">
235
+ <label style="background-position:0px 23px;" for="form_layout_left_<?php echo $message_id; ?>" title="<?php _e( 'Left', 'icegram' ); ?>">
236
+ <input class="message_form_layout" type="radio" id="form_layout_left_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][form_layout]"
237
+ value="left" <?php echo ( ! empty( $message_data['form_layout'] ) && "left" == $message_data['form_layout'] ) ? 'checked' : ( empty( $message_data['form_layout'] ) && "left" == $default_form_layout ? 'checked' : '' ); ?> />
238
+ <?php _e( 'Left', 'icegram' ); ?>
239
  </label>
240
  </span>
241
 
242
+ <span class="location <?php if ( ! empty( $form_layouts['right'] ) ) {
243
+ echo "ig_" . implode( ' ig_', $form_layouts['right'] );
244
+ } ?>">
245
+ <label style="background-position:-100px 23px;" for="form_layout_right_<?php echo $message_id; ?>" title="<?php _e( 'Right', 'icegram' ); ?>">
246
+ <input class="message_form_layout" type="radio" id="form_layout_right_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][form_layout]"
247
+ value="right" <?php echo ( ! empty( $message_data['form_layout'] ) && "right" == $message_data['form_layout'] ) ? 'checked' : ( empty( $message_data['form_layout'] ) && "right" == $default_form_layout ? 'checked' : '' ); ?> />
248
+ <?php _e( 'Right', 'icegram' ); ?>
249
  </label>
250
  </span>
251
 
252
+ <span class="location <?php if ( ! empty( $form_layouts['bottom'] ) ) {
253
+ echo "ig_" . implode( ' ig_', $form_layouts['bottom'] );
254
+ } ?>">
255
+ <label style="background-position:-200px 23px;" for="form_layout_bottom_<?php echo $message_id; ?>" title="<?php _e( 'Bottom', 'icegram' ); ?>">
256
+ <input class="message_form_layout" type="radio" id="form_layout_bottom_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][form_layout]"
257
+ value="bottom" <?php echo ( ! empty( $message_data['form_layout'] ) && "bottom" == $message_data['form_layout'] ) ? 'checked' : ( empty( $message_data['form_layout'] ) && "bottom" == $default_form_layout ? 'checked' : '' ); ?> />
258
+ <?php _e( 'Bottom', 'icegram' ); ?>
259
  </label>
260
  </span>
261
 
262
+ <?php
263
+ $inline_position_checked = ( ! empty( $message_data['form_layout'] ) && "inline" == $message_data['form_layout'] ) ? 'checked' : ( empty( $message_data['form_layout'] ) && "inline" == $default_form_layout ? 'checked' : '' );
264
+ $show_color_options = ! empty( $inline_position_checked ) ? 'style="display:none;"' : '';
265
+ ?>
266
+ <span class="location <?php if ( ! empty( $form_layouts['inline'] ) ) {
267
+ echo "ig_" . implode( ' ig_', $form_layouts['inline'] );
268
+ } ?>">
269
+ <label style="background-position:-300px 23px;" for="form_layout_inline_<?php echo $message_id; ?>" title="<?php _e( 'Inline', 'icegram' ); ?>">
270
+ <input class="message_form_layout" type="radio" id="form_layout_inline_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][form_layout]" value="inline" <?php echo $inline_position_checked; ?> />
271
+ <?php _e( 'Inline', 'icegram' ); ?>
272
  </label>
273
  </span>
274
+ </div>
275
+
276
+ </p>
277
  <?php
278
 
279
+ $color_field_html = '<p class="message_form_color message_row ig_"' . implode( ' ig_', $settings['embed_form'] ) . '" ' . $show_color_options . '>
280
  <label for="message_form_bg_color" class="message_label">&nbsp;</label>
281
+ <input type="text" class="message_field color-field" data-color-label="' . __( 'Background Color', 'icegram' ) . '" name="message_data[' . $message_id . '][form_bg_color]" id="message_form_bg_color" value="' . $form_bg_color . '" />
282
+ <input type="text" class="message_field color-field" data-color-label="' . __( 'Text Color', 'icegram' ) . '" name="message_data[' . $message_id . '][form_text_color]" id="message_form_text_color" value="' . $form_text_color . '" style="margin-left:5em !important" />
283
  </p>';
284
+ echo $color_field_html;
285
+ $active_plugins = get_option( 'active_plugins', array() );
286
+ if ( is_multisite() ) {
287
+ $active_plugins = array_merge( $active_plugins, get_site_option( 'active_sitewide_plugins', array() ) );
288
+ }
289
 
290
  ?>
291
 
292
+ <p class="message_row <?php echo "ig_" . implode( ' ig_', $settings['embed_form'] ) ?>">
293
+ <label class="message_label">&nbsp;</label>
294
+ <textarea class="message_field message_form_header" rows="2" autocomplete="off" cols="65" name="message_data[<?php echo $message_id; ?>][form_header]" id="" value="" placeholder="<?php _e( 'Text / HTML to show before the form', 'icegram' ); ?>"><?php echo esc_attr( $form_header ); ?></textarea>
295
+ </p>
296
+ <p class="message_row <?php echo "ig_" . implode( ' ig_', $settings['embed_form'] ) ?>">
297
+ <label class="message_label">&nbsp;</label>
298
  <?php
299
+ $form_embed_html = '';
300
+ $force_use_rm = false;
301
+ $es_current_version = '3.5.18';
302
+ $is_es_active = false;
303
+
304
+ if ( in_array( 'email-subscribers/email-subscribers.php', $active_plugins ) ) {
305
  $es_plugin_meta_data = get_plugin_data( WP_PLUGIN_DIR . '/email-subscribers/email-subscribers.php' );
306
  $es_current_version = ! empty( $es_plugin_meta_data['Version'] ) ? $es_plugin_meta_data['Version'] : '';
307
+ $is_es_active = true;
308
+ }
309
 
310
+ if ( in_array( 'email-subscribers-premium/email-subscribers-premium.php', $active_plugins ) ) {
311
+ $es_plugin_meta_data = get_plugin_data( WP_PLUGIN_DIR . '/email-subscribers-premium/email-subscribers-premium.php' );
312
+ $es_current_version = ! empty( $es_plugin_meta_data['Version'] ) ? $es_plugin_meta_data['Version'] : '';
313
+ $is_es_active = true;
314
  }
315
+
316
+ $force_use_rm = ( version_compare( $es_current_version, '4.0', '<' ) ) ? true : false;
317
+
318
+ //Add Rainmaker form
319
+ $rm_html = __( "Add form embed code" ) . '<strong>' . __( " or easily embed using ", "icegram" ) . '<a style="font-style:normal;" href="' . admin_url( "plugin-install.php?tab=search&type=term&s=icegram-rainmaker" ) . '" target="_blank" alt="Rainmaker - Forms, Leads and CRM">Icegram\'s Rainmaker' . '</a> plugin </strong>';
320
+ $rm_html = ( true === $force_use_rm ) ? $rm_html : '';
321
  $hide_embed = '';
322
+ if ( in_array( 'icegram-rainmaker/icegram-rainmaker.php', $active_plugins ) && ( ! empty( $message_data["rainmaker_form_code"] ) || $force_use_rm ) ) {
323
  $rainmaker_form_list = Rainmaker::get_rm_form_id_name_map();
324
+ $rm_html = __( "Use Rainmaker form ", "icegram" );
325
+ $rm_html .= '<select class="rainmaker_form_list" style="max-width:30%" name="message_data[' . $message_id . '][rainmaker_form_code]">
326
+ <option value="" selected>' . __( "Select form ", "icegram" ) . '</option>';
327
+ foreach ( $rainmaker_form_list as $id => $name ) {
328
+ $rm_html .= '<option ' . ( ( ! empty( $message_data["rainmaker_form_code"] ) && $id == $message_data["rainmaker_form_code"] ) ? 'selected' : '' ) . ' value="' . $id . '">' . $name . '</option>';
329
+ }
330
+ $rm_html .= '</select><span style="font-style:italic">' . __( ' or add ', 'icegram' ) . '<a class="embed_form_code_toggle" style="cursor: pointer;">' . __( 'form embed code', 'icegram' ) . '</a></span>';
331
+ $hide_embed = ( empty( $message_data["rainmaker_form_code"] ) && ! empty( $form_html_original ) ) ? '' : 'style="display:none"';
332
  $form_embed_html = $rm_html;
333
  }
334
 
335
  //Add Email Subscribers form
336
+ $es_html = __( "Add form embed code" ) . '<strong>' . __( " or easily embed using ", "icegram" ) . '<a style="font-style:normal;" href="' . admin_url( "plugin-install.php?tab=search&type=term&s=email-subscribers" ) . '" target="_blank" alt="Email Subscribers & Newsletters">Email Subscribers & Newsletters' . '</a> plugin </strong>';
337
+ if ( $is_es_active && ! $force_use_rm ) {
338
+ $forms_db = new ES_DB_Forms();
339
+ $es_form_list = call_user_func( array( $forms_db, 'get_forms_id_name_map' ) );
340
+ $es_html = __( "Use Email Subscribers form ", "icegram" );
341
+ $es_html .= '<select class="es_form_list" style="max-width:30%" name="message_data[' . $message_id . '][es_form_code]">
342
+ <option value="" selected>' . __( "Select form ", "icegram" ) . '</option>';
343
+ foreach ( $es_form_list as $id => $name ) {
344
+ $es_html .= '<option ' . ( ( ! empty( $message_data["es_form_code"] ) && $id == $message_data["es_form_code"] ) ? 'selected' : '' ) . ' value="' . $id . '">' . $name . '</option>';
345
+ }
346
+ $es_html .= '</select><span style="font-style:italic">' . __( ' or add ', 'icegram' ) . '<a class="embed_form_code_toggle" style="cursor: pointer;">' . __( 'form embed code', 'icegram' ) . '</a></span>';
347
+ $hide_embed = ( empty( $message_data["es_form_code"] ) && ! empty( $form_html_original ) ) ? '' : 'style="display:none"';
348
  }
349
+ $form_embed_html = ! empty( $rm_html ) ? $rm_html : $es_html;
350
  ?>
351
+ <label class="message_label">&nbsp;</label>
352
+ <span class="message_label" style="padding-bottom:.3em"> <?php echo $form_embed_html; ?></span>
353
+ <label class="message_label">&nbsp;</label>
354
+ <textarea class="message_field message_form_html_original" <?php echo $hide_embed ?> rows="6" autocomplete="off" cols="65" name="message_data[<?php echo $message_id; ?>][form_html_original]" id="message_form_html_original_<?php echo $message_id; ?>" value=""
355
+ placeholder="<?php _e( 'Paste HTML / shortcode of your form here...', 'icegram' ); ?>"><?php if ( isset( $form_html_original ) ) {
356
+ echo esc_attr( $form_html_original );
357
+ } ?></textarea>
358
+ <br>
359
+ <label class="message_label">&nbsp;</label>
360
+ <label style="font-size:.9em;"><input class="message_form_has_label" type="checkbox" name="message_data[<?php echo $message_id; ?>][form_has_label]" value="yes" <?php echo $form_has_label ?> />
361
+ <?php _e( 'Show labels above fields', 'icegram' ); ?></label>
362
+ </p>
363
+
364
+ <p class="message_row <?php echo "ig_" . implode( ' ig_', $settings['embed_form'] ) ?>">
365
+ <label class="message_label">&nbsp;</label>
366
+ <textarea class="message_field message_form_footer" rows="2" autocomplete="off" cols="65" name="message_data[<?php echo $message_id; ?>][form_footer]" id="" value="" placeholder="<?php _e( 'Text / HTML to show after the form', 'icegram' ); ?>"><?php echo esc_attr( $form_footer ); ?></textarea>
367
+ </p>
368
+ <div class="form_inline_shortcode campaign_shortcode light message_row <?php echo "ig_" . implode( ' ig_', $settings['embed_form'] ) ?>" style="font-size:.9em;display:inline;">
369
+ <?php echo __( 'Insert <code>[ig_form]</code> where you want to show this form in message body.', 'icegram' ); ?>
370
+ </div>
371
+ </div>
372
+
373
+ <!-- Embed Form options : End -->
374
 
375
  <?php
376
 
377
+ $show_cta_actions = array_merge( $settings['label'], $settings['link'] );
378
+ $show_only_link = array_diff( $settings['link'], $settings['label'] );
379
+
380
  ?>
381
+ <p class="message_row <?php echo "ig_" . implode( ' ig_', $show_cta_actions ) ?>">
382
+ <label for="message_label" class="message_label">
383
+ <strong>
384
+ <span class="message_row <?php echo "ig_" . implode( ' ig_', $settings['label'] ) ?>"> <?php _e( 'Call To Action', 'icegram' ); ?> </span>
385
+ <span class="message_row <?php echo "ig_" . implode( ' ig_', $show_only_link ) ?>"> <?php _e( 'Call To Action', 'icegram' ); ?> </span>
386
+ </strong>
387
+ </label>
388
+ <span class="message_row option_title <?php echo "ig_" . implode( ' ig_', $settings['label'] ) ?>"><?php _e( "Main Call To Action Button", "icegram" ); ?></span>
389
+ </p>
390
+
391
+ <p class="message_row <?php echo "ig_" . implode( ' ig_', $settings['label'] ) ?>">
392
+ <label for="message_label" class="message_label"> &nbsp;
393
+ <span class="help_tip admin_field_icon" data-tip="<?php _e( 'Your call to action text. Something unusual will increase conversions.', 'icegram' ); ?>"></span>
394
+ </label><span class="message_row <?php echo "ig_" . implode( ' ig_', $settings['label'] ) ?>"><span class="message_label sub_option_label"><?php _e( "Label", "icegram" ); ?></span>
395
+ <input type="text" class="message_field" name="message_data[<?php echo $message_id; ?>][label]" id="message_label" value="<?php if ( isset( $message_data['label'] ) ) {
396
+ echo esc_attr( $message_data['label'] );
397
+ } ?>"/> </span>
398
+ </p>
399
 
400
  <?php
401
+ do_action( 'icegram_after_button_label', $message_id, $message_data );
402
+ ?>
403
  <?php
404
 
405
+ $target_link_field = '<p class="message_row ig_' . implode( ' ig_', $settings['link'] ) . '">
406
+ <span class="message_row ig_' . implode( ' ig_', $settings['label'] ) . '">
407
  <label for="message_link" class="message_label">&nbsp;
408
+ <span class="help_tip admin_field_icon" data-tip="' . __( 'Enter destination URL here. Clicking will redirect to this link.', 'icegram' ) . '"></span>
409
  </label>
410
  </span>
411
+ <span class="message_row ig_' . implode( ' ig_', $show_only_link ) . '">
412
+ <span style="float:left" class="help_tip admin_field_icon" data-tip="' . __( 'Enter destination URL here. Clicking will redirect to this link.', 'icegram' ) . '"></span>
413
  </span>
414
+ <span class="message_label sub_option_label">' . __( "Target Link", "icegram" ) . '</span>
415
+ <input type="text" class="message_field message_link" name="message_data[' . $message_id . '][link]"
416
+ id="message_link" value="' . esc_attr( ( isset( $message_data['link'] ) ? $message_data['link'] : '' ) ) . '" />
417
+ </p>';
418
 
419
+ $target_link_field .= '<p class="message_row ig_' . implode( ' ig_', $settings["link"] ) . '">
420
  <label for="message" class="message_label">&nbsp;</label>
421
+ <label style="color:#BBB;">&nbsp;<input type="checkbox" disabled checked="checked"/>' . __( "Open in new tab ", "icegram" ) . '</label>
422
  <span>
423
+ <a href="https://www.icegram.com/documentation/how-to-open-cta-link-in-a-new-tab-using-icegram/?utm_source=ig_field&utm_medium=ig_inapp_promo&utm_campaign=ig_inapp_promo" target="_blank">' . __( "How to do this?", "icegram" ) . '</a>
424
  </span>
425
  </p>';
426
+ $icegram_message_target_link = apply_filters( 'icegram_message_field_link', array( 'html' => $target_link_field, 'message_id' => $message_id, 'message_data' => $message_data, 'settings' => $settings ) );
427
  echo $icegram_message_target_link['html'];
428
  ?>
429
+ <p class="message_row <?php echo "ig_" . implode( ' ig_', $show_cta_actions ) ?>">
430
+ <label for="message_label" class="message_label"> &nbsp;</label>
431
+ <span class="ig_admin_hr">&nbsp;</span>
432
+ </p>
433
+
434
+ <?php
435
+ $text_color = ( ! empty( $message_data['text_color'] ) ) ? $message_data['text_color'] : '';
436
+ $bg_color = ( ! empty( $message_data['bg_color'] ) ) ? $message_data['bg_color'] : '';
437
+ $cta_bg_color = ( ! empty( $message_data['cta_bg_color'] ) ) ? $message_data['cta_bg_color'] : '';
438
+ $cta_text_color = ( ! empty( $message_data['cta_text_color'] ) ) ? $message_data['cta_text_color'] : '';
439
+ $colors_options_check = ( ! empty( $message_data['use_theme_defaults'] ) )
440
+ ? checked( $message_data['use_theme_defaults'], 'yes', 0 )
441
+ : ( ( ! empty( $bg_color ) || ! empty( $text_color ) || ! empty( $cta_bg_color ) || ! empty( $cta_text_color ) ) ? '' : 'checked="checked"' );
442
+
443
+ $show_color_options = ( ! empty( $colors_options_check ) ) ? 'style="display: none;"' : '';
444
+ $color_field_html = '<p class="message_row ig_' . implode( ' ig_', $settings['bg_color'] ) . '">
445
  <label for="message_bg_color" class="message_label">&nbsp;</label>
446
+ <span class="message_label sub_option_label" > ' . __( 'Body', 'icegram' ) . '</span>
447
+ <input type="text" class="message_field color-field" data-color-label="' . __( 'Background', 'icegram' ) . '" name="message_data[' . $message_id . '][bg_color]" id="message_bg_color" value="' . $bg_color . '" />
448
+ <input type="text" class="message_field color-field" data-color-label="' . __( 'Text', 'icegram' ) . '" name="message_data[' . $message_id . '][text_color]" id="message_text_color" value="' . $text_color . '" />
449
  </p>
450
+ <p class="message_row ig_' . implode( ' ig_', $settings['label'] ) . '">
451
  <label for="message_cta_bg_color" class="message_label">&nbsp;</label>
452
+ <span class="message_label sub_option_label" >' . __( 'Button', 'icegram' ) . '</span>
453
+ <input type="text" class="message_field color-field" data-color-label="' . __( 'Background', 'icegram' ) . '" name="message_data[' . $message_id . '][cta_bg_color]" id="message_cta_bg_color" value="' . $cta_bg_color . '" />
454
+ <input type="text" class="message_field color-field" data-color-label="' . __( 'Text', 'icegram' ) . '" name="message_data[' . $message_id . '][cta_text_color]" id="message_cta_text_color" value="' . $cta_text_color . '" />
455
  </p>';
456
+ // </div>';
457
+ $color_field = apply_filters( 'icegram_color_fields', array( 'html' => $color_field_html, 'message_id' => $message_id, 'message_data' => $message_data, 'settings' => $settings ) );
458
+ $color_field_html = '<div class="message_colors_options_container" ' . $show_color_options . '>' . $color_field['html'] . '</div>';
459
 
460
+ $colors_options_html = '<p class="message_row ig_' . implode( ' ig_', $settings['bg_color'] ) . '">
461
+ <label for="message_use_theme_defaults" class="message_label"><strong>' . __( 'Colors', 'icegram' ) . '</strong></label> <label >
462
+ <input class="show_color_options" type="checkbox" name="message_data[' . $message_id . '][use_theme_defaults]" id="message_use_theme_defaults" value="yes" ' . $colors_options_check . '/> ' . __( 'Use theme\'s default colors', 'icegram' ) . '</label> ' . $color_field_html . '
463
  </p>';
464
  echo $colors_options_html;
465
 
466
  ?>
467
+ <p class="message_row position <?php echo "ig_" . implode( ' ig_', $settings['position'] ) ?>">
468
+ <label for="message_position" class="message_label"><strong><?php _e( 'Position', 'icegram' ); ?></strong></label>
469
+ <span class="message_field location-selector message_label">
470
+ <input type="radio" id="radio01_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="00" <?php echo ( ! empty( $message_data['position'] ) && "00" == $message_data['position'] ) ? 'checked' : ''; ?> />
471
+ <label for="radio01_<?php echo $message_id; ?>" title="Top Left">
472
+ <span class="location <?php if ( ! empty( $positions['00'] ) ) {
473
+ echo "ig_" . implode( ' ig_', $positions['00'] );
474
+ } ?> top left" data-position="top left"></span>
475
  </label>
476
+ <input type="radio" id="radio02_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="01" <?php echo ( ! empty( $message_data['position'] ) && "01" == $message_data['position'] ) ? 'checked' : ''; ?> />
477
+ <label for="radio02_<?php echo $message_id; ?>" title="Top">
478
+ <span class="location <?php if ( ! empty( $positions['01'] ) ) {
479
+ echo "ig_" . implode( ' ig_', $positions['01'] );
480
+ } ?> top" data-position="top"></span>
481
  </label>
482
+ <input type="radio" id="radio03_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="02" <?php echo ( ! empty( $message_data['position'] ) && "02" == $message_data['position'] ) ? 'checked' : ''; ?> />
483
+ <label for="radio03_<?php echo $message_id; ?>" title="Top Right">
484
+ <span class="location <?php if ( ! empty( $positions['02'] ) ) {
485
+ echo "ig_" . implode( ' ig_', $positions['02'] );
486
+ } ?> top right" data-position="top right"></span>
487
  </label>
488
+ <input type="radio" id="radio04_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="10" <?php echo ( ! empty( $message_data['position'] ) && "10" == $message_data['position'] ) ? 'checked' : ''; ?> />
489
+ <label for="radio04_<?php echo $message_id; ?>" title="Middle Left">
490
+ <span class="location <?php if ( ! empty( $positions['10'] ) ) {
491
+ echo "ig_" . implode( ' ig_', $positions['10'] );
492
+ } ?> middle left" data-position="middle left"></span>
493
  </label>
494
+ <input type="radio" id="radio05_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="11" <?php echo ( ! empty( $message_data['position'] ) && "11" == $message_data['position'] ) ? 'checked' : ''; ?> />
495
+ <label for="radio05_<?php echo $message_id; ?>" title="Middle">
496
+ <span class="location <?php if ( ! empty( $positions['11'] ) ) {
497
+ echo "ig_" . implode( ' ig_', $positions['11'] );
498
+ } ?> middle middle" data-position="middle middle"></span>
499
  </label>
500
+ <input type="radio" id="radio06_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="12" <?php echo ( ! empty( $message_data['position'] ) && "12" == $message_data['position'] ) ? 'checked' : ''; ?> />
501
+ <label for="radio06_<?php echo $message_id; ?>" title="Middle Right">
502
+ <span class="location <?php if ( ! empty( $positions['12'] ) ) {
503
+ echo "ig_" . implode( ' ig_', $positions['12'] );
504
+ } ?> middle right" data-position="middle right"></span>
505
  </label>
506
+ <input type="radio" id="radio07_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="20" <?php echo ( ! empty( $message_data['position'] ) && "20" == $message_data['position'] ) ? 'checked' : ''; ?> />
507
+ <label for="radio07_<?php echo $message_id; ?>" title="Bottom Left">
508
+ <span class="location <?php if ( ! empty( $positions['20'] ) ) {
509
+ echo "ig_" . implode( ' ig_', $positions['20'] );
510
+ } ?> bottom left" data-position="bottom left"></span>
511
  </label>
512
+ <input type="radio" id="radio08_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="21" <?php echo ( ! empty( $message_data['position'] ) && "21" == $message_data['position'] || ! isset( $message_data['position'] ) ) ? 'checked' : ''; ?> />
513
+ <label for="radio08_<?php echo $message_id; ?>" title="Bottom">
514
+ <span class="location <?php if ( ! empty( $positions['21'] ) ) {
515
+ echo "ig_" . implode( ' ig_', $positions['21'] );
516
+ } ?> bottom" data-position="bottom"></span>
517
  </label>
518
+ <input type="radio" id="radio09_<?php echo $message_id; ?>" name="message_data[<?php echo $message_id; ?>][position][ig_default]" value="22" <?php echo ( ! empty( $message_data['position'] ) && "22" == $message_data['position'] ) ? 'checked' : ''; ?> />
519
+ <label for="radio09_<?php echo $message_id; ?>" title="Bottom Right">
520
+ <span class="location <?php if ( ! empty( $positions['22'] ) ) {
521
+ echo "ig_" . implode( ' ig_', $positions['22'] );
522
+ } ?> bottom right" data-position="bottom right"></span>
523
  </label>
524
  </span>
525
+ </p>
526
  <?php
527
+ do_action( 'icegram_after_message_settings', $message_id, $message_data );
528
  ?>
529
+ <!-- Custom code -->
530
  <?php
531
+ $dummy_css = '#ig_this_message .ig_headline{ /* font-size: 3em !important; */ }';
532
+ $dummy_js = '<script type="text/javascript"> /* add your js code here */ </script>';
533
+ $message_custom_css = ( ! empty( $message_data['custom_css'] ) ) ? $message_data['custom_css'] : $dummy_css;
534
+ $message_custom_js = ( ! empty( $message_data['custom_js'] ) ) ? $message_data['custom_js'] : $dummy_js;
535
+ $use_custom_code_check = ( ! empty( $message_data['use_custom_code'] ) )
536
+ ? checked( $message_data['use_custom_code'], 'yes', 0 )
537
+ : '';
538
+ $show_custom_code_options = empty( $use_custom_code_check ) ? 'style="display:none;"' : '';
539
 
540
  ?>
541
+ <p class="message_row message_custom_code_options_check <?php echo "ig_" . implode( ' ig_', $settings['custom_code'] ) ?>" message_id="<?php echo $message_id; ?>">
542
+ <label for="message_custom_code" class="message_label"><strong><?php _e( 'Custom Code', 'icegram' ); ?></strong></label>
543
+ <label><input class="show_custom_code_options" type="checkbox" name="message_data[<?php echo $message_id; ?>][use_custom_code]" id="message_use_custom_code" value="yes" <?php echo $use_custom_code_check ?>/> <?php _e( 'Add custom code for this message', 'icegram' ); ?></label>
544
+ </p>
545
+ <div class="message_custom_code_options" <?php echo $show_custom_code_options; ?> message_id="<?php echo $message_id; ?>">
546
+ <label class="message_label">&nbsp;</label>
547
+ <span class="message_label"> <?php _e( 'CSS', 'icegram' ); ?></span>
548
+ <br>
549
+ <label class="message_label">&nbsp;</label>
550
+ <textarea class="message_field message_custom_css" rows="6" autocomplete="off" cols="65" name="message_data[<?php echo $message_id; ?>][custom_css]" id="message_message_custom_css_<?php echo $message_id; ?>" value=""
551
+ placeholder="<?php //_e('Add Custom CSS for this message here...', 'icegram' ); ?>"><?php if ( isset( $message_custom_css ) ) {
552
+ echo esc_attr( $message_custom_css );
553
+ } ?></textarea>
554
+ <br>
555
+ <label class="message_label">&nbsp;</label>
556
+ <span class="message_label"> <?php _e( 'JS', 'icegram' ); ?></span>
557
+ <br>
558
+ <label class="message_label">&nbsp;</label>
559
+ <textarea class="message_field message_custom_js" rows="6" autocomplete="off" cols="65" name="message_data[<?php echo $message_id; ?>][custom_js]" id="message_message_custom_js_<?php echo $message_id; ?>" value=""
560
+ placeholder="<?php _e( 'Add Custom javaScript for this message here...', 'icegram' ); ?>"><?php if ( isset( $message_custom_js ) ) {
561
+ echo esc_attr( $message_custom_js );
562
+ } ?></textarea>
563
+ </div>
564
+
565
+ <!-- Custom code : End -->
566
+ </div>
567
+ <input type="hidden" name="message_data[<?php echo $message_id; ?>][id]" value="<?php echo $message_id; ?>">
568
+ <input type="hidden" class="message_id" name="message_id" value="<?php echo $message_id; ?>">
569
  <?php
570
 
571
+ if ( ! empty( $action['message_id'] ) ) {
572
  ?></div>
573
  <?php
574
  } else {
575
+
576
  ?>
577
+ <p class="message_row">
578
+ <label class="message_label">&nbsp;</label>
579
+ <span>
580
  <span class="shortcode_description admin_field_icon"></span>
581
+ <?php
582
+ echo sprintf( __( 'You may add <code>[%s]</code> where you want to show this message.', 'icegram' ), 'icegram messages="' . $post->ID . '"' );
583
  ?>
584
  </span></p>
585
  <?php
590
  // Used to save the settings which are being made in the message form and added to message page appropriately
591
  function update_message_settings( $post_id, $post ) {
592
 
593
+ if ( empty( $post_id ) || empty( $post ) || empty( $_POST['message_data'] ) || empty( $_POST['message_data'][ $post_id ] ) ) {
594
+ return;
595
+ }
596
+ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
597
+ return;
598
+ }
599
+ if ( is_int( wp_is_post_revision( $post ) ) ) {
600
+ return;
601
+ }
602
+ if ( is_int( wp_is_post_autosave( $post ) ) ) {
603
+ return;
604
+ }
605
+ if ( empty( $_POST['icegram_message_meta_nonce'] ) || ! wp_verify_nonce( $_POST['icegram_message_meta_nonce'], 'icegram_message_save_data' ) ) {
606
+ return;
607
+ }
608
+ if ( ! current_user_can( 'edit_post', $post_id ) ) {
609
+ return;
610
+ }
611
+ if ( $post->post_type != 'ig_message' ) {
612
+ return;
613
+ }
614
 
615
+ $message_data = $_POST['message_data'][ $post_id ];
616
+ $type = $message_data['type'];
617
 
618
+ if ( isset( $message_data['theme'][ $type ] ) ) {
619
+ $message_data['theme'] = $message_data['theme'][ $type ];
620
  } else {
621
  unset( $message_data['theme'] );
622
  }
623
+ if ( isset( $message_data['animation'][ $type ] ) ) {
624
+ $message_data['animation'] = $message_data['animation'][ $type ];
625
  } else {
626
  unset( $message_data['animation'] );
627
  }
628
+ if ( isset( $message_data['position'][ $type ] ) ) {
629
+ $message_data['position'] = $message_data['position'][ $type ];
630
+ } elseif ( isset( $message_data['position']['ig_default'] ) ) {
631
  $message_data['position'] = $message_data['position']['ig_default'];
632
  }
633
 
634
  $message_data = apply_filters( 'icegram_update_message_data', $message_data, $post_id );
635
  update_post_meta( $post_id, 'icegram_message_data', $message_data );
636
+ update_post_meta( $post_id, 'icegram_message_preview_data', $message_data );
637
+
638
  }
639
 
640
  // Additionally save message body content in post_content of post table
641
  function save_message_in_post_content( $post_data ) {
642
 
643
+ if ( ! empty( $_POST['post_type'] ) && $_POST['post_type'] == 'ig_message' && ! empty( $_POST['message_data'] ) ) {
644
+ $message_id = $_POST['ID'];
645
+ $post_data['post_content'] = $_POST['message_data'][ $message_id ]['message'];
 
 
646
 
647
+ if ( isset( $_POST['message_data'][ $message_id ]['post_title'] ) ) {
648
+
649
+ if ( ! empty( $_POST['message_data'][ $message_id ]['post_title'] ) ) {
650
+ $post_data['post_title'] = $_POST['message_data'][ $message_id ]['post_title'];
651
  } else {
652
+ $post_data['post_title'] = $_POST['message_data'][ $message_id ]['headline'];
653
  }
654
+
655
  }
656
+ }
657
+
658
  return $post_data;
659
  }
660
 
663
 
664
  $date = $existing_columns['date'];
665
  unset( $existing_columns['date'] );
666
+
667
+ $existing_columns['message_type'] = __( 'Type', 'icegram' );
668
+ $existing_columns['message_theme'] = __( 'Theme', 'icegram' );
669
+ $existing_columns['message_thumbnail'] = __( 'Thumbnail', 'icegram' );
670
+ $existing_columns['date'] = $date;
671
 
672
  return apply_filters( 'icegram_manage_message_columns', $existing_columns );
673
 
675
 
676
  // Add message columns data to message dashboard
677
  function custom_columns( $column ) {
678
+ global $post, $icegram;
679
 
680
+ if ( ( is_object( $post ) && $post->post_type != 'ig_message' ) ) {
681
  return;
682
+ }
683
 
684
+ $message_data = get_post_meta( $post->ID, 'icegram_message_data', true );
685
  if ( empty( $message_data['type'] ) ) {
686
  return;
687
  }
688
+ $class_name = 'Icegram_Message_Type_' . str_replace( ' ', '_', ucwords( str_replace( '-', ' ', $message_data['type'] ) ) );
689
+ if ( ! class_exists( $class_name ) ) {
690
+ return;
691
+ }
692
+ $type = ucwords( str_replace( "-", ' ', $message_data['type'] ) );
693
+ $theme = ucwords( str_replace( "-", ' ', $message_data['theme'] ) );
694
+
695
+ $bg_img = $icegram->message_types[ $message_data['type'] ]['themes'][ $message_data['theme'] ]['baseurl'] . $message_data['theme'] . ".png";
696
+
697
+ switch ( $column ) {
698
  case 'message_type':
699
+ echo esc_attr( $type );
700
  break;
701
 
702
  case 'message_theme':
703
+ echo esc_attr( $theme );
704
  break;
705
 
706
  case 'message_thumbnail':
707
  // echo "<img src='$bg_img' style='max-width: 200px; max-height: 100px;'>";
708
+ echo "<img src='" . esc_attr( $bg_img ) . "' style='max-width: 100%; max-height: 100px;'>";
709
  break;
710
 
711
  default:
712
  do_action( 'icegram_manage_message_custom_column', $column, $message_data );
713
  break;
714
+
715
  }
716
 
717
  }
723
  $settings = array();
724
  foreach ( $icegram->message_types as $type => $value ) {
725
  foreach ( $value['settings'] as $setting => $property ) {
726
+ $settings[ $setting ][] = $type;
727
  }
728
  }
729
+
730
  return apply_filters( 'icegram_message_settings_to_show', $settings );
731
 
732
  }
737
  global $icegram;
738
  $form_layouts = array();
739
  foreach ( $icegram->message_types as $type => $value ) {
740
+ if ( empty( $value['settings']['form_layout'] ) ) {
741
  continue;
742
+ }
743
 
744
+ if ( ! empty( $value['settings']['form_layout']['values'] ) ) {
745
  foreach ( $value['settings']['form_layout']['values'] as $form_layout ) {
746
+ $form_layouts[ $form_layout ][] = $type;
747
+ }
748
  }
749
  }
750
+
751
  // return apply_filters( 'icegram_message_form_layouts_to_show', $form_layouts );
752
  return $form_layouts;
753
 
760
  global $icegram;
761
  $positions = array();
762
  foreach ( $icegram->message_types as $type => $value ) {
763
+ if ( empty( $value['settings']['position'] ) ) {
764
  continue;
765
+ }
766
 
767
+ if ( ! empty( $value['settings']['position']['values'] ) ) {
768
  foreach ( $value['settings']['position']['values'] as $position ) {
769
+ $positions[ $position ][] = $type;
770
+ }
771
  }
772
  }
773
+
774
  return apply_filters( 'icegram_message_positions_to_show', $positions );
775
 
776
  }
777
+
778
  // Default message data for newly created message
779
  function default_message_data( $message_type = '' ) {
780
 
781
  global $icegram;
782
  $default_themes = array();
783
  foreach ( $icegram->message_types as $type => $value ) {
784
+ if ( isset( $value['settings']['theme']['default'] ) ) {
785
+ $default_themes[ $type ] = $value['settings']['theme']['default'];
786
  }
787
  }
788
+ if ( ! empty( $message_type ) ) {
789
+ $default_message = $icegram->message_types[ $message_type ];
790
  } else {
791
+ $default_message = reset( $icegram->message_types );
792
  }
793
+ $default_message_data = array(
794
+ 'type' => $default_message['type'],
795
+ 'position' => ( ! empty( $default_message['settings']['position']['values'][0] ) ) ? $default_message['settings']['position']['values'][0] : '',
796
+ 'text_color' => ( ! empty( $default_message['settings']['text_color']['default'] ) ) ? $default_message['settings']['text_color']['default'] : '',
797
+ 'bg_color' => ( ! empty( $default_message['settings']['bg_color']['default'] ) ) ? $default_message['settings']['bg_color']['default'] : '',
798
+ 'theme' => $default_themes
799
+ );
800
+
801
  return apply_filters( 'icegram_default_message_data', $default_message_data );
802
  }
803
 
804
  // Form styles for the form
805
  //TODO :: check this and do changes if required
806
+ function available_form_styles() {
807
  $available_form_styles = array(
808
+ array( 'name' => 'Style 0' ),
809
+ array( 'name' => 'Style 1' ),
810
+ array( 'name' => 'Style 2' ),
811
+ array( 'name' => 'Style 3' ),
812
+ array( 'name' => 'Style 4' )
813
+ );
814
+
815
  return $available_form_styles;
816
  }
817
+
818
  // All headline to generate randomly for messages
819
  function available_headlines( $available_headlines = array() ) {
820
  $available_headlines = array_merge( $available_headlines, array(
821
+ __( 'Here Is A Method That Is Helping ____ To ____', 'icegram' ),
822
+ __( '__ Little Known Ways To ____', 'icegram' ),
823
+ __( 'Get Rid Of ____ Once And For All', 'icegram' ),
824
+ __( 'How To ____ So You Can ____', 'icegram' ),
825
+ __( 'They Didn\'t Think I Could ____, But I Did', 'icegram' ),
826
+ __( 'How ____ Made Me ____', 'icegram' ),
827
+ __( 'Are You ____ ?', 'icegram' ),
828
+ __( 'Warning: ____ !', 'icegram' ),
829
+ __( 'Do You Make These Mistakes With ____ ?', 'icegram' ),
830
+ __( '7 Ways To ____', 'icegram' ),
831
+ __( 'If You\'re ____, You Can ____', 'icegram' ),
832
+ __( 'Turn your ____ into a ____', 'icegram' ),
833
+ __( 'Want To Be A ____?', 'icegram' ),
834
+ __( 'The Ugly Truth About Your Beautiful ____', 'icegram' ),
835
+ __( 'The Secret to ____ Is Simply ____!', 'icegram' ),
836
+ __( 'The Quickest Way I Know To ____', 'icegram' ),
837
+ __( 'The Lazy Man\'s Way To ____', 'icegram' ),
838
+ __( 'The Amazing Story Of ____ That Requires So Little Of ____ You Could ____', 'icegram' ),
839
+ __( 'The Amazing Secret Of The ____ Genius Who Is Afraid Of ____', 'icegram' ),
840
+ __( 'The 10 Wackiest Ideas That ____... And How You Can Too!', 'icegram' ),
841
+ __( 'The Inside Secrets To ____ With Crazy, Outlandish And Outrageous ____', 'icegram' ),
842
+ __( '____ Like A ____', 'icegram' ),
843
+ __( 'Remember When You Could Have ____, And You Didn\'t?', 'icegram' ),
844
+ __( 'Is The ____ Worth $x To You?', 'icegram' ),
845
+ __( 'Increase your ____, reduce ____, maintain ____ and ____ with ____', 'icegram' ),
846
+ __( 'If You Can ____ You Can ____', 'icegram' ),
847
+ __( 'I Discovered How To ____... Now I\'m Revealing My Secret', 'icegram' ),
848
+ __( 'How To Turn Your ____ Into The Most ____', 'icegram' ),
849
+ __( 'How To Take The Headache Out Of ____', 'icegram' ),
850
+ __( 'How To ____ ... Legally', 'icegram' ),
851
+ __( 'How To ____ That ____', 'icegram' ),
852
+ __( 'How To Discover The ____ That Lies Hidden In Your ____', 'icegram' ),
853
+ __( 'How To ____ Even When Your Not ____', 'icegram' ),
854
+ __( '____ With No ____!', 'icegram' ),
855
+ __( 'Greatest Goldmine of ____ Ever Jammed Into One Big ____', 'icegram' ),
856
+ __( 'Free ____ Tells How To Get Better ____', 'icegram' ),
857
+ __( 'FREE ____ Worth $____ for the first 100 People to take Advantage of this Offer', 'icegram' ),
858
+ __( 'Don\'t Try This With Any Other ____', 'icegram' ),
859
+ __( 'Do You Honestly Want To ____?', 'icegram' ),
860
+ __( 'Discover The Magic ____ That Will Bring You ____ & ____!', 'icegram' ),
861
+ __( '____ Man Reveals A Short-Cut To ____', 'icegram' ),
862
+ __( 'Confessions Of A ____', 'icegram' ),
863
+ __( 'Are You Ready To ____?', 'icegram' ),
864
+ __( 'An Open Letter To Everyone Who ____ More Than ____ Per ____', 'icegram' ),
865
+ __( 'An Amazing ____ You Can Carry In Your ____', 'icegram' ),
866
+ __( '21 Secret ____ that will ____... NOW!', 'icegram' )
867
+ ) );
868
+
869
  return $available_headlines;
870
  }
871
 
872
+ function add_message_action( $actions, $post ) {
873
+ if ( $post->post_type != 'ig_message' ) {
874
+ return $actions;
875
+ }
876
+ $actions['duplicate_message'] = '<a class="ig-duplicate-message" href="post.php?message_id=' . $post->ID . '&action=duplicate-message" >' . __( 'Duplicate', 'icegram' ) . '</a>';
877
+
878
  return $actions;
879
  }
880
 
881
+ function duplicate_message() {
882
+ if ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'duplicate-message' && ! empty( $_REQUEST['message_id'] ) ) {
883
  Icegram::duplicate( $_REQUEST['message_id'] );
884
  }
885
  }
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_0_15' ) ) {
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_0_15
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_0_15 {
22
 
23
  /**
24
  * Version of Feedback Library
@@ -27,7 +27,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
27
  * @var string
28
  *
29
  */
30
- public $version = '1.0.15';
31
  /**
32
  * The API URL where we will send feedback data.
33
  *
@@ -217,7 +217,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
217
  if ( ! empty( $url ) ) {
218
  ?>
219
 
220
- <meta http-equiv="refresh" content="0; url=<?php echo $url; ?>"/>
221
 
222
  <?php
223
  }
@@ -255,33 +255,33 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
255
 
256
  ?>
257
 
258
- <style type="text/css">
259
 
260
- .ig-feedback-notice-links li {
261
- display: inline-block;
262
- margin-right: 15px;
263
- }
264
 
265
- .ig-feedback-notice-links li a {
266
- display: inline-block;
267
- color: #10738b;
268
- text-decoration: none;
269
- padding-left: 26px;
270
- position: relative;
271
- }
272
 
273
- .ig-feedback-notice {
274
- display: flex;
275
- align-items: center;
276
- }
277
 
278
- .ig-feedback-plugin-icon {
279
- style =
280
- float: left;
281
- margin-right: 0.5em;
282
- }
283
 
284
- </style>
285
 
286
  <?php
287
 
@@ -422,7 +422,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
422
 
423
  ?>
424
 
425
- <script>
426
 
427
  function doSend(rating, details) {
428
 
@@ -534,7 +534,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
534
  showWidget(delay);
535
 
536
 
537
- </script>
538
  <?php
539
  }
540
 
@@ -551,14 +551,14 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
551
 
552
  ?>
553
 
554
- <div class="rating">
555
- <!--elements are in reversed order, to allow "previous sibling selectors" in CSS-->
556
- <input class="ratings" type="radio" name="rating" value="5" id="5"><label for="5">☆</label>
557
- <input class="ratings" type="radio" name="rating" value="4" id="4"><label for="4">☆</label>
558
- <input class="ratings" type="radio" name="rating" value="3" id="3"><label for="3">☆</label>
559
- <input class="ratings" type="radio" name="rating" value="2" id="2"><label for="2">☆</label>
560
- <input class="ratings" type="radio" name="rating" value="1" id="1"><label for="1">☆</label>
561
- </div>
562
 
563
  <?php
564
 
@@ -582,15 +582,15 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
582
 
583
  ?>
584
 
585
- <div class="emoji">
586
- <!--elements are in reversed order, to allow "previous sibling selectors" in CSS-->
587
- <input class="emojis" type="radio" name="rating" value="love" id="5"/><label for="5" class="ig-emoji" data-reaction="Love">😍</label>
588
- <input class="emojis" type="radio" name="rating" value="smile" id="4"/><label for="4" class="ig-emoji" data-reaction="Smile">😊</label>
589
- <input class="emojis" type="radio" name="rating" value="neutral" id="3"/><label for="3" class="ig-emoji" data-reaction="Neutral">😐</label>
590
- <input class="emojis" type="radio" name="rating" value="sad" id="1"/><label for="2" class="ig-emoji" data-reaction="Sad">😠</label>
591
- <input class="emojis" type="radio" name="rating" value="angry" id="1"/><label for="1" class="ig-emoji" data-reaction="Angry">😡</label>
592
- </div>
593
- <div id="emoji-info"></div>
594
 
595
  <?php
596
 
@@ -615,25 +615,25 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
615
 
616
  ?>
617
 
618
- <div class="ig-general-feedback" id="ig-general-feedback-<?php echo $this->plugin; ?>">
619
- <form class="ig-general-feedback" id="ig-general-feedback">
620
- <p class="ig-feedback-data-name">
621
- <label class="ig-label">Name</label><br/>
622
- <input type="text" name="feedback_data[name]" id="ig-feedback-data-name" value="<?php echo $params['name']; ?>"/>
623
- </p>
624
- <p class="ig-feedback-data-email">
625
- <label class="ig-label"">Email</label><br/>
626
- <input type="email" name="feedback_data[email]" id="ig-feedback-data-email" value="<?php echo $params['email']; ?>"/>
627
- </p>
628
- <p class="ig-feedback-data-message">
629
- <label class="ig-label"">Feedback</label><br/>
630
- <textarea name="feedback_data[details]" id="ig-feedback-data-message"></textarea>
631
- </p>
632
- <p>
633
- <input type="checkbox" name="feedback_data[collect_system_info]" checked="checked" id="ig-feedback-data-consent"/><?php echo $params['consent_text']; ?>
634
- </p>
635
- </form>
636
- </div>
637
 
638
  <?php
639
 
@@ -649,7 +649,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
649
  ob_start();
650
  ?>
651
 
652
- <script type="text/javascript">
653
 
654
  jQuery(document).ready(function ($) {
655
 
@@ -772,7 +772,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
772
  });
773
  });
774
 
775
- </script>
776
 
777
 
778
  <?php
@@ -795,7 +795,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
795
 
796
  ?>
797
 
798
- <script>
799
 
800
  Swal.mixin({
801
  type: 'question',
@@ -843,7 +843,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
843
 
844
  });
845
 
846
- </script>
847
 
848
  <?php
849
  }
@@ -882,7 +882,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
882
  $event = $this->event_prefix . 'plugin.deactivation';
883
 
884
  ?>
885
- <script type="text/javascript">
886
  jQuery(function ($) {
887
  var $deactivateLink = $('#the-list').find('[data-slug="<?php echo $this->plugin; ?>"] span.deactivate a'),
888
  $overlay = $('#ig-deactivate-survey-<?php echo $this->plugin; ?>'),
@@ -1024,7 +1024,7 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
1024
  }
1025
  });
1026
  });
1027
- </script>
1028
  <?php
1029
  }
1030
 
@@ -1039,108 +1039,108 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
1039
  return;
1040
  }
1041
  ?>
1042
- <style type="text/css">
1043
- .ig-deactivate-survey-modal {
1044
- display: none;
1045
- table-layout: fixed;
1046
- position: fixed;
1047
- z-index: 9999;
1048
- width: 100%;
1049
- height: 100%;
1050
- text-align: center;
1051
- font-size: 14px;
1052
- top: 0;
1053
- left: 0;
1054
- background: rgba(0, 0, 0, 0.8);
1055
- }
1056
-
1057
- .ig-deactivate-survey-wrap {
1058
- display: table-cell;
1059
- vertical-align: middle;
1060
- }
1061
-
1062
- .ig-deactivate-survey {
1063
- background-color: #fff;
1064
- max-width: 550px;
1065
- margin: 0 auto;
1066
- padding: 30px;
1067
- text-align: left;
1068
- }
1069
-
1070
- .ig-deactivate-survey .error {
1071
- display: block;
1072
- color: red;
1073
- margin: 0 0 10px 0;
1074
- }
1075
-
1076
- .ig-deactivate-survey-title {
1077
- display: block;
1078
- font-size: 18px;
1079
- font-weight: 700;
1080
- text-transform: uppercase;
1081
- border-bottom: 1px solid #ddd;
1082
- padding: 0 0 18px 0;
1083
- margin: 0 0 18px 0;
1084
- }
1085
-
1086
- .ig-deactivate-survey-options {
1087
- border-bottom: 1px solid #ddd;
1088
- padding: 0 0 18px 0;
1089
- margin: 0 0 18px 0;
1090
- }
1091
-
1092
- .ig-deactivate-survey-info-data {
1093
- padding: 0 0 18px 0;
1094
- margin: 10px 10px 10px 30px;
1095
- }
1096
-
1097
- .ig-deactivate-survey-info-name, .ig-deactivate-survey-info-email-address {
1098
- width: 230px;
1099
- margin: 10px;
1100
- }
1101
-
1102
- .ig-deactivate-survey-title span {
1103
- color: #999;
1104
- margin-right: 10px;
1105
- }
1106
-
1107
- .ig-deactivate-survey-desc {
1108
- display: block;
1109
- font-weight: 600;
1110
- margin: 0 0 18px 0;
1111
- }
1112
-
1113
- .ig-deactivate-survey-option {
1114
- margin: 0 0 10px 0;
1115
- }
1116
-
1117
- .ig-deactivate-survey-option-input {
1118
- margin-right: 10px !important;
1119
- }
1120
-
1121
- .ig-deactivate-survey-option-details {
1122
- display: none;
1123
- width: 90%;
1124
- margin: 10px 0 0 30px;
1125
- }
1126
-
1127
- .ig-deactivate-survey-footer {
1128
- margin-top: 18px;
1129
- }
1130
-
1131
- .ig-deactivate-survey-deactivate {
1132
- float: right;
1133
- font-size: 13px;
1134
- color: #ccc;
1135
- text-decoration: none;
1136
- padding-top: 7px;
1137
- }
1138
-
1139
- .ig-deactivate-survey-loader {
1140
- vertical-align: middle;
1141
- padding: 10px;
1142
- }
1143
- </style>
1144
  <?php
1145
  }
1146
 
@@ -1182,40 +1182,40 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
1182
  ),
1183
  );
1184
  ?>
1185
- <div class="ig-deactivate-survey-modal" id="ig-deactivate-survey-<?php echo $this->plugin; ?>">
1186
- <div class="ig-deactivate-survey-wrap">
1187
- <form class="ig-deactivate-survey" method="post">
1188
- <span class="ig-deactivate-survey-title"><span class="dashicons dashicons-testimonial"></span><?php echo ' ' . esc_html__( 'Quick Feedback', $this->plugin ); ?></span>
1189
- <span class="ig-deactivate-survey-desc"><?php echo sprintf( esc_html__( 'If you have a moment, please share why you are deactivating %s:', $this->plugin ), $this->name ); ?></span>
1190
- <div class="ig-deactivate-survey-options">
1191
  <?php foreach ( $options as $id => $option ) : ?>
1192
- <div class="ig-deactivate-survey-option">
1193
- <label for="ig-deactivate-survey-option-<?php echo $this->plugin; ?>-<?php echo $id; ?>" class="ig-deactivate-survey-option-label">
1194
- <input id="ig-deactivate-survey-option-<?php echo $this->plugin; ?>-<?php echo $id; ?>" class="ig-deactivate-survey-option-input" type="radio" name="code" value="<?php echo $id; ?>" data-option-slug="<?php echo $option['slug']; ?>"/>
1195
- <span class="ig-deactivate-survey-option-reason"><?php echo $option['title']; ?></span>
1196
- </label>
1197
  <?php if ( ! empty( $option['details'] ) ) : ?>
1198
- <input class="ig-deactivate-survey-option-details" type="text" placeholder="<?php echo $option['details']; ?>"/>
1199
  <?php endif; ?>
1200
- </div>
1201
  <?php endforeach; ?>
1202
- </div>
1203
- <div class="ig-deactivate-survey-help-consent">
1204
- <input id="ig-deactivate-survey-help-consent-<?php echo $this->plugin; ?>" class="ig-deactivate-survey-option-input" type="checkbox" name="code" data-option-slug="<?php echo $option['slug']; ?>"/><b>Yes, I give my consent to track plugin usage and contact me back to make this plugin works!</b>
1205
- </div>
1206
- <div class="ig-deactivate-survey-info-data">
1207
-
1208
- <input type="text" class="ig-deactivate-survey-info-name" id="ig-deactivate-survey-info-name" placeholder="Enter Name" name="ig-deactivate-survey-info-name" value=""/>
1209
- <input type="text" class="ig-deactivate-survey-info-email-address" id="ig-deactivate-survey-info-email-address" name="ig-deactivate-survey-info-email-address" value="<?php echo $email; ?>"/>
1210
- </div>
1211
- <div class="ig-deactivate-survey-footer">
1212
- <button type="submit" class="ig-deactivate-survey-submit button button-primary button-large"><?php echo sprintf( esc_html__( 'Submit %s Deactivate', $this->plugin ), '&amp;' ); ?></button>
1213
- <img class="ig-deactivate-survey-loader" id="ig-deactivate-survey-loader" src="<?php echo plugin_dir_url( __FILE__ ); ?>/assets/images/loading.gif"/>
1214
- <a href="#" class="ig-deactivate-survey-deactivate"><?php echo sprintf( esc_html__( 'Skip %s Deactivate', $this->plugin ), '&amp;' ); ?></a>
1215
- </div>
1216
- </form>
1217
- </div>
1218
- </div>
1219
  <?php
1220
  }
1221
 
@@ -1442,9 +1442,10 @@ if ( ! class_exists( 'IG_Feedback_V_1_0_15' ) ) {
1442
  unset( $data['misc'] );
1443
 
1444
  $default_meta_info = array(
1445
- 'plugin' => sanitize_key( $plugin ),
1446
- 'locale' => get_locale(),
1447
- 'wp_version' => get_bloginfo( 'version' )
 
1448
  );
1449
 
1450
  $meta_info = wp_parse_args( $meta_info, $default_meta_info );
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
+ if ( ! class_exists( 'IG_Feedback_V_1_0_16' ) ) {
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_0_16
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_0_16 {
22
 
23
  /**
24
  * Version of Feedback Library
27
  * @var string
28
  *
29
  */
30
+ public $version = '1.0.16';
31
  /**
32
  * The API URL where we will send feedback data.
33
  *
217
  if ( ! empty( $url ) ) {
218
  ?>
219
 
220
+ <meta http-equiv="refresh" content="0; url=<?php echo $url; ?>"/>
221
 
222
  <?php
223
  }
255
 
256
  ?>
257
 
258
+ <style type="text/css">
259
 
260
+ .ig-feedback-notice-links li {
261
+ display: inline-block;
262
+ margin-right: 15px;
263
+ }
264
 
265
+ .ig-feedback-notice-links li a {
266
+ display: inline-block;
267
+ color: #10738b;
268
+ text-decoration: none;
269
+ padding-left: 26px;
270
+ position: relative;
271
+ }
272
 
273
+ .ig-feedback-notice {
274
+ display: flex;
275
+ align-items: center;
276
+ }
277
 
278
+ .ig-feedback-plugin-icon {
279
+ style =
280
+ float: left;
281
+ margin-right: 0.5em;
282
+ }
283
 
284
+ </style>
285
 
286
  <?php
287
 
422
 
423
  ?>
424
 
425
+ <script>
426
 
427
  function doSend(rating, details) {
428
 
534
  showWidget(delay);
535
 
536
 
537
+ </script>
538
  <?php
539
  }
540
 
551
 
552
  ?>
553
 
554
+ <div class="rating">
555
+ <!--elements are in reversed order, to allow "previous sibling selectors" in CSS-->
556
+ <input class="ratings" type="radio" name="rating" value="5" id="5"><label for="5">☆</label>
557
+ <input class="ratings" type="radio" name="rating" value="4" id="4"><label for="4">☆</label>
558
+ <input class="ratings" type="radio" name="rating" value="3" id="3"><label for="3">☆</label>
559
+ <input class="ratings" type="radio" name="rating" value="2" id="2"><label for="2">☆</label>
560
+ <input class="ratings" type="radio" name="rating" value="1" id="1"><label for="1">☆</label>
561
+ </div>
562
 
563
  <?php
564
 
582
 
583
  ?>
584
 
585
+ <div class="emoji">
586
+ <!--elements are in reversed order, to allow "previous sibling selectors" in CSS-->
587
+ <input class="emojis" type="radio" name="rating" value="love" id="5"/><label for="5" class="ig-emoji" data-reaction="Love">😍</label>
588
+ <input class="emojis" type="radio" name="rating" value="smile" id="4"/><label for="4" class="ig-emoji" data-reaction="Smile">😊</label>
589
+ <input class="emojis" type="radio" name="rating" value="neutral" id="3"/><label for="3" class="ig-emoji" data-reaction="Neutral">😐</label>
590
+ <input class="emojis" type="radio" name="rating" value="sad" id="1"/><label for="2" class="ig-emoji" data-reaction="Sad">😠</label>
591
+ <input class="emojis" type="radio" name="rating" value="angry" id="1"/><label for="1" class="ig-emoji" data-reaction="Angry">😡</label>
592
+ </div>
593
+ <div id="emoji-info"></div>
594
 
595
  <?php
596
 
615
 
616
  ?>
617
 
618
+ <div class="ig-general-feedback" id="ig-general-feedback-<?php echo $this->plugin; ?>">
619
+ <form class="ig-general-feedback" id="ig-general-feedback">
620
+ <p class="ig-feedback-data-name">
621
+ <label class="ig-label">Name</label><br/>
622
+ <input type="text" name="feedback_data[name]" id="ig-feedback-data-name" value="<?php echo $params['name']; ?>"/>
623
+ </p>
624
+ <p class="ig-feedback-data-email">
625
+ <label class="ig-label"">Email</label><br/>
626
+ <input type="email" name="feedback_data[email]" id="ig-feedback-data-email" value="<?php echo $params['email']; ?>"/>
627
+ </p>
628
+ <p class="ig-feedback-data-message">
629
+ <label class="ig-label"">Feedback</label><br/>
630
+ <textarea name="feedback_data[details]" id="ig-feedback-data-message"></textarea>
631
+ </p>
632
+ <p>
633
+ <input type="checkbox" name="feedback_data[collect_system_info]" checked="checked" id="ig-feedback-data-consent"/><?php echo $params['consent_text']; ?>
634
+ </p>
635
+ </form>
636
+ </div>
637
 
638
  <?php
639
 
649
  ob_start();
650
  ?>
651
 
652
+ <script type="text/javascript">
653
 
654
  jQuery(document).ready(function ($) {
655
 
772
  });
773
  });
774
 
775
+ </script>
776
 
777
 
778
  <?php
795
 
796
  ?>
797
 
798
+ <script>
799
 
800
  Swal.mixin({
801
  type: 'question',
843
 
844
  });
845
 
846
+ </script>
847
 
848
  <?php
849
  }
882
  $event = $this->event_prefix . 'plugin.deactivation';
883
 
884
  ?>
885
+ <script type="text/javascript">
886
  jQuery(function ($) {
887
  var $deactivateLink = $('#the-list').find('[data-slug="<?php echo $this->plugin; ?>"] span.deactivate a'),
888
  $overlay = $('#ig-deactivate-survey-<?php echo $this->plugin; ?>'),
1024
  }
1025
  });
1026
  });
1027
+ </script>
1028
  <?php
1029
  }
1030
 
1039
  return;
1040
  }
1041
  ?>
1042
+ <style type="text/css">
1043
+ .ig-deactivate-survey-modal {
1044
+ display: none;
1045
+ table-layout: fixed;
1046
+ position: fixed;
1047
+ z-index: 9999;
1048
+ width: 100%;
1049
+ height: 100%;
1050
+ text-align: center;
1051
+ font-size: 14px;
1052
+ top: 0;
1053
+ left: 0;
1054
+ background: rgba(0, 0, 0, 0.8);
1055
+ }
1056
+
1057
+ .ig-deactivate-survey-wrap {
1058
+ display: table-cell;
1059
+ vertical-align: middle;
1060
+ }
1061
+
1062
+ .ig-deactivate-survey {
1063
+ background-color: #fff;
1064
+ max-width: 550px;
1065
+ margin: 0 auto;
1066
+ padding: 30px;
1067
+ text-align: left;
1068
+ }
1069
+
1070
+ .ig-deactivate-survey .error {
1071
+ display: block;
1072
+ color: red;
1073
+ margin: 0 0 10px 0;
1074
+ }
1075
+
1076
+ .ig-deactivate-survey-title {
1077
+ display: block;
1078
+ font-size: 18px;
1079
+ font-weight: 700;
1080
+ text-transform: uppercase;
1081
+ border-bottom: 1px solid #ddd;
1082
+ padding: 0 0 18px 0;
1083
+ margin: 0 0 18px 0;
1084
+ }
1085
+
1086
+ .ig-deactivate-survey-options {
1087
+ border-bottom: 1px solid #ddd;
1088
+ padding: 0 0 18px 0;
1089
+ margin: 0 0 18px 0;
1090
+ }
1091
+
1092
+ .ig-deactivate-survey-info-data {
1093
+ padding: 0 0 18px 0;
1094
+ margin: 10px 10px 10px 30px;
1095
+ }
1096
+
1097
+ .ig-deactivate-survey-info-name, .ig-deactivate-survey-info-email-address {
1098
+ width: 230px;
1099
+ margin: 10px;
1100
+ }
1101
+
1102
+ .ig-deactivate-survey-title span {
1103
+ color: #999;
1104
+ margin-right: 10px;
1105
+ }
1106
+
1107
+ .ig-deactivate-survey-desc {
1108
+ display: block;
1109
+ font-weight: 600;
1110
+ margin: 0 0 18px 0;
1111
+ }
1112
+
1113
+ .ig-deactivate-survey-option {
1114
+ margin: 0 0 10px 0;
1115
+ }
1116
+
1117
+ .ig-deactivate-survey-option-input {
1118
+ margin-right: 10px !important;
1119
+ }
1120
+
1121
+ .ig-deactivate-survey-option-details {
1122
+ display: none;
1123
+ width: 90%;
1124
+ margin: 10px 0 0 30px;
1125
+ }
1126
+
1127
+ .ig-deactivate-survey-footer {
1128
+ margin-top: 18px;
1129
+ }
1130
+
1131
+ .ig-deactivate-survey-deactivate {
1132
+ float: right;
1133
+ font-size: 13px;
1134
+ color: #ccc;
1135
+ text-decoration: none;
1136
+ padding-top: 7px;
1137
+ }
1138
+
1139
+ .ig-deactivate-survey-loader {
1140
+ vertical-align: middle;
1141
+ padding: 10px;
1142
+ }
1143
+ </style>
1144
  <?php
1145
  }
1146
 
1182
  ),
1183
  );
1184
  ?>
1185
+ <div class="ig-deactivate-survey-modal" id="ig-deactivate-survey-<?php echo $this->plugin; ?>">
1186
+ <div class="ig-deactivate-survey-wrap">
1187
+ <form class="ig-deactivate-survey" method="post">
1188
+ <span class="ig-deactivate-survey-title"><span class="dashicons dashicons-testimonial"></span><?php echo ' ' . esc_html__( 'Quick Feedback', $this->plugin ); ?></span>
1189
+ <span class="ig-deactivate-survey-desc"><?php echo sprintf( esc_html__( 'If you have a moment, please share why you are deactivating %s:', $this->plugin ), $this->name ); ?></span>
1190
+ <div class="ig-deactivate-survey-options">
1191
  <?php foreach ( $options as $id => $option ) : ?>
1192
+ <div class="ig-deactivate-survey-option">
1193
+ <label for="ig-deactivate-survey-option-<?php echo $this->plugin; ?>-<?php echo $id; ?>" class="ig-deactivate-survey-option-label">
1194
+ <input id="ig-deactivate-survey-option-<?php echo $this->plugin; ?>-<?php echo $id; ?>" class="ig-deactivate-survey-option-input" type="radio" name="code" value="<?php echo $id; ?>" data-option-slug="<?php echo $option['slug']; ?>"/>
1195
+ <span class="ig-deactivate-survey-option-reason"><?php echo $option['title']; ?></span>
1196
+ </label>
1197
  <?php if ( ! empty( $option['details'] ) ) : ?>
1198
+ <input class="ig-deactivate-survey-option-details" type="text" placeholder="<?php echo $option['details']; ?>"/>
1199
  <?php endif; ?>
1200
+ </div>
1201
  <?php endforeach; ?>
1202
+ </div>
1203
+ <div class="ig-deactivate-survey-help-consent">
1204
+ <input id="ig-deactivate-survey-help-consent-<?php echo $this->plugin; ?>" class="ig-deactivate-survey-option-input" type="checkbox" name="code" data-option-slug="<?php echo $option['slug']; ?>"/><b>Yes, I give my consent to track plugin usage and contact me back to make this plugin works!</b>
1205
+ </div>
1206
+ <div class="ig-deactivate-survey-info-data">
1207
+
1208
+ <input type="text" class="ig-deactivate-survey-info-name" id="ig-deactivate-survey-info-name" placeholder="Enter Name" name="ig-deactivate-survey-info-name" value=""/>
1209
+ <input type="text" class="ig-deactivate-survey-info-email-address" id="ig-deactivate-survey-info-email-address" name="ig-deactivate-survey-info-email-address" value="<?php echo $email; ?>"/>
1210
+ </div>
1211
+ <div class="ig-deactivate-survey-footer">
1212
+ <button type="submit" class="ig-deactivate-survey-submit button button-primary button-large"><?php echo sprintf( esc_html__( 'Submit %s Deactivate', $this->plugin ), '&amp;' ); ?></button>
1213
+ <img class="ig-deactivate-survey-loader" id="ig-deactivate-survey-loader" src="<?php echo plugin_dir_url( __FILE__ ); ?>/assets/images/loading.gif"/>
1214
+ <a href="#" class="ig-deactivate-survey-deactivate"><?php echo sprintf( esc_html__( 'Skip %s Deactivate', $this->plugin ), '&amp;' ); ?></a>
1215
+ </div>
1216
+ </form>
1217
+ </div>
1218
+ </div>
1219
  <?php
1220
  }
1221
 
1442
  unset( $data['misc'] );
1443
 
1444
  $default_meta_info = array(
1445
+ 'plugin' => sanitize_key( $plugin ),
1446
+ 'locale' => get_locale(),
1447
+ 'wp_version' => get_bloginfo( 'version' ),
1448
+ 'php_version' => PHP_VERSION
1449
  );
1450
 
1451
  $meta_info = wp_parse_args( $meta_info, $default_meta_info );
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_0_15' ) ) {
8
 
9
  /**
10
- * Class IG_Tracker_V_1_0_15
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_0_15
16
  * @since 1.0.0
17
  *
18
  * @copyright Copyright (c) 2019, Icegram
@@ -20,7 +20,7 @@ if ( ! class_exists( 'IG_Tracker_V_1_0_15' ) ) {
20
  * @author Icegram
21
  * @package feedback
22
  */
23
- class IG_Tracker_V_1_0_15 {
24
 
25
  /**
26
  * Get Active, Inactive or all plugins info
4
  exit; // Exit if accessed directly.
5
  }
6
 
7
+ if ( ! class_exists( 'IG_Tracker_V_1_0_16' ) ) {
8
 
9
  /**
10
+ * Class IG_Tracker_V_1_0_16
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_0_16
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_0_16 {
24
 
25
  /**
26
  * Get Active, Inactive or all plugins info
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.36
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.0.15';
39
  $ig_tracker = 'IG_Tracker_V_' . str_replace( '.', '_', $feedback_version );
40
 
41
- $this->version = "1.10.36";
42
  $this->shortcode_instances = array();
43
  $this->mode = 'local';
44
  $this->plugin_url = untrailingslashit( plugins_url( '/', __FILE__ ) );
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.37
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.0.16';
39
  $ig_tracker = 'IG_Tracker_V_' . str_replace( '.', '_', $feedback_version );
40
 
41
+ $this->version = "1.10.37";
42
  $this->shortcode_instances = array();
43
  $this->mode = 'local';
44
  $this->plugin_url = untrailingslashit( plugins_url( '/', __FILE__ ) );
readme.txt CHANGED
@@ -1,146 +1,134 @@
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, wordpress popups,Exit-popup, optin-popup, popups, hellobar, optin, 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
7
- Stable tag: 1.10.36
8
  License: GPLv3
9
 
10
- The best WP popup plugin that let's 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.
11
 
12
  == Description ==
13
 
14
- Icegram is the best plugin to easily create beautiful optins and call to actions of your choice, show them to targeted visitors and convert them to customers and fans.
15
- Icegram totally eliminates the need to hire a developer. You can easily set it up within minutes and start recording results right away.
16
- Most similar quality plugins are paid and still offer a lot less. Icegram is full featured, easy to use, trusted by 20,000+ users, and is still free.
17
 
 
18
 
19
- = The Only Multi Purpose Plugin - a lot beyond optins =
20
- Icegram is not the typical optin / list-building / email subscription plugin. You can do a lot more than that!
21
 
22
- * **Easily Grow Your Subscriber List:**Show attention grabbing, high converting email optin forms and build your subscriber list.
23
- * **Instantly Drive Traffic** Display powerful call to action (CTA) buttons and drive visitors to any page you like.
24
- * **Start Engaging and Converting Visitors:**Grab visitors’ attention, make an announcement, engage them to reduce bounce rate or offer them any other call to action.
25
 
26
- >**Icegram doubled my Optin rates Overnight** - by [Remo Homer](https://wordpress.org/support/profile/remohomer)
27
- Icegram **doubled our opt-in rates** overnight. Simple as that. It's fast to setup and easy for our client to manage. Support is great, and best of all - FREE!
 
 
 
 
 
 
 
28
 
29
 
30
  = Get Multiple Message Styles - popups, header bars and much more =
31
- Icegram provides not one or two, but four different optin types - **Lightbox Popups, Header & Footer Action Bars, Toast Notifications and Slide in Messengers.**
 
 
 
 
 
 
 
 
32
 
33
- * **Well Timed Popups -** Create time targeted popups / lightboxes that are optimized for conversion. Lots of customization possible.
34
- * **Sleek Action Bars -** Great for announcements, lead generation and CTAs. Icegram provides both header bars as well as footer bars.
35
- * **Attention Grabbing Toast Notifications -** Super useful for alerts, invitations, and multi step CTAs.
36
- * **Appealing Slide-in Messengers -** Welcome new visitors, recommend blog posts, provide links to support resources and more with slide in messengers.
37
 
38
- If you want more, Icegram also provides eight more innovative message styles - Sidebars, Overlays, After / Before Post and Inlines, Stickies, Badges, Ribbons, Tabs & Interstitials as premium add-ons.[ Check the premium collection here.](https://www.icegram.com/addons/)
39
 
40
- >Icegram is better than premium plugins! Trust me By [princegift2892](https://profiles.wordpress.org/princegift2892)
41
- I have used premium plugins too. But this plugin is better than premium one! So many options, customizations, and best support! I am using this plugin on both of my websites ;)
42
 
 
43
 
44
- = Lots of Powerful Features =
45
- * Easy to use, user friendly interface
46
- * Easily create and target unlimited optin forms and messages
47
- * Multiple Different Opt-in Form / Message Styles: Popups, Header / Footer bars, Toast notifications, Slide-in Messengers. Plus 8 other premium styles.
48
- * Multiple Theme Designs: Extensive range of beautiful and fully customizable themes to make your CTA messages and email optin popups look amazing
49
- * Easy Integrations with Email Marketing Service: MailChimp, Constant Contact, AWeber, Campaign Monitor, GetResponse, InfusionSoft and all other email marketing services
50
  * Mobile Responsive design
51
  * Time and sequence different messages
52
  * Multiple display positions - top, middle, bottom, left, right, center
53
- * Powerful Display Targeting Rules: Decide where and when to show your campaigns and optin forms- On specific pages, categories or posts; to certain users; on specific schedule, via shortcode - and many other rules.
54
  * Track results of each optin form
55
- * Analytics and Reporting: View conversion and impression analytics of all campaigns and messages using a free add-on
56
  * Extensive Customization for power users - custom HTML, CSS, JS option; extensive JavaScript API; make it suit your needs
57
- * Split A/B Testing (premium feature): Create variations and automatically determine which messages convert better
58
- * Exit Intent (premium feature): Target abandoning visitors by showing popups and other messages when they are about to exit your site
59
  * Unique Headline Generator that creates engaging headlines - so you get a copywriting headstart
60
  * No compulsion to show Icegram name or branding
61
  * No need to create an account on our site to use Icegram
62
  * Automatic Updates
63
- * Range of premium add-ons to supercharge your results
64
  * Friendly and Professional Support Team
65
  * Plus a lot more!!
66
 
67
- > **I have 20 Different Plugins across 3 websites but Icegram is my go-to plugin** said [JamieTurner1313](https://wordpress.org/support/topic/one-of-the-best-plugins-ive-used-3) from 60 Second Marketer,
68
- There are plenty of similar plug-ins like this on WordPress, but none of them provide as much bang for the buck as Icegram. I have, I'm guessing, 20 different plugins across 3 websites and this is **my go-to plugin to drive downloads of my e-books**. I especially like the A/B split testing feature. And the customer support has been very prompt. Five stars for sure.
69
 
 
70
 
71
- = Create an Optin Form within minutes. No Need to Hire a Developer! =
72
 
73
- Icegram is easy and you don’t need a developer to figure this out. Icegram lets you create optins and CTA messages in under a minute. You can choose from variety of optin types, customize it as per your liking and target it instantly. Creating an Icegram message is very simple and you don’t need technical knowledge to get it to work.
74
 
 
75
 
76
- >
77
- **Icegram simplified things for a non-programmer like me**
78
- By [varunjadhav](https://profiles.wordpress.org/varunjadhav),
79
- Icegram simplified things for a non-programmer startup entrepreneur like me, and has become a tool I recommend to everyone else. It’s a **wonderfully productive On-site Retargeting Plugin!** And it's free. In one week of using Icegram, our **bounce rate went down significantly** and visitor’s time on site went up.
80
 
 
81
 
82
- = Choose from Beautiful, Mobile Responsive Design Templates =
83
 
84
- Icegram provides you with **20 high converting** and very responsive design templates. You can customize the colors of these design templates to match the color pallette of your brand/ website.
85
 
86
- = Start Growing Your Email Subscriber List Instantly =
87
- Icegram optins **specialize in converting visitors to subscribers**. Icegram allows you to create high converting subscriber forms and target them strategically at various places on your website.
88
 
 
89
 
90
- >
91
- **I doubled my subscriber list with Icegram within 1 month**
92
- By [infinity80](https://profiles.wordpress.org/infinity80),
93
- One month into using icegram, and the **number of subscribers doubled**. This plugin is really great. Icegram messages have given me **phenomenal 60% click through rates** and it never fails to deliver. When you use Icegram, **you don't need to learn all those marketing secrets.. Icegram does that for you…**
94
 
95
- = Increase Your Optin Conversions with Advanced, Powerful Display Targeting Rules =
96
- Well targeted optins is a must. Thus, Icegram provides you various **advanced targeting optins.** It allows you to target visitors depending on various factors like:
97
 
98
- * Page level targeting
99
- * Time based targeting
100
- * User based targeting
101
- * Device based targeting ( 100% Mobile Responsive)
102
 
103
- = Measure Optins Performance based on Detailed Reports =
104
 
105
- The most important way of measuring the effect of an optin is checking out the analytics. Icegram provides an easy to understand but in-depth stats of how your optin is performing.
106
 
107
- >**Track impressions and Conversion for FREE** - by [GroNovaAcademy](https://wordpress.org/support/profile/gronovaacademy)
108
- An **easy-to-use software** to capture the attention of web visitors, as well to track impressions and conversion rate for free. I also experienced a very **reactive and supportive team.**
109
 
 
110
 
111
- = Convert Abandoning Visitors by Showing them Exit Intent Opt-ins =
112
- Icegram also gives you an excellent option to target optins at exit intent. This is available in Icegram’s paid addon - [Behavior Triggers and Advanced Targeting](https://www.icegram.com/addons/behavior-triggers-advanced-retargeting/). That is, you can show an optin just before the visitor is leaving your website. Such optins are highly converting and are mostly used by Top Internet Marketers to grow their lists.
 
 
113
 
114
- > **This Plugins A Lifesafer!**
115
- By [_Krucial_](https://profiles.wordpress.org/_krucial_)
116
- The exit popup addon was just what I needed. I will be using this plugin on many sites, and only have good things to say about it. It is **very very handy** and generous enough to give away features for FREE. **Icegram seriously makes a WP user’s life easy!**
117
 
118
- = Create and Test out Optin Variations using Split Testing (A/B Testing) =
119
- Icegram also has a premium addon [Split Testing](https://www.icegram.com/addons/split-testing/) which allows you to split test various aspects of the optins like - content, headlines, cta, color, design templates etc.
120
 
121
- = Easily integrate with your Email Marketing Service =
122
- Icegram provides an **easy html based integration** with Email Marketing Services like MailChimp, AWeber, Infusionsoft, GetResponse, ConstantContact, CampaignMonitor, ActiveCampaign, Emma, iContact, MailerLite, MailPoet, MadMimi, Klawoo, e-GOI, SendPress, Email Buddy, My Mail etc.
123
- Infact any Email Marketing Service which provides an html form code can be easily integrated with any of Icegram’s Optins.
124
 
125
- = Also, Fully Compatible with Third Party Plugins =
126
- Not just Email Marketing Services, Icegram is compatible with most third party lead capture/form plugins, themes and CRM like - Jetpack, Gravity, Contact Form 7, Visual Form Builder and many others. Hence, causing no inconsistencies to your WordPress site.
127
 
 
128
 
129
- = Get more Features with Premium Addons =Icegram is an open platform. The core is already powerful, but you can do even more with free and premium add-ons.
130
 
131
- * [Split Testing](https://www.icegram.com/addons/split-testing/) - Split test Icegram campaigns and decide which variation works best for your audience.
132
- * [Behavior Triggers and Advanced Targeting](https://www.icegram.com/addons/behavior-triggers-advanced-retargeting/) - Show and hide campaigns based on visitors on-page behavior. Like on Exit Intent, Scroll Position, Time Delay, JavaScript, On-click of another message…
133
- * [Geo Targeting](https://www.icegram.com/addons/geo-targeting/) - target optins based on visitor's location - continent, country, city, region or IP address
134
- * [CTA Actions](https://www.icegram.com/addons/cta-actions/) - Open link in new window, submit form, AJAX submission, show another message, hide this message... New actions for CTA buttons
135
- * [Remote](https://www.icegram.com/addons/remote/) - Show Icegram messages on Non - WordPress sites.
136
- * [Additional optin types](https://www.icegram.com/addons/) - Overlay, Inline, Sidebars, Interstitial, Ribbons, Stickies, Badges, Tabs
137
 
138
- > **Icegram addons are very handy! Definitely recommended**
139
- By [vinnymickey](https://profiles.wordpress.org/vinnymickey), January 15, 2016
140
- Searched around to accomplish what this plugin does with its addons. And **Icegram worked out perfect** for me. Also tested out the support and they were **very helpful** with all my questions :)
141
-
142
 
143
- = Icegram vs It’s Alternatives - Here’s what you need to know.. =
144
  We compared Icegram with some similar plugins and here’s the complete one-on-one review.
145
 
146
  * [Sumo Me vs Icegram - Full Review](https://www.icegram.com/sumo-me-vs-icegram-comparison/)
@@ -148,24 +136,55 @@ We compared Icegram with some similar plugins and here’s the complete one-on-o
148
  * [Ninja Popups vs Icegram - Plugin Faceoff](https://www.icegram.com/ninja-popups-vs-icegram-the-better-popup-and-why/)
149
  * [Hellobar vs Icegram - Comparative Analysis ](https://www.icegram.com/hello-bar-vs-icegram/)
150
 
151
- >**Icegram is the best of them ALL** by Maurits Heijstek
152
- I want to say that Icegram is the **best and most simple** solution I have found. I tested everything including Optin Monster, Bloom, Ninja Popup, etc...but Icegram is the best and has the **most potential**.
153
 
154
- = Website, Demos, Shop, Social, Love =
155
  * [Official Icegram website](https://www.icegram.com/)
156
  * [Dozens of Demos](https://www.icegram.com/demos/) of different Icegram messages
157
- * [Shop for free and paid add-ons](https://www.icegram.com/addons/)
158
  * [A few customer reviews](https://www.icegram.com/customers/)
159
  * Follow Icegram on Twitter [@icegram](https://twitter.com/icegram/)
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
 
162
  **Some of our other free plugins on WordPress.org**
163
 
164
- 1. [Rainmaker](https://wordpress.org/plugins/icegram-rainmaker/) - Best Forms Plugin on WordPress
165
- 1. [Email Subscribers](https://wordpress.org/plugins/email-subscribers/) - complete newsletter plugin
166
- 3. [Email Subscribers Group Selector](https://wordpress.org/plugins/email-subscribers-advanced-form/)
167
- 4. [News Announcement Scroll](https://wordpress.org/plugins/news-announcement-scroll/)
168
- 5. [Temporary Login Without Password](https://wordpress.org/plugins/temporary-login-without-password/)
169
 
170
  == Installation ==
171
 
@@ -177,7 +196,7 @@ I want to say that Icegram is the **best and most simple** solution I have found
177
 
178
  = Messages look broken / formatting is weird... =
179
 
180
- This is most likely due to CSS conflicts with current theme. We suggest using simple formatting for messages. You can also write custom CSS in your theme to fix any problems.
181
 
182
  = Extra Line Breaks / Paragraphs in messages... =
183
 
@@ -189,13 +208,13 @@ You can use custom CSS/JS inline in your message HTML. You can also use your the
189
 
190
  = Optin Forms / Mailing service integration... =
191
 
192
- You can embed any optin / subscription form to your Icegram messages using HTML code. You may even use a shortcode if you are using a WP plugin from your newsletter / lead capture service.
193
 
194
  Use the "Embed Form" button above the text editor to paste in HTML code from your mailing list service and let Icegram automatically "clean it up" for usage in Icegram messages.
195
 
196
  = Preview does not work / not refreshing... =
197
 
198
- Doing a browser refresh while previewing will not show your most recent changes. Click 'Preview' button to see a preview with your latest changes.
199
 
200
  = Can I use shortcodes in a message? =
201
 
@@ -217,613 +236,795 @@ Contact Us, provide as much detail of the problem as you can. We will try to sol
217
  5. Target your Icegram message using these display rules
218
 
219
  == Upgrade Notice ==
220
- = 1.10.36 =
221
- Added Christmas Gallery Items
222
 
223
- = 1.10.35 =
224
- Security Fixes
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
225
 
226
- = 1.10.34 =
227
- Added Black Friday Cyber Monday Gallery Items
228
 
229
- = 1.10.33 =
230
- Revised Gallery Templates for halloween
231
 
232
- = 1.10.32 =
233
- Added new featured gallery items
234
 
235
- = 1.10.31 =
236
- Revised Gallery Templates
237
 
238
- = 1.10.30.1 =
239
- Bug Fix release
240
 
241
- = 1.10.28.2 =
242
- Bug Fix release
243
 
244
- = 1.10.28.1 =
245
- Bug Fix release
246
 
247
- = 1.10.28 =
248
- Revised Gallery Templates
249
 
250
- = 1.10.27 =
251
- Bug Fix release
252
 
253
- = 1.10.26 =
254
- Bug Fix release
255
 
256
- = 1.10.25 =
257
- Revised Gallery Templates for Black Friday and Cyber Monday
258
 
259
- = 1.10.24 =
260
- Revised Gallery Templates for halloween
261
 
262
- = 1.10.23 =
263
- Revised Gallery Templates
264
 
265
- = 1.10.22 =
266
- Fixed popup blocker issue while previewing campaign
267
 
268
- = 1.10.21 =
269
- Compatibility with latest [Email Subscribers](https://wordpress.org/plugins/email-subscribers/)
270
 
271
- = 1.10.20 =
272
- Compatibility with latest [GDPR](https://wordpress.org/plugins/gdpr/)
273
 
274
- = 1.10.19 =
275
- Compatibility with Rainmaker
276
 
277
- = 1.10.18 =
278
- Improved the UI/UX of the Icegram Gallery
279
 
280
- = 1.10.17 =
281
- Revised Gallery Templates
282
 
283
- = 1.10.16 =
284
- Fixed "The plugin does not have a valid header" issue
285
 
286
- = 1.10.15 =
287
- Added Christmas Gallery templates
288
 
289
- = 1.10.14 =
290
- Compatibility with WordPress 4.9
291
 
292
- = 1.10.13 =
293
- Added Black Friday and Cyber Monday Gallery templates
294
 
295
- = 1.10.12 =
296
- Compatibility with MailPoet 3
297
 
298
- = 1.10.11 =
299
- Added Halloween Gallery templates
300
 
301
- = 1.10.10 =
302
- Revised Gallery Templates
303
 
304
- = 1.10.9.1 =
305
- Bug Fix release
306
 
307
- = 1.10.9 =
308
- Revised Gallery Templates
309
 
310
- = 1.10.8 =
311
- compatibility with Contact Form 7(v4.8)
312
 
313
- = 1.10.7 =
314
- Added more templates in Gallery
315
 
316
- = 1.10.6 =
317
- Search bar, filters added to Icegram's Gallery
318
 
319
- = 1.10.5 =
320
- Improvements in Call To Actions
321
 
322
- = 1.10.4 =
323
- Directly choose Gallery Template while creating a New Campaign
324
 
325
- = 1.10.3 =
326
- Email Subscribers compatibility
327
 
328
- = 1.10.2 =
329
- Update mobile Detect library
330
 
331
- = 1.10.1 =
332
- Bug Fix release
333
 
334
- = 1.10 =
335
- Merge all addons in one
336
 
337
- = 1.9.24 =
338
- Small improvements in responsiveness of Popups and Action bars
339
 
340
- = 1.9.23 =
341
- Bug Fix release
342
 
343
- = 1.9.22 =
344
- No Google penalty for mobile popups, an automatic solution
345
 
346
- = 1.9.21 =
347
- Revamp admin UI
348
 
349
- = 1.9.20.1 =
350
- Bug Fix release
351
 
352
- = 1.9.20 =
353
- Rainmaker compatibility
354
 
355
- = 1.9.19 =
356
- Secured Icegram from XSS vulnerability
357
 
358
- = 1.9.18 =
359
- Compatibility with Icegram's CTA addon and Rainmaker
360
 
361
- = 1.9.17 =
362
- Performance enhancements
363
 
364
- = 1.9.16 =
365
- Custom forms imported in Rainmaker
366
 
367
- = 1.9.15 =
368
- Added the Gallery of ready to use Icegram Campaigns
369
 
370
- = 1.9.14 =
371
- Added quick action for campaign preview.
372
 
373
- = 1.9.13 =
374
- revamp of popup themes - Airmail, Convert, Inspire, Persude.
375
 
376
- = 1.9.12 =
377
- Add new custom CSS and JS code block.
378
 
379
- = 1.9.11.1 =
380
- Remove warning in admin panel.
381
 
382
- = 1.9.11 =
383
- Compatibility with Gravity Forms.
384
 
385
- = 1.9.10 =
386
- Fix for schedule campaign option
387
 
388
- = 1.9.9 =
389
- Compatibility with Contact Form 7.
390
 
391
- = 1.9.8.1 =
392
- Added sprite image for close buttons and other fixes.
393
 
394
- = 1.9.8 =
395
- Enhanced the top Action bar position
396
 
397
- = 1.9.7.1 =
398
- Incorrect plugin name
399
 
400
- = 1.9.7 =
401
- Messengers are now responsive.Many small improvements.
402
 
403
- = 1.9.6 =
404
- Many small changes and other fixes.
405
 
406
- = 1.9.5 =
407
- Added animations for few more message types.Action bars are now responsive.
408
 
409
- = 1.9.4 =
410
- Bug fix release for forms.
411
 
412
- = 1.9.3 =
413
- Bug fix release for "Target link" not working.
414
 
415
- = 1.9.2 =
416
- Shortcode problems solved. New anti-spam mechanism for forms.
417
 
418
- = 1.9.1 =
419
- Few improvements in form functionality.
420
 
421
- = 1.9 =
422
- Form embed functionality improvements , Added forms styles.
423
 
424
- = 1.8.10 =
425
- Fixes for minified js and css. Changes for WP themes compatibility.
426
 
427
- = 1.8.9 =
428
- Many small changes. Plus major changes for caching compatibility.
429
 
430
- = 1.8.8 =
431
- Improved short code handling, WishList member compatibility and other fixes.
432
 
433
- = 1.8.7 =
434
- Popups now support custom background and text colors. And a handful of fixes!
435
 
436
- = 1.8.6 =
437
- Fix for "white screen" errors, updated device detection, more readable call to action button colors
438
 
439
- = 1.8.5 =
440
- Bug fix release for device targeting, preview before publish not working.
441
 
442
- = 1.8.4 =
443
- Popups are now responsive! Plus Visual Composer compatibility and other fixes.
444
 
445
- = 1.8.3 =
446
- Campaign and message duplicate feature added. Plus some other improvements.
447
 
448
- = 1.8.2 =
449
- Bug fix release for preview not working.
450
 
451
- = 1.8.1 =
452
- Recommended upgrade. Many improvements.
453
 
454
- = 1.8 =
455
- Target campaigns to any page with wildcard URL support in "Where" conditions and CTA Click based retargeting.
456
 
457
- = 1.7.1 =
458
- Dismiss admin notice provision, retargeting compatibility with caches and bug fixes.
459
 
460
- = 1.7 =
461
- Improvements in styling, form embeds and retargeting.
462
 
463
- = 1.6 =
464
- Improvements in optin form embedding, bug fixes and more. Required update.
465
 
466
- = 1.5 =
467
- Easy optin / subscription form parser and many other enhancements. Required update.
468
 
469
- = 1.4 =
470
- Many small improvements. Support for analytics added. WordPress 4.0 compatible.
471
 
472
- = 1.3 =
473
- 7 premium addons available now. Plus lot of improvements. Recommended upgrade.
474
 
475
- = 1.2 =
476
- Lots of enhancements... [WPML](http://wpml.org/?aid=21266&affiliate_key=W1YOdHyWrIjY) support, pluggable architecture, many internal changes. Do upgrade.
477
 
478
- = 1.1.1 =
479
- Compatibility with W3TC and Localization
480
 
481
- = 1.1 =
482
- First release on WordPress.org
483
 
484
- = 1.0 =
485
- Initial Release
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
486
 
487
 
488
  == Changelog ==
489
- = 1.10.36 =
 
 
 
 
 
 
490
  * Fix: Form color field was not rendering properly
491
  * Enhancement: Added Christmas Gallery Items
492
 
493
- = 1.10.35 =
 
494
  * Fix: Security issues
495
 
496
- = 1.10.34 =
 
497
  * Added Black Friday Cyber Monday Gallery Items
498
 
499
- = 1.10.33 =
 
500
  * Enhancement: Revised Gallery Templates for Halloween
501
 
502
- = 1.10.32 =
 
503
  * New: Added featured gallery items
504
 
505
- = 1.10.31 =
 
506
  * Enhancement: Revised Gallery templates
507
 
508
- = 1.10.30.1 =
 
509
  * Fix: Fatal error 'ES_DB_Forms' class not found.
510
 
511
- = 1.10.30 =
 
512
  * New: [Email Subscribers & Newsletters](https://wordpress.org/plugins/email-subscribers/) is the recommended method of adding forms in Icegram
513
 
514
- = 1.10.29 =
 
515
  * Fix: Fixed security issue in the gallery
516
 
517
- = 1.10.28.2 =
 
518
  * Fix: Fatal error "IG_Tracker_V_1_0_1" class not found.
519
 
520
- = 1.10.28.1 =
 
521
  * Fix: Fatal error "IG_Tracker_V_1_0_1" class not found.
522
 
523
- = 1.10.28 =
 
524
  * Enhancement: Revised Gallery templates
525
 
526
- = 1.10.27 =
 
527
  * Fix: Fixed gallery not loading issue
528
 
529
- = 1.10.26 =
530
- * Update: Now supports multi roles for user in campaign display rules
 
 
 
531
 
532
- = 1.10.25 =
533
  * Enhancement: Revised Gallery Templates for Black Friday and Cyber Monday
534
 
535
- = 1.10.24 =
536
- * Enhancement: Revised Gallery Templates for halloween
 
 
 
537
 
538
- = 1.10.23 =
539
  * Enhancement: Revised Gallery templates
540
 
541
- = 1.10.22 =
 
542
  * Fix: Fixed popup blocker issue while previewing campaign
543
  * Update: Compatibility with latest [WPML](https://wpml.org/)
544
  * Enhancement: Revised Gallery templates
545
 
546
- = 1.10.21 =
 
547
  * New: Added customizable Gallery templates to the Gallery
548
  * Update: Compatibility with latest [Email Subscribers](https://wordpress.org/plugins/email-subscribers/)
549
 
550
- = 1.10.20 =
 
551
  * Update: Compatibility with latest [GDPR](https://wordpress.org/plugins/gdpr/)
552
 
553
- = 1.10.19 =
554
- * Update: Now supports Rainmaker forms in multisite environment.
 
 
 
555
 
556
- = 1.10.18 =
557
  * New: Improved the UI/UX of the Icegram Gallery
558
 
559
- = 1.10.17 =
 
560
  * Enhancement: Revised Gallery templates
561
 
562
- = 1.10.16 =
563
- * Fix: "The plugin does not have a valid header"
 
 
 
564
 
565
- = 1.10.15 =
566
  * New: Added Christmas Gallery templates
567
 
568
- = 1.10.14 =
 
569
  * Update: Compatibility with WordPress 4.9
570
 
571
- = 1.10.13 =
 
572
  * New: Added Black Friday and Cyber Monday Gallery templates
573
 
574
- = 1.10.12 =
575
- * Fix: MailPoet 3 anti-spam field was visible with Form embed functionality
 
 
 
576
 
577
- = 1.10.11 =
578
  * New: Added Halloween Gallery templates
579
 
580
- = 1.10.10 =
 
581
  * Enhancement: Revised Gallery templates
582
 
583
- = 1.10.9.1 =
 
584
  * Fix: "Blank / White Screen of death" / Fatal error: Can't use function return value in write context
585
 
586
- = 1.10.9 =
 
587
  * Enhancement: Revised Gallery templates
588
 
589
- = 1.10.8 =
590
- * Fix: compatibility with Contact Form 7(v4.8)
 
 
 
591
 
592
- = 1.10.7 =
593
  * New: Added new templates to Icegram's Gallery
594
  * Fix: Single gallery template wasn't loading on refresh
595
 
596
- = 1.10.6 =
 
597
  * Enhancement: Search bar, filters added to Icegram's Gallery
598
 
599
- = 1.10.5 =
 
600
  * Enhancement: Small improvements for Call To Actions
601
 
602
- = 1.10.4 =
603
- * New: Directly choose Gallery Template while creating a New Campaign
 
 
 
604
 
605
- = 1.10.3 =
606
  * Enhancement: [Email Subscribers](https://wordpress.org/plugins/email-subscribers/) form compatibility with Icegram
607
 
608
- = 1.10.2 =
 
609
  * Update: Mobile Detect Library updated to version 2.8.24
610
  * Fix: Forms that were embedded in mobile popups at "0 seconds"
611
- * Fix: Resolve conflicts with wordpress themes using Magnific popup library
 
 
 
 
612
 
613
- = 1.10.1 =
614
- * Fix: Action bar was not getting close.
615
 
616
- = 1.10 =
617
  * Enhancement: Merged all addons in one
618
 
619
- = 1.9.24 =
 
620
  * Enhancement: Small improvements in responsiveness of Popups and Action bars
621
 
622
- = 1.9.23 =
623
- * Fix: Popup with time delay more than "0 seconds" were also converted to action bar if Behavior triggers was installed
 
 
 
 
 
624
 
625
- = 1.9.22 =
626
- * Enhancement: No Google penalty for mobile popups, an automatic solution
627
 
628
- = 1.9.21 =
629
- * New: Revamped the old admin UI and made it more user friendly and simple
630
 
631
- = 1.9.20.1 =
632
- * Fix: Solve "Parse error: syntax error, unexpected '&&' (T_BOOLEAN_AND), expecting ')'"
 
 
 
633
 
634
- = 1.9.20 =
635
  * Update: Rainmaker form compatibility with Icegram's Remote addon
636
 
637
- = 1.9.19 =
 
638
  * Fix: Secured Icegram from XSS vulnerability(Thanks to Ipstenu (Mika Epstein))
639
 
640
- = 1.9.18 =
641
- * Fix: Compatibility with Icegram's CTA addon and Rainmaker
 
 
 
642
 
643
- = 1.9.17 =
644
  * Update: Performance enhancements
645
  * Fix: Gallery is not getting loaded with https site
646
 
647
- = 1.9.16 =
648
- * New: [Icegram Rainmaker Form Plugin](https://wordpress.org/plugins/icegram-rainmaker/) is the recommended method of adding forms in Icegram
 
 
 
649
 
650
- = 1.9.15 =
651
  * New: Added the Gallery of ready to use Icegram Campaigns
652
  * Fix: Font was not getting loaded for convert theme(popup)
653
 
654
- = 1.9.14 =
 
655
  * New: Added quick action for campaign preview
656
  * Fix: For new message delay time -1 were not getting set
657
 
658
- = 1.9.13 =
 
659
  * New: Two step - click triggered - optins
660
- * Enhancement: Complete revamp of popup themes - Airmail, Convert, Inspire, Persude
661
  * Fix: Clicks were not getting tracked for button[type=submit] with inner HTML
662
 
663
- = 1.9.12 =
 
664
  * New: Support for custom JS and CSS in message
665
- * New: Added German translations
666
- * Enhancement: Revised Addons and Docs page inside plugin
667
  * Enhancement: Prevent false Impression count on crawling in analytics
668
- * Fix: For an onclick popup, once the background of popup was clicked it wouldn't open again
669
  * Fix: Home page targeting was not working properly in "Specific URL on this site" targeting
670
 
671
- = 1.9.11.1 =
 
672
  * Fix: Warning for "Illegal string offset 'option_name'"
673
  * Fix: 'ReferenceError: icegram is not defined' on page with CF7 and no Icegram
674
 
675
- = 1.9.11 =
 
676
  * Fix: Conditional login of Gravity forms was not working
677
 
678
- = 1.9.10 =
 
679
  * Fix: Campaigns were not getting scheduled according to site's timezone
680
 
681
- = 1.9.9 =
 
682
  * Fix: CF7(Contact Form 7) Ajax submission was not working
683
  * Fix: CF7 redirection was not working
684
  * Fix: CF7 was changing URL after form submission
685
 
 
686
 
687
- = 1.9.8.1 =
688
  * Enhancement: Added sprite image for close buttons
689
  * Fix: Retargeting issues with HTTP and HTTPS
690
 
691
- = 1.9.8 =
 
692
  * New: Added translation for Italian
693
  * Update: Action Bar does not overlap header/menu of your website
694
 
695
- = 1.9.7.1 =
 
696
  * Fix: Incorrect plugin name
697
 
698
- = 1.9.7 =
 
699
  * New: Messenger messages work beautifully on mobile / small devices now!
700
- * New: Icegram's shortcodes are now working with Text Widget
701
  * Update: Mobile Detect Library updated to version 2.8.15
702
  * Fix: Gravity Forms hidden fields were visible with Form embed functionality
703
  * Fix: Slide animation was not working with some browsers
704
  * Fix: Popup message conflicts with some lightbox plugins
705
 
706
- = 1.9.6 =
 
707
  * Fix: Popup was not getting closed when multiple popups were set on a single page
708
  * Fix: Message was not getting close when a form was submitted in a new window
709
  * Fix: Default editor was visible while loading campaign setting page
710
- * Fix: Revised css of the "Support and Docs" page and made it compatibility with WordPress 4.3
 
 
711
 
712
- = 1.9.5 =
713
  * New: Action bar messages work beautifully on mobile / small devices now!
714
  * New: Add Animation for few more message types
715
 
716
- = 1.9.4 =
 
717
  * Fix: Ninja Forms was showing two submit buttons with Icegram Form embed functionality
718
  * Fix: Mailpoet hidden fields were visible with Form embed functionality
719
- * Fix: Minor issues with form css
720
  * Fix: Use themes default option was not working in message admin settings
721
 
722
- = 1.9.3 =
 
723
  * Fix: Redirection to "Target Link" was not working in Icegram message
724
  * Fix: Inline form shortcode not getting preserved for message types with only inline position
725
 
726
- = 1.9.2 =
727
- * New: Keep spammers away with new automatic anti-spam bot checking mechanism
 
728
  * Fix: Shortcodes not working in Icegram messages
729
  * Fix: WordPress crash while creating a new post
730
  * Update: UI improvements for form embedding
731
 
732
- = 1.9.1 =
733
- * Update: Retargeting option now work for campaign instead of message
734
- * Fix: Inline form shortcode not getting preserved in message body
 
735
  * Fix: Form style options not getting saved
736
- * Fix: Minor issues with form css
737
- * Fix: Compatibility issues of previous embed form functionality with new one
 
 
738
 
739
- = 1.9 =
740
- * New:Forms now comes with various form styles and multiple positions
741
- * New:Forms also provides background and text color
742
  * New:Forms also supports header,footer-text/HTML
743
  * Update: Updated form embed functionality
744
  * Fix: Homepage page targeting not working when "Lazy loading" was off
745
 
746
- = 1.8.10 =
747
- * Fix: Compatibility for themes with CSS class name conflicts
748
- * Fix: Compatibility with "auto optimize" and other minification plugins
749
- * Fix: Local site targeting not working without wildcard character
 
 
 
750
 
751
- = 1.8.9 =
752
  * New: Both body and button colors (background and foreground) can now be set
753
  * Update: Brought back CTA Buttons default colors
754
  * New: Lazy load Icegram messages for better compatibility with caching plugins
755
  * Update: Updated all themes to support new theme coloring scheme
756
  * Fix: Some alignment issues with images in popups
757
  * Update: Minified all JS and CSS to improve performance
758
- * Update: Auto correction for CTA links now works with tel: links
759
 
760
- = 1.8.8 =
761
- * New: Headlines now support shortcodes!
 
762
  * Update: A message shown on click of another (using CTA actions addon), can now contain shortcodes
763
  * Fix: Compatibility with Wishlist Member plugin
764
  * Fix: Popup close event not triggered when clicking outside the popup - on its overlay
765
- * Update: Automatically adds http:// in CTA links if missing
 
 
766
 
767
- = 1.8.7 =
768
- * New: Can now define custom background and text colors for Popups
769
  * Fix: Button text color not showing well in some themes
770
  * Fix: Analytics not getting tracked
771
  * Update: Revisions to theme packs and many addons
772
  * New: Support for Split Testing addon
773
 
774
- = 1.8.6 =
 
775
  * Fix: "Blank / White Screen of death" / Fatal error - Cannot redeclare class Mobile_Detect
776
  * Fix: Warning for undefined index
777
  * Update: Mobile Detect Library updated to version 2.8.11
778
- * Update: Improvmetns in complementary colors for call to action button and button text
779
  * Update: Action Bar's Bold theme - reduced shadow on button text
780
 
781
- = 1.8.5 =
 
782
  * New: Added a link to Form Embed Documentation for easy access
783
  * Fix: Default mode of content editor set to visual
784
  * Fix: Popup hiding behind header for some themes
785
  * Fix: Device targeting rule not working on newer devices
786
  * Fix: Preview working only after Publishing
787
 
788
- = 1.8.4 =
789
- * New: Popup messages work beautifully on mobile / small devices now!
 
790
  * Fix: Timing problems with popups triggered via Behavior Trigger addon.
791
  * Fix: Visual Composer compatibility
792
 
793
- = 1.8.3 =
 
794
  * NEW: Duplicate a Campaign and Message easily now - click 'duplicate' in the list view!
795
  * Update: Using an image instead of dashicons for action bar arrows
796
- * Update: Renamed "messenger" css class to "ig_messenger" to avoid potential overlaps
797
  * Update: Clicking outside the popup (on the dark overlay) will close the popup
798
 
799
- = 1.8.2 =
 
800
  * Fix: Preview not working correctly
801
 
802
- = 1.8.1 =
 
803
  * NEW: Support for Icegram Remote - now run your campaigns on other sites - even non WordPress sites
804
  * Update: Better wildcard matching in Where targeting rules for URLs
805
  * Update: Compatibility with Avada theme
806
  * Update: Misc UI and performance enhancements
807
 
808
- = 1.8 =
 
809
  * NEW: Target campaigns to any page with wildcard URL support in "Where" conditions
810
- * NEW: CTA Click based retargeting to hide message in a campaign after being clicked
811
- * NEW: Message shwon retargeting can now hide message forever - after shown once
 
 
812
 
813
- = 1.7.1 =
814
  * Update: Dismiss button for admin notice about bonus themes and addon
815
  * Fix: Admin settings CSS changes, for compatibility with some themes
816
  * Fix: Hello Bar close button not clickable
817
  * Fix: Retargeting not working with some cache systems
818
 
819
- = 1.7 =
 
820
  * Update: Styling changes to action bar CTA button for alignment
821
  * Update: Hello Bar styling updates to better handle forms
822
- * Fix: Hidden field related issue while embeding subscription forms
823
  * Fix: Retargeting not working correctly in certain cases
824
- * Fix: Theme thumbnails missing on messages list
 
 
825
 
826
- = 1.6 =
827
  * Fix: Empty image tag causing display issues in Opera / IE
828
  * Update: Form embed functionality improvements
829
  * NEW: "Themes Pack 2014" addon - 17 themes as a bonus - available from Icegram.com
@@ -831,21 +1032,24 @@ Initial Release
831
  * Update: JS and CSS URLs include version numbers now - better for caching
832
  * Fix: Other minor fixes
833
 
834
- = 1.5 =
 
835
  * NEW: "Embed Form" option for easy integration with optin / mailing list / subscription form / CRM services
836
  * NEW: Retargeting Rule: Do not show again for X number of days
837
  * NEW: Targeting Rule: "Not Logged In" visitor
838
  * NEW: Added support for submitting form on CTA click
839
  * NEW: "CTA Actions" premium addon
840
 
841
- = 1.4 =
842
- * NEW: Targeting Rule: "Exclude pages" from a site wide campaign
 
843
  * NEW: Options to cleanup Icegram data and remove shortcodes from content
844
- * NEW: CTA button color is automatically determined based on background color
845
  * NEW: FREE Analytics add-on (available from www.icegram.com)
846
  * Update: This version is compatible with WordPress 4.0
847
 
848
- = 1.3 =
 
849
  * NEW: 7 Premium add-ons available
850
  * Fix: [icegram] shortcode not working for campaigns
851
  * Update: Improved CTA click handling
@@ -853,21 +1057,22 @@ Initial Release
853
  * NEW: Setting display time to -1 will hide the message
854
  * Fix: Can use quotes and other special characters in headline now
855
  * Update: #WPML Show default language message only if "Blog posts to display" is set to "All posts"
856
- * Fix: Hide campaign and messages from public pages / search / search engines
857
  * Fix: Other plugins adding content to messages (social media links etc)
858
- * NEW: Clicking on any item with class "ig_cta" will trigger cta click action
859
  * Fix: Campaigns not working on archive pages (like Shop / Categories...)
860
  * Fix: Campaigns with multiple target pages not working
861
- * Fix: #WPML Messages added from Campaigns page not showing on Messages page
862
  * Update: And then some changes we are forgetting for now...
863
 
864
- = 1.2 =
 
865
  * NEW: Icegram is now fully pluggable. External plugins can add message types and themes.
866
  * NEW: [WPML](http://wpml.org/?aid=21266&affiliate_key=W1YOdHyWrIjY) support
867
  * Update: Icegram branding is optional
868
  * NEW: Setting to show Icegram branding
869
  * Fix: Popups show correctly on long pages now
870
- * Fix: Single day schedule for message display is correctly handled now
871
  * NEW: Rewritten message display system - can even control with JavaScript now
872
  * Fix: For problems showing a campaign on homepage
873
  * Update: Simplified CSS and JS
@@ -877,13 +1082,15 @@ Initial Release
877
  * Fix: For displaying messages via shortcode
878
  * Update: And many more!!!
879
 
 
880
 
881
- = 1.1.1 =
882
  * Fix for crash on activation with W3 Total Cache
883
  * Added localization / translation ability
884
 
885
- = 1.1 =
 
886
  * Loading CSS from own domain instead of Google
887
 
888
- = 1.0 =
889
- * Initial Release
 
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.37
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.
11
 
12
  == Description ==
13
 
14
+ Icegram is the best plugin to easily create beautiful optins and call to actions of your choice, show them to targeted visitors and convert them to customers and fans.
 
 
15
 
16
+ Icegram eliminates the need to hire a developer. You can easily set it up within minutes and start recording results right away.
17
 
18
+ Icegram is full-featured, easy to use, trusted by **40,000+** users.
 
19
 
20
+ Create unlimited popups of every type you need and customize every popup from theme and position to targeting and cookies.
 
 
21
 
22
+ = The Only Multi-Purpose Plugin - a lot beyond optins =
23
+
24
+ Icegram is not the typical optin / list-building / email subscription plugin. You can do a lot more than that along with optins!
25
+
26
+ * **Easily Grow Your Subscriber List:** Show attention-grabbing, high converting email opt-in forms and build your subscriber list.
27
+
28
+ * **Instantly Drive Traffic:** Display powerful call to action (CTA) buttons and drive visitors to any page you like.
29
+
30
+ * **Start Engaging and Converting Visitors:** Grab visitors’ attention, make an announcement, engage them to reduce bounce rate or offer them any other call to action.
31
 
32
 
33
  = Get Multiple Message Styles - popups, header bars and much more =
34
+ Icegram provides not one or two, but four different optin types - **Lightbox Popups, Header & Footer Action Bars, Toast Notifications and Slide-in Messengers.**
35
+
36
+ * **Well Timed Popups -** Create time targeted popups/lightboxes that are optimized for conversion. Lots of customization possible.
37
+
38
+ * **Sleek Action Bars -** Great for announcements, lead generation, and CTAs. Icegram provides both header bars as well as footer bars.
39
+
40
+ * **Attention-Grabbing Toast Notifications -** Super useful for alerts, invitations, and multi-step CTAs.
41
+
42
+ * **Appealing Slide-in Messengers -** Welcome new visitors, recommend blog posts, provide links to support resources and more with slide-in messengers.
43
 
 
 
 
 
44
 
45
+ If you want more, Icegram also provides eight more innovative message styles - Sidebars, Overlays, After / Before Post and Inlines, Stickies, Badges, Ribbons, Tabs & Interstitials in premium plans.[ Check the premium plans here.](https://www.icegram.com/pricing/)
46
 
 
 
47
 
48
+ = Features Of Icegram =
49
 
50
+ * Easy to use, user-friendly interface
51
+ * Easily create and target unlimited opt-in forms and messages
52
+ * Multiple Different Opt-in Form / Message Styles: Popups, Header / Footer bars, Toast notifications, Slide-in Messengers.
53
+ * Multiple Theme Designs: Extensive range of beautiful and fully customizable themes to make your CTA messages and email opt-in popups look amazing
54
+ * Easy Integrations with Email Marketing Service: [Email Subscribers](https://wordpress.org/plugins/email-subscribers/), MailChimp, Constant Contact, AWeber, Campaign Monitor, GetResponse, InfusionSoft, and all other email marketing services
 
55
  * Mobile Responsive design
56
  * Time and sequence different messages
57
  * Multiple display positions - top, middle, bottom, left, right, center
58
+ * Powerful Display Targeting Rules: Decide where and when to show your campaigns and opt-in forms- On specific pages, categories or posts; to certain users; on a specific schedule, via shortcode - and many other rules.
59
  * Track results of each optin form
 
60
  * Extensive Customization for power users - custom HTML, CSS, JS option; extensive JavaScript API; make it suit your needs
 
 
61
  * Unique Headline Generator that creates engaging headlines - so you get a copywriting headstart
62
  * No compulsion to show Icegram name or branding
63
  * No need to create an account on our site to use Icegram
64
  * Automatic Updates
 
65
  * Friendly and Professional Support Team
66
  * Plus a lot more!!
67
 
68
+ = Powerful Features Of Icegram Premium =
 
69
 
70
+ * [Split Testing](https://www.icegram.com/addons/split-testing/) - Split test Icegram campaigns and decide which variation works best for your audience.
71
 
72
+ * [Behavior Triggers and Advanced Targeting](https://www.icegram.com/addons/behavior-triggers-advanced-retargeting/) - Show and hide campaigns based on visitors on-page behavior. Like on Exit Intent, Scroll Position, Time Delay, JavaScript, On-click of another message…
73
 
74
+ * [Geo Targeting](https://www.icegram.com/addons/geo-targeting/) - target optins based on visitor's location - continent, country, city, region or IP address
75
 
76
+ * [CTA Actions](https://www.icegram.com/addons/cta-actions/) - Open link in a new window, submit form, AJAX submission, show another message, hide this message... New actions for CTA buttons
77
 
78
+ * [Remote](https://www.icegram.com/addons/remote/) - Show Icegram messages on Non - WordPress sites.
 
 
 
79
 
80
+ * [Analytics and Reporting](https://www.icegram.com/documentation/track-analytics-icegram/): View conversion and impression analytics of all campaigns and messages
81
 
82
+ * **Additional optin types** - Overlay, Inline, Sidebars, Interstitial, Ribbons, Stickies, Badges, Tabs
83
 
84
+ * **Exit Intent**: Target abandoning visitors by showing popups and other messages when they are about to exit your site
85
 
86
+ * VIP Support
 
87
 
88
+ **Create an Optin Form within minutes. No Need to Hire a Developer!**
89
 
90
+ Icegram is easy and you don’t need a developer to figure this out. Icegram lets you create optins and CTA messages in under a minute. You can choose from a variety of optin types, customize it as per your liking and target it instantly. Creating an Icegram message is very simple and you don’t need technical knowledge to get it to work.
 
 
 
91
 
92
+ **Choose from Beautiful, Mobile Responsive Design Templates**
 
93
 
94
+ Icegram provides you with **20 high converting** and very responsive design templates. You can customize the colors of these design templates to match the color palette of your brand/ website.
 
 
 
95
 
96
+ **Start Growing Your Email Subscriber List Instantly**
97
 
98
+ Icegram optins ** specializes in converting visitors to subscribers**. Icegram allows you to create high converting subscriber forms and target them strategically at various places on your website.
99
 
100
+ **Increase Your Optin Conversions with Advanced, Powerful Display Targeting Rules**
 
101
 
102
+ Well-targeted optins are a must. Thus, Icegram provides you various **advanced targeting optins.** It allows you to target visitors depending on various factors like:
103
 
104
+ * Page-level targeting
105
+ * Time-based targeting
106
+ * User-based targeting
107
+ * Device-based targeting ( 100% Mobile Responsive)
108
 
109
+ **Measure Optins Performance based on Detailed Reports**
 
 
110
 
111
+ The most important way of measuring the effect of an optin is checking out the analytics. Icegram provides an easy to understand but in-depth stats of how your optin is performing.
 
112
 
113
+ **Convert Abandoning Visitors by Showing them Exit Intent Opt-ins**
 
 
114
 
115
+ Icegram also gives you an excellent option to target optins at exit intent. This is available in Icegram’s paid addon - [Behavior Triggers and Advanced Targeting](https://www.icegram.com/addons/behavior-triggers-advanced-retargeting/). That is, you can show an optin just before the visitor is leaving your website. Such optins are highly converting and are mostly used by Top Internet Marketers to grow their lists.
 
116
 
117
+ **Create and Test out Optin Variations using Split Testing (A/B Testing)**
118
 
119
+ Icegram also has a premium addon [Split Testing](https://www.icegram.com/addons/split-testing/) which allows you to split test various aspects of the optins like - content, headlines, C, color, design templates, etc.
120
 
121
+ **Easily integrate with your Email Marketing Service**
122
+
123
+ Icegram provides an **easy HTML based integration** with Email Marketing Services like MailChimp, AWeber, Infusionsoft, GetResponse, ConstantContact, CampaignMonitor, ActiveCampaign, Emma, iContact, MailerLite, MailPoet, MadMimi, Klawoo, e-GOI, SendPress, Email Buddy, My Mail, etc.
124
+ Any Email Marketing Service which provides an HTML form code can be easily integrated with any of Icegram’s O.
125
+
126
+ **Also, Fully Compatible with Third-Party Plugins**
127
 
128
+ Not just Email Marketing Services, Icegram is compatible with most third-party lead capture/form plugins, themes and CRM like - Jetpack, Gravity, Contact Form 7, Visual Form Builder and many others. Hence, causing no inconsistencies to your WordPress site.
129
+
130
+ **Icegram vs Its Alternatives - Here’s what you need to know..**
 
131
 
 
132
  We compared Icegram with some similar plugins and here’s the complete one-on-one review.
133
 
134
  * [Sumo Me vs Icegram - Full Review](https://www.icegram.com/sumo-me-vs-icegram-comparison/)
136
  * [Ninja Popups vs Icegram - Plugin Faceoff](https://www.icegram.com/ninja-popups-vs-icegram-the-better-popup-and-why/)
137
  * [Hellobar vs Icegram - Comparative Analysis ](https://www.icegram.com/hello-bar-vs-icegram/)
138
 
139
+ **Website, Demos, Shop, Social, Love**
 
140
 
 
141
  * [Official Icegram website](https://www.icegram.com/)
142
  * [Dozens of Demos](https://www.icegram.com/demos/) of different Icegram messages
143
+ * [Shop for Icegram Premium](https://www.icegram.com/pricing/)
144
  * [A few customer reviews](https://www.icegram.com/customers/)
145
  * Follow Icegram on Twitter [@icegram](https://twitter.com/icegram/)
146
 
147
+ **What customers have to say about Icegram?**
148
+
149
+ **Icegram doubled my Optin rates Overnight** - by [Remo Homer](https://wordpress.org/support/profile/remohomer)
150
+ > Icegram **doubled our opt-in rates** overnight.
151
+ > Simple as that. It's fast to set up and easy for our clients to manage. Support is great, and best of all - FREE!
152
+
153
+
154
+ **Icegram is better than premium plugins! Trust me** By [princegift2892](https://profiles.wordpress.org/princegift2892)
155
+ > I have used premium plugins too. But this plugin is better than premium one!
156
+ > So many options, customizations, and best support! I am using this plugin on both of my websites ;)
157
+
158
+
159
+ **I have 20 Different Plugins across 3 websites but Icegram is my go-to plugin** said [JamieTurner1313](https://wordpress.org/support/topic/one-of-the-best-plugins-ive-used-3) from 60 Second Marketer,
160
+ > There are plenty of similar plug-ins like this on WordPress, but none of them provide as much bang for the buck as Icegram.
161
+ > I have, I'm guessing, 20 different plugins across 3 websites and this is **my go-to plugin to drive downloads of my e-books**.
162
+ > I especially like the A/B split testing feature. And the customer support has been very prompt. Five stars for sure.
163
+
164
+ **Icegram simplified things for a non-programmer like me** By [varunjadhav](https://profiles.wordpress.org/varunjadhav),
165
+ > Icegram simplified things for a non-programmer startup entrepreneur like me and has become a tool I recommend to everyone else. It’s a **wonderfully productive On-site Retargeting > Plugin!** And it's free. In one week of using Icegram, our **bounce rate went down significantly** and visitor’s time on site went up.
166
+
167
+ **I doubled my subscriber list with Icegram within 1 month** By [infinity80](https://profiles.wordpress.org/infinity80),
168
+ > One month into using the icegram, and the **number of subscribers doubled**. This plugin is great. Icegram messages have given me **phenomenal 60% click-through rates** and it > never fails to deliver. When you use Icegram, **you don't need to learn all those marketing secrets.. Icegram does that for you…**
169
+
170
+
171
+ **This Plugins A Lifesaver!** By [_Krucial_](https://profiles.wordpress.org/_krucial_)
172
+ > The exit popup addon was just what I needed. I will be using this plugin on many sites, and only have good things to say about it. It is **very very handy** and generous enough to give away > features for FREE. **Icegram seriously makes a WP user’s life easy!**
173
+
174
+
175
+ **Track impressions and Conversion for FREE** - by [GroNovaAcademy](https://wordpress.org/support/profile/gronovaacademy)
176
+ > An **easy-to-use software** to capture the attention of web visitors, as well as to track impressions and conversion rates for free. I also experienced a very **reactive and supportive team.**
177
+
178
+
179
+ **Icegram is the best of them ALL** by Maurits Heijstek
180
+ > I want to say that Icegram is the **best and most simple** solution I have found. I tested everything including Optin Monster, Bloom, Ninja Popup, etc...but Icegram is the best and has the **most potential**.
181
+
182
 
183
  **Some of our other free plugins on WordPress.org**
184
 
185
+ 1. [Email Subscribers](https://wordpress.org/plugins/email-subscribers/) - complete newsletter plugin
186
+ 2. [Temporary Login Without Password](https://wordpress.org/plugins/temporary-login-without-password/)
187
+ 3. [Smart Manager For WooCommerce](https://wordpress.org/plugins/smart-manager-for-wp-e-commerce/) - Stock Management, Bulk Edit & more
 
 
188
 
189
  == Installation ==
190
 
196
 
197
  = Messages look broken / formatting is weird... =
198
 
199
+ This is most likely due to CSS conflicts with the current theme. We suggest using simple formatting for messages. You can also write custom CSS in your theme to fix any problems.
200
 
201
  = Extra Line Breaks / Paragraphs in messages... =
202
 
208
 
209
  = Optin Forms / Mailing service integration... =
210
 
211
+ You can embed any opt-in / subscription form to your Icegram messages using HTML code. You may even use a shortcode if you are using a WP plugin from your newsletter/lead capture service.
212
 
213
  Use the "Embed Form" button above the text editor to paste in HTML code from your mailing list service and let Icegram automatically "clean it up" for usage in Icegram messages.
214
 
215
  = Preview does not work / not refreshing... =
216
 
217
+ Doing a browser refresh while previewing will not show your most recent changes. Click the 'Preview' button to see a preview with your latest changes.
218
 
219
  = Can I use shortcodes in a message? =
220
 
236
  5. Target your Icegram message using these display rules
237
 
238
  == Upgrade Notice ==
 
 
239
 
240
+ **1.10.37**
241
+
242
+ * Bugfix release
243
+
244
+ **1.10.36**
245
+
246
+ * Added Christmas Gallery Items
247
+
248
+ **1.10.35**
249
+
250
+ * Security Fixes
251
+
252
+ **1.10.34**
253
+
254
+ * Added Black Friday Cyber Monday Gallery Items
255
+
256
+ **1.10.33**
257
+
258
+ * Revised Gallery Templates for Halloween
259
+
260
+ **1.10.32**
261
+
262
+ * Added new featured gallery items
263
+
264
+ **1.10.31**
265
+
266
+ * Revised Gallery Templates
267
+
268
+ **10.30.1**
269
+
270
+ * Bug Fix release
271
+
272
+ **1.10.28.2**
273
+
274
+ * Bug Fix release
275
+
276
+ **1.10.28.1**
277
+
278
+ * Bug Fix release
279
+
280
+ **1.10.28**
281
+
282
+ * Revised Gallery Templates
283
+
284
+ **1.10.27**
285
+
286
+ * Bug Fix release
287
+
288
+ **1.10.26**
289
+
290
+ * Bug Fix release
291
+
292
+ **1.10.25**
293
+
294
+ * Revised Gallery Templates for Black Friday and Cyber Monday
295
+
296
+ **1.10.24**
297
+
298
+ * Revised Gallery Templates for Halloween
299
+
300
+ **1.10.23**
301
+
302
+ * Revised Gallery Templates
303
+
304
+ **1.10.22**
305
+
306
+ * Fixed popup blocker issue while previewing campaign
307
+
308
+ **1.10.21**
309
+
310
+ * Compatibility with latest [Email Subscribers](https://wordpress.org/plugins/email-subscribers/)
311
+
312
+ **1.10.20**
313
+
314
+ * Compatibility with latest [GDPR](https://wordpress.org/plugins/gdpr/)
315
+
316
+ **1.10.19**
317
+
318
+ * Compatibility with Rainmaker
319
+
320
+ **1.10.18**
321
+
322
+ * Improved the UI/UX of the Icegram Gallery
323
+
324
+ **1.10.17**
325
+
326
+ * Revised Gallery Templates
327
+
328
+ **1.10.16**
329
+
330
+ * Fixed "The plugin does not have a valid header" issue
331
+
332
+ **1.10.15**
333
+
334
+ * Added Christmas Gallery templates
335
+
336
+ **1.10.14**
337
+
338
+ * Compatibility with WordPress 4.9
339
+
340
+ **1.10.13**
341
+
342
+ * Added Black Friday and Cyber Monday Gallery templates
343
+
344
+ **1.10.12**
345
+
346
+ * Compatibility with MailPoet 3
347
+
348
+ **1.10.11**
349
+
350
+ * Added Halloween Gallery templates
351
+
352
+ **1.10.10**
353
+
354
+ * Revised Gallery Templates
355
+
356
+ **1.10.9.1**
357
+
358
+ * Bug Fix release
359
+
360
+ **1.10.9**
361
+
362
+ * Revised Gallery Templates
363
+
364
+ **1.10.8**
365
+
366
+ * compatibility with Contact Form 7(v4.8)
367
+
368
+ **1.10.7**
369
+
370
+ * Added more templates in Gallery
371
+
372
+ **1.10.6**
373
+
374
+ * Search bar, filters added to Icegram's Gallery
375
+
376
+ **1.10.5**
377
+
378
+ * Improvements in Call To Actions
379
+
380
+ **1.10.4**
381
+
382
+ * Directly choose Gallery Template while creating a New Campaign
383
+
384
+ **1.10.3**
385
+
386
+ * Email Subscribers compatibility
387
+
388
+ **1.10.2**
389
+
390
+ * Update mobile Detect library
391
 
392
+ **1.10.1**
 
393
 
394
+ * Bug Fix release
 
395
 
396
+ **1.10**
 
397
 
398
+ * Merge all addons in one
 
399
 
400
+ **1.9.24**
 
401
 
402
+ * Small improvements in responsiveness of Popups and Action bars
 
403
 
404
+ **1.9.23**
 
405
 
406
+ * Bug Fix release
 
407
 
408
+ **1.9.22**
 
409
 
410
+ * No Google penalty for mobile popups, an automatic solution
 
411
 
412
+ **1.9.21**
 
413
 
414
+ * Revamp admin UI
 
415
 
416
+ **1.9.20.1**
 
417
 
418
+ * Bug Fix release
 
419
 
420
+ **1.9.20**
 
421
 
422
+ * Rainmaker compatibility
 
423
 
424
+ **1.9.19**
 
425
 
426
+ * Secured Icegram from XSS vulnerability
 
427
 
428
+ **1.9.18**
 
429
 
430
+ * Compatibility with Icegram's CTA add-on and Rainmaker
 
431
 
432
+ **1.9.17**
 
433
 
434
+ * Performance enhancements
 
435
 
436
+ **1.9.16**
 
437
 
438
+ * Custom forms imported in Rainmaker
 
439
 
440
+ **1.9.15**
 
441
 
442
+ * Added the Gallery of ready to use Icegram Campaigns
 
443
 
444
+ **1.9.14**
 
445
 
446
+ * Added quick action for campaign preview.
 
447
 
448
+ **1.9.13**
 
449
 
450
+ * revamp of popup themes - Airmail, Convert, Inspire, Persuade.
 
451
 
452
+ **1.9.12**
 
453
 
454
+ * Add new custom CSS and JS code block.
 
455
 
456
+ **1.9.11.1**
 
457
 
458
+ * Remove warning in the admin panel.
 
459
 
460
+ **1.9.11**
 
461
 
462
+ * Compatibility with Gravity Forms.
 
463
 
464
+ **1.9.10**
 
465
 
466
+ * Fix for schedule campaign option
 
467
 
468
+ **1.9.9**
 
469
 
470
+ * Compatibility with Contact Form 7.
 
471
 
472
+ **1.9.8.1**
 
473
 
474
+ * Added sprite image for close buttons and other fixes.
 
475
 
476
+ **1.9.8**
 
477
 
478
+ * Enhanced the top Action bar position
 
479
 
480
+ **1.9.7.1**
 
481
 
482
+ * Incorrect plugin name
 
483
 
484
+ **1.9.7**
 
485
 
486
+ * Messengers are now responsive. Many small improvements.
 
487
 
488
+ **1.9.6**
 
489
 
490
+ * Many small changes and other fixes.
 
491
 
492
+ **1.9.5**
 
493
 
494
+ * Added animations for few more message types. Action bars are now responsive.
 
495
 
496
+ **1.9.4**
 
497
 
498
+ * Bugfix release for forms.
 
499
 
500
+ **1.9.3**
 
501
 
502
+ * Bugfix release for "Target link" not working.
 
503
 
504
+ **1.9.2**
 
505
 
506
+ * Shortcode problems solved. New anti-spam mechanism for forms.
 
507
 
508
+ **1.9.1**
 
509
 
510
+ * Few improvements in form functionality.
 
511
 
512
+ **1.9**
 
513
 
514
+ * Form embed functionality improvements, Added forms styles.
 
515
 
516
+ **1.8.10**
 
517
 
518
+ * Fixes for minified js and CSS. Changes for WP themes compatibility.
 
519
 
520
+ **1.8.9**
 
521
 
522
+ * Many small changes. Plus major changes for caching compatibility.
 
523
 
524
+ **1.8.8**
 
525
 
526
+ * Improved shortcode handling, WishList member compatibility, and other fixes.
 
527
 
528
+ **1.8.7**
 
529
 
530
+ * Popups now support custom background and text colors. And a handful of fixes!
 
531
 
532
+ **1.8.6**
 
533
 
534
+ * Fix for "white screen" errors, updated device detection, more readable call to action button colors
 
535
 
536
+ **1.8.5**
 
537
 
538
+ * Bugfix release for device targeting, preview before publishing not working.
 
539
 
540
+ **1.8.4**
 
541
 
542
+ * Popups are now responsive! Plus Visual Composer compatibility and other fixes.
 
543
 
544
+ **1.8.3**
 
545
 
546
+ * Campaign and message duplicate feature added. Plus some other improvements.
 
547
 
548
+ **1.8.2**
 
549
 
550
+ * Bugfix release for preview not working.
 
551
 
552
+ **1.8.1**
 
553
 
554
+ * Recommended upgrade. Many improvements.
 
555
 
556
+ **1.8**
 
557
 
558
+ * Target campaigns to any page with wildcard URL support in "Where" conditions and CTA Click based retargeting.
 
559
 
560
+ **1.7.1**
 
561
 
562
+ * Dismiss admin notice provision, retargeting compatibility with caches and bug fixes.
 
563
 
564
+ **1.7**
565
+
566
+ * Improvements in styling, form embeds and retargeting.
567
+
568
+ **1.6**
569
+
570
+ * Improvements in optin form embedding, bug fixes and more. Required update.
571
+
572
+ **1.5**
573
+
574
+ * Easy opt-in / subscription form parser and many other enhancements. Required update.
575
+
576
+ **1.4**
577
+
578
+ * Many small improvements. Support for analytics added. WordPress 4.0 compatible.
579
+
580
+ **1.3**
581
+
582
+ * 7 premium addons available now. Plus a lot of improvements. Recommended upgrade.
583
+
584
+ **1.2**
585
+
586
+ * Lots of enhancements... [WPML](http://wpml.org/?aid=21266&affiliate_key=W1YOdHyWrIjY) support, pluggable architecture, many internal changes. Do upgrade.
587
+
588
+ **1.1.1**
589
+
590
+ * Compatibility with W3TC and Localization
591
+
592
+ **1.1**
593
+
594
+ * First release on WordPress.org
595
+
596
+ **1.0**
597
+
598
+ * Initial Release
599
 
600
 
601
  == Changelog ==
602
+
603
+ **1.10.37**
604
+
605
+ * Fix: Email Subscribers form was not visible when Email Subscribers Premium plugin activated
606
+
607
+ **1.10.36**
608
+
609
  * Fix: Form color field was not rendering properly
610
  * Enhancement: Added Christmas Gallery Items
611
 
612
+ **1.10.35**
613
+
614
  * Fix: Security issues
615
 
616
+ **1.10.34**
617
+
618
  * Added Black Friday Cyber Monday Gallery Items
619
 
620
+ **1.10.33**
621
+
622
  * Enhancement: Revised Gallery Templates for Halloween
623
 
624
+ **1.10.32**
625
+
626
  * New: Added featured gallery items
627
 
628
+ **1.10.31**
629
+
630
  * Enhancement: Revised Gallery templates
631
 
632
+ **1.10.30.1**
633
+
634
  * Fix: Fatal error 'ES_DB_Forms' class not found.
635
 
636
+ **1.10.30**
637
+
638
  * New: [Email Subscribers & Newsletters](https://wordpress.org/plugins/email-subscribers/) is the recommended method of adding forms in Icegram
639
 
640
+ **1.10.29**
641
+
642
  * Fix: Fixed security issue in the gallery
643
 
644
+ **1.10.28.2**
645
+
646
  * Fix: Fatal error "IG_Tracker_V_1_0_1" class not found.
647
 
648
+ **1.10.28.1**
649
+
650
  * Fix: Fatal error "IG_Tracker_V_1_0_1" class not found.
651
 
652
+ **1.10.28**
653
+
654
  * Enhancement: Revised Gallery templates
655
 
656
+ **1.10.27**
657
+
658
  * Fix: Fixed gallery not loading issue
659
 
660
+ **1.10.26**
661
+
662
+ * Update: Now supports multi roles for the user in campaign display rules
663
+
664
+ **1.10.25**
665
 
 
666
  * Enhancement: Revised Gallery Templates for Black Friday and Cyber Monday
667
 
668
+ **1.10.24**
669
+
670
+ * Enhancement: Revised Gallery Templates for Halloween
671
+
672
+ **1.10.23**
673
 
 
674
  * Enhancement: Revised Gallery templates
675
 
676
+ **1.10.22**
677
+
678
  * Fix: Fixed popup blocker issue while previewing campaign
679
  * Update: Compatibility with latest [WPML](https://wpml.org/)
680
  * Enhancement: Revised Gallery templates
681
 
682
+ **1.10.21**
683
+
684
  * New: Added customizable Gallery templates to the Gallery
685
  * Update: Compatibility with latest [Email Subscribers](https://wordpress.org/plugins/email-subscribers/)
686
 
687
+ **1.10.20**
688
+
689
  * Update: Compatibility with latest [GDPR](https://wordpress.org/plugins/gdpr/)
690
 
691
+ **1.10.19**
692
+
693
+ * Update: Now supports Rainmaker forms in a multisite environment.
694
+
695
+ **1.10.18**
696
 
 
697
  * New: Improved the UI/UX of the Icegram Gallery
698
 
699
+ **1.10.17**
700
+
701
  * Enhancement: Revised Gallery templates
702
 
703
+ **1.10.16**
704
+
705
+ * Fix: "The plugin does not have a valid header"
706
+
707
+ **1.10.15**
708
 
 
709
  * New: Added Christmas Gallery templates
710
 
711
+ **1.10.14**
712
+
713
  * Update: Compatibility with WordPress 4.9
714
 
715
+ **1.10.13**
716
+
717
  * New: Added Black Friday and Cyber Monday Gallery templates
718
 
719
+ **1.10.12**
720
+
721
+ * Fix: MailPoet 3 anti-spam field was visible with Form embed functionality
722
+
723
+ **1.10.11**
724
 
 
725
  * New: Added Halloween Gallery templates
726
 
727
+ **1.10.10**
728
+
729
  * Enhancement: Revised Gallery templates
730
 
731
+ **1.10.9.1**
732
+
733
  * Fix: "Blank / White Screen of death" / Fatal error: Can't use function return value in write context
734
 
735
+ **1.10.9**
736
+
737
  * Enhancement: Revised Gallery templates
738
 
739
+ **1.10.8**
740
+
741
+ * Fix: compatibility with Contact Form 7(v4.8)
742
+
743
+ **1.10.7**
744
 
 
745
  * New: Added new templates to Icegram's Gallery
746
  * Fix: Single gallery template wasn't loading on refresh
747
 
748
+ **1.10.6**
749
+
750
  * Enhancement: Search bar, filters added to Icegram's Gallery
751
 
752
+ **1.10.5**
753
+
754
  * Enhancement: Small improvements for Call To Actions
755
 
756
+ **1.10.4**
757
+
758
+ * New: Directly choose Gallery Template while creating a New Campaign
759
+
760
+ **1.10.3**
761
 
 
762
  * Enhancement: [Email Subscribers](https://wordpress.org/plugins/email-subscribers/) form compatibility with Icegram
763
 
764
+ **1.10.2**
765
+
766
  * Update: Mobile Detect Library updated to version 2.8.24
767
  * Fix: Forms that were embedded in mobile popups at "0 seconds"
768
+ * Fix: Resolve conflicts with WordPress themes using Magnific popup library
769
+
770
+ **1.10.1**
771
+
772
+ * Fix: Action bar was not getting close.
773
 
774
+ **1.10**
 
775
 
 
776
  * Enhancement: Merged all addons in one
777
 
778
+ **1.9.24**
779
+
780
  * Enhancement: Small improvements in responsiveness of Popups and Action bars
781
 
782
+ **1.9.23**
783
+
784
+ * Fix: Popup with time delay more than "0 seconds" were also converted to action bar if Behavior triggers were installed
785
+
786
+ **1.9.22**
787
+
788
+ * Enhancement: No Google penalty for mobile popups, an automatic solution
789
 
790
+ **1.9.21**
 
791
 
792
+ * New: Revamped the old admin UI and made it more user-friendly and simple
 
793
 
794
+ **1.9.20.1**
795
+
796
+ * Fix: Solve "Parse error: syntax error, unexpected '&&' (T_BOOLEAN_AND), expecting ')'"
797
+
798
+ **1.9.20**
799
 
 
800
  * Update: Rainmaker form compatibility with Icegram's Remote addon
801
 
802
+ **1.9.19**
803
+
804
  * Fix: Secured Icegram from XSS vulnerability(Thanks to Ipstenu (Mika Epstein))
805
 
806
+ **1.9.18**
807
+
808
+ * Fix: Compatibility with Icegram's CTA add-on and Rainmaker
809
+
810
+ **1.9.17**
811
 
 
812
  * Update: Performance enhancements
813
  * Fix: Gallery is not getting loaded with https site
814
 
815
+ **1.9.16**
816
+
817
+ * New: [Icegram Rainmaker Form Plugin](https://wordpress.org/plugins/icegram-rainmaker/) is the recommended method of adding forms in Icegram
818
+
819
+ **1.9.15**
820
 
 
821
  * New: Added the Gallery of ready to use Icegram Campaigns
822
  * Fix: Font was not getting loaded for convert theme(popup)
823
 
824
+ **1.9.14**
825
+
826
  * New: Added quick action for campaign preview
827
  * Fix: For new message delay time -1 were not getting set
828
 
829
+ **1.9.13**
830
+
831
  * New: Two step - click triggered - optins
832
+ * Enhancement: Complete revamp of popup themes - Airmail, Convert, Inspire, Persude
833
  * Fix: Clicks were not getting tracked for button[type=submit] with inner HTML
834
 
835
+ **1.9.12**
836
+
837
  * New: Support for custom JS and CSS in message
838
+ * New: Added German translations
839
+ * Enhancement: Revised Addons and Docs page inside the plugin
840
  * Enhancement: Prevent false Impression count on crawling in analytics
841
+ * Fix: For an on-click popup, once the background of the popup was clicked it wouldn't open again
842
  * Fix: Home page targeting was not working properly in "Specific URL on this site" targeting
843
 
844
+ **1.9.11.1**
845
+
846
  * Fix: Warning for "Illegal string offset 'option_name'"
847
  * Fix: 'ReferenceError: icegram is not defined' on page with CF7 and no Icegram
848
 
849
+ **1.9.11**
850
+
851
  * Fix: Conditional login of Gravity forms was not working
852
 
853
+ **1.9.10**
854
+
855
  * Fix: Campaigns were not getting scheduled according to site's timezone
856
 
857
+ **1.9.9**
858
+
859
  * Fix: CF7(Contact Form 7) Ajax submission was not working
860
  * Fix: CF7 redirection was not working
861
  * Fix: CF7 was changing URL after form submission
862
 
863
+ **1.9.8.1**
864
 
 
865
  * Enhancement: Added sprite image for close buttons
866
  * Fix: Retargeting issues with HTTP and HTTPS
867
 
868
+ **1.9.8**
869
+
870
  * New: Added translation for Italian
871
  * Update: Action Bar does not overlap header/menu of your website
872
 
873
+ **1.9.7.1**
874
+
875
  * Fix: Incorrect plugin name
876
 
877
+ **1.9.7**
878
+
879
  * New: Messenger messages work beautifully on mobile / small devices now!
880
+ * New: Icegram's shortcodes are now working with Text Widget
881
  * Update: Mobile Detect Library updated to version 2.8.15
882
  * Fix: Gravity Forms hidden fields were visible with Form embed functionality
883
  * Fix: Slide animation was not working with some browsers
884
  * Fix: Popup message conflicts with some lightbox plugins
885
 
886
+ **1.9.6**
887
+
888
  * Fix: Popup was not getting closed when multiple popups were set on a single page
889
  * Fix: Message was not getting close when a form was submitted in a new window
890
  * Fix: Default editor was visible while loading campaign setting page
891
+ * Fix: Revised CSS of the "Support and Docs" page and made its compatibility with WordPress 4.3
892
+
893
+ **1.9.5**
894
 
 
895
  * New: Action bar messages work beautifully on mobile / small devices now!
896
  * New: Add Animation for few more message types
897
 
898
+ **1.9.4**
899
+
900
  * Fix: Ninja Forms was showing two submit buttons with Icegram Form embed functionality
901
  * Fix: Mailpoet hidden fields were visible with Form embed functionality
902
+ * Fix: Minor issues with form CSS
903
  * Fix: Use themes default option was not working in message admin settings
904
 
905
+ **1.9.3**
906
+
907
  * Fix: Redirection to "Target Link" was not working in Icegram message
908
  * Fix: Inline form shortcode not getting preserved for message types with only inline position
909
 
910
+ **1.9.2**
911
+
912
+ * New: Keep spammers away with new automatic anti-spambot checking mechanism
913
  * Fix: Shortcodes not working in Icegram messages
914
  * Fix: WordPress crash while creating a new post
915
  * Update: UI improvements for form embedding
916
 
917
+ **1.9.1**
918
+
919
+ * Update: Retargeting option now work for the campaign instead of the message
920
+ * Fix: Inline form shortcode not getting preserved in the message body
921
  * Fix: Form style options not getting saved
922
+ * Fix: Minor issues with form CSS
923
+ * Fix: Compatibility issues of previous embed form functionality with a new one
924
+
925
+ **1.9**
926
 
927
+ * New: Forms now comes with various form styles and multiple positions
928
+ * New: Forms also provides background and text color
 
929
  * New:Forms also supports header,footer-text/HTML
930
  * Update: Updated form embed functionality
931
  * Fix: Homepage page targeting not working when "Lazy loading" was off
932
 
933
+ **1.8.10**
934
+
935
+ * Fix: Compatibility for themes with CSS class name conflicts
936
+ * Fix: Compatibility with "auto-optimize" and other minification plugins
937
+ * Fix: Local site targeting not working without a wildcard character
938
+
939
+ **1.8.9**
940
 
 
941
  * New: Both body and button colors (background and foreground) can now be set
942
  * Update: Brought back CTA Buttons default colors
943
  * New: Lazy load Icegram messages for better compatibility with caching plugins
944
  * Update: Updated all themes to support new theme coloring scheme
945
  * Fix: Some alignment issues with images in popups
946
  * Update: Minified all JS and CSS to improve performance
947
+ * Update: Auto-correction for CTA links now works with tel: links
948
 
949
+ **1.8.8**
950
+
951
+ * New: Headlines now support shortcodes!
952
  * Update: A message shown on click of another (using CTA actions addon), can now contain shortcodes
953
  * Fix: Compatibility with Wishlist Member plugin
954
  * Fix: Popup close event not triggered when clicking outside the popup - on its overlay
955
+ * Update: Automatically adds HTTP:// in CTA links if missing
956
+
957
+ **1.8.7**
958
 
959
+ * New: Can now define the custom background and text colors for Popups
 
960
  * Fix: Button text color not showing well in some themes
961
  * Fix: Analytics not getting tracked
962
  * Update: Revisions to theme packs and many addons
963
  * New: Support for Split Testing addon
964
 
965
+ **1.8.6**
966
+
967
  * Fix: "Blank / White Screen of death" / Fatal error - Cannot redeclare class Mobile_Detect
968
  * Fix: Warning for undefined index
969
  * Update: Mobile Detect Library updated to version 2.8.11
970
+ * Update: Improvements in complementary colors for call to action button and button text
971
  * Update: Action Bar's Bold theme - reduced shadow on button text
972
 
973
+ **1.8.5**
974
+
975
  * New: Added a link to Form Embed Documentation for easy access
976
  * Fix: Default mode of content editor set to visual
977
  * Fix: Popup hiding behind header for some themes
978
  * Fix: Device targeting rule not working on newer devices
979
  * Fix: Preview working only after Publishing
980
 
981
+ **1.8.4**
982
+
983
+ * New: Popup messages work beautifully on mobile/small devices now!
984
  * Fix: Timing problems with popups triggered via Behavior Trigger addon.
985
  * Fix: Visual Composer compatibility
986
 
987
+ **1.8.3**
988
+
989
  * NEW: Duplicate a Campaign and Message easily now - click 'duplicate' in the list view!
990
  * Update: Using an image instead of dashicons for action bar arrows
991
+ * Update: Renamed "messenger" CSS class to "ig_messenger" to avoid potential overlaps
992
  * Update: Clicking outside the popup (on the dark overlay) will close the popup
993
 
994
+ **1.8.2**
995
+
996
  * Fix: Preview not working correctly
997
 
998
+ **1.8.1**
999
+
1000
  * NEW: Support for Icegram Remote - now run your campaigns on other sites - even non WordPress sites
1001
  * Update: Better wildcard matching in Where targeting rules for URLs
1002
  * Update: Compatibility with Avada theme
1003
  * Update: Misc UI and performance enhancements
1004
 
1005
+ **1.8**
1006
+
1007
  * NEW: Target campaigns to any page with wildcard URL support in "Where" conditions
1008
+ * NEW: CTA Click based retargeting to hide a message in a campaign after being clicked
1009
+ * NEW: Message shown retargeting can now hide message forever - after shown once
1010
+
1011
+ **1.7.1**
1012
 
 
1013
  * Update: Dismiss button for admin notice about bonus themes and addon
1014
  * Fix: Admin settings CSS changes, for compatibility with some themes
1015
  * Fix: Hello Bar close button not clickable
1016
  * Fix: Retargeting not working with some cache systems
1017
 
1018
+ **1.7**
1019
+
1020
  * Update: Styling changes to action bar CTA button for alignment
1021
  * Update: Hello Bar styling updates to better handle forms
1022
+ * Fix: Hidden field related issue while embedding subscription forms
1023
  * Fix: Retargeting not working correctly in certain cases
1024
+ * Fix: Theme thumbnails missing on the messages list
1025
+
1026
+ **1.6**
1027
 
 
1028
  * Fix: Empty image tag causing display issues in Opera / IE
1029
  * Update: Form embed functionality improvements
1030
  * NEW: "Themes Pack 2014" addon - 17 themes as a bonus - available from Icegram.com
1032
  * Update: JS and CSS URLs include version numbers now - better for caching
1033
  * Fix: Other minor fixes
1034
 
1035
+ **1.5**
1036
+
1037
  * NEW: "Embed Form" option for easy integration with optin / mailing list / subscription form / CRM services
1038
  * NEW: Retargeting Rule: Do not show again for X number of days
1039
  * NEW: Targeting Rule: "Not Logged In" visitor
1040
  * NEW: Added support for submitting form on CTA click
1041
  * NEW: "CTA Actions" premium addon
1042
 
1043
+ **1.4**
1044
+
1045
+ * NEW: Targeting Rule: "Exclude pages" from a site-wide campaign
1046
  * NEW: Options to cleanup Icegram data and remove shortcodes from content
1047
+ * NEW: CTA button color is automatically determined based on the background-color
1048
  * NEW: FREE Analytics add-on (available from www.icegram.com)
1049
  * Update: This version is compatible with WordPress 4.0
1050
 
1051
+ **1.3**
1052
+
1053
  * NEW: 7 Premium add-ons available
1054
  * Fix: [icegram] shortcode not working for campaigns
1055
  * Update: Improved CTA click handling
1057
  * NEW: Setting display time to -1 will hide the message
1058
  * Fix: Can use quotes and other special characters in headline now
1059
  * Update: #WPML Show default language message only if "Blog posts to display" is set to "All posts"
1060
+ * Fix: Hide campaign and messages from public pages & search engines
1061
  * Fix: Other plugins adding content to messages (social media links etc)
1062
+ * NEW: Clicking on any item with class "ig_cta" will trigger CTA click action
1063
  * Fix: Campaigns not working on archive pages (like Shop / Categories...)
1064
  * Fix: Campaigns with multiple target pages not working
1065
+ * Fix: #WPML Messages added from Campaigns page not showing on the Messages page
1066
  * Update: And then some changes we are forgetting for now...
1067
 
1068
+ **1.2**
1069
+
1070
  * NEW: Icegram is now fully pluggable. External plugins can add message types and themes.
1071
  * NEW: [WPML](http://wpml.org/?aid=21266&affiliate_key=W1YOdHyWrIjY) support
1072
  * Update: Icegram branding is optional
1073
  * NEW: Setting to show Icegram branding
1074
  * Fix: Popups show correctly on long pages now
1075
+ * Fix: Single-day schedule for message display is correctly handled now
1076
  * NEW: Rewritten message display system - can even control with JavaScript now
1077
  * Fix: For problems showing a campaign on homepage
1078
  * Update: Simplified CSS and JS
1082
  * Fix: For displaying messages via shortcode
1083
  * Update: And many more!!!
1084
 
1085
+ **1.1.1**
1086
 
 
1087
  * Fix for crash on activation with W3 Total Cache
1088
  * Added localization / translation ability
1089
 
1090
+ **1.1**
1091
+
1092
  * Loading CSS from own domain instead of Google
1093
 
1094
+ **1.0**
1095
+
1096
+ * Initial Release