Version Description
- 2019-11-14
Download this release
Release Info
Developer | codeinwp |
Plugin | 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 +4 -0
- css/frontend.css +1 -1
- css/library.css +54 -0
- index.php +20 -3
- readme.md +6 -1
- readme.txt +6 -1
- templates/library/list.php +50 -1
- themeisle-hash.json +1 -1
- vendor/autoload.php +1 -1
- vendor/codeinwp/themeisle-sdk/CHANGELOG.md +109 -0
- vendor/codeinwp/themeisle-sdk/load.php +25 -2
- vendor/codeinwp/themeisle-sdk/src/Loader.php +1 -1
- vendor/codeinwp/themeisle-sdk/src/Modules/Dashboard_widget.php +5 -3
- vendor/codeinwp/themeisle-sdk/src/Modules/Endpoint.php +1 -1
- vendor/codeinwp/themeisle-sdk/src/Modules/Licenser.php +122 -43
- vendor/codeinwp/themeisle-sdk/src/Modules/Notification.php +3 -0
- vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php +441 -325
- vendor/codeinwp/themeisle-sdk/src/Product.php +23 -1
- vendor/codeinwp/themeisle-sdk/start.php +1 -1
- vendor/composer/autoload_real.php +5 -5
- vendor/composer/installed.json +6 -6
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.
|
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.
|
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.
|
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' =>
|
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.
|
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.
|
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
|
|
|
|
|
|
|
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":"
|
1 |
+
{"index.php":"0e1585c013f231005497c82b2f9fc80c"}
|
vendor/autoload.php
CHANGED
@@ -4,4 +4,4 @@
|
|
4 |
|
5 |
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
6 |
|
7 |
-
return
|
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.
|
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 |
-
|
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 ( !
|
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/
|
131 |
background-repeat: no-repeat;
|
132 |
background-position: 92% 50%;
|
133 |
-
background-size:
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
-
$
|
406 |
-
$license_data->license = ( 'valid' != $status ) ? 'valid' : 'invalid';
|
407 |
|
408 |
-
|
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&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 |
-
'
|
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> <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&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&width=1024&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 |
-
'
|
|
|
|
|
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 |
-
'
|
|
|
|
|
66 |
),
|
67 |
);
|
68 |
/**
|
@@ -75,7 +79,9 @@ class Uninstall_Feedback extends Abstract_Module {
|
|
75 |
'id' => 7,
|
76 |
),
|
77 |
'It lacks options' => array(
|
78 |
-
'
|
|
|
|
|
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' => '
|
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 = '
|
107 |
/**
|
108 |
* Default heading for theme.
|
109 |
*
|
110 |
* @var string $heading_theme The heading of the modal
|
111 |
*/
|
112 |
-
private $heading_theme = '
|
113 |
/**
|
114 |
* Default submit button action text.
|
115 |
*
|
@@ -133,342 +139,338 @@ class Uninstall_Feedback extends Abstract_Module {
|
|
133 |
return;
|
134 |
}
|
135 |
|
136 |
-
|
137 |
|
138 |
-
|
|
|
|
|
139 |
|
140 |
-
|
141 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
142 |
|
143 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
}
|
145 |
|
146 |
/**
|
147 |
-
*
|
148 |
-
*
|
149 |
-
* @param string $type The type of product.
|
150 |
-
* @param string $key The product key.
|
151 |
*/
|
152 |
-
function
|
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
|
161 |
-
|
162 |
-
|
|
|
|
|
|
|
|
|
163 |
}
|
164 |
|
165 |
-
input[name="ti-deactivate-option"]:checked ~ div {
|
166 |
-
display: block;
|
167 |
-
}
|
168 |
|
169 |
-
|
170 |
-
|
|
|
171 |
}
|
172 |
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
color: #
|
178 |
-
font-
|
179 |
-
|
180 |
-
|
181 |
-
padding: 40px 40px 0 120px;
|
182 |
-
text-transform: uppercase;
|
183 |
-
width: 100%;
|
184 |
}
|
185 |
|
186 |
-
|
187 |
-
padding
|
188 |
-
margin: 0 1px;
|
189 |
}
|
190 |
|
191 |
-
|
192 |
-
width: 125px;
|
193 |
-
display: block;
|
194 |
margin: 0;
|
195 |
-
|
196 |
}
|
197 |
|
198 |
-
|
199 |
-
margin
|
200 |
-
margin-top: 2px;
|
201 |
-
padding-top: 0px;
|
202 |
}
|
203 |
|
204 |
-
|
205 |
-
|
206 |
-
margin-bottom: 0px;
|
207 |
}
|
208 |
|
209 |
-
|
|
|
|
|
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 |
-
|
219 |
-
|
|
|
|
|
|
|
220 |
}
|
221 |
|
222 |
-
|
223 |
-
|
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 |
-
|
235 |
-
|
236 |
-
padding: 30px 40px;
|
237 |
-
background-color: #eaeaea;
|
238 |
}
|
239 |
|
240 |
-
|
241 |
-
|
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 |
-
|
259 |
-
|
260 |
-
|
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 |
-
|
272 |
-
|
|
|
273 |
}
|
274 |
|
275 |
-
|
276 |
-
|
|
|
|
|
|
|
277 |
}
|
278 |
|
279 |
-
|
280 |
-
|
281 |
-
outline: none;
|
282 |
}
|
283 |
|
284 |
-
|
285 |
-
|
286 |
-
transform: translateY(0);
|
287 |
}
|
288 |
|
289 |
-
|
290 |
-
|
|
|
291 |
}
|
292 |
|
293 |
-
|
294 |
-
|
|
|
|
|
|
|
|
|
|
|
295 |
}
|
296 |
|
297 |
-
|
298 |
-
|
|
|
299 |
}
|
300 |
|
301 |
-
|
302 |
-
margin:
|
303 |
}
|
304 |
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
|
|
309 |
}
|
310 |
|
311 |
-
|
312 |
-
|
313 |
-
line-height: 28px;
|
314 |
-
font-size: 15px;
|
315 |
}
|
316 |
|
317 |
-
|
318 |
-
|
319 |
}
|
320 |
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
326 |
}
|
327 |
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
}
|
332 |
|
333 |
-
|
334 |
-
|
335 |
}
|
336 |
|
337 |
-
|
338 |
-
|
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 |
-
|
358 |
-
|
359 |
display: block;
|
360 |
position: absolute;
|
361 |
-
|
362 |
-
|
|
|
|
|
|
|
|
|
|
|
363 |
}
|
364 |
|
365 |
-
.
|
366 |
-
|
|
|
|
|
|
|
|
|
|
|
367 |
}
|
368 |
|
369 |
-
|
370 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
371 |
}
|
372 |
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
color: #
|
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 |
-
|
388 |
-
|
389 |
-
outline: none;
|
390 |
}
|
391 |
|
392 |
-
|
393 |
-
|
394 |
}
|
395 |
|
396 |
-
body
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
bottom: 0
|
402 |
-
right: 0
|
403 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
404 |
}
|
405 |
</style>
|
406 |
<?php
|
407 |
-
do_action( $this->product->get_key() . '_uninstall_feedback_after_css' );
|
408 |
}
|
409 |
|
410 |
/**
|
411 |
-
*
|
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
|
418 |
-
$
|
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 |
-
|
426 |
-
|
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 |
-
|
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 |
-
|
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 |
-
$('
|
466 |
-
|
|
|
|
|
467 |
|
468 |
-
|
469 |
-
|
|
|
|
|
470 |
$('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
|
471 |
-
radio.parent().find('textarea').on('keyup', function (
|
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 |
-
|
483 |
-
|
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':
|
493 |
-
'msg':
|
494 |
-
'type': '
|
|
|
495 |
});
|
496 |
-
|
497 |
-
|
498 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
499 |
} else {
|
500 |
-
$('
|
501 |
-
tb_remove();
|
502 |
}
|
503 |
});
|
504 |
|
505 |
-
$(
|
506 |
-
|
507 |
-
|
508 |
-
|
|
|
|
|
|
|
|
|
|
|
509 |
});
|
510 |
|
511 |
-
function
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
520 |
}
|
521 |
-
}
|
522 |
-
}
|
523 |
});
|
524 |
})(jQuery);
|
|
|
525 |
</script>
|
526 |
<?php
|
527 |
-
|
528 |
do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
|
529 |
}
|
530 |
|
531 |
/**
|
532 |
-
*
|
533 |
*
|
534 |
-
* @
|
535 |
-
* @param string $key The product key.
|
536 |
*/
|
537 |
-
function
|
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
|
574 |
],
|
575 |
],
|
576 |
$disclosure_new_labels
|
577 |
);
|
578 |
|
579 |
-
$
|
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>×</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 (
|
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 (
|
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
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitea5e42e4e81c765e10537b5c8aba203a
|
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
-
spl_autoload_register(array('
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('
|
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 |
-
|
46 |
}
|
47 |
|
48 |
return $loader;
|
49 |
}
|
50 |
}
|
51 |
|
52 |
-
function
|
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.
|
5 |
-
"version_normalized": "3.
|
6 |
"source": {
|
7 |
"type": "git",
|
8 |
"url": "https://github.com/Codeinwp/themeisle-sdk.git",
|
9 |
-
"reference": "
|
10 |
},
|
11 |
"dist": {
|
12 |
"type": "zip",
|
13 |
-
"url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/
|
14 |
-
"reference": "
|
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-
|
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/",
|