Version Description
- 2019-12-07
Download this release
Release Info
| Developer | codeinwp |
| Plugin | |
| 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/",
|
