Version Description
- 2019-12-07
Download this release
Release Info
Developer | codeinwp |
Plugin | Slider by Nivo – Responsive WordPress Image Slider |
Version | 2.3.1 |
Comparing to | |
See all releases |
Code changes from version 2.3.0 to 2.3.1
- CHANGELOG.md +4 -0
- assets/css/nivo-slider.css +1 -1
- includes/admin/class-nivo-slider-admin.php +2 -2
- includes/admin/libs/class-nivo-core-admin-edit.php +35 -0
- includes/class-nivo-slider.php +1 -1
- nivo-slider-lite.php +1 -1
- readme.md +6 -1
- readme.txt +6 -1
- themeisle-hash.json +1 -1
- vendor/autoload.php +1 -1
- vendor/codeinwp/themeisle-sdk/CHANGELOG.md +124 -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/Review.php +1 -1
- vendor/codeinwp/themeisle-sdk/src/Modules/Uninstall_feedback.php +447 -325
- vendor/codeinwp/themeisle-sdk/src/Product.php +23 -1
- vendor/codeinwp/themeisle-sdk/start.php +1 -1
- vendor/composer/autoload_real.php +3 -3
- vendor/composer/installed.json +6 -6
CHANGELOG.md
CHANGED
@@ -1,4 +1,8 @@
|
|
1 |
|
|
|
|
|
|
|
|
|
2 |
### v2.3.0 - 2019-03-08
|
3 |
**Changes:**
|
4 |
* Tested up with WordPress 5.1
|
1 |
|
2 |
+
### v2.3.1 - 2019-12-07
|
3 |
+
**Changes:**
|
4 |
+
* Tested up for wp 5.3
|
5 |
+
|
6 |
### v2.3.0 - 2019-03-08
|
7 |
**Changes:**
|
8 |
* Tested up with WordPress 5.1
|
assets/css/nivo-slider.css
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/*
|
2 |
* jQuery Nivo Slider v3.2
|
3 |
* http://nivo.dev7studios.com
|
4 |
-
* Version: 2.3.
|
5 |
* Copyright 2012, Dev7studios
|
6 |
* Free to use and abuse under the MIT license.
|
7 |
* http://www.opensource.org/licenses/mit-license.php
|
1 |
/*
|
2 |
* jQuery Nivo Slider v3.2
|
3 |
* http://nivo.dev7studios.com
|
4 |
+
* Version: 2.3.1
|
5 |
* Copyright 2012, Dev7studios
|
6 |
* Free to use and abuse under the MIT license.
|
7 |
* http://www.opensource.org/licenses/mit-license.php
|
includes/admin/class-nivo-slider-admin.php
CHANGED
@@ -604,7 +604,7 @@ class Nivo_Slider_Admin extends Nivo_Core_Abstract {
|
|
604 |
|
605 |
wp_enqueue_style( $this->plugin_name . '_nivo_css', NIVO_SLIDER_PLUGIN_URL . 'assets/css/nivo-slider.css', array(), $this->version, 'all' );
|
606 |
if ( $load_css ) {
|
607 |
-
wp_enqueue_style( $this->plugin_name . '_admin_css', NIVO_SLIDER_PLUGIN_URL . 'assets/css/admin.css', array(), $this->version, 'all' );
|
608 |
}
|
609 |
|
610 |
}
|
@@ -629,7 +629,7 @@ class Nivo_Slider_Admin extends Nivo_Core_Abstract {
|
|
629 |
*/
|
630 |
wp_enqueue_script( $this->plugin_name . '_core_admin', NIVO_SLIDER_PLUGIN_URL . 'assets/js/core-admin.js', array( 'jquery' ), $this->version, false );
|
631 |
//wp_enqueue_script( $this->plugin_name . '_admin', NIVO_SLIDER_PLUGIN_URL . 'assets/js/admin.js', array( 'jquery' ), $this->version, false );
|
632 |
-
wp_enqueue_script( $this->plugin_name . '_image_admin', NIVO_SLIDER_PLUGIN_URL . 'assets/js/image-admin.js', array( 'jquery' ), $this->version, false );
|
633 |
|
634 |
}
|
635 |
|
604 |
|
605 |
wp_enqueue_style( $this->plugin_name . '_nivo_css', NIVO_SLIDER_PLUGIN_URL . 'assets/css/nivo-slider.css', array(), $this->version, 'all' );
|
606 |
if ( $load_css ) {
|
607 |
+
wp_enqueue_style( $this->plugin_name . '_admin_css', NIVO_SLIDER_PLUGIN_URL . 'assets/css/admin.css', array( 'thickbox' ), $this->version, 'all' );
|
608 |
}
|
609 |
|
610 |
}
|
629 |
*/
|
630 |
wp_enqueue_script( $this->plugin_name . '_core_admin', NIVO_SLIDER_PLUGIN_URL . 'assets/js/core-admin.js', array( 'jquery' ), $this->version, false );
|
631 |
//wp_enqueue_script( $this->plugin_name . '_admin', NIVO_SLIDER_PLUGIN_URL . 'assets/js/admin.js', array( 'jquery' ), $this->version, false );
|
632 |
+
wp_enqueue_script( $this->plugin_name . '_image_admin', NIVO_SLIDER_PLUGIN_URL . 'assets/js/image-admin.js', array( 'jquery', 'thickbox' ), $this->version, false );
|
633 |
|
634 |
}
|
635 |
|
includes/admin/libs/class-nivo-core-admin-edit.php
CHANGED
@@ -305,6 +305,19 @@ class Nivo_Core_Admin_Edit extends Nivo_Core_Abstract implements Nivo_Library_In
|
|
305 |
'side'
|
306 |
);
|
307 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
308 |
}
|
309 |
|
310 |
/**
|
@@ -329,6 +342,28 @@ class Nivo_Core_Admin_Edit extends Nivo_Core_Abstract implements Nivo_Library_In
|
|
329 |
echo '</p>';
|
330 |
}
|
331 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
332 |
/**
|
333 |
* Adds tracking box to the edit screen
|
334 |
*
|
305 |
'side'
|
306 |
);
|
307 |
|
308 |
+
if ( ! defined( 'OTTER_BLOCKS_VERSION' ) && current_user_can( 'manage_options' ) && version_compare( get_bloginfo( 'version' ), '5.0', '>=' ) ) {
|
309 |
+
add_meta_box(
|
310 |
+
$this->labels['post_type'] . 'otter_notice',
|
311 |
+
__( 'Try Otter\'s Slider Block', 'nivo-slider' ),
|
312 |
+
array(
|
313 |
+
$this,
|
314 |
+
'meta_box_otter',
|
315 |
+
),
|
316 |
+
$this->labels['post_type'],
|
317 |
+
'side'
|
318 |
+
);
|
319 |
+
}
|
320 |
+
|
321 |
}
|
322 |
|
323 |
/**
|
342 |
echo '</p>';
|
343 |
}
|
344 |
|
345 |
+
/**
|
346 |
+
* Adds the Shortcode meta box to the edit screen
|
347 |
+
*
|
348 |
+
* @since 2.2.*
|
349 |
+
* @access public
|
350 |
+
*/
|
351 |
+
public function meta_box_otter() {
|
352 |
+
$url = add_query_arg(
|
353 |
+
array(
|
354 |
+
'tab' => 'plugin-information',
|
355 |
+
'plugin' => 'otter-blocks',
|
356 |
+
'TB_iframe' => true,
|
357 |
+
'width' => 800,
|
358 |
+
'height' => 800,
|
359 |
+
),
|
360 |
+
network_admin_url( 'plugin-install.php' )
|
361 |
+
);
|
362 |
+
|
363 |
+
echo '<p>' . __( 'Nivo Slider recommends Otter for best in class Slider Block for WordPress\'s new Block Editor.', 'nivo-slider' ) . '</p>';
|
364 |
+
echo '<a href="' . esc_url( $url ) . '" class="button button-large thickbox">Try Otter</a>';
|
365 |
+
}
|
366 |
+
|
367 |
/**
|
368 |
* Adds tracking box to the edit screen
|
369 |
*
|
includes/class-nivo-slider.php
CHANGED
@@ -69,7 +69,7 @@ class Nivo_Slider {
|
|
69 |
public function __construct() {
|
70 |
|
71 |
$this->plugin_name = 'nivo-slider';
|
72 |
-
$this->version = '2.3.
|
73 |
|
74 |
$this->load_dependencies();
|
75 |
$this->set_locale();
|
69 |
public function __construct() {
|
70 |
|
71 |
$this->plugin_name = 'nivo-slider';
|
72 |
+
$this->version = '2.3.1';
|
73 |
|
74 |
$this->load_dependencies();
|
75 |
$this->set_locale();
|
nivo-slider-lite.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
* Plugin Name: Slider by Nivo - Responsive Image Slider
|
4 |
* Plugin URI: https://themeisle.com/plugins/nivo-slider-lite
|
5 |
* Description: Nivo Slider is The Most Popular And Easiest to Use WordPress Slider Plugin.
|
6 |
-
* Version: 2.3.
|
7 |
* Author: ThemeIsle
|
8 |
* Author URI: https://themeisle.com/
|
9 |
* Text Domain: nivo-slider
|
3 |
* Plugin Name: Slider by Nivo - Responsive Image Slider
|
4 |
* Plugin URI: https://themeisle.com/plugins/nivo-slider-lite
|
5 |
* Description: Nivo Slider is The Most Popular And Easiest to Use WordPress Slider Plugin.
|
6 |
+
* Version: 2.3.1
|
7 |
* Author: ThemeIsle
|
8 |
* Author URI: https://themeisle.com/
|
9 |
* Text Domain: nivo-slider
|
readme.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
**Contributors:** [themeisle](https://profiles.wordpress.org/themeisle), [codeinwp](https://profiles.wordpress.org/codeinwp), [nivoslider](https://profiles.wordpress.org/nivoslider)
|
3 |
**Tags:** slider, nivo,slider plugin, slideshow, slideshow plugin, template tag, wordpress gallery, wordpress image slider, wordpress photo gallery
|
4 |
**Requires at least:** 3.0
|
5 |
-
**Tested up to:** 5.
|
6 |
**Stable tag:** trunk
|
7 |
**Requires PHP:** 5.3
|
8 |
**License:** GPLv3
|
@@ -69,6 +69,11 @@ Purchasing a license gets you access to the full version of the Nivo Slider Word
|
|
69 |
4. The final result
|
70 |
|
71 |
## Changelog ##
|
|
|
|
|
|
|
|
|
|
|
72 |
### 2.3.0 - 2019-03-08 ###
|
73 |
|
74 |
* Tested up with WordPress 5.1
|
2 |
**Contributors:** [themeisle](https://profiles.wordpress.org/themeisle), [codeinwp](https://profiles.wordpress.org/codeinwp), [nivoslider](https://profiles.wordpress.org/nivoslider)
|
3 |
**Tags:** slider, nivo,slider plugin, slideshow, slideshow plugin, template tag, wordpress gallery, wordpress image slider, wordpress photo gallery
|
4 |
**Requires at least:** 3.0
|
5 |
+
**Tested up to:** 5.3
|
6 |
**Stable tag:** trunk
|
7 |
**Requires PHP:** 5.3
|
8 |
**License:** GPLv3
|
69 |
4. The final result
|
70 |
|
71 |
## Changelog ##
|
72 |
+
### 2.3.1 - 2019-12-07 ###
|
73 |
+
|
74 |
+
* Tested up for wp 5.3
|
75 |
+
|
76 |
+
|
77 |
### 2.3.0 - 2019-03-08 ###
|
78 |
|
79 |
* Tested up with WordPress 5.1
|
readme.txt
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
Contributors: themeisle, codeinwp, nivoslider
|
3 |
Tags: slider, nivo,slider plugin, slideshow, slideshow plugin, template tag, wordpress gallery, wordpress image slider, wordpress photo gallery
|
4 |
Requires at least: 3.0
|
5 |
-
Tested up to: 5.
|
6 |
Stable tag: trunk
|
7 |
Requires PHP: 5.3
|
8 |
License: GPLv3
|
@@ -69,6 +69,11 @@ Purchasing a license gets you access to the full version of the Nivo Slider Word
|
|
69 |
4. The final result
|
70 |
|
71 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
72 |
= 2.3.0 - 2019-03-08 =
|
73 |
|
74 |
* Tested up with WordPress 5.1
|
2 |
Contributors: themeisle, codeinwp, nivoslider
|
3 |
Tags: slider, nivo,slider plugin, slideshow, slideshow plugin, template tag, wordpress gallery, wordpress image slider, wordpress photo gallery
|
4 |
Requires at least: 3.0
|
5 |
+
Tested up to: 5.3
|
6 |
Stable tag: trunk
|
7 |
Requires PHP: 5.3
|
8 |
License: GPLv3
|
69 |
4. The final result
|
70 |
|
71 |
== Changelog ==
|
72 |
+
= 2.3.1 - 2019-12-07 =
|
73 |
+
|
74 |
+
* Tested up for wp 5.3
|
75 |
+
|
76 |
+
|
77 |
= 2.3.0 - 2019-03-08 =
|
78 |
|
79 |
* Tested up with WordPress 5.1
|
themeisle-hash.json
CHANGED
@@ -1 +1 @@
|
|
1 |
-
{"nivo-slider-lite.php":"
|
1 |
+
{"nivo-slider-lite.php":"6dd013059533b9daebe0c3f2527c7539"}
|
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 ComposerAutoloaderInit404e6133548e50f4181f8af5f995d16a::getLoader();
|
vendor/codeinwp/themeisle-sdk/CHANGELOG.md
CHANGED
@@ -1,3 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
## [3.0.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.4...v3.0.5) (2019-03-07)
|
2 |
|
3 |
|
1 |
+
## [3.1.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.7...v3.1.8) (2019-11-18)
|
2 |
+
|
3 |
+
|
4 |
+
### Bug Fixes
|
5 |
+
|
6 |
+
* update developers name ([6aca63e](https://github.com/Codeinwp/themeisle-sdk/commit/6aca63e))
|
7 |
+
|
8 |
+
## [3.1.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.6...v3.1.7) (2019-11-07)
|
9 |
+
|
10 |
+
|
11 |
+
### Bug Fixes
|
12 |
+
|
13 |
+
* license field style on wp5.3 ([0239997](https://github.com/Codeinwp/themeisle-sdk/commit/0239997))
|
14 |
+
* license field style on wp5.3 ([86d3a1b](https://github.com/Codeinwp/themeisle-sdk/commit/86d3a1b))
|
15 |
+
|
16 |
+
## [3.1.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.5...v3.1.6) (2019-09-24)
|
17 |
+
|
18 |
+
|
19 |
+
### Bug Fixes
|
20 |
+
|
21 |
+
* remove license related options when deactivated ([02cd6ce](https://github.com/Codeinwp/themeisle-sdk/commit/02cd6ce))
|
22 |
+
* remove license related options when deactivated ([d3c1a1f](https://github.com/Codeinwp/themeisle-sdk/commit/d3c1a1f))
|
23 |
+
|
24 |
+
## [3.1.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.4...v3.1.5) (2019-09-11)
|
25 |
+
|
26 |
+
|
27 |
+
### Bug Fixes
|
28 |
+
|
29 |
+
* allow unloading certain module features ([2a2559a](https://github.com/Codeinwp/themeisle-sdk/commit/2a2559a))
|
30 |
+
* license activation workflow, show error message when failed to a… ([ade795c](https://github.com/Codeinwp/themeisle-sdk/commit/ade795c))
|
31 |
+
* license activation workflow, show error message when failed to activate ([2f5cbae](https://github.com/Codeinwp/themeisle-sdk/commit/2f5cbae))
|
32 |
+
|
33 |
+
## [3.1.4](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.3...v3.1.4) (2019-08-23)
|
34 |
+
|
35 |
+
|
36 |
+
### Bug Fixes
|
37 |
+
|
38 |
+
* license key was missing on get_version call ([365cde6](https://github.com/Codeinwp/themeisle-sdk/commit/365cde6))
|
39 |
+
* license key was missing on get_version call ([c02f225](https://github.com/Codeinwp/themeisle-sdk/commit/c02f225))
|
40 |
+
|
41 |
+
## [3.1.3](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.2...v3.1.3) (2019-08-20)
|
42 |
+
|
43 |
+
|
44 |
+
### Bug Fixes
|
45 |
+
|
46 |
+
* license deactivation behaviour https://github.com/Codeinwp/visua… ([59c4afe](https://github.com/Codeinwp/themeisle-sdk/commit/59c4afe))
|
47 |
+
* license deactivation behaviour https://github.com/Codeinwp/visualizer-pro/issues/192 ([f641e18](https://github.com/Codeinwp/themeisle-sdk/commit/f641e18))
|
48 |
+
|
49 |
+
## [3.1.2](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.1...v3.1.2) (2019-08-12)
|
50 |
+
|
51 |
+
|
52 |
+
### Bug Fixes
|
53 |
+
|
54 |
+
* phpunit test case ([efe851c](https://github.com/Codeinwp/themeisle-sdk/commit/efe851c))
|
55 |
+
* url format for license endpoint, improve changelog handling and license checks ([a492c68](https://github.com/Codeinwp/themeisle-sdk/commit/a492c68))
|
56 |
+
|
57 |
+
## [3.1.1](https://github.com/Codeinwp/themeisle-sdk/compare/v3.1.0...v3.1.1) (2019-08-08)
|
58 |
+
|
59 |
+
|
60 |
+
### Bug Fixes
|
61 |
+
|
62 |
+
* adds is_file for file existence check ([d1205c4](https://github.com/Codeinwp/themeisle-sdk/commit/d1205c4))
|
63 |
+
* adds is_file for file existence check ([be119c1](https://github.com/Codeinwp/themeisle-sdk/commit/be119c1))
|
64 |
+
|
65 |
+
# [3.1.0](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.10...v3.1.0) (2019-08-05)
|
66 |
+
|
67 |
+
|
68 |
+
### Bug Fixes
|
69 |
+
|
70 |
+
* 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))
|
71 |
+
* 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))
|
72 |
+
* new uninstall feedback popup issues ([5bda4bd](https://github.com/Codeinwp/themeisle-sdk/commit/5bda4bd))
|
73 |
+
* phpcs indentation errors ([d59ed4f](https://github.com/Codeinwp/themeisle-sdk/commit/d59ed4f))
|
74 |
+
* undefined notices on license check, fix [#60](https://github.com/Codeinwp/themeisle-sdk/issues/60) ([7f56a97](https://github.com/Codeinwp/themeisle-sdk/commit/7f56a97))
|
75 |
+
* uninstall feedback popup placement [[#61](https://github.com/Codeinwp/themeisle-sdk/issues/61)] ([1102d6c](https://github.com/Codeinwp/themeisle-sdk/commit/1102d6c))
|
76 |
+
|
77 |
+
|
78 |
+
### Features
|
79 |
+
|
80 |
+
* new product feedback popup ([f0dbab3](https://github.com/Codeinwp/themeisle-sdk/commit/f0dbab3))
|
81 |
+
* new uninstall feedback form for themes ([8a29f21](https://github.com/Codeinwp/themeisle-sdk/commit/8a29f21))
|
82 |
+
|
83 |
+
## [3.0.10](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.9...v3.0.10) (2019-07-16)
|
84 |
+
|
85 |
+
|
86 |
+
### Bug Fixes
|
87 |
+
|
88 |
+
* compatibility with lower PHP versions ([065ac8e](https://github.com/Codeinwp/themeisle-sdk/commit/065ac8e))
|
89 |
+
* 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))
|
90 |
+
* 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))
|
91 |
+
* preserve loaded when adding the licenser one ([cd50434](https://github.com/Codeinwp/themeisle-sdk/commit/cd50434))
|
92 |
+
|
93 |
+
## [3.0.9](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.8...v3.0.9) (2019-06-26)
|
94 |
+
|
95 |
+
|
96 |
+
### Bug Fixes
|
97 |
+
|
98 |
+
* adds new icon for dashboard widget ([de78068](https://github.com/Codeinwp/themeisle-sdk/commit/de78068))
|
99 |
+
* 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))
|
100 |
+
* 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))
|
101 |
+
* remove soon to expire notice, fix https://github.com/Codeinwp/themeisle/issues/752 ([a126225](https://github.com/Codeinwp/themeisle-sdk/commit/a126225))
|
102 |
+
|
103 |
+
## [3.0.8](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.7...v3.0.8) (2019-05-28)
|
104 |
+
|
105 |
+
|
106 |
+
### Bug Fixes
|
107 |
+
|
108 |
+
* undefined class on diff module which should check the class on global namespace ([df6bb12](https://github.com/Codeinwp/themeisle-sdk/commit/df6bb12))
|
109 |
+
|
110 |
+
## [3.0.7](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.6...v3.0.7) (2019-05-27)
|
111 |
+
|
112 |
+
|
113 |
+
### Bug Fixes
|
114 |
+
|
115 |
+
* change store url with the new domain ([6bdbe1e](https://github.com/Codeinwp/themeisle-sdk/commit/6bdbe1e))
|
116 |
+
|
117 |
+
## [3.0.6](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.5...v3.0.6) (2019-05-21)
|
118 |
+
|
119 |
+
|
120 |
+
### Bug Fixes
|
121 |
+
|
122 |
+
* build php version for deployment stage ([a785699](https://github.com/Codeinwp/themeisle-sdk/commit/a785699))
|
123 |
+
* uninstall feedback should load only on the proper pages ([259e78f](https://github.com/Codeinwp/themeisle-sdk/commit/259e78f))
|
124 |
+
|
125 |
## [3.0.5](https://github.com/Codeinwp/themeisle-sdk/compare/v3.0.4...v3.0.5) (2019-03-07)
|
126 |
|
127 |
|
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.8';
|
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/Review.php
CHANGED
@@ -60,7 +60,7 @@ class Review extends Abstract_Module {
|
|
60 |
'Stefan',
|
61 |
'Uriahs',
|
62 |
'Madalin',
|
63 |
-
'
|
64 |
'Silviu',
|
65 |
'Andrei',
|
66 |
];
|
60 |
'Stefan',
|
61 |
'Uriahs',
|
62 |
'Madalin',
|
63 |
+
'Cristi',
|
64 |
'Silviu',
|
65 |
'Andrei',
|
66 |
];
|
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 |
*
|
@@ -127,342 +133,344 @@ class Uninstall_Feedback extends Abstract_Module {
|
|
127 |
* Loads the additional resources
|
128 |
*/
|
129 |
function load_resources() {
|
130 |
-
|
|
|
|
|
|
|
|
|
131 |
|
132 |
-
$
|
133 |
|
134 |
-
|
135 |
-
|
|
|
136 |
|
137 |
-
|
|
|
|
|
|
|
138 |
}
|
139 |
|
140 |
/**
|
141 |
-
*
|
142 |
-
*
|
143 |
-
* @param string $type The type of product.
|
144 |
-
* @param string $key The product key.
|
145 |
*/
|
146 |
-
function
|
147 |
-
$
|
148 |
-
$
|
149 |
-
$
|
150 |
-
|
151 |
-
|
152 |
-
|
|
|
|
|
153 |
?>
|
154 |
-
<
|
155 |
-
|
156 |
-
|
157 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
158 |
|
159 |
-
|
160 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
161 |
}
|
162 |
|
163 |
-
|
164 |
-
|
|
|
|
|
165 |
}
|
166 |
|
167 |
-
|
168 |
-
|
169 |
-
|
170 |
-
|
171 |
-
color: #
|
172 |
-
font-
|
173 |
-
|
174 |
-
|
175 |
-
padding: 40px 40px 0 120px;
|
176 |
-
text-transform: uppercase;
|
177 |
-
width: 100%;
|
178 |
}
|
179 |
|
180 |
-
|
181 |
-
padding
|
182 |
-
margin: 0 1px;
|
183 |
}
|
184 |
|
185 |
-
|
186 |
-
width: 125px;
|
187 |
-
display: block;
|
188 |
margin: 0;
|
189 |
-
|
190 |
}
|
191 |
|
192 |
-
|
193 |
-
margin
|
194 |
-
margin-top: 2px;
|
195 |
-
padding-top: 0px;
|
196 |
}
|
197 |
|
198 |
-
|
199 |
-
|
200 |
-
margin-bottom: 0px;
|
201 |
}
|
202 |
|
203 |
-
|
|
|
|
|
204 |
display: none;
|
205 |
-
|
206 |
-
body.<?php echo $suffix; ?> .<?php echo $key; ?>-container.<?php echo $key; ?>-container-disc-open #<?php echo $key; ?>-info-disclosure-content {
|
207 |
-
display: block;
|
208 |
-
position:absolute;
|
209 |
-
bottom: 100px;
|
210 |
}
|
211 |
|
212 |
-
|
213 |
-
|
|
|
|
|
|
|
214 |
}
|
215 |
|
216 |
-
|
217 |
-
|
218 |
-
}
|
219 |
-
body.<?php echo $suffix; ?> .<?php echo $key; ?>-container #<?php echo $key; ?>-info-disclosure {
|
220 |
-
position: absolute;
|
221 |
-
top: -50px;
|
222 |
-
font-size: 13px;
|
223 |
-
color: #8d9192;
|
224 |
-
font-weight: 400;
|
225 |
-
right: 40px;
|
226 |
}
|
227 |
|
228 |
-
|
229 |
-
|
230 |
-
padding: 30px 40px;
|
231 |
-
background-color: #eaeaea;
|
232 |
}
|
233 |
|
234 |
-
|
235 |
-
|
236 |
-
border: none;
|
237 |
-
box-shadow: none;
|
238 |
-
color: #ffffff;
|
239 |
-
font-size: 15px;
|
240 |
-
font-weight: 700;
|
241 |
-
height: auto;
|
242 |
-
line-height: 20px;
|
243 |
-
padding: 10px 15px;
|
244 |
-
text-transform: uppercase;
|
245 |
-
-webkit-transition: 0.3s ease;
|
246 |
-
-moz-transition: 0.3s ease;
|
247 |
-
-ms-transition: 0.3s ease;
|
248 |
-
-o-transition: 0.3s ease;
|
249 |
-
transition: 0.3s ease;
|
250 |
}
|
251 |
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
color: #8d9192;
|
256 |
-
font-weight: 400;
|
257 |
-
float: right;
|
258 |
-
line-height: 40px;
|
259 |
-
padding: 0;
|
260 |
-
text-decoration: underline;
|
261 |
-
text-shadow: none;
|
262 |
-
text-transform: none;
|
263 |
}
|
264 |
|
265 |
-
|
266 |
-
|
|
|
267 |
}
|
268 |
|
269 |
-
|
270 |
-
|
|
|
|
|
|
|
271 |
}
|
272 |
|
273 |
-
|
274 |
-
|
275 |
-
outline: none;
|
276 |
}
|
277 |
|
278 |
-
|
279 |
-
|
280 |
-
transform: translateY(0);
|
281 |
}
|
282 |
|
283 |
-
|
284 |
-
|
|
|
285 |
}
|
286 |
|
287 |
-
|
288 |
-
|
|
|
|
|
|
|
|
|
|
|
289 |
}
|
290 |
|
291 |
-
|
292 |
-
|
|
|
293 |
}
|
294 |
|
295 |
-
|
296 |
-
margin:
|
297 |
}
|
298 |
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
|
|
303 |
}
|
304 |
|
305 |
-
|
306 |
-
|
307 |
-
line-height: 28px;
|
308 |
-
font-size: 15px;
|
309 |
}
|
310 |
|
311 |
-
|
312 |
-
|
313 |
}
|
314 |
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
320 |
}
|
321 |
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
}
|
326 |
|
327 |
-
|
328 |
-
|
329 |
}
|
330 |
|
331 |
-
|
332 |
-
|
333 |
-
display: block;
|
334 |
-
float: none;
|
335 |
-
font-weight: 700;
|
336 |
-
line-height: 1;
|
337 |
-
padding: 0;
|
338 |
-
text-align: left;
|
339 |
-
width: 100%;
|
340 |
}
|
341 |
|
342 |
-
.<?php echo $key; ?>-container #TB_title #TB_ajaxWindowTitle span {
|
343 |
-
color: #8d9192;
|
344 |
-
display: block;
|
345 |
-
font-size: 15px;
|
346 |
-
font-weight: 400;
|
347 |
-
margin-top: 5px;
|
348 |
-
text-transform: none;
|
349 |
-
}
|
350 |
|
351 |
-
|
352 |
-
|
353 |
display: block;
|
354 |
position: absolute;
|
355 |
-
|
356 |
-
|
|
|
|
|
|
|
|
|
|
|
357 |
}
|
358 |
|
359 |
-
.
|
360 |
-
|
|
|
|
|
|
|
|
|
|
|
361 |
}
|
362 |
|
363 |
-
|
364 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
365 |
}
|
366 |
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
color: #
|
372 |
}
|
373 |
|
374 |
-
.<?php echo $key; ?>-container #TB_closeWindowButton .tb-close-icon {
|
375 |
-
text-align: right;
|
376 |
-
line-height: 25px;
|
377 |
-
width: 25px;
|
378 |
-
height: 25px;
|
379 |
-
}
|
380 |
|
381 |
-
|
382 |
-
|
383 |
-
outline: none;
|
384 |
}
|
385 |
|
386 |
-
|
387 |
-
|
388 |
}
|
389 |
|
390 |
-
body
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
bottom: 0
|
396 |
-
right: 0
|
397 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
398 |
}
|
399 |
</style>
|
400 |
<?php
|
401 |
-
do_action( $this->product->get_key() . '_uninstall_feedback_after_css' );
|
402 |
}
|
403 |
|
404 |
/**
|
405 |
-
*
|
406 |
-
*
|
407 |
-
* @param string $type The type of product.
|
408 |
-
* @param string $key The product key.
|
409 |
-
* @param string $src The url that will hijack the deactivate button url.
|
410 |
*/
|
411 |
-
function
|
412 |
-
$
|
413 |
-
$key = esc_attr( $key );
|
414 |
-
$heading = apply_filters( $this->product->get_key() . '_feedback_deactivate_heading', $heading );
|
415 |
?>
|
416 |
<script type="text/javascript" id="ti-deactivate-js">
|
417 |
(function ($) {
|
418 |
$(document).ready(function () {
|
419 |
-
|
420 |
-
|
421 |
-
<?php
|
422 |
-
if ( 'theme' === $type ) {
|
423 |
-
?>
|
424 |
-
auto_trigger = true;
|
425 |
-
if ($('a.ti-auto-anchor').length == 0) {
|
426 |
-
$('body').append($('<a class="ti-auto-anchor" href=""></a>'));
|
427 |
-
}
|
428 |
-
target_element = 'a.ti-auto-anchor';
|
429 |
-
<?php
|
430 |
-
}
|
431 |
-
?>
|
432 |
|
433 |
-
|
434 |
-
setTimeout(function () {
|
435 |
-
$('a.ti-auto-anchor').trigger('click');
|
436 |
-
}, <?php echo self::AUTO_TRIGGER_DEACTIVATE_WINDOW_SECONDS * 1000; ?> );
|
437 |
-
}
|
438 |
-
$(document).on('thickbox:removed', function () {
|
439 |
-
$.post(ajaxurl, {
|
440 |
-
'action': '<?php echo $key . '_uninstall_feedback'; ?>',
|
441 |
-
'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
|
442 |
-
'type': '<?php echo $type; ?>',
|
443 |
-
'key': '<?php echo $key; ?>'
|
444 |
-
});
|
445 |
-
});
|
446 |
-
var href = $(target_element).attr('href');
|
447 |
-
$('#<?php echo $key; ?>ti-deactivate-no').attr('data-ti-action', href).on('click', function (e) {
|
448 |
e.preventDefault();
|
449 |
-
|
450 |
-
|
451 |
-
$('body').unbind('thickbox:removed');
|
452 |
-
tb_remove();
|
453 |
-
var redirect = $(this).attr('data-ti-action');
|
454 |
-
if (redirect !== '') {
|
455 |
-
location.href = redirect;
|
456 |
-
}
|
457 |
});
|
458 |
|
459 |
-
$('
|
460 |
-
|
|
|
|
|
461 |
|
462 |
-
|
463 |
-
|
|
|
|
|
464 |
$('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
|
465 |
-
radio.parent().find('textarea').on('keyup', function (
|
466 |
if ($(this).val().length === 0) {
|
467 |
$('#<?php echo $key; ?>ti-deactivate-yes').attr('disabled', 'disabled');
|
468 |
} else {
|
@@ -473,127 +481,236 @@ class Uninstall_Feedback extends Abstract_Module {
|
|
473 |
$('#<?php echo $key; ?>ti-deactivate-yes').removeAttr('disabled');
|
474 |
}
|
475 |
});
|
476 |
-
|
477 |
-
|
478 |
-
return false;
|
479 |
-
});
|
480 |
-
$('#<?php echo $key; ?>ti-deactivate-yes').attr('data-ti-action', href).on('click', function (e) {
|
481 |
e.preventDefault();
|
482 |
e.stopPropagation();
|
|
|
|
|
|
|
483 |
$.post(ajaxurl, {
|
484 |
-
'action': '<?php echo $key . '_uninstall_feedback'; ?>',
|
485 |
'nonce': '<?php echo wp_create_nonce( (string) __CLASS__ ); ?>',
|
486 |
-
'id':
|
487 |
-
'msg':
|
488 |
-
'type': '
|
|
|
489 |
});
|
490 |
-
|
491 |
-
|
492 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
493 |
} else {
|
494 |
-
$('
|
495 |
-
tb_remove();
|
496 |
}
|
497 |
});
|
498 |
|
499 |
-
$(
|
500 |
-
|
501 |
-
|
502 |
-
|
|
|
|
|
|
|
|
|
|
|
503 |
});
|
504 |
|
505 |
-
function
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
514 |
}
|
515 |
-
}
|
516 |
-
}
|
517 |
});
|
518 |
})(jQuery);
|
|
|
519 |
</script>
|
520 |
<?php
|
521 |
-
|
522 |
do_action( $this->product->get_key() . '_uninstall_feedback_after_js' );
|
523 |
}
|
524 |
|
525 |
/**
|
526 |
-
*
|
527 |
*
|
528 |
-
* @
|
529 |
-
* @param string $key The product key.
|
530 |
*/
|
531 |
-
function
|
532 |
-
$options = Product::PLUGIN_TYPE === $type ? $this->options_plugin : $this->options_theme;
|
533 |
-
$button_cancel = Product::PLUGIN_TYPE === $type ? $this->button_cancel : 'Skip';
|
534 |
-
$button_submit = Product::PLUGIN_TYPE === $type ? $this->button_submit : 'Submit';
|
535 |
-
$options = $this->randomize_options( apply_filters( $this->product->get_key() . '_feedback_deactivate_options', $options ) );
|
536 |
-
$button_submit = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_submit', $button_submit );
|
537 |
-
$button_cancel = apply_filters( $this->product->get_key() . '_feedback_deactivate_button_cancel', $button_cancel );
|
538 |
-
|
539 |
-
$options += $this->other;
|
540 |
-
|
541 |
-
$list = '';
|
542 |
-
foreach ( $options as $title => $attributes ) {
|
543 |
-
$id = $attributes['id'];
|
544 |
-
$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>';
|
545 |
-
if ( array_key_exists( 'type', $attributes ) ) {
|
546 |
-
$list .= '<div>';
|
547 |
-
$placeholder = array_key_exists( 'placeholder', $attributes ) ? $attributes['placeholder'] : '';
|
548 |
-
switch ( $attributes['type'] ) {
|
549 |
-
case 'text':
|
550 |
-
$list .= '<textarea style="width: 100%" rows="1" name="comments" placeholder="' . $placeholder . '"></textarea>';
|
551 |
-
break;
|
552 |
-
case 'textarea':
|
553 |
-
$list .= '<textarea style="width: 100%" rows="2" name="comments" placeholder="' . $placeholder . '"></textarea>';
|
554 |
-
break;
|
555 |
-
}
|
556 |
-
$list .= '</div>';
|
557 |
-
}
|
558 |
-
$list .= '</li>';
|
559 |
-
}
|
560 |
-
|
561 |
$disclosure_new_labels = apply_filters( $this->product->get_slug() . '_themeisle_sdk_disclosure_content_labels', [], $this->product );
|
562 |
$disclosure_labels = array_merge(
|
563 |
[
|
564 |
'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.',
|
565 |
'items' => [
|
566 |
sprintf( '%s %s version %s %s %s %s', '<strong>', ucwords( $this->product->get_type() ), '</strong>', '<code>', $this->product->get_version(), '</code>' ),
|
567 |
-
sprintf( '%s Uninstall reason %s %s Selected
|
568 |
],
|
569 |
],
|
570 |
$disclosure_new_labels
|
571 |
);
|
572 |
|
573 |
-
$
|
574 |
-
$info_disclosure_content = '<div id="' . $this->product->get_key() . '-info-disclosure-content"><p>' . wp_kses_post( $disclosure_labels['title'] ) . '</p><ul>';
|
575 |
foreach ( $disclosure_labels['items'] as $disclosure_item ) {
|
576 |
$info_disclosure_content .= sprintf( '<li>%s</li>', wp_kses_post( $disclosure_item ) );
|
577 |
}
|
578 |
$info_disclosure_content .= '</ul></div>';
|
579 |
|
580 |
-
return
|
581 |
-
'<div id="' . $this->product->get_key() . '"><ul class="ti-list">' . $list . '</ul>'
|
582 |
-
. $info_disclosure_content
|
583 |
-
. '<div class="actions">'
|
584 |
-
. get_submit_button(
|
585 |
-
$button_submit,
|
586 |
-
'secondary',
|
587 |
-
$this->product->get_key() . 'ti-deactivate-yes',
|
588 |
-
false,
|
589 |
-
array(
|
590 |
-
'data-after-text' => $button_submit,
|
591 |
-
'disabled' => true,
|
592 |
-
)
|
593 |
-
)
|
594 |
-
. wp_kses_post( $info_disclosure_link )
|
595 |
-
. get_submit_button( $button_cancel, 'primary', $this->product->get_key() . 'ti-deactivate-no', false )
|
596 |
-
. '</div></div>';
|
597 |
}
|
598 |
|
599 |
/**
|
@@ -719,6 +836,11 @@ class Uninstall_Feedback extends Abstract_Module {
|
|
719 |
* @return Uninstall_Feedback Current module instance.
|
720 |
*/
|
721 |
public function load( $product ) {
|
|
|
|
|
|
|
|
|
|
|
722 |
$this->product = $product;
|
723 |
add_action( 'admin_head', array( $this, 'load_resources' ) );
|
724 |
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 |
*
|
133 |
* Loads the additional resources
|
134 |
*/
|
135 |
function load_resources() {
|
136 |
+
$screen = get_current_screen();
|
137 |
+
|
138 |
+
if ( ! $screen || ! in_array( $screen->id, array( 'theme-install', 'plugins' ) ) ) {
|
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 ComposerAutoloaderInitc85f2341c5e1e808367485f99d9b60a0
|
|
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) {
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInit404e6133548e50f4181f8af5f995d16a
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
19 |
return self::$loader;
|
20 |
}
|
21 |
|
22 |
+
spl_autoload_register(array('ComposerAutoloaderInit404e6133548e50f4181f8af5f995d16a', 'loadClassLoader'), true, true);
|
23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit404e6133548e50f4181f8af5f995d16a', 'loadClassLoader'));
|
25 |
|
26 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
27 |
foreach ($map as $namespace => $path) {
|
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.8",
|
5 |
+
"version_normalized": "3.1.8.0",
|
6 |
"source": {
|
7 |
"type": "git",
|
8 |
"url": "https://github.com/Codeinwp/themeisle-sdk.git",
|
9 |
+
"reference": "d036ec8dd9ad318a05af3f21222025ec6a389a42"
|
10 |
},
|
11 |
"dist": {
|
12 |
"type": "zip",
|
13 |
+
"url": "https://api.github.com/repos/Codeinwp/themeisle-sdk/zipball/d036ec8dd9ad318a05af3f21222025ec6a389a42",
|
14 |
+
"reference": "d036ec8dd9ad318a05af3f21222025ec6a389a42",
|
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-18 12:33:19",
|
23 |
"type": "library",
|
24 |
"installation-source": "dist",
|
25 |
"notification-url": "https://packagist.org/downloads/",
|