Google Maps Plugin by Intergeo - Version 2.3.2

Version Description

  • 2019-11-14
Download this release

Release Info

Developer codeinwp
Plugin Icon 128x128 Google Maps Plugin by Intergeo
Version 2.3.2
Comparing to
See all releases

Code changes from version 2.3.1 to 2.3.2

CHANGELOG.md CHANGED
@@ -1,4 +1,8 @@
1
 
 
 
 
 
2
  ### v2.3.1 - 2019-05-23
3
  **Changes:**
4
  * Fix issue with editing map
1
 
2
+ ### v2.3.2 - 2019-11-14
3
+ **Changes:**
4
+ * Adds tested up with WordPress 5.3
5
+
6
  ### v2.3.1 - 2019-05-23
7
  **Changes:**
8
  * Fix issue with editing map
css/frontend.css CHANGED
@@ -1,5 +1,5 @@
1
  /*
2
- * Version: 2.3.1
3
  */
4
 
5
  .intergeo_map_canvas img {
1
  /*
2
+ * Version: 2.3.2
3
  */
4
 
5
  .intergeo_map_canvas img {
css/library.css CHANGED
@@ -191,3 +191,57 @@
191
  margin: 10px 20px 15px;
192
  list-style-type: disc;
193
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  margin: 10px 20px 15px;
192
  list-style-type: disc;
193
  }
194
+
195
+ .intergeo_lbrr_item.intergeo_otter .intergeo_lbrr_wrapper {
196
+ background: #ffffff;
197
+ display: flex;
198
+ justify-content: space-between;
199
+ flex-wrap: wrap;
200
+ margin-bottom: 20px;
201
+ padding: 15px;
202
+ flex-direction: column;
203
+ }
204
+
205
+
206
+ .intergeo_lbrr_item.intergeo_otter .intergeo_lbrr_wrapper img {
207
+ width: 128px;
208
+ height: 128px;
209
+ margin: auto;
210
+ }
211
+
212
+ .intergeo_lbrr_item.intergeo_otter .intergeo_lbrr_wrapper .intergeo_otter_details {
213
+ padding: 5px;
214
+ }
215
+
216
+ .intergeo_lbrr_item.intergeo_otter .intergeo_lbrr_wrapper .intergeo_otter_details .intergeo_otter_title {
217
+ text-align: center;
218
+ font-size: 14px;
219
+ font-weight: bold;
220
+ text-transform: uppercase;
221
+ }
222
+
223
+ .intergeo_lbrr_item.intergeo_otter .intergeo_lbrr_wrapper .intergeo_otter_details .intergeo_otter_info {
224
+ display: block;
225
+ margin-bottom: 10px;
226
+ font-size: 13px;
227
+ color: #777;
228
+ line-height: 1.6;
229
+ }
230
+
231
+ .intergeo_lbrr_item.intergeo_otter .intergeo_lbrr_wrapper .intergeo_otter_actions {
232
+ display: flex;
233
+ justify-content: center;
234
+ }
235
+
236
+ .intergeo_lbrr_item.intergeo_otter .intergeo_lbrr_wrapper .intergeo_otter_actions .button:first-child {
237
+ margin-right: 5px;
238
+ }
239
+
240
+ .intergeo_lbrr_item.intergeo_otter .intergeo_lbrr_wrapper .intergeo_otter_actions .button:last-child {
241
+ margin-left: 5px;
242
+ }
243
+
244
+ .intergeo_lbrr_item.intergeo_otter .intergeo_lbrr_wrapper .intergeo_otter_actions .dashicons {
245
+ margin-top: 2px;
246
+ margin-right: 7px;
247
+ }
index.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin Name: Intergeo - Google Maps Plugin
5
  * Plugin URI: http://themeisle.com/plugins/intergeo-maps-lite/
6
  * Description: A simple, easy and quite powerful Google Map tool to create, manage and embed custom Google Maps into your WordPress posts and pages. The plugin allows you to deeply customize look and feel of a map, add overlays like markers, rectangles, circles, polylines and polygons to your map. It could even be integraded with your Google Adsense account and show ad on your maps.
7
- * Version: 2.3.1
8
  * Author: Themeisle
9
  * Author URI: http://themeisle.com
10
  * License: GPL v2.0 or later
@@ -17,7 +17,7 @@
17
 
18
  define( 'INTERGEO_PLUGIN_NAME', 'intergeo' );
19
  define( 'TI_INTERGEO_PLUGIN_NAME', 'intergeo_maps' );
20
- define( 'INTERGEO_VERSION', '2.3.1' );
21
  define( 'INTERGEO_ABSPATH', dirname( __FILE__ ) );
22
  define( 'INTERGEO_ABSURL', plugins_url( '/', __FILE__ ) );
23
  defined( 'WPLANG' ) || define( 'WPLANG', '' );
@@ -308,7 +308,7 @@ function intergeo_map_popup_init() {
308
  } else {
309
  $args = array(
310
  'page' => INTERGEO_PLUGIN_NAME,
311
- 'updated' => date( 'YmdHis' ),
312
  );
313
  wp_redirect( add_query_arg( $args, admin_url( 'upload.php' ) ) );
314
  exit;
@@ -1233,6 +1233,15 @@ function intergeo_library() {
1233
  if ( filter_input( INPUT_GET, 'do' ) == 'delete' ) {
1234
  intergeo_library_delete();
1235
  }
 
 
 
 
 
 
 
 
 
1236
  $query = new WP_Query(
1237
  array(
1238
  'orderby' => 'ID',
@@ -1354,6 +1363,14 @@ function intergeo_print_messages() {
1354
  update_option( 'intergeo_messages', $messages );
1355
  }
1356
 
 
 
 
 
 
 
 
 
1357
  /**
1358
  * Show message.
1359
  *
4
  * Plugin Name: Intergeo - Google Maps Plugin
5
  * Plugin URI: http://themeisle.com/plugins/intergeo-maps-lite/
6
  * Description: A simple, easy and quite powerful Google Map tool to create, manage and embed custom Google Maps into your WordPress posts and pages. The plugin allows you to deeply customize look and feel of a map, add overlays like markers, rectangles, circles, polylines and polygons to your map. It could even be integraded with your Google Adsense account and show ad on your maps.
7
+ * Version: 2.3.2
8
  * Author: Themeisle
9
  * Author URI: http://themeisle.com
10
  * License: GPL v2.0 or later
17
 
18
  define( 'INTERGEO_PLUGIN_NAME', 'intergeo' );
19
  define( 'TI_INTERGEO_PLUGIN_NAME', 'intergeo_maps' );
20
+ define( 'INTERGEO_VERSION', '2.3.2' );
21
  define( 'INTERGEO_ABSPATH', dirname( __FILE__ ) );
22
  define( 'INTERGEO_ABSURL', plugins_url( '/', __FILE__ ) );
23
  defined( 'WPLANG' ) || define( 'WPLANG', '' );
308
  } else {
309
  $args = array(
310
  'page' => INTERGEO_PLUGIN_NAME,
311
+ 'updated' => current_time( 'mysql' ),
312
  );
313
  wp_redirect( add_query_arg( $args, admin_url( 'upload.php' ) ) );
314
  exit;
1233
  if ( filter_input( INPUT_GET, 'do' ) == 'delete' ) {
1234
  intergeo_library_delete();
1235
  }
1236
+
1237
+ if ( filter_input( INPUT_GET, 'do' ) == 'dismiss-notice' && current_user_can( 'manage_options' ) ) {
1238
+ if ( wp_verify_nonce( filter_input( INPUT_GET, 'nonce' ), 'dismiss-notice' . filter_input( INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP ) ) ) {
1239
+ update_option( 'intergeo_maps_otter_notice', true );
1240
+ wp_redirect( add_query_arg( 'page', INTERGEO_PLUGIN_NAME, admin_url( 'upload.php' ) ) );
1241
+ exit;
1242
+ }
1243
+ }
1244
+
1245
  $query = new WP_Query(
1246
  array(
1247
  'orderby' => 'ID',
1363
  update_option( 'intergeo_messages', $messages );
1364
  }
1365
 
1366
+ /**
1367
+ * Add options.
1368
+ */
1369
+ function intergeo_register_settings() {
1370
+ add_option( 'intergeo_maps_otter_notice', false );
1371
+ }
1372
+ add_action( 'admin_init', 'intergeo_register_settings' );
1373
+
1374
  /**
1375
  * Show message.
1376
  *
readme.md CHANGED
@@ -2,7 +2,7 @@
2
  **Contributors:** [codeinwp](https://profiles.wordpress.org/codeinwp), [intergeomaps](https://profiles.wordpress.org/intergeomaps), [hardeepasrani](https://profiles.wordpress.org/hardeepasrani), [themeisle](https://profiles.wordpress.org/themeisle), [Madalin_ThemeIsle](https://profiles.wordpress.org/Madalin_ThemeIsle), [uriahs-victor](https://profiles.wordpress.org/uriahs-victor), [contactashish13](https://profiles.wordpress.org/contactashish13)
3
  **Tags:** directions, easy map, google, google map, google map plugin, google maps, latitude, location, longitude, map, map directions, map markers, map plugin, map widget, maps, marker, polygons, polylines, routes, store locator, streetview, wp google map, wp google maps, wp maps,plugin,admin,widget,shortcode,google maps, maps, map, map markers, google, google map, maps api, wp maps, wp google maps, easy map, embed, marker, placemark, icon, geocode, shortcode, custom post type, multisite, marker clustering
4
  **Requires at least:** 3.5
5
- **Tested up to:** 5.2
6
  **Stable tag:** trunk
7
  **License:** GPL v2.0 or later
8
  **License URI:** http://www.opensource.org/licenses/gpl-license.php
@@ -117,6 +117,11 @@ function filter_intergeo_map_settings( $options ) {
117
  }`
118
 
119
  ## Changelog ##
 
 
 
 
 
120
  ### 2.3.1 - 2019-05-23 ###
121
 
122
  * Fix issue with editing map
2
  **Contributors:** [codeinwp](https://profiles.wordpress.org/codeinwp), [intergeomaps](https://profiles.wordpress.org/intergeomaps), [hardeepasrani](https://profiles.wordpress.org/hardeepasrani), [themeisle](https://profiles.wordpress.org/themeisle), [Madalin_ThemeIsle](https://profiles.wordpress.org/Madalin_ThemeIsle), [uriahs-victor](https://profiles.wordpress.org/uriahs-victor), [contactashish13](https://profiles.wordpress.org/contactashish13)
3
  **Tags:** directions, easy map, google, google map, google map plugin, google maps, latitude, location, longitude, map, map directions, map markers, map plugin, map widget, maps, marker, polygons, polylines, routes, store locator, streetview, wp google map, wp google maps, wp maps,plugin,admin,widget,shortcode,google maps, maps, map, map markers, google, google map, maps api, wp maps, wp google maps, easy map, embed, marker, placemark, icon, geocode, shortcode, custom post type, multisite, marker clustering
4
  **Requires at least:** 3.5
5
+ **Tested up to:** 5.3
6
  **Stable tag:** trunk
7
  **License:** GPL v2.0 or later
8
  **License URI:** http://www.opensource.org/licenses/gpl-license.php
117
  }`
118
 
119
  ## Changelog ##
120
+ ### 2.3.2 - 2019-11-14 ###
121
+
122
+ * Adds tested up with WordPress 5.3
123
+
124
+
125
  ### 2.3.1 - 2019-05-23 ###
126
 
127
  * Fix issue with editing map
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
  Contributors: codeinwp,intergeomaps,hardeepasrani,themeisle,Madalin_ThemeIsle,uriahs-victor,contactashish13
3
  Tags: directions, easy map, google, google map, google map plugin, google maps, latitude, location, longitude, map, map directions, map markers, map plugin, map widget, maps, marker, polygons, polylines, routes, store locator, streetview, wp google map, wp google maps, wp maps,plugin,admin,widget,shortcode,google maps, maps, map, map markers, google, google map, maps api, wp maps, wp google maps, easy map, embed, marker, placemark, icon, geocode, shortcode, custom post type, multisite, marker clustering
4
  Requires at least: 3.5
5
- Tested up to: 5.2
6
  Stable tag: trunk
7
  License: GPL v2.0 or later
8
  License URI: http://www.opensource.org/licenses/gpl-license.php
@@ -117,6 +117,11 @@ function filter_intergeo_map_settings( $options ) {
117
  }`
118
 
119
  == Changelog ==
 
 
 
 
 
120
  = 2.3.1 - 2019-05-23 =
121
 
122
  * Fix issue with editing map
2
  Contributors: codeinwp,intergeomaps,hardeepasrani,themeisle,Madalin_ThemeIsle,uriahs-victor,contactashish13
3
  Tags: directions, easy map, google, google map, google map plugin, google maps, latitude, location, longitude, map, map directions, map markers, map plugin, map widget, maps, marker, polygons, polylines, routes, store locator, streetview, wp google map, wp google maps, wp maps,plugin,admin,widget,shortcode,google maps, maps, map, map markers, google, google map, maps api, wp maps, wp google maps, easy map, embed, marker, placemark, icon, geocode, shortcode, custom post type, multisite, marker clustering
4
  Requires at least: 3.5
5
+ Tested up to: 5.3
6
  Stable tag: trunk
7
  License: GPL v2.0 or later
8
  License URI: http://www.opensource.org/licenses/gpl-license.php
117
  }`
118
 
119
  == Changelog ==
120
+ = 2.3.2 - 2019-11-14 =
121
+
122
+ * Adds tested up with WordPress 5.3
123
+
124
+
125
  = 2.3.1 - 2019-05-23 =
126
 
127
  * Fix issue with editing map
templates/library/list.php CHANGED
@@ -48,10 +48,59 @@
48
 
49
  <div id="intergeo_lbrr_items" class="intergeo_sidebar_left">
50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
  <?php if ( $query->have_posts() ) : ?>
52
 
53
  <?php
54
- $index = 0;
 
 
 
55
  while ( $query->have_posts() ) :
56
  $post = $query->next_post();
57
 
48
 
49
  <div id="intergeo_lbrr_items" class="intergeo_sidebar_left">
50
 
51
+ <?php if ( ! defined( 'OTTER_BLOCKS_VERSION' ) && current_user_can( 'manage_options' ) && version_compare( get_bloginfo( 'version' ), '5.0', '>=' ) && ! get_option( 'intergeo_maps_otter_notice', false ) ) : ?>
52
+
53
+ <?php
54
+ $index = 0;
55
+
56
+ $url = add_query_arg(
57
+ array(
58
+ 'tab' => 'plugin-information',
59
+ 'plugin' => 'otter-blocks',
60
+ 'TB_iframe' => true,
61
+ 'width' => 800,
62
+ 'height' => 800,
63
+ ),
64
+ network_admin_url( 'plugin-install.php' )
65
+ );
66
+
67
+ $dismiss = add_query_arg(
68
+ array(
69
+ 'do' => 'dismiss-notice',
70
+ 'noheader' => 'true',
71
+ 'nonce' => wp_create_nonce( 'dismiss-notice' . filter_input( INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP ) ),
72
+ )
73
+ );
74
+
75
+ $index ++;
76
+ ?>
77
+ <div class="intergeo_lbrr_item intergeo_otter">
78
+ <div class="intergeo_lbrr_wrapper">
79
+ <img src="https://ps.w.org/otter-blocks/assets/icon-256x256.png?rev=2019293"/>
80
+
81
+ <div class="intergeo_otter_details">
82
+ <p class="intergeo_otter_title"><?php _e( 'Intergeo recommends Otter', 'intergeo-maps' ); ?></p>
83
+ <p class="intergeo_otter_info"><?php _e( 'Intergeo recommends Otter for best in class Google Maps Builder for WordPress\'s new Block Editor.', 'intergeo-maps' ); ?></p>
84
+ </div>
85
+
86
+ <div class="intergeo_otter_actions">
87
+ <a class="button button-default" href="<?php echo $dismiss; ?>"><?php _e( 'Dismiss', 'intergeo-maps' ); ?></a>
88
+
89
+ <a class="button button-primary thickbox open-plugin-details-modal" href="<?php echo $url; ?>">
90
+ <span class="dashicons dashicons-external"></span><?php _e( 'More details', 'intergeo-maps' ); ?>
91
+ </a>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ <?php endif; ?>
96
+
97
  <?php if ( $query->have_posts() ) : ?>
98
 
99
  <?php
100
+ if ( ! isset( $index ) ) {
101
+ $index = 0;
102
+ }
103
+
104
  while ( $query->have_posts() ) :
105
  $post = $query->next_post();
106
 
themeisle-hash.json CHANGED
@@ -1 +1 @@
1
- {"index.php":"c3dc9a934ffd18bdc3612e089e8b6e90"}
1
+ {"index.php":"0e1585c013f231005497c82b2f9fc80c"}
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitea5e42e4e81c765e10537b5c8aba203a::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit34b4fbbd8f41a547808361c9bf47635a::getLoader();
vendor/codeinwp/themeisle-sdk/CHANGELOG.md CHANGED
@@ -1,3 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ## [3.0.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.5...v3.0.6) (2019-05-21)
2
 
3
 
1
+ ## [3.1.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.6...v3.1.7) (2019-11-07)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * license field style on wp5.3 ([0239997](https://github.com/Codeinwp/themeisle-sdk/commit/0239997))
7
+ * license field style on wp5.3 ([86d3a1b](https://github.com/Codeinwp/themeisle-sdk/commit/86d3a1b))
8
+
9
+ ## [3.1.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.5...v3.1.6) (2019-09-24)
10
+
11
+
12
+ ### Bug Fixes
13
+
14
+ * remove license related options when deactivated ([02cd6ce](https://github.com/Codeinwp/themeisle-sdk/commit/02cd6ce))
15
+ * remove license related options when deactivated ([d3c1a1f](https://github.com/Codeinwp/themeisle-sdk/commit/d3c1a1f))
16
+
17
+ ## [3.1.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.4...v3.1.5) (2019-09-11)
18
+
19
+
20
+ ### Bug Fixes
21
+
22
+ * allow unloading certain module features ([2a2559a](https://github.com/Codeinwp/themeisle-sdk/commit/2a2559a))
23
+ * license activation workflow, show error message when failed to a… ([ade795c](https://github.com/Codeinwp/themeisle-sdk/commit/ade795c))
24
+ * license activation workflow, show error message when failed to activate ([2f5cbae](https://github.com/Codeinwp/themeisle-sdk/commit/2f5cbae))
25
+
26
+ ## [3.1.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.3...v3.1.4) (2019-08-23)
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * license key was missing on get_version call ([365cde6](https://github.com/Codeinwp/themeisle-sdk/commit/365cde6))
32
+ * license key was missing on get_version call ([c02f225](https://github.com/Codeinwp/themeisle-sdk/commit/c02f225))
33
+
34
+ ## [3.1.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.2...v3.1.3) (2019-08-20)
35
+
36
+
37
+ ### Bug Fixes
38
+
39
+ * license deactivation behaviour https://github.com/Codeinwp/visua… ([59c4afe](https://github.com/Codeinwp/themeisle-sdk/commit/59c4afe))
40
+ * license deactivation behaviour https://github.com/Codeinwp/visualizer-pro/issues/192 ([f641e18](https://github.com/Codeinwp/themeisle-sdk/commit/f641e18))
41
+
42
+ ## [3.1.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.1...v3.1.2) (2019-08-12)
43
+
44
+
45
+ ### Bug Fixes
46
+
47
+ * phpunit test case ([efe851c](https://github.com/Codeinwp/themeisle-sdk/commit/efe851c))
48
+ * url format for license endpoint, improve changelog handling and license checks ([a492c68](https://github.com/Codeinwp/themeisle-sdk/commit/a492c68))
49
+
50
+ ## [3.1.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.0...v3.1.1) (2019-08-08)
51
+
52
+
53
+ ### Bug Fixes
54
+
55
+ * adds is_file for file existence check ([d1205c4](https://github.com/Codeinwp/themeisle-sdk/commit/d1205c4))
56
+ * adds is_file for file existence check ([be119c1](https://github.com/Codeinwp/themeisle-sdk/commit/be119c1))
57
+
58
+ # [3.1.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.10...v3.1.0) (2019-08-05)
59
+
60
+
61
+ ### Bug Fixes
62
+
63
+ * adds extra comments for rest of the options, fix [#64](https://github.com/Codeinwp/themeisle-sdk/issues/64) ([018b22f](https://github.com/Codeinwp/themeisle-sdk/commit/018b22f))
64
+ * hide license key when active under a password mask, fix [#67](https://github.com/Codeinwp/themeisle-sdk/issues/67) ([c0633c2](https://github.com/Codeinwp/themeisle-sdk/commit/c0633c2))
65
+ * new uninstall feedback popup issues ([5bda4bd](https://github.com/Codeinwp/themeisle-sdk/commit/5bda4bd))
66
+ * phpcs indentation errors ([d59ed4f](https://github.com/Codeinwp/themeisle-sdk/commit/d59ed4f))
67
+ * undefined notices on license check, fix [#60](https://github.com/Codeinwp/themeisle-sdk/issues/60) ([7f56a97](https://github.com/Codeinwp/themeisle-sdk/commit/7f56a97))
68
+ * uninstall feedback popup placement [[#61](https://github.com/Codeinwp/themeisle-sdk/issues/61)] ([1102d6c](https://github.com/Codeinwp/themeisle-sdk/commit/1102d6c))
69
+
70
+
71
+ ### Features
72
+
73
+ * new product feedback popup ([f0dbab3](https://github.com/Codeinwp/themeisle-sdk/commit/f0dbab3))
74
+ * new uninstall feedback form for themes ([8a29f21](https://github.com/Codeinwp/themeisle-sdk/commit/8a29f21))
75
+
76
+ ## [3.0.10](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.9...v3.0.10) (2019-07-16)
77
+
78
+
79
+ ### Bug Fixes
80
+
81
+ * compatibility with lower PHP versions ([065ac8e](https://github.com/Codeinwp/themeisle-sdk/commit/065ac8e))
82
+ * not loading licenser when SDK comes from theme [[#62](https://github.com/Codeinwp/themeisle-sdk/issues/62)] ([b706ca7](https://github.com/Codeinwp/themeisle-sdk/commit/b706ca7))
83
+ * not loading licenser when SDK comes from theme [[#65](https://github.com/Codeinwp/themeisle-sdk/issues/65) ([419d8e6](https://github.com/Codeinwp/themeisle-sdk/commit/419d8e6))
84
+ * preserve loaded when adding the licenser one ([cd50434](https://github.com/Codeinwp/themeisle-sdk/commit/cd50434))
85
+
86
+ ## [3.0.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.8...v3.0.9) (2019-06-26)
87
+
88
+
89
+ ### Bug Fixes
90
+
91
+ * adds new icon for dashboard widget ([de78068](https://github.com/Codeinwp/themeisle-sdk/commit/de78068))
92
+ * anchor element on license activation message which should link to the license field, fix [#57](https://github.com/Codeinwp/themeisle-sdk/issues/57) ([2e78856](https://github.com/Codeinwp/themeisle-sdk/commit/2e78856))
93
+ * change uninstall feedback logo with new version, fix [#58](https://github.com/Codeinwp/themeisle-sdk/issues/58) ([2554a4f](https://github.com/Codeinwp/themeisle-sdk/commit/2554a4f))
94
+ * remove soon to expire notice, fix https://github.com/Codeinwp/themeisle/issues/752 ([a126225](https://github.com/Codeinwp/themeisle-sdk/commit/a126225))
95
+
96
+ ## [3.0.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.7...v3.0.8) (2019-05-28)
97
+
98
+
99
+ ### Bug Fixes
100
+
101
+ * undefined class on diff module which should check the class on global namespace ([df6bb12](https://github.com/Codeinwp/themeisle-sdk/commit/df6bb12))
102
+
103
+ ## [3.0.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.6...v3.0.7) (2019-05-27)
104
+
105
+
106
+ ### Bug Fixes
107
+
108
+ * change store url with the new domain ([6bdbe1e](https://github.com/Codeinwp/themeisle-sdk/commit/6bdbe1e))
109
+
110
  ## [3.0.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.5...v3.0.6) (2019-05-21)
111
 
112
 
vendor/codeinwp/themeisle-sdk/load.php CHANGED
@@ -14,14 +14,22 @@ if ( ! defined( 'ABSPATH' ) ) {
14
  return;
15
  }
16
  // Current SDK version and path.
17
- $themeisle_sdk_version = '3.0.6';
18
  $themeisle_sdk_path = dirname( __FILE__ );
19
 
20
  global $themeisle_sdk_max_version;
21
  global $themeisle_sdk_max_path;
22
 
 
 
 
 
 
 
 
 
23
  if ( version_compare( $themeisle_sdk_version, $themeisle_sdk_max_path ) == 0 &&
24
- apply_filters( 'themeisle_sdk_should_overwrite_path', false, $themeisle_sdk_path, $themeisle_sdk_max_path ) ) {
25
  $themeisle_sdk_max_path = $themeisle_sdk_path;
26
  }
27
 
@@ -30,6 +38,21 @@ if ( version_compare( $themeisle_sdk_version, $themeisle_sdk_max_version ) > 0 )
30
  $themeisle_sdk_max_path = $themeisle_sdk_path;
31
  }
32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  // load the latest sdk version from the active Themeisle products.
34
  if ( ! function_exists( 'themeisle_sdk_load_latest' ) ) :
35
  /**
14
  return;
15
  }
16
  // Current SDK version and path.
17
+ $themeisle_sdk_version = '3.1.7';
18
  $themeisle_sdk_path = dirname( __FILE__ );
19
 
20
  global $themeisle_sdk_max_version;
21
  global $themeisle_sdk_max_path;
22
 
23
+ // If this is the latest SDK and it comes from a theme, we should load licenser separately.
24
+ $themeisle_sdk_relative_licenser_path = '/src/Modules/Licenser.php';
25
+
26
+ global $themeisle_sdk_abs_licenser_path;
27
+ if ( ! is_file( $themeisle_sdk_path . $themeisle_sdk_relative_licenser_path ) && is_file( $themeisle_sdk_max_path . $themeisle_sdk_relative_licenser_path ) ) {
28
+ $themeisle_sdk_abs_licenser_path = $themeisle_sdk_max_path . $themeisle_sdk_relative_licenser_path;
29
+ add_filter( 'themeisle_sdk_required_files', 'themeisle_sdk_load_licenser_if_present' );
30
+ }
31
  if ( version_compare( $themeisle_sdk_version, $themeisle_sdk_max_path ) == 0 &&
32
+ apply_filters( 'themeisle_sdk_should_overwrite_path', false, $themeisle_sdk_path, $themeisle_sdk_max_path ) ) {
33
  $themeisle_sdk_max_path = $themeisle_sdk_path;
34
  }
35
 
38
  $themeisle_sdk_max_path = $themeisle_sdk_path;
39
  }
40
 
41
+ // load the latest sdk version from the active Themeisle products.
42
+ if ( ! function_exists( 'themeisle_sdk_load_licenser_if_present' ) ) :
43
+ /**
44
+ * Always load the licenser, if present.
45
+ *
46
+ * @param array $to_load Previously files to load.
47
+ */
48
+ function themeisle_sdk_load_licenser_if_present( $to_load ) {
49
+ global $themeisle_sdk_abs_licenser_path;
50
+ $to_load[] = $themeisle_sdk_abs_licenser_path;
51
+
52
+ return $to_load;
53
+ }
54
+ endif;
55
+
56
  // load the latest sdk version from the active Themeisle products.
57
  if ( ! function_exists( 'themeisle_sdk_load_latest' ) ) :
58
  /**
vendor/codeinwp/themeisle-sdk/src/Loader.php CHANGED
@@ -84,7 +84,7 @@ final class Loader {
84
  */
85
  public static function add_product( $base_file ) {
86
 
87
- if ( ! is_readable( $base_file ) ) {
88
  return self::$instance;
89
  }
90
  $product = new Product( $base_file );
84
  */
85
  public static function add_product( $base_file ) {
86
 
87
+ if ( ! is_file( $base_file ) ) {
88
  return self::$instance;
89
  }
90
  $product = new Product( $base_file );
vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php CHANGED
@@ -72,7 +72,9 @@ class Dashboard_Widget extends Abstract_Module {
72
  * @return Dashboard_Widget Module instance.
73
  */
74
  public function load( $product ) {
75
-
 
 
76
  $this->product = $product;
77
  $this->dashboard_name = apply_filters( 'themeisle_sdk_dashboard_widget_name', 'WordPress Guides/Tutorials' );
78
  $this->feeds = apply_filters(
@@ -127,10 +129,10 @@ class Dashboard_Widget extends Abstract_Module {
127
  }
128
 
129
  #themeisle h2.hndle {
130
- background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3Ny4xMiA3Ny4xMiI+PHRpdGxlPkFzc2V0IDM8L3RpdGxlPjxwYXRoIGQ9Ik03NS43Niw0Ny42cS0xLjUsNi40Ni00LjA3LDkuMjZBMzYuMjIsMzYuMjIsMCwwLDEsNjMuMjYsNjNhNTEsNTEsMCwwLDEtOS43OSw0LjZoLS4xNXY0LjgyQTQuNjYsNC42NiwwLDAsMSw1Miw3NS43Niw0LjA3LDQuMDcsMCwwLDEsNDksNzcuMTJhNCw0LDAsMCwxLTIuMTgtLjYxQTQuOTQsNC45NCwwLDAsMSw0NS4xOSw3NWE0LjQyLDQuNDIsMCwwLDEtNy41NCwwLDQuOTQsNC45NCwwLDAsMS0xLjU4LDEuNSwzLjc1LDMuNzUsMCwwLDEtMiwuNjFBNC4yNyw0LjI3LDAsMCwxLDMwLjI3LDc1YTQuOTQsNC45NCwwLDAsMS0xLjU4LDEuNSw0LDQsMCwwLDEtMi4xOC42MSwzLjkzLDMuOTMsMCwwLDEtMy4xNi0xLjQzLDUuMyw1LjMsMCwwLDEtMS4yMS0zLjU0LDEzLjgxLDEzLjgxLDAsMCwxLTguNTgsMywxMy4yMywxMy4yMywwLDAsMS05LTMuNDdBMTguMjEsMTguMjEsMCwwLDAsOSw3MC43OWExNC4yNiwxNC4yNiwwLDAsMS03LjgzLTUuNDIsMTYuMTIsMTYuMTIsMCwwLDAsNS4xOS4wNywxMi44OSwxMi44OSwwLDAsMCw0LjktMS43M1EzLjE1LDU1LjQzLDEuMDUsNTAuNDZhMTgsMTgsMCwwLDEtMS02LjkzQTQwLDQwLDAsMCwxLDEuMjEsMzQsMjYuNTksMjYuNTksMCwwLDEsNS4yNywyNC4xUTguNDQsMTkuNDMsMTMsMTkuNDNhMy40MSwzLjQxLDAsMCwxLDMuNDcsMi4yNmMuNi0uOCwxLjItMS41NiwxLjgxLTIuMjZsLjQ1LS40NS43NS0uNzUsMS4wNS0xLjgxYTM1LjIsMzUuMiwwLDAsMSwyLjExLTMuMzIsMjguNTcsMjguNTcsMCwwLDEsOS4xMi03LjY4QTIzLjQsMjMuNCwwLDAsMSw0Mi45MywyLjU2YTIyLjIyLDIyLjIyLDAsMCwxLDIuNzEuMTVBOC4xNiw4LjE2LDAsMCwxLDUxLjgxLDAsOC42OSw4LjY5LDAsMCwxLDU4LDIuNDFhMS41MSwxLjUxLDAsMCwxLC4xNS42OGMwLC4yNS0uNTUuOTMtMS42NiwybC0uMy4zYTkuNjksOS42OSwwLDAsMSwxLjU4LjgzYy41NS4zNS44My42NS44My45YTEuNjIsMS42MiwwLDAsMS0uNiwxbC0uMTUuMTVxNi43OCw2LDguNTgsMTYuMjdBMy4zLDMuMywwLDAsMSw2OSwyMy4zNWE2LjQ4LDYuNDgsMCwwLDEsNC4yMiwyLjFxMy45MiwzLjMyLDMuOTIsMTEuOUE0Mi4wNSw0Mi4wNSwwLDAsMSw3NS43Niw0Ny42Wk01My42Miw1NC4wN2EyNCwyNCwwLDAsMS0xNCw0LjUyQTIxLjQxLDIxLjQxLDAsMCwxLDI3LDU0LjY3LDI0LjI4LDI0LjI4LDAsMCwxLDE4LjUzLDQ1YTI5LDI5LDAsMCwxLTMtMTMsMzEuNzgsMzEuNzgsMCwwLDEsLjkxLTcuNTNBMzIuMTcsMzIuMTcsMCwwLDAsMTEuOSw0MS4yN2EzMy41LDMzLjUsMCwwLDAsMi43OSwxMy40LDI5LjEsMjkuMSwwLDAsMCw3LjksMTAuODUsNC42OCw0LjY4LDAsMCwxLDEuNjYtMS44OCw0LjE3LDQuMTcsMCwwLDEsNC40NC0uMDgsNC41LDQuNSwwLDAsMSwxLjU4LDEuNjZBNC4yLDQuMiwwLDAsMSwzNCw2M2EzLjgzLDMuODMsMCwwLDEsMiwuNiw0LjUsNC41LDAsMCwxLDEuNTgsMS42Niw0LjI3LDQuMjcsMCwwLDEsNy41NCwwLDQuNSw0LjUsMCwwLDEsMS41OC0xLjY2LDQuMTcsNC4xNywwLDAsMSw0LjQ0LjA4LDMuODYsMy44NiwwLDAsMSwxLjUxLDEuNzMsMzAuMTcsMzAuMTcsMCwwLDAsNy42OC05Ljk0LDMxLjE4LDMxLjE4LDAsMCwwLDMuMTYtMTIuMzVBMjguMzksMjguMzksMCwwLDEsNTMuNjIsNTQuMDdaTTI4Ljc3LDY1LjM3YTMuMSwzLjEsMCwwLDAtNC4zNywwLDMuMDYsMy4wNiwwLDAsMC0uOSwyLjI2djQuODJhMy4zMiwzLjMyLDAsMCwwLC45LDIuMzMsMi45MywyLjkzLDAsMCwwLDQuMzcsMCwzLjMyLDMuMzIsMCwwLDAsLjktMi4zM1Y2Ny42M0EzLjA2LDMuMDYsMCwwLDAsMjguNzcsNjUuMzdabS45LTQ4YTQuMjQsNC4yNCwwLDAsMCwzLjQ3LDEuNzMsNC40NSw0LjQ1LDAsMCwwLDMuNTQtMS43Myw2LDYsMCwwLDAsMS40My0zLjkyLDUuNyw1LjcsMCwwLDAtMS40My0zLjg0QTQuNTMsNC41MywwLDAsMCwzMy4xNCw4YTQuMzEsNC4zMSwwLDAsMC0zLjQ3LDEuNjYsNS43OSw1Ljc5LDAsMCwwLTEuMzUsMy43N0E2LjMzLDYuMzMsMCwwLDAsMjkuNjcsMTcuNFptNi40OCw0OGEzLjEsMy4xLDAsMCwwLTQuMzcsMCwzLjA2LDMuMDYsMCwwLDAtLjksMi4yNnY0LjgyYTMuMzIsMy4zMiwwLDAsMCwuOSwyLjMzLDIuOTMsMi45MywwLDAsMCw0LjM3LDAsMy4zMiwzLjMyLDAsMCwwLC45LTIuMzNWNjcuNjNBMy4wNiwzLjA2LDAsMCwwLDM2LjE1LDY1LjM3Wm0tNC4wNy01NC4zYTIuMzcsMi4zNywwLDAsMSwyLTEsMi4xNywyLjE3LDAsMCwxLDEuODgsMSw0LjEsNC4xLDAsMCwxLDAsNC41MiwyLjE3LDIuMTcsMCwwLDEtMS44OCwxLDIuMzcsMi4zNywwLDAsMS0yLTEsMy43MiwzLjcyLDAsMCwxLS43NS0yLjM0QTMuNDksMy40OSwwLDAsMSwzMi4wOCwxMS4wN1ptNSw5LjQxYTIwLjYxLDIwLjYxLDAsMCwwLTMuNTQsMTIuMjgsMTcuMTUsMTcuMTUsMCwwLDAsNC4wNywxMSwxMi40MywxMi40MywwLDAsMCw5Ljg3LDQuNDUsMTUuMywxNS4zLDAsMCwwLDktMywxMywxMywwLDAsMCwuNi0zLjMycTAtMy4zMi0zLjE2LTMuMzFhOC41OCw4LjU4LDAsMCwwLTIsLjNxLTcuODMsMS41LTExLjU5LS4zLTQuNTMtMi4xMi00LjUyLTkuMzRBMzcuOTIsMzcuOTIsMCwwLDEsMzcuMDUsMjAuNDhaTTYxLjQ1LDE3QTEyLjg0LDEyLjg0LDAsMCwwLDUxLjIxLDEyLjJhMTUuMTEsMTUuMTEsMCwwLDAtNi40LDEuNDMsMTcuODMsMTcuODMsMCwwLDAtNS41LDRxLTYuMTgsMjAuNjQsNi4xOCwyMC42NEEyNC43NSwyNC43NSwwLDAsMCw0OSwzNy44MWEzOC45MiwzOC45MiwwLDAsMSw0LjgyLS40NmMxLjgxLDAsMy4wNi40NiwzLjc3LDEuMzZxMS4zNSwxLjUuNzUsNS4xMmEyMS43MiwyMS43MiwwLDAsMCw1LTcuMTVBMjEuMzgsMjEuMzgsMCwwLDAsNjUuMDcsMjgsMTcuNDQsMTcuNDQsMCwwLDAsNjEuNDUsMTdaTTQzLjYsNjUuMzdhMi43MiwyLjcyLDAsMCwwLTIuMS0uOSwzLDMsMCwwLDAtMi4xOS45LDMuMDYsMy4wNiwwLDAsMC0uOSwyLjI2djQuODJhMy4zMiwzLjMyLDAsMCwwLC45LDIuMzMsMi44NCwyLjg0LDAsMCwwLDIuMTksMSwyLjYxLDIuNjEsMCwwLDAsMi4xLTEsMy40NSwzLjQ1LDAsMCwwLC44My0yLjMzVjY3LjYzQTMuMTcsMy4xNywwLDAsMCw0My42LDY1LjM3Wm03LjQ2LDBhMywzLDAsMCwwLTIuMTgtLjksMi43MywyLjczLDAsMCwwLTIuMTEuOSwzLjE3LDMuMTcsMCwwLDAtLjgzLDIuMjZ2NC44MmEzLjQ1LDMuNDUsMCwwLDAsLjgzLDIuMzMsMi42MSwyLjYxLDAsMCwwLDIuMTEsMSwyLjgzLDIuODMsMCwwLDAsMi4xOC0xLDMuMzIsMy4zMiwwLDAsMCwuOS0yLjMzVjY3LjYzQTMuMDYsMy4wNiwwLDAsMCw1MS4wNiw2NS4zN1oiLz48L3N2Zz4=');
131
  background-repeat: no-repeat;
132
  background-position: 92% 50%;
133
- background-size: 30px;
134
  }
135
 
136
  #themeisle .inside {
72
  * @return Dashboard_Widget Module instance.
73
  */
74
  public function load( $product ) {
75
+ if ( apply_filters( 'themeisle_sdk_hide_dashboard_widget', false ) ) {
76
+ return;
77
+ }
78
  $this->product = $product;
79
  $this->dashboard_name = apply_filters( 'themeisle_sdk_dashboard_widget_name', 'WordPress Guides/Tutorials' );
80
  $this->feeds = apply_filters(
129
  }
130
 
131
  #themeisle h2.hndle {
132
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAABbCAMAAADncTNAAAAAtFBMVEVHcEyAgIB/f3+xsbGgoaGBgYGCgoKKioqAgIC1tbW5ubnFx8iAgIDU1taBgYGCgoKAgIC0tLXW19jW2NiAgIC3uLiBgYHLzMy4uLhycnLW19d/f3/T1NW0tLTX19mVlZWvr6+BgYHl5eWKiottbW5JSUnW2Nm5ubnh4eHT1NWVlZVjY2N4eHh9fX6pqqq+v79PT0/39/fu7u7Nzc7Z2ttYWFgBAQHDw8P////JysoZGRk0NTZqJc/sAAAAIXRSTlMA0FL7/oEnEPL6eibivm9gwJya76/enFq2CXI+2lFAyM8GATmPAAADj0lEQVR4Xu2YaW/iOhSGAwRCWDosnXa6znjJvm8svf//f12TuARyhiR2pfnUR6gSEnr0+uT4xK7yRb755pvhHePli5K7Bfpkuhoq8ozRJdMH+WWha6Z3sqYparCSLRJqspjImVbANJU03cNMMpofAwQZCGsmpQYyFvVM0Q00OQ9koMl5IPcCoro+RA1Dt2Ea9n9eZ0+YHJLkgIlkDywQx00wCTyaReiKH8LbNU9ybJOdkchV6QFxyCFLbVvdfaREqgUWg/tx2UbqIcK2Hex2TdGLwFTjIj3XP3YfCZFsb23KRZn/3263oymSFI0/a5S4PqUBjoBIJBDjeEhCN0wxQSRybIxtJ3K5SGzuE/vAwIQc8ZmMMJFAIM4oikZItfEFtorGgoE43FObwqHU68OtPCnOz8KZ2Jbl5LgkSW0Tc7YyIz/EFWmS4jMbiZU5mJOmKRaJpKGGyLZtDJh3iyaNUu/3+xyKnrtFL71EG+FTiMpENhQtxUQ8kSOXCIr2tnCNhg/gTX0SHYFp0t7TCwQZ7U841yoHrW6rtGroUwTWVnLMssxx+H4bgZcSOFf5MYx0Ae8FghomMDyC2EBNImBywPkNTDNqGLQpIg2TjUNU8tBy9DQMo0DAZF16rAi7vJAtFTIYFAHUc6hIRW6OuOhJgaCSwmDEAYK4oa7ro+qIEyJU/US7KTJKPNSFT9tFgVFBu0SF1y7yjX4masRA9Da7EFGj28R/BkQz6xGIOurkx38T/bKs9Uk8aIiMwm/Jw0VP1yLrJwt13xAxvABBgsK4KWLov35DkRF7ZaqgzuZ7MQ8MOntmVYyAqKTwaICKqvSUFnVccMN5sziEP/5+xGDTahbH5Q3ZB76zr8fI+nJtvUUU3t3ml5GKviK/npCg3CGodnuJ4JVkfRFJYGVDBZrqKnn9RLf+CzDTS5PaN5J38+auzX4ykU4Qoj0rdKfcYs5ijfo9OL/uRUgZyQr7NCWtWwiUSLc4arfJa7lpszTA1OJZAQ8w8dXFrR5YHzCWSnS3pZ18tOi4Ps4vl/c7i/6qomjRecN+UubrPyPGn/VEMU3T0UFHkaPzpgjxmJsnjmrtionlMDZiog0TsY/DPtn8SXtlBvbtxKtwopy7lqW3smQO+yoGE1Uu55GJ3pmI8ygoejZNnqj0vnIRCyTKfLstRdtStGQi09myUsvwvlkuzSUXbV+Xz5ryBebV33fln/A/moud69FZiEYAAAAASUVORK5CYII=');
133
  background-repeat: no-repeat;
134
  background-position: 92% 50%;
135
+ background-size: 25px;
136
  }
137
 
138
  #themeisle .inside {
vendor/codeinwp/themeisle-sdk/src/Modules/Endpoint.php CHANGED
@@ -273,7 +273,7 @@ class Endpoint extends Abstract_Module {
273
 
274
  // fetch the calculated hashes.
275
  if ( ! $wp_filesystem->is_readable( $path . '/' . self::HASH_FILE ) ) {
276
- return new WP_Error( 'themeisle_sdk_hash_not_found', sprintf( '%s not found', self::HASH_FILE ) );
277
  }
278
 
279
  $hashes = json_decode( $wp_filesystem->get_contents( $path . '/' . self::HASH_FILE ), true );
273
 
274
  // fetch the calculated hashes.
275
  if ( ! $wp_filesystem->is_readable( $path . '/' . self::HASH_FILE ) ) {
276
+ return new \WP_Error( 'themeisle_sdk_hash_not_found', sprintf( '%s not found', self::HASH_FILE ) );
277
  }
278
 
279
  $hashes = json_decode( $wp_filesystem->get_contents( $path . '/' . self::HASH_FILE ), true );
vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php CHANGED
@@ -89,6 +89,9 @@ class Licenser extends Abstract_Module {
89
  if ( ! is_admin() ) {
90
  return false;
91
  }
 
 
 
92
  add_settings_field(
93
  $this->product->get_key() . '_license',
94
  $this->product->get_name() . ' license',
@@ -109,8 +112,70 @@ class Licenser extends Abstract_Module {
109
  $valid_string = apply_filters( $this->product->get_key() . '_lc_valid_string', 'Valid' );
110
  $invalid_string = apply_filters( $this->product->get_key() . '_lc_invalid_string', 'Invalid' );
111
  $license_message = apply_filters( $this->product->get_key() . '_lc_license_message', 'Enter your license from %s purchase history in order to get %s updates' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
 
113
- echo '<p ><input ' . ( ( 'valid' === $status ) ? ( 'style="border:1px solid #7ad03a; "' ) : '' ) . ' type="text" id="' . $this->product->get_key() . '_license" name="' . $this->product->get_key() . '_license" value="' . $value . '" /><a ' . ( ( 'valid' === $status ) ? ( 'style="color:#fff;background: #7ad03a; display: inline-block;text-decoration: none;font-size: 13px;line-height: 26px;height: 26px; margin-left:5px; padding: 0 10px 1px; -webkit-border-radius: 3px;border-radius: 3px; ">' . $valid_string ) : ( 'style="color:#fff;background: #dd3d36; display: inline-block;text-decoration: none;font-size: 13px;line-height: 26px;height: 26px; margin-left:5px; padding: 0 10px 1px; -webkit-border-radius: 3px;border-radius: 3px; ">' . $invalid_string ) ) . ' </a>&nbsp;&nbsp;&nbsp;<button name="' . $this->product->get_key() . '_btn_trigger" ' . ( ( 'valid' === $status ) ? ( ' class="button button-primary">' . $deactivate_string ) : ( ' class="button button-primary" value="yes" type="submit" >' . $activate_string ) ) . ' </button></p><p class="description">' . sprintf( $license_message, '<a href="' . $this->get_api_url() . '">' . $this->get_distributor_name() . '</a> ', $this->product->get_type() ) . '</p>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
 
115
  }
116
 
@@ -166,10 +231,13 @@ class Licenser extends Abstract_Module {
166
  if ( ! is_admin() ) {
167
  return false;
168
  }
 
 
 
 
169
  $status = $this->get_license_status();
170
  $no_activations_string = apply_filters( $this->product->get_key() . '_lc_no_activations_string', 'No activations left for %s !!!. You need to upgrade your plan in order to use %s on more websites. Please ask the %s Staff for more details.' );
171
  $no_valid_string = apply_filters( $this->product->get_key() . '_lc_no_valid_string', 'In order to benefit from updates and support for %s, please add your license code from your <a href="%s" target="_blank">purchase history</a> and validate it <a href="%s">here</a>. ' );
172
- $expiration_string = apply_filters( $this->product->get_key() . '_lc_expiration_string', 'Your license is about to expire for %s. You can go to %s and renew it ' );
173
 
174
  // No activations left for this license.
175
  if ( 'valid' != $status && $this->check_activation() ) {
@@ -195,7 +263,7 @@ class Licenser extends Abstract_Module {
195
  ?>
196
  <div class="error">
197
  <p>
198
- <strong><?php echo sprintf( $no_valid_string, $this->product->get_name() . ' ' . $this->product->get_type(), $this->get_api_url(), admin_url( 'options-general.php' ) . '#' . $this->product->get_key() ); ?> </strong>
199
  </p>
200
  </div>
201
  <?php
@@ -203,26 +271,6 @@ class Licenser extends Abstract_Module {
203
  return false;
204
  }
205
 
206
- // Expired and soon to expire license.
207
- if ( 'valid' == $status && $this->check_expiration() ) {
208
- ?>
209
- <div class="update-nag">
210
- <p>
211
- <strong>
212
- <?php
213
- echo sprintf(
214
- $expiration_string,
215
- $this->product->get_name() . ' ' . $this->product->get_type(),
216
- '<a href="' . $this->renew_url() . '" target="_blank">' . $this->get_distributor_name() . '</a>'
217
- );
218
- ?>
219
- </strong>
220
- </p>
221
- </div>
222
- <?php
223
- return false;
224
- }
225
-
226
  return true;
227
  }
228
 
@@ -376,6 +424,26 @@ class Licenser extends Abstract_Module {
376
  update_option( $this->product->get_key() . '_failed_checks', $this->failed_checks );
377
  }
378
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
379
  /**
380
  * Activate the license remotely.
381
  */
@@ -402,19 +470,22 @@ class Licenser extends Abstract_Module {
402
  $response = wp_remote_get( add_query_arg( $api_params, $this->get_api_url() ) );
403
  // make sure the response came back okay.
404
  if ( is_wp_error( $response ) ) {
405
- $license_data = new \stdClass();
406
- $license_data->license = ( 'valid' != $status ) ? 'valid' : 'invalid';
407
 
408
- } else {
409
- $license_data = json_decode( wp_remote_retrieve_body( $response ) );
410
- if ( ! is_object( $license_data ) ) {
411
- $license_data = new \stdClass();
412
- $license_data->license = ( 'valid' != $status ) ? 'valid' : 'invalid';
413
- }
414
- if ( ! isset( $license_data->license ) ) {
415
- $license_data->license = 'invalid';
416
- }
417
  }
 
 
 
 
 
 
 
 
 
 
 
 
418
  if ( ! isset( $license_data->key ) ) {
419
  $license_data->key = $license;
420
  }
@@ -422,10 +493,19 @@ class Licenser extends Abstract_Module {
422
  $this->reset_failed_checks();
423
  }
424
 
 
 
 
 
 
 
 
 
 
 
425
  if ( isset( $license_data->plan ) ) {
426
  update_option( $this->product->get_key() . '_license_plan', $license_data->plan );
427
  }
428
-
429
  update_option( $this->product->get_key() . '_license_data', $license_data );
430
  set_transient( $this->product->get_key() . '_license_data', $license_data, 12 * HOUR_IN_SECONDS );
431
 
@@ -445,7 +525,7 @@ class Licenser extends Abstract_Module {
445
  function update_nag() {
446
  $theme = wp_get_theme( $this->product->get_slug() );
447
  $api_response = get_transient( $this->product_key );
448
- if ( false === $api_response ) {
449
  return;
450
  }
451
  $update_url = wp_nonce_url( 'update.php?action=upgrade-theme&amp;theme=' . urlencode( $this->product->get_slug() ), 'upgrade-theme_' . $this->product->get_slug() );
@@ -457,7 +537,7 @@ class Licenser extends Abstract_Module {
457
  '<strong>%1$s %2$s</strong> is available. <a href="%3$s" class="thickbox" title="%4s">Check out what\'s new</a> or <a href="%5$s"%6$s>update now</a>.',
458
  $theme->get( 'Name' ),
459
  $api_response->new_version,
460
- '#TB_inline?width=640&amp;inlineId=' . $this->product->get_version() . '_changelog',
461
  $theme->get( 'Name' ),
462
  $update_url,
463
  $update_onclick
@@ -507,7 +587,7 @@ class Licenser extends Abstract_Module {
507
 
508
  return false;
509
  }
510
- $update_data->sections = maybe_unserialize( $update_data->sections );
511
 
512
  set_transient( $this->product_key, $update_data, 12 * HOUR_IN_SECONDS );
513
  }
@@ -530,18 +610,17 @@ class Licenser extends Abstract_Module {
530
  $api_params = array(
531
  'edd_action' => 'get_version',
532
  'version' => $this->product->get_version(),
533
- 'license' => $this->license_key,
534
- 'name' => $this->product->get_name(),
535
  'slug' => $this->product->get_slug(),
536
- 'author' => $this->get_distributor_name(),
537
  'url' => rawurlencode( home_url() ),
538
  );
539
  $response = wp_remote_get(
540
- $this->get_api_url(),
541
  array(
542
  'timeout' => 15,
543
  'sslverify' => false,
544
- 'body' => $api_params,
545
  )
546
  );
547
  if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
89
  if ( ! is_admin() ) {
90
  return false;
91
  }
92
+ if ( apply_filters( $this->product->get_key() . '_hide_license_field', false ) ) {
93
+ return;
94
+ }
95
  add_settings_field(
96
  $this->product->get_key() . '_license',
97
  $this->product->get_name() . ' license',
112
  $valid_string = apply_filters( $this->product->get_key() . '_lc_valid_string', 'Valid' );
113
  $invalid_string = apply_filters( $this->product->get_key() . '_lc_invalid_string', 'Invalid' );
114
  $license_message = apply_filters( $this->product->get_key() . '_lc_license_message', 'Enter your license from %s purchase history in order to get %s updates' );
115
+ $error_message = $this->get_error();
116
+ ?>
117
+ <style type="text/css">
118
+ input.themeisle-sdk-text-input-valid {
119
+ border: 1px solid #7ad03a;
120
+ }
121
+
122
+ input.themeisle-sdk-license-input {
123
+ width: 300px;
124
+ padding: 0 8px;
125
+ line-height: 2;
126
+ min-height: 30px;
127
+ }
128
+
129
+ .themeisle-sdk-license-deactivate-cta {
130
+ color: #fff;
131
+ background: #7ad03a;
132
+ display: inline-block;
133
+ text-decoration: none;
134
+ font-size: 13px;
135
+ line-height: 30px;
136
+ height: 26px;
137
+ margin-left: 5px;
138
+ padding: 0 10px 3px;
139
+ -webkit-border-radius: 3px;
140
+ border-radius: 3px;
141
+ }
142
+
143
+ .themeisle-sdk-license-activate-cta {
144
+ color: #fff;
145
+ background: #dd3d36;
146
+ display: inline-block;
147
+ text-decoration: none;
148
+ font-size: 13px;
149
+ line-height: 30px;
150
+ height: 26px;
151
+ margin-left: 5px;
152
+ padding: 0 10px 3px;
153
+ -webkit-border-radius: 3px;
154
+ border-radius: 3px;
155
+ }
156
+
157
+ button.button.themeisle-sdk-licenser-button-cta {
158
+ line-height: 26px;
159
+ height: 29px;
160
+ vertical-align: top;
161
+ }
162
 
163
+ </style>
164
+ <?php
165
+ echo sprintf(
166
+ '<p>%s<input class="themeisle-sdk-license-input %s" type="text" id="%s_license" name="%s_license" value="%s" /><a class="%s">%s</a>&nbsp;&nbsp;&nbsp;<button name="%s_btn_trigger" class="button button-primary themeisle-sdk-licenser-button-cta" value="yes" type="submit" >%s</button></p><p class="description">%s</p>%s',
167
+ ( ( 'valid' === $status ) ? sprintf( '<input type="hidden" value="%s" name="%s_license" />', $value, $this->product->get_key() ) : '' ),
168
+ ( ( 'valid' === $status ) ? 'themeisle-sdk-text-input-valid' : '' ),
169
+ $this->product->get_key(),
170
+ ( ( 'valid' === $status ) ? $this->product->get_key() . '_mask' : $this->product->get_key() ),
171
+ ( ( 'valid' === $status ) ? ( str_repeat( '*', 30 ) . substr( $value, - 5 ) ) : $value ),
172
+ ( 'valid' === $status ? 'themeisle-sdk-license-deactivate-cta' : 'themeisle-sdk-license-activate-cta' ),
173
+ ( 'valid' === $status ? $valid_string : $invalid_string ),
174
+ $this->product->get_key(),
175
+ ( 'valid' === $status ? $deactivate_string : $activate_string ),
176
+ sprintf( $license_message, '<a href="' . $this->get_api_url() . '">' . $this->get_distributor_name() . '</a> ', $this->product->get_type() ),
177
+ empty( $error_message ) ? '' : sprintf( '<p style="color:#dd3d36">%s</p>', $error_message )
178
+ );
179
 
180
  }
181
 
231
  if ( ! is_admin() ) {
232
  return false;
233
  }
234
+
235
+ if ( apply_filters( $this->product->get_key() . '_hide_license_notices', false ) ) {
236
+ return;
237
+ }
238
  $status = $this->get_license_status();
239
  $no_activations_string = apply_filters( $this->product->get_key() . '_lc_no_activations_string', 'No activations left for %s !!!. You need to upgrade your plan in order to use %s on more websites. Please ask the %s Staff for more details.' );
240
  $no_valid_string = apply_filters( $this->product->get_key() . '_lc_no_valid_string', 'In order to benefit from updates and support for %s, please add your license code from your <a href="%s" target="_blank">purchase history</a> and validate it <a href="%s">here</a>. ' );
 
241
 
242
  // No activations left for this license.
243
  if ( 'valid' != $status && $this->check_activation() ) {
263
  ?>
264
  <div class="error">
265
  <p>
266
+ <strong><?php echo sprintf( $no_valid_string, $this->product->get_name() . ' ' . $this->product->get_type(), $this->get_api_url(), admin_url( 'options-general.php' ) . '#' . $this->product->get_key() . '_license' ); ?> </strong>
267
  </p>
268
  </div>
269
  <?php
271
  return false;
272
  }
273
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
  return true;
275
  }
276
 
424
  update_option( $this->product->get_key() . '_failed_checks', $this->failed_checks );
425
  }
426
 
427
+ /**
428
+ * Set license validation error message.
429
+ *
430
+ * @param string $message Error message.
431
+ */
432
+ public function set_error( $message = '' ) {
433
+ set_transient( $this->product->get_key() . 'act_err', $message, MINUTE_IN_SECONDS );
434
+
435
+ return;
436
+ }
437
+
438
+ /**
439
+ * Return the last error message.
440
+ *
441
+ * @return mixed Error message.
442
+ */
443
+ public function get_error() {
444
+ return get_transient( $this->product->get_key() . 'act_err' );
445
+ }
446
+
447
  /**
448
  * Activate the license remotely.
449
  */
470
  $response = wp_remote_get( add_query_arg( $api_params, $this->get_api_url() ) );
471
  // make sure the response came back okay.
472
  if ( is_wp_error( $response ) ) {
473
+ $this->set_error( sprintf( 'ERROR: Failed to connect to the license service. Please try again later. Reason: %s', $response->get_error_message() ) );
 
474
 
475
+ return;
 
 
 
 
 
 
 
 
476
  }
477
+
478
+ $license_data = json_decode( wp_remote_retrieve_body( $response ) );
479
+
480
+ if ( ! is_object( $license_data ) ) {
481
+ $this->set_error( 'ERROR: Failed to validate license. Please try again in one minute.' );
482
+
483
+ return;
484
+ }
485
+ if ( ! isset( $license_data->license ) ) {
486
+ $license_data->license = 'invalid';
487
+ }
488
+
489
  if ( ! isset( $license_data->key ) ) {
490
  $license_data->key = $license;
491
  }
493
  $this->reset_failed_checks();
494
  }
495
 
496
+ $this->set_error( '' );
497
+
498
+ if ( 'deactivate_license' === $api_params['edd_action'] ) {
499
+
500
+ delete_option( $this->product->get_key() . '_license_data' );
501
+ delete_option( $this->product->get_key() . '_license_plan' );
502
+ delete_transient( $this->product->get_key() . '_license_data' );
503
+
504
+ return;
505
+ }
506
  if ( isset( $license_data->plan ) ) {
507
  update_option( $this->product->get_key() . '_license_plan', $license_data->plan );
508
  }
 
509
  update_option( $this->product->get_key() . '_license_data', $license_data );
510
  set_transient( $this->product->get_key() . '_license_data', $license_data, 12 * HOUR_IN_SECONDS );
511
 
525
  function update_nag() {
526
  $theme = wp_get_theme( $this->product->get_slug() );
527
  $api_response = get_transient( $this->product_key );
528
+ if ( false === $api_response || ! isset( $api_response->new_version ) ) {
529
  return;
530
  }
531
  $update_url = wp_nonce_url( 'update.php?action=upgrade-theme&amp;theme=' . urlencode( $this->product->get_slug() ), 'upgrade-theme_' . $this->product->get_slug() );
537
  '<strong>%1$s %2$s</strong> is available. <a href="%3$s" class="thickbox" title="%4s">Check out what\'s new</a> or <a href="%5$s"%6$s>update now</a>.',
538
  $theme->get( 'Name' ),
539
  $api_response->new_version,
540
+ sprintf( '%s&TB_iframe=true&amp;width=1024&amp;height=800', $this->product->get_changelog() ),
541
  $theme->get( 'Name' ),
542
  $update_url,
543
  $update_onclick
587
 
588
  return false;
589
  }
590
+ $update_data->sections = isset( $update_data->sections ) ? maybe_unserialize( $update_data->sections ) : null;
591
 
592
  set_transient( $this->product_key, $update_data, 12 * HOUR_IN_SECONDS );
593
  }
610
  $api_params = array(
611
  'edd_action' => 'get_version',
612
  'version' => $this->product->get_version(),
613
+ 'license' => empty( $this->license_key ) ? 'free' : $this->license_key,
614
+ 'name' => rawurlencode( $this->product->get_name() ),
615
  'slug' => $this->product->get_slug(),
616
+ 'author' => rawurlencode( $this->get_distributor_name() ),
617
  'url' => rawurlencode( home_url() ),
618
  );
619
  $response = wp_remote_get(
620
+ add_query_arg( $api_params, $this->get_api_url() ),
621
  array(
622
  'timeout' => 15,
623
  'sslverify' => false,
 
624
  )
625
  );
626
  if ( is_wp_error( $response ) || 200 != wp_remote_retrieve_response_code( $response ) ) {
vendor/codeinwp/themeisle-sdk/src/Modules/Notification.php CHANGED
@@ -430,6 +430,9 @@ class Notification extends Abstract_Module {
430
  * @return Notification Module instance.
431
  */
432
  public function load( $product ) {
 
 
 
433
  $this->product = $product;
434
 
435
  $notifications = apply_filters( 'themeisle_sdk_registered_notifications', [] );
430
  * @return Notification Module instance.
431
  */
432
  public function load( $product ) {
433
+ if ( apply_filters( 'themeisle_sdk_hide_notifications', false ) ) {
434
+ return;
435
+ }
436
  $this->product = $product;
437
 
438
  $notifications = apply_filters( 'themeisle_sdk_registered_notifications', [] );
vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php CHANGED
@@ -54,7 +54,9 @@ class Uninstall_Feedback extends Abstract_Module {
54
  'placeholder' => 'What\'s the plugin\'s name?',
55
  ),
56
  'I could not get the plugin to work' => array(
57
- 'id' => 4,
 
 
58
  ),
59
  'I no longer need the plugin' => array(
60
  'id' => 5,
@@ -62,7 +64,9 @@ class Uninstall_Feedback extends Abstract_Module {
62
  'placeholder' => 'If you could improve one thing about our product, what would it be?',
63
  ),
64
  'It\'s a temporary deactivation. I\'m just debugging an issue.' => array(
65
- 'id' => 6,
 
 
66
  ),
67
  );
68
  /**
@@ -75,7 +79,9 @@ class Uninstall_Feedback extends Abstract_Module {
75
  'id' => 7,
76
  ),
77
  'It lacks options' => array(
78
- 'id' => 8,
 
 
79
  ),
80
  'Is not working with a plugin that I need' => array(
81
  'id' => 9,
@@ -95,7 +101,7 @@ class Uninstall_Feedback extends Abstract_Module {
95
  'Other' => array(
96
  'id' => 999,
97
  'type' => 'textarea',
98
- 'placeholder' => 'cmon cmon tell us',
99
  ),
100
  );
101
  /**
@@ -103,13 +109,13 @@ class Uninstall_Feedback extends Abstract_Module {
103
  *
104
  * @var string $heading_plugin The heading of the modal
105
  */
106
- private $heading_plugin = 'Quick Feedback <span>Because we care about our clients, please leave us feedback.</span>';
107
  /**
108
  * Default heading for theme.
109
  *
110
  * @var string $heading_theme The heading of the modal
111
  */
112
- private $heading_theme = 'Looking to change {theme}? <span> What does not work for you?</span>';
113
  /**
114
  * Default submit button action text.
115
  *
@@ -133,342 +139,338 @@ class Uninstall_Feedback extends Abstract_Module {
133
  return;
134
  }
135
 
136
- add_thickbox();
137
 
138
- $id = $this->product->get_key() . '_deactivate';
 
 
139
 
140
- $this->add_css( $this->product->get_type(), $this->product->get_key() );
141
- $this->add_js( $this->product->get_type(), $this->product->get_key(), '#TB_inline?' . apply_filters( $this->product->get_key() . '_feedback_deactivate_attributes', 'width=600&height=550' ) . '&inlineId=' . $id );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
 
143
- echo '<div id="' . $id . '" style="display:none;" class="themeisle-deactivate-box">' . $this->get_html( $this->product->get_type(), $this->product->get_key() ) . '</div>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
144
  }
145
 
146
  /**
147
- * Loads the css
148
- *
149
- * @param string $type The type of product.
150
- * @param string $key The product key.
151
  */
152
- function add_css( $type, $key ) {
153
- $key = esc_attr( $key );
154
- $suffix = Product::THEME_TYPE === $type ? 'theme-install-php' : 'plugins-php';
155
- $icon = esc_attr( apply_filters( $this->product->get_slug() . '_uninstall_feedback_icon', '' ) );
156
- if ( empty( $icon ) ) {
157
- $icon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQyIDc5LjE2MDkyNCwgMjAxNy8wNy8xMy0wMTowNjozOSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpDNkVDM0M4RkYxMzMxMUU3OEMyMkQ0NTIxRTVEQ0ZBRiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpDNkVDM0M5MEYxMzMxMUU3OEMyMkQ0NTIxRTVEQ0ZBRiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkM2RUMzQzhERjEzMzExRTc4QzIyRDQ1MjFFNURDRkFGIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkM2RUMzQzhFRjEzMzExRTc4QzIyRDQ1MjFFNURDRkFGIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+KBNOswAAFtFJREFUeNrkWwmUXVWV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';
158
- }
159
  ?>
160
- <style type="text/css" id="<?php echo $key; ?>ti-deactivate-css">
161
- input[name="ti-deactivate-option"] ~ div {
162
- display: none;
 
 
 
 
163
  }
164
 
165
- input[name="ti-deactivate-option"]:checked ~ div {
166
- display: block;
167
- }
168
 
169
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_window.thickbox-loading:before {
170
- background: none !important;
 
171
  }
172
 
173
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_title {
174
- background: url('<?php echo $icon; ?>') 40px 30px no-repeat;
175
- border: none;
176
- box-sizing: border-box;
177
- color: #373e40;
178
- font-size: 24px;
179
- font-weight: 700;
180
- height: 90px;
181
- padding: 40px 40px 0 120px;
182
- text-transform: uppercase;
183
- width: 100%;
184
  }
185
 
186
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content ul i {
187
- padding-left: 5px;
188
- margin: 0 1px;
189
  }
190
 
191
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content ul strong {
192
- width: 125px;
193
- display: block;
194
  margin: 0;
195
- float: left;
196
  }
197
 
198
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content ul {
199
- margin-left: 39px;
200
- margin-top: 2px;
201
- padding-top: 0px;
202
  }
203
 
204
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content p {
205
- font-style: italic;
206
- margin-bottom: 0px;
207
  }
208
 
209
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure-content {
 
 
210
  display: none;
211
- }
212
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open #<?php echo $key; ?>-info-disclosure-content {
213
- display: block;
214
- position:absolute;
215
- bottom: 100px;
216
  }
217
 
218
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open #<?php echo $key; ?>-info-disclosure {
219
- top: -130px;
 
 
 
220
  }
221
 
222
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open {
223
- height: 590px !important;
224
- }
225
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure {
226
- position: absolute;
227
- top: -50px;
228
- font-size: 13px;
229
- color: #8d9192;
230
- font-weight: 400;
231
- right: 40px;
232
  }
233
 
234
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.actions {
235
- box-sizing: border-box;
236
- padding: 30px 40px;
237
- background-color: #eaeaea;
238
  }
239
 
240
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button {
241
- background: #ec5d60;
242
- border: none;
243
- box-shadow: none;
244
- color: #ffffff;
245
- font-size: 15px;
246
- font-weight: 700;
247
- height: auto;
248
- line-height: 20px;
249
- padding: 10px 15px;
250
- text-transform: uppercase;
251
- -webkit-transition: 0.3s ease;
252
- -moz-transition: 0.3s ease;
253
- -ms-transition: 0.3s ease;
254
- -o-transition: 0.3s ease;
255
- transition: 0.3s ease;
256
  }
257
 
258
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary {
259
- background: transparent;
260
- box-shadow: none;
261
- color: #8d9192;
262
- font-weight: 400;
263
- float: right;
264
- line-height: 40px;
265
- padding: 0;
266
- text-decoration: underline;
267
- text-shadow: none;
268
- text-transform: none;
269
  }
270
 
271
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:hover {
272
- background: #e83f42;
 
273
  }
274
 
275
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
276
- background: transparent;
 
 
 
277
  }
278
 
279
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:focus {
280
- box-shadow: none;
281
- outline: none;
282
  }
283
 
284
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:active {
285
- box-shadow: none;
286
- transform: translateY(0);
287
  }
288
 
289
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button:disabled {
290
- cursor: not-allowed;
 
291
  }
292
 
293
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container input.button.button-primary:hover {
294
- text-decoration: none;
 
 
 
 
 
295
  }
296
 
297
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container div.revive_network-container {
298
- background-color: #ffffff;
 
299
  }
300
 
301
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list {
302
- margin: 0;
303
  }
304
 
305
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li {
306
- color: #373e40;
307
- font-size: 13px;
308
- margin-bottom: 5px;
 
309
  }
310
 
311
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li label {
312
- margin-left: 10px;
313
- line-height: 28px;
314
- font-size: 15px;
315
  }
316
 
317
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list input[type=radio] {
318
- margin-top: 1px;
319
  }
320
 
321
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #TB_ajaxContent {
322
- box-sizing: border-box;
323
- height: auto !important;
324
- padding: 20px 40px;
325
- width: 100% !important;
 
 
 
 
 
 
 
 
 
326
  }
327
 
328
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container li div textarea {
329
- padding: 10px 15px;
330
- width: 100%;
331
  }
332
 
333
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container ul.ti-list li div {
334
- margin: 10px 30px;
335
  }
336
 
337
- .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle {
338
- box-sizing: border-box;
339
- display: block;
340
- float: none;
341
- font-weight: 700;
342
- line-height: 1;
343
- padding: 0;
344
- text-align: left;
345
- width: 100%;
346
  }
347
 
348
- .<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle span {
349
- color: #8d9192;
350
- display: block;
351
- font-size: 15px;
352
- font-weight: 400;
353
- margin-top: 5px;
354
- text-transform: none;
355
- }
356
 
357
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container .actions {
358
- width: 100%;
359
  display: block;
360
  position: absolute;
361
- left: 0;
362
- bottom: 0;
 
 
 
 
 
363
  }
364
 
365
- .theme-install-php .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
366
- font-size: 32px;
 
 
 
 
 
367
  }
368
 
369
- .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
370
- color: #eee;
 
 
 
 
 
 
 
 
371
  }
372
 
373
- .<?php echo $key; ?>-container #TB_closeWindowButton {
374
- left: auto;
375
- right: -5px;
376
- top: -35px;
377
- color: #eee;
378
  }
379
 
380
- .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
381
- text-align: right;
382
- line-height: 25px;
383
- width: 25px;
384
- height: 25px;
385
- }
386
 
387
- .<?php echo $key; ?>-container #TB_closeWindowButton:focus .tb-close-icon {
388
- box-shadow: none;
389
- outline: none;
390
  }
391
 
392
- .<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon:before {
393
- font: normal 25px dashicons;
394
  }
395
 
396
- body.<?php echo $suffix; ?> .<?php echo $key; ?>-container {
397
- margin: auto !important;
398
- height: 500px !important;
399
- top: 0 !important;
400
- left: 0 !important;
401
- bottom: 0 !important;
402
- right: 0 !important;
403
- width: 600px !important;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
404
  }
405
  </style>
406
  <?php
407
- do_action( $this->product->get_key() . '_uninstall_feedback_after_css' );
408
  }
409
 
410
  /**
411
- * Loads the js.
412
- *
413
- * @param string $type The type of product.
414
- * @param string $key The product key.
415
- * @param string $src The url that will hijack the deactivate button url.
416
  */
417
- function add_js( $type, $key, $src ) {
418
- $heading = Product::PLUGIN_TYPE === $type ? $this->heading_plugin : str_replace( '{theme}', $this->product->get_name(), $this->heading_theme );
419
- $key = esc_attr( $key );
420
- $heading = apply_filters( $this->product->get_key() . '_feedback_deactivate_heading', $heading );
421
  ?>
422
  <script type="text/javascript" id="ti-deactivate-js">
423
  (function ($) {
424
  $(document).ready(function () {
425
- var auto_trigger = false;
426
- var target_element = 'tr[data-plugin^="<?php echo $this->product->get_slug(); ?>/"] span.deactivate a';
427
- <?php
428
- if ( 'theme' === $type ) {
429
- ?>
430
- auto_trigger = true;
431
- if ($('a.ti-auto-anchor').length == 0) {
432
- $('body').append($('<a class="ti-auto-anchor" href=""></a>'));
433
- }
434
- target_element = 'a.ti-auto-anchor';
435
- <?php
436
- }
437
- ?>
438
 
439
- if (auto_trigger) {
440
- setTimeout(function () {
441
- $('a.ti-auto-anchor').trigger('click');
442
- }, <?php echo self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000; ?> );
443
- }
444
- $(document).on('thickbox:removed', function () {
445
- $.post(ajaxurl, {
446
- 'action': '<?php echo $key . '_uninstall_feedback'; ?>',
447
- 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
448
- 'type': '<?php echo $type; ?>',
449
- 'key': '<?php echo $key; ?>'
450
- });
451
- });
452
- var href = $(target_element).attr('href');
453
- $('#<?php echo $key; ?>ti-deactivate-no').attr('data-ti-action', href).on('click', function (e) {
454
  e.preventDefault();
455
- e.stopPropagation();
456
-
457
- $('body').unbind('thickbox:removed');
458
- tb_remove();
459
- var redirect = $(this).attr('data-ti-action');
460
- if (redirect !== '') {
461
- location.href = redirect;
462
- }
463
  });
464
 
465
- $('#<?php echo $key; ?> ul.ti-list label, #<?php echo $key; ?> ul.ti-list input[name="ti-deactivate-option"]').on('click', function (e) {
466
- $('#<?php echo $key; ?>ti-deactivate-yes').val($('#<?php echo $key; ?>ti-deactivate-yes').attr('data-after-text'));
 
 
467
 
468
- var radio = $(this).prop('tagName') === 'LABEL' ? $(this).parent() : $(this);
469
- if (radio.parent().find('textarea').length > 0 && radio.parent().find('textarea').val().length === 0) {
 
 
470
  $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
471
- radio.parent().find('textarea').on('keyup', function (ee) {
472
  if ($(this).val().length === 0) {
473
  $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
474
  } else {
@@ -479,127 +481,236 @@ class Uninstall_Feedback extends Abstract_Module {
479
  $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
480
  }
481
  });
482
- $("#<?php echo $key; ?>-info-disclosure").on('click', function () {
483
- $("#TB_window").toggleClass("<?php echo $key; ?>-container-disc-open");
484
- return false;
485
- });
486
- $('#<?php echo $key; ?>ti-deactivate-yes').attr('data-ti-action', href).on('click', function (e) {
487
  e.preventDefault();
488
  e.stopPropagation();
 
 
 
489
  $.post(ajaxurl, {
490
- 'action': '<?php echo $key . '_uninstall_feedback'; ?>',
491
  'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
492
- 'id': $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().attr('ti-option-id'),
493
- 'msg': $('#<?php echo $key; ?> input[name="ti-deactivate-option"]:checked').parent().find('textarea').val(),
494
- 'type': '<?php echo $type; ?>',
 
495
  });
496
- var redirect = $(this).attr('data-ti-action');
497
- if (redirect != '') {
498
- location.href = redirect;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
499
  } else {
500
- $('body').unbind('thickbox:removed');
501
- tb_remove();
502
  }
503
  });
504
 
505
- $(target_element).attr('name', '<?php echo wp_kses( $heading, array( 'span' => array() ) ); ?>').attr('href', '<?php echo $src; ?>').addClass('thickbox');
506
- var thicbox_timer;
507
- $(target_element).on('click', function () {
508
- tiBindThickbox();
 
 
 
 
 
509
  });
510
 
511
- function tiBindThickbox() {
512
- var thicbox_timer = setTimeout(function () {
513
- if ($("#<?php echo esc_html( $key ); ?>").is(":visible")) {
514
- $("body").trigger('thickbox:iframe:loaded');
515
- $("#TB_window").addClass("<?php echo $key; ?>-container");
516
- clearTimeout(thicbox_timer);
517
- $('body').unbind('thickbox:removed');
518
- } else {
519
- tiBindThickbox();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
520
  }
521
- }, 100);
522
- }
523
  });
524
  })(jQuery);
 
525
  </script>
526
  <?php
527
-
528
  do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
529
  }
530
 
531
  /**
532
- * Generates the HTML.
533
  *
534
- * @param string $type The type of product.
535
- * @param string $key The product key.
536
  */
537
- function get_html( $type, $key ) {
538
- $options = Product::PLUGIN_TYPE === $type ? $this->options_plugin : $this->options_theme;
539
- $button_cancel = Product::PLUGIN_TYPE === $type ? $this->button_cancel : 'Skip';
540
- $button_submit = Product::PLUGIN_TYPE === $type ? $this->button_submit : 'Submit';
541
- $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
542
- $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $button_submit );
543
- $button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $button_cancel );
544
-
545
- $options += $this->other;
546
-
547
- $list = '';
548
- foreach ( $options as $title => $attributes ) {
549
- $id = $attributes['id'];
550
- $list .= '<li ti-option-id="' . $id . '"><input type="radio" name="ti-deactivate-option" id="' . $key . $id . '"><label for="' . $key . $id . '">' . str_replace( '{theme}', $this->product->get_name(), $title ) . '</label>';
551
- if ( array_key_exists( 'type', $attributes ) ) {
552
- $list .= '<div>';
553
- $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
554
- switch ( $attributes['type'] ) {
555
- case 'text':
556
- $list .= '<textarea style="width: 100%" rows="1" name="comments" placeholder="' . $placeholder . '"></textarea>';
557
- break;
558
- case 'textarea':
559
- $list .= '<textarea style="width: 100%" rows="2" name="comments" placeholder="' . $placeholder . '"></textarea>';
560
- break;
561
- }
562
- $list .= '</div>';
563
- }
564
- $list .= '</li>';
565
- }
566
-
567
  $disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
568
  $disclosure_labels = array_merge(
569
  [
570
  'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No domain name, email address or IP addresses are transmited after you submit the survey.',
571
  'items' => [
572
  sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
573
- sprintf( '%s Uninstall reason %s %s Selected reson from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
574
  ],
575
  ],
576
  $disclosure_new_labels
577
  );
578
 
579
- $info_disclosure_link = '<a href="#" id="' . $this->product->get_key() . '-info-disclosure">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
580
- $info_disclosure_content = '<div id="' . $this->product->get_key() . '-info-disclosure-content"><p>' . wp_kses_post( $disclosure_labels['title'] ) . '</p><ul>';
581
  foreach ( $disclosure_labels['items'] as $disclosure_item ) {
582
  $info_disclosure_content .= sprintf( '<li>%s</li>', wp_kses_post( $disclosure_item ) );
583
  }
584
  $info_disclosure_content .= '</ul></div>';
585
 
586
- return
587
- '<div id="' . $this->product->get_key() . '"><ul class="ti-list">' . $list . '</ul>'
588
- . $info_disclosure_content
589
- . '<div class="actions">'
590
- . get_submit_button(
591
- $button_submit,
592
- 'secondary',
593
- $this->product->get_key() . 'ti-deactivate-yes',
594
- false,
595
- array(
596
- 'data-after-text' => $button_submit,
597
- 'disabled' => true,
598
- )
599
- )
600
- . wp_kses_post( $info_disclosure_link )
601
- . get_submit_button( $button_cancel, 'primary', $this->product->get_key() . 'ti-deactivate-no', false )
602
- . '</div></div>';
603
  }
604
 
605
  /**
@@ -725,6 +836,11 @@ class Uninstall_Feedback extends Abstract_Module {
725
  * @return Uninstall_Feedback Current module instance.
726
  */
727
  public function load( $product ) {
 
 
 
 
 
728
  $this->product = $product;
729
  add_action( 'admin_head', array( $this, 'load_resources' ) );
730
  add_action( 'wp_ajax_' . $this->product->get_key() . '_uninstall_feedback', array( $this, 'post_deactivate' ) );
54
  'placeholder' => 'What\'s the plugin\'s name?',
55
  ),
56
  'I could not get the plugin to work' => array(
57
+ 'type' => 'textarea',
58
+ 'placeholder' => 'What problem are you experiencing?',
59
+ 'id' => 4,
60
  ),
61
  'I no longer need the plugin' => array(
62
  'id' => 5,
64
  'placeholder' => 'If you could improve one thing about our product, what would it be?',
65
  ),
66
  'It\'s a temporary deactivation. I\'m just debugging an issue.' => array(
67
+ 'type' => 'textarea',
68
+ 'placeholder' => 'What problem are you experiencing?',
69
+ 'id' => 6,
70
  ),
71
  );
72
  /**
79
  'id' => 7,
80
  ),
81
  'It lacks options' => array(
82
+ 'placeholder' => 'What option is missing?',
83
+ 'type' => 'text',
84
+ 'id' => 8,
85
  ),
86
  'Is not working with a plugin that I need' => array(
87
  'id' => 9,
101
  'Other' => array(
102
  'id' => 999,
103
  'type' => 'textarea',
104
+ 'placeholder' => 'What can we do better?',
105
  ),
106
  );
107
  /**
109
  *
110
  * @var string $heading_plugin The heading of the modal
111
  */
112
+ private $heading_plugin = 'What’s wrong?';
113
  /**
114
  * Default heading for theme.
115
  *
116
  * @var string $heading_theme The heading of the modal
117
  */
118
+ private $heading_theme = 'What does not work for you in {theme}?';
119
  /**
120
  * Default submit button action text.
121
  *
139
  return;
140
  }
141
 
142
+ $this->add_feedback_popup_style();
143
 
144
+ if ( $this->product->get_type() === 'theme' ) {
145
+ $this->add_theme_feedback_drawer_js();
146
+ $this->render_theme_feedback_popup();
147
 
148
+ return;
149
+ }
150
+ $this->add_plugin_feedback_popup_js();
151
+ $this->render_plugin_feedback_popup();
152
+ }
153
+
154
+ /**
155
+ * Render theme feedback drawer.
156
+ */
157
+ private function render_theme_feedback_popup() {
158
+ $heading = str_replace( '{theme}', $this->product->get_name(), $this->heading_theme );
159
+ $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', 'Submit' );
160
+ $options = $this->options_theme;
161
+ $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
162
+ $info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
163
+
164
+ $options += $this->other;
165
 
166
+ ?>
167
+ <div class="ti-theme-uninstall-feedback-drawer ti-feedback">
168
+ <div class="popup--header">
169
+ <h5><?php echo wp_kses( $heading, array( 'span' => true ) ); ?> </h5>
170
+ <button class="toggle"><span>&times;</span></button>
171
+ </div><!--/.popup--header-->
172
+ <div class="popup--body">
173
+ <?php $this->render_options_list( $options ); ?>
174
+ </div><!--/.popup--body-->
175
+ <div class="popup--footer">
176
+ <div class="actions">
177
+ <?php
178
+ echo wp_kses_post( $info_disclosure_link );
179
+ echo wp_kses_post( $this->get_disclosure_labels() );
180
+ echo '<div class="buttons">';
181
+ echo get_submit_button(
182
+ $button_submit,
183
+ 'secondary',
184
+ $this->product->get_key() . 'ti-deactivate-yes',
185
+ false,
186
+ array(
187
+ 'data-after-text' => $button_submit,
188
+ 'disabled' => true,
189
+ )
190
+ );
191
+ echo '</div>';
192
+ ?>
193
+ </div><!--/.actions-->
194
+ </div><!--/.popup--footer-->
195
+ </div>
196
+ <?php
197
  }
198
 
199
  /**
200
+ * Add feedback styles.
 
 
 
201
  */
202
+ private function add_feedback_popup_style() {
 
 
 
 
 
 
203
  ?>
204
+ <style>
205
+ .ti-feedback {
206
+ background: #fff;
207
+ max-width: 400px;
208
+ z-index: 10000;
209
+ box-shadow: 0 0 15px -5px rgba(0, 0, 0, .5);
210
+ transition: all .3s ease-out;
211
  }
212
 
 
 
 
213
 
214
+ .ti-feedback .popup--header {
215
+ position: relative;
216
+ background-color: #23A1CE;
217
  }
218
 
219
+ .ti-feedback .popup--header h5 {
220
+ margin: 0;
221
+ font-size: 16px;
222
+ padding: 15px;
223
+ color: #fff;
224
+ font-weight: 600;
225
+ text-align: center;
226
+ letter-spacing: .3px;
 
 
 
227
  }
228
 
229
+ .ti-feedback .popup--body {
230
+ padding: 15px;
 
231
  }
232
 
233
+ .ti-feedback .popup--form {
 
 
234
  margin: 0;
235
+ font-size: 13px;
236
  }
237
 
238
+ .ti-feedback .popup--form input[type="radio"] {
239
+ margin: 0 10px 0 0;
 
 
240
  }
241
 
242
+ .ti-feedback .popup--form input[type="radio"]:checked ~ textarea {
243
+ display: block;
 
244
  }
245
 
246
+ .ti-feedback .popup--form textarea {
247
+ width: 100%;
248
+ margin: 10px 0 0;
249
  display: none;
250
+ max-height: 150px;
 
 
 
 
251
  }
252
 
253
+ .ti-feedback li {
254
+ display: flex;
255
+ align-items: center;
256
+ margin-bottom: 15px;
257
+ flex-wrap: wrap;
258
  }
259
 
260
+ .ti-feedback li label {
261
+ max-width: 90%;
 
 
 
 
 
 
 
 
262
  }
263
 
264
+ .ti-feedback li:last-child {
265
+ margin-bottom: 0;
 
 
266
  }
267
 
268
+ .ti-feedback .popup--footer {
269
+ padding: 0 15px 15px;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
270
  }
271
 
272
+ .ti-feedback .actions {
273
+ display: flex;
274
+ flex-wrap: wrap;
 
 
 
 
 
 
 
 
275
  }
276
 
277
+ .info-disclosure-link {
278
+ width: 100%;
279
+ margin-bottom: 15px;
280
  }
281
 
282
+ .ti-feedback .info-disclosure-content {
283
+ max-height: 0;
284
+ overflow: hidden;
285
+ width: 100%;
286
+ transition: .3s ease;
287
  }
288
 
289
+ .ti-feedback .info-disclosure-content.active {
290
+ max-height: 300px;
 
291
  }
292
 
293
+ .ti-feedback .info-disclosure-content p {
294
+ margin: 0;
 
295
  }
296
 
297
+ .ti-feedback .info-disclosure-content ul {
298
+ margin: 10px 0;
299
+ border-radius: 3px;
300
  }
301
 
302
+ .ti-feedback .info-disclosure-content ul li {
303
+ display: flex;
304
+ align-items: center;
305
+ justify-content: space-between;
306
+ margin-bottom: 0;
307
+ padding: 5px 0;
308
+ border-bottom: 1px solid #ccc;
309
  }
310
 
311
+ .ti-feedback .buttons {
312
+ display: flex;
313
+ width: 100%;
314
  }
315
 
316
+ .ti-feedback .buttons input:last-child {
317
+ margin-left: auto;
318
  }
319
 
320
+ .ti-theme-uninstall-feedback-drawer {
321
+ border-top-left-radius: 5px;
322
+ position: fixed;
323
+ top: 100%;
324
+ right: 15px;
325
  }
326
 
327
+ .ti-theme-uninstall-feedback-drawer.active {
328
+ transform: translateY(-100%);
 
 
329
  }
330
 
331
+ .ti-theme-uninstall-feedback-drawer .popup--header {
332
+ border-top-left-radius: 5px;
333
  }
334
 
335
+ .ti-theme-uninstall-feedback-drawer .popup--header .toggle {
336
+ position: absolute;
337
+ padding: 3px 0;
338
+ width: 30px;
339
+ top: -26px;
340
+ right: 0;
341
+ cursor: pointer;
342
+ border-top-left-radius: 5px;
343
+ border-top-right-radius: 5px;
344
+ font-size: 20px;
345
+ background-color: #23A1CE;
346
+ color: #fff;
347
+ border: none;
348
+ line-height: 20px;
349
  }
350
 
351
+ .ti-theme-uninstall-feedback-drawer .toggle span {
352
+ margin: 0;
353
+ display: inline-block;
354
  }
355
 
356
+ .ti-theme-uninstall-feedback-drawer:not(.active) .toggle span {
357
+ transform: rotate(45deg);
358
  }
359
 
360
+ .ti-theme-uninstall-feedback-drawer .popup--header .toggle:hover {
361
+ background-color: #1880a5;
 
 
 
 
 
 
 
362
  }
363
 
 
 
 
 
 
 
 
 
364
 
365
+ .ti-plugin-uninstall-feedback-popup .popup--header:before {
366
+ content: "";
367
  display: block;
368
  position: absolute;
369
+ border: 20px solid #23A1CE;
370
+ left: -10px;
371
+ top: 50%;
372
+ border-top: 20px solid transparent;
373
+ border-bottom: 20px solid transparent;
374
+ border-left: 0;
375
+ transform: translateY(-50%);
376
  }
377
 
378
+ .ti-plugin-uninstall-feedback-popup {
379
+ display: none;
380
+ position: absolute;
381
+ white-space: normal;
382
+ width: 400px;
383
+ left: 100%;
384
+ top: -15px;
385
  }
386
 
387
+ .ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i {
388
+ animation: rotation 2s infinite linear;
389
+ display: block;
390
+ float: none;
391
+ align-items: center;
392
+ width: 100%;
393
+ margin: 0 auto;
394
+ height: 100%;
395
+ background: transparent;
396
+ padding: 0;
397
  }
398
 
399
+ .ti-plugin-uninstall-feedback-popup.sending-feedback .popup--body i:before {
400
+ padding: 0;
401
+ background: transparent;
402
+ box-shadow: none;
403
+ color: #b4b9be
404
  }
405
 
 
 
 
 
 
 
406
 
407
+ .ti-plugin-uninstall-feedback-popup.active {
408
+ display: block;
 
409
  }
410
 
411
+ tr[data-plugin^="<?php echo $this->product->get_slug(); ?>"] .deactivate {
412
+ position: relative;
413
  }
414
 
415
+ body.ti-feedback-open .ti-feedback-overlay {
416
+ content: "";
417
+ display: block;
418
+ background-color: rgba(0, 0, 0, 0.5);
419
+ top: 0;
420
+ bottom: 0;
421
+ right: 0;
422
+ left: 0;
423
+ z-index: 10000;
424
+ position: fixed;
425
+ }
426
+
427
+ @media (max-width: 768px) {
428
+ .ti-plugin-uninstall-feedback-popup {
429
+ position: fixed;
430
+ max-width: 100%;
431
+ margin: 0 auto;
432
+ left: 50%;
433
+ top: 50px;
434
+ transform: translateX(-50%);
435
+ }
436
+
437
+ .ti-plugin-uninstall-feedback-popup .popup--header:before {
438
+ display: none;
439
+ }
440
  }
441
  </style>
442
  <?php
 
443
  }
444
 
445
  /**
446
+ * Theme feedback drawer JS.
 
 
 
 
447
  */
448
+ private function add_theme_feedback_drawer_js() {
449
+ $key = $this->product->get_key();
 
 
450
  ?>
451
  <script type="text/javascript" id="ti-deactivate-js">
452
  (function ($) {
453
  $(document).ready(function () {
454
+ setTimeout(function () {
455
+ $('.ti-theme-uninstall-feedback-drawer').addClass('active');
456
+ }, <?php echo absint( self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000 ); ?> );
 
 
 
 
 
 
 
 
 
 
457
 
458
+ $('.ti-theme-uninstall-feedback-drawer .toggle').on('click', function (e) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
459
  e.preventDefault();
460
+ $('.ti-theme-uninstall-feedback-drawer').toggleClass('active');
 
 
 
 
 
 
 
461
  });
462
 
463
+ $('.info-disclosure-link').on('click', function (e) {
464
+ e.preventDefault();
465
+ $('.info-disclosure-content').toggleClass('active');
466
+ });
467
 
468
+ $('.ti-theme-uninstall-feedback-drawer input[type="radio"]').on('change', function () {
469
+ var radio = $(this);
470
+ if (radio.parent().find('textarea').length > 0 &&
471
+ radio.parent().find('textarea').val().length === 0) {
472
  $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
473
+ radio.parent().find('textarea').on('keyup', function (e) {
474
  if ($(this).val().length === 0) {
475
  $('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
476
  } else {
481
  $('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
482
  }
483
  });
484
+
485
+ $('#<?php echo $key; ?>ti-deactivate-yes').on('click', function (e) {
 
 
 
486
  e.preventDefault();
487
  e.stopPropagation();
488
+
489
+ var selectedOption = $(
490
+ '.ti-theme-uninstall-feedback-drawer input[name="ti-deactivate-option"]:checked');
491
  $.post(ajaxurl, {
492
+ 'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
493
  'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
494
+ 'id': selectedOption.parent().attr('ti-option-id'),
495
+ 'msg': selectedOption.parent().find('textarea').val(),
496
+ 'type': 'theme',
497
+ 'key': '<?php echo esc_attr( $key ); ?>'
498
  });
499
+ $('.ti-theme-uninstall-feedback-drawer').fadeOut();
500
+ });
501
+ });
502
+ })(jQuery);
503
+
504
+ </script>
505
+ <?php
506
+ do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
507
+ }
508
+
509
+ /**
510
+ * Render the options list.
511
+ *
512
+ * @param array $options the options for the feedback form.
513
+ */
514
+ private function render_options_list( $options ) {
515
+ $key = $this->product->get_key();
516
+ $inputs_row_map = [
517
+ 'text' => 1,
518
+ 'textarea' => 2,
519
+ ];
520
+ ?>
521
+ <ul class="popup--form">
522
+ <?php foreach ( $options as $title => $attributes ) { ?>
523
+ <li ti-option-id="<?php echo esc_attr( $attributes['id'] ); ?>">
524
+ <input type="radio" name="ti-deactivate-option" id="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
525
+ <label for="<?php echo esc_attr( $key . $attributes['id'] ); ?>">
526
+ <?php echo str_replace( '{theme}', $this->product->get_name(), $title ); ?>
527
+ </label>
528
+ <?php
529
+ if ( array_key_exists( 'type', $attributes ) ) {
530
+ $placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
531
+ echo '<textarea width="100%" rows="' . $inputs_row_map[ $attributes['type'] ] . '" name="comments" placeholder="' . esc_attr( $placeholder ) . '"></textarea>';
532
+ }
533
+ ?>
534
+ </li>
535
+ <?php } ?>
536
+ </ul>
537
+ <?php
538
+ }
539
+
540
+ /**
541
+ * Render plugin feedback popup.
542
+ */
543
+ private function render_plugin_feedback_popup() {
544
+ $button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $this->button_cancel );
545
+ $button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $this->button_submit );
546
+ $options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $this->options_plugin ) );
547
+ $info_disclosure_link = '<a href="#" class="info-disclosure-link">' . apply_filters( $this->product->get_slug() . '_themeisle_sdk_info_collect_cta', 'What info do we collect?' ) . '</a>';
548
+
549
+ $options += $this->other;
550
+ ?>
551
+ <div class="ti-plugin-uninstall-feedback-popup ti-feedback" id="<?php echo esc_attr( $this->product->get_slug() . '_uninstall_feedback_popup' ); ?>">
552
+ <div class="popup--header">
553
+ <h5><?php echo wp_kses( $this->heading_plugin, array( 'span' => true ) ); ?> </h5>
554
+ </div><!--/.popup--header-->
555
+ <div class="popup--body">
556
+ <?php $this->render_options_list( $options ); ?>
557
+ </div><!--/.popup--body-->
558
+ <div class="popup--footer">
559
+ <div class="actions">
560
+ <?php
561
+ echo wp_kses_post( $info_disclosure_link );
562
+ echo wp_kses_post( $this->get_disclosure_labels() );
563
+ echo '<div class="buttons">';
564
+ echo get_submit_button(
565
+ $button_cancel,
566
+ 'secondary',
567
+ $this->product->get_key() . 'ti-deactivate-no',
568
+ false
569
+ );
570
+ echo get_submit_button(
571
+ $button_submit,
572
+ 'primary',
573
+ $this->product->get_key() . 'ti-deactivate-yes',
574
+ false,
575
+ array(
576
+ 'data-after-text' => $button_submit,
577
+ 'disabled' => true,
578
+ )
579
+ );
580
+ echo '</div>';
581
+ ?>
582
+ </div><!--/.actions-->
583
+ </div><!--/.popup--footer-->
584
+ </div>
585
+
586
+ <?php
587
+ }
588
+
589
+ /**
590
+ * Add plugin feedback popup JS
591
+ */
592
+ private function add_plugin_feedback_popup_js() {
593
+ $popup_id = '#' . $this->product->get_slug() . '_uninstall_feedback_popup';
594
+ $key = $this->product->get_key();
595
+ ?>
596
+ <script type="text/javascript" id="ti-deactivate-js">
597
+ (function ($) {
598
+ $(document).ready(function () {
599
+ var targetElement = 'tr[data-plugin^="<?php echo $this->product->get_slug(); ?>/"] span.deactivate a';
600
+ var redirectUrl = $(targetElement).attr('href');
601
+ if ($('.ti-feedback-overlay').length === 0) {
602
+ $('body').prepend('<div class="ti-feedback-overlay"></div>');
603
+ }
604
+ $('<?php echo esc_attr( $popup_id ); ?> ').appendTo($(targetElement).parent());
605
+
606
+ $(targetElement).on('click', function (e) {
607
+ e.preventDefault();
608
+ $('<?php echo esc_attr( $popup_id ); ?> ').addClass('active');
609
+ $('body').addClass('ti-feedback-open');
610
+ $('.ti-feedback-overlay').on('click', function () {
611
+ $('<?php echo esc_attr( $popup_id ); ?> ').removeClass('active');
612
+ $('body').removeClass('ti-feedback-open');
613
+ });
614
+ });
615
+
616
+ $('<?php echo esc_attr( $popup_id ); ?> .info-disclosure-link').on('click', function (e) {
617
+ e.preventDefault();
618
+ $(this).parent().find('.info-disclosure-content').toggleClass('active');
619
+ });
620
+
621
+ $('<?php echo esc_attr( $popup_id ); ?> input[type="radio"]').on('change', function () {
622
+ var radio = $(this);
623
+ if (radio.parent().find('textarea').length > 0 &&
624
+ radio.parent().find('textarea').val().length === 0) {
625
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
626
+ radio.parent().find('textarea').on('keyup', function (e) {
627
+ if ($(this).val().length === 0) {
628
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
629
+ } else {
630
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
631
+ }
632
+ });
633
  } else {
634
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
 
635
  }
636
  });
637
 
638
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-no').on('click', function (e) {
639
+ e.preventDefault();
640
+ e.stopPropagation();
641
+ $(targetElement).unbind('click');
642
+ $('body').removeClass('ti-feedback-open');
643
+ $('<?php echo esc_attr( $popup_id ); ?>').remove();
644
+ if (redirectUrl !== '') {
645
+ location.href = redirectUrl;
646
+ }
647
  });
648
 
649
+ $('<?php echo esc_attr( $popup_id ); ?> #<?php echo $key; ?>ti-deactivate-yes').on('click', function (e) {
650
+ e.preventDefault();
651
+ e.stopPropagation();
652
+ $(targetElement).unbind('click');
653
+ var selectedOption = $(
654
+ '<?php echo esc_attr( $popup_id ); ?> input[name="ti-deactivate-option"]:checked');
655
+ var data = {
656
+ 'action': '<?php echo esc_attr( $key ) . '_uninstall_feedback'; ?>',
657
+ 'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
658
+ 'id': selectedOption.parent().attr('ti-option-id'),
659
+ 'msg': selectedOption.parent().find('textarea').val(),
660
+ 'type': 'plugin',
661
+ 'key': '<?php echo esc_attr( $key ); ?>'
662
+ };
663
+ $.ajax({
664
+ type: 'POST',
665
+ url: ajaxurl,
666
+ data: data,
667
+ complete() {
668
+ $('body').removeClass('ti-feedback-open');
669
+ $('<?php echo esc_attr( $popup_id ); ?>').remove();
670
+ if (redirectUrl !== '') {
671
+ location.href = redirectUrl;
672
+ }
673
+ },
674
+ beforeSend() {
675
+ $('<?php echo esc_attr( $popup_id ); ?>').addClass('sending-feedback');
676
+ $('<?php echo esc_attr( $popup_id ); ?> .popup--footer').remove();
677
+ $('<?php echo esc_attr( $popup_id ); ?> .popup--body').html('<i class="dashicons dashicons-update-alt"></i>');
678
  }
679
+ });
680
+ });
681
  });
682
  })(jQuery);
683
+
684
  </script>
685
  <?php
 
686
  do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
687
  }
688
 
689
  /**
690
+ * Get the disclosure labels markup.
691
  *
692
+ * @return string
 
693
  */
694
+ private function get_disclosure_labels() {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
695
  $disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
696
  $disclosure_labels = array_merge(
697
  [
698
  'title' => 'Below is a detailed view of all data that ThemeIsle will receive if you fill in this survey. No domain name, email address or IP addresses are transmited after you submit the survey.',
699
  'items' => [
700
  sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
701
+ sprintf( '%s Uninstall reason %s %s Selected reason from the above survey %s ', '<strong>', '</strong>', '<i>', '</i>' ),
702
  ],
703
  ],
704
  $disclosure_new_labels
705
  );
706
 
707
+ $info_disclosure_content = '<div class="info-disclosure-content"><p>' . wp_kses_post( $disclosure_labels['title'] ) . '</p><ul>';
 
708
  foreach ( $disclosure_labels['items'] as $disclosure_item ) {
709
  $info_disclosure_content .= sprintf( '<li>%s</li>', wp_kses_post( $disclosure_item ) );
710
  }
711
  $info_disclosure_content .= '</ul></div>';
712
 
713
+ return $info_disclosure_content;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
714
  }
715
 
716
  /**
836
  * @return Uninstall_Feedback Current module instance.
837
  */
838
  public function load( $product ) {
839
+
840
+ if ( apply_filters( $product->get_key() . '_hide_uninstall_feedback', false ) ) {
841
+ return;
842
+ }
843
+
844
  $this->product = $product;
845
  add_action( 'admin_head', array( $this, 'load_resources' ) );
846
  add_action( 'wp_ajax_' . $this->product->get_key() . '_uninstall_feedback', array( $this, 'post_deactivate' ) );
vendor/codeinwp/themeisle-sdk/src/Product.php CHANGED
@@ -114,7 +114,7 @@ class Product {
114
  */
115
  public function __construct( $basefile ) {
116
  if ( ! empty( $basefile ) ) {
117
- if ( is_readable( $basefile ) ) {
118
  $this->basefile = $basefile;
119
  $this->setup_from_path();
120
  $this->setup_from_fileheaders();
@@ -200,6 +200,7 @@ class Product {
200
  public function get_key() {
201
  return $this->key;
202
  }
 
203
  /**
204
  * Check if the product is either theme or plugin.
205
  *
@@ -342,6 +343,11 @@ class Product {
342
  * @return string The store url.
343
  */
344
  public function get_store_url() {
 
 
 
 
 
345
  return $this->store_url;
346
  }
347
 
@@ -354,6 +360,21 @@ class Product {
354
  return $this->basefile;
355
  }
356
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
357
  /**
358
  * Returns product filename.
359
  *
@@ -362,6 +383,7 @@ class Product {
362
  public function get_file() {
363
  return $this->file;
364
  }
 
365
  /**
366
  * Returns the pro slug, if available.
367
  *
114
  */
115
  public function __construct( $basefile ) {
116
  if ( ! empty( $basefile ) ) {
117
+ if ( is_file( $basefile ) ) {
118
  $this->basefile = $basefile;
119
  $this->setup_from_path();
120
  $this->setup_from_fileheaders();
200
  public function get_key() {
201
  return $this->key;
202
  }
203
+
204
  /**
205
  * Check if the product is either theme or plugin.
206
  *
343
  * @return string The store url.
344
  */
345
  public function get_store_url() {
346
+
347
+ if ( strpos( $this->store_url, '/themeisle.com' ) !== false ) {
348
+ return 'https://store.themeisle.com/';
349
+ }
350
+
351
  return $this->store_url;
352
  }
353
 
360
  return $this->basefile;
361
  }
362
 
363
+ /**
364
+ * Get changelog url.
365
+ *
366
+ * @return string Changelog url.
367
+ */
368
+ public function get_changelog() {
369
+ return add_query_arg(
370
+ [
371
+ 'name' => rawurlencode( $this->get_name() ),
372
+ 'edd_action' => 'view_changelog',
373
+ ],
374
+ $this->get_store_url()
375
+ );
376
+ }
377
+
378
  /**
379
  * Returns product filename.
380
  *
383
  public function get_file() {
384
  return $this->file;
385
  }
386
+
387
  /**
388
  * Returns the pro slug, if available.
389
  *
vendor/codeinwp/themeisle-sdk/start.php CHANGED
@@ -37,7 +37,7 @@ $files_to_load = [
37
  $files_to_load = array_merge( $files_to_load, apply_filters( 'themeisle_sdk_required_files', [] ) );
38
 
39
  foreach ( $files_to_load as $file ) {
40
- if ( is_readable( $file ) ) {
41
  require_once $file;
42
  }
43
  }
37
  $files_to_load = array_merge( $files_to_load, apply_filters( 'themeisle_sdk_required_files', [] ) );
38
 
39
  foreach ( $files_to_load as $file ) {
40
+ if ( is_file( $file ) ) {
41
  require_once $file;
42
  }
43
  }
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitea5e42e4e81c765e10537b5c8aba203a
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitea5e42e4e81c765e10537b5c8aba203a
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInitea5e42e4e81c765e10537b5c8aba203a', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInitea5e42e4e81c765e10537b5c8aba203a', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInitea5e42e4e81c765e10537b5c8aba203a
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
- composerRequireea5e42e4e81c765e10537b5c8aba203a($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequireea5e42e4e81c765e10537b5c8aba203a($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit34b4fbbd8f41a547808361c9bf47635a
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit34b4fbbd8f41a547808361c9bf47635a', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit34b4fbbd8f41a547808361c9bf47635a', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $fileIdentifier => $file) {
45
+ composerRequire34b4fbbd8f41a547808361c9bf47635a($fileIdentifier, $file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequire34b4fbbd8f41a547808361c9bf47635a($fileIdentifier, $file)
53
  {
54
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
55
  require $file;
vendor/composer/installed.json CHANGED
@@ -1,17 +1,17 @@
1
  [
2
  {
3
  "name": "codeinwp/themeisle-sdk",
4
- "version": "3.0.6",
5
- "version_normalized": "3.0.6.0",
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
9
- "reference": "cde61ab54f93495f0c5b7901cc5072f320f969ff"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/cde61ab54f93495f0c5b7901cc5072f320f969ff",
14
- "reference": "cde61ab54f93495f0c5b7901cc5072f320f969ff",
15
  "shasum": ""
16
  },
17
  "require-dev": {
@@ -19,7 +19,7 @@
19
  "squizlabs/php_codesniffer": "^3.1",
20
  "wp-coding-standards/wpcs": "^1.0.0"
21
  },
22
- "time": "2019-05-21 11:49:48",
23
  "type": "library",
24
  "installation-source": "dist",
25
  "notification-url": "https://packagist.org/downloads/",
1
  [
2
  {
3
  "name": "codeinwp/themeisle-sdk",
4
+ "version": "3.1.7",
5
+ "version_normalized": "3.1.7.0",
6
  "source": {
7
  "type": "git",
8
  "url": "https://github.com/Codeinwp/themeisle-sdk.git",
9
+ "reference": "5162163ec2d609e0b61e382f8fcf6ad47cca3293"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/5162163ec2d609e0b61e382f8fcf6ad47cca3293",
14
+ "reference": "5162163ec2d609e0b61e382f8fcf6ad47cca3293",
15
  "shasum": ""
16
  },
17
  "require-dev": {
19
  "squizlabs/php_codesniffer": "^3.1",
20
  "wp-coding-standards/wpcs": "^1.0.0"
21
  },
22
+ "time": "2019-11-07 12:16:41",
23
  "type": "library",
24
  "installation-source": "dist",
25
  "notification-url": "https://packagist.org/downloads/",