Version Description
- Few minor bugfix and improvements
Download this release
Release Info
| Developer | re_enter_rupok |
| Plugin | |
| Version | 2.9.2 |
| Comparing to | |
| See all releases | |
Code changes from version 2.9.1 to 2.9.2
- admin/assets/css/admin.css +3 -0
- admin/assets/css/eael-notice.css +3 -0
- admin/partials/version-control.php +1 -1
- admin/settings.php +0 -0
- assets/css/essential-addons-elementor.css +0 -3
- assets/js/eael-scripts.js +0 -0
- assets/sass/_progress-bar.scss +0 -0
- assets/sass/_woo-products.scss +0 -0
- assets/sass/essential-addons-elementor.scss +0 -0
- elements/filterable-gallery/filterable-gallery.php +0 -0
- elements/product-grid/product-grid.php +0 -0
- essential_adons_elementor.php +5 -4
- includes/class-plugin-usage-tracker.php +3 -7
- includes/class-wpdev-core-install.php +1 -10
- includes/class-wpdev-notices.php +164 -70
- includes/eael-rollback.php +3 -0
- readme.txt +5 -1
admin/assets/css/admin.css
CHANGED
|
@@ -601,4 +601,7 @@ textarea.eael-form-control {
|
|
| 601 |
}
|
| 602 |
#eael_plugins_versions {
|
| 603 |
height: 36px;
|
|
|
|
|
|
|
|
|
|
| 604 |
}
|
| 601 |
}
|
| 602 |
#eael_plugins_versions {
|
| 603 |
height: 36px;
|
| 604 |
+
}
|
| 605 |
+
.eael-notice-text {
|
| 606 |
+
padding-left: 10px;
|
| 607 |
}
|
admin/assets/css/eael-notice.css
CHANGED
|
@@ -74,6 +74,9 @@
|
|
| 74 |
top: -2px;
|
| 75 |
}
|
| 76 |
|
|
|
|
|
|
|
|
|
|
| 77 |
.wpdeveloper-upsale-notice .wpdeveloper-notice-message {
|
| 78 |
display: flex;
|
| 79 |
align-items: center;
|
| 74 |
top: -2px;
|
| 75 |
}
|
| 76 |
|
| 77 |
+
.wpdeveloper-notice-message {
|
| 78 |
+
padding: 10px 0;
|
| 79 |
+
}
|
| 80 |
.wpdeveloper-upsale-notice .wpdeveloper-notice-message {
|
| 81 |
display: flex;
|
| 82 |
align-items: center;
|
admin/partials/version-control.php
CHANGED
|
@@ -44,7 +44,7 @@
|
|
| 44 |
</g>
|
| 45 |
</svg>
|
| 46 |
</div>
|
| 47 |
-
<
|
| 48 |
</div>
|
| 49 |
</div>
|
| 50 |
</div>
|
| 44 |
</g>
|
| 45 |
</svg>
|
| 46 |
</div>
|
| 47 |
+
<p class="eael-notice-text">Usually you should not loose any data on the rollback process. But it's always good to have a backup of your database.</p>
|
| 48 |
</div>
|
| 49 |
</div>
|
| 50 |
</div>
|
admin/settings.php
CHANGED
|
File without changes
|
assets/css/essential-addons-elementor.css
CHANGED
|
@@ -7444,6 +7444,3 @@ a.eael-gallery-load-more, a.eael-gallery-load-more:hover {
|
|
| 7444 |
transform: none;
|
| 7445 |
}
|
| 7446 |
}
|
| 7447 |
-
.elementor-section .elementor-container {
|
| 7448 |
-
z-index: 99;
|
| 7449 |
-
}
|
| 7444 |
transform: none;
|
| 7445 |
}
|
| 7446 |
}
|
|
|
|
|
|
|
|
|
assets/js/eael-scripts.js
CHANGED
|
File without changes
|
assets/sass/_progress-bar.scss
CHANGED
|
File without changes
|
assets/sass/_woo-products.scss
CHANGED
|
File without changes
|
assets/sass/essential-addons-elementor.scss
CHANGED
|
File without changes
|
elements/filterable-gallery/filterable-gallery.php
CHANGED
|
File without changes
|
elements/product-grid/product-grid.php
CHANGED
|
File without changes
|
essential_adons_elementor.php
CHANGED
|
@@ -4,7 +4,7 @@
|
|
| 4 |
* Description: The ultimate elements library for Elementor page builder plugin for WordPress.
|
| 5 |
* Plugin URI: https://essential-addons.com/elementor/
|
| 6 |
* Author: WPDeveloper
|
| 7 |
-
* Version: 2.9.
|
| 8 |
* Author URI: https://wpdeveloper.net/
|
| 9 |
*
|
| 10 |
* Text Domain: essential-addons-elementor
|
|
@@ -16,8 +16,8 @@ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
|
|
| 16 |
define( 'ESSENTIAL_ADDONS_EL_URL', plugins_url( '/', __FILE__ ) );
|
| 17 |
define( 'ESSENTIAL_ADDONS_EL_PATH', plugin_dir_path( __FILE__ ) );
|
| 18 |
define( 'ESSENTIAL_ADDONS_EL_ROOT', __FILE__ );
|
| 19 |
-
define( 'ESSENTIAL_ADDONS_VERSION', '2.9.
|
| 20 |
-
define( 'ESSENTIAL_ADDONS_STABLE_VERSION', '2.9.
|
| 21 |
define( 'ESSENTIAL_ADDONS_BASENAME', plugin_basename( __FILE__ ) );
|
| 22 |
|
| 23 |
|
|
@@ -369,4 +369,5 @@ function eael_init() {
|
|
| 369 |
add_action( 'admin_notices', 'eael_is_failed_to_load' );
|
| 370 |
}
|
| 371 |
}
|
| 372 |
-
add_action( 'plugins_loaded', 'eael_init' );
|
|
|
| 4 |
* Description: The ultimate elements library for Elementor page builder plugin for WordPress.
|
| 5 |
* Plugin URI: https://essential-addons.com/elementor/
|
| 6 |
* Author: WPDeveloper
|
| 7 |
+
* Version: 2.9.2
|
| 8 |
* Author URI: https://wpdeveloper.net/
|
| 9 |
*
|
| 10 |
* Text Domain: essential-addons-elementor
|
| 16 |
define( 'ESSENTIAL_ADDONS_EL_URL', plugins_url( '/', __FILE__ ) );
|
| 17 |
define( 'ESSENTIAL_ADDONS_EL_PATH', plugin_dir_path( __FILE__ ) );
|
| 18 |
define( 'ESSENTIAL_ADDONS_EL_ROOT', __FILE__ );
|
| 19 |
+
define( 'ESSENTIAL_ADDONS_VERSION', '2.9.1' );
|
| 20 |
+
define( 'ESSENTIAL_ADDONS_STABLE_VERSION', '2.9.1' );
|
| 21 |
define( 'ESSENTIAL_ADDONS_BASENAME', plugin_basename( __FILE__ ) );
|
| 22 |
|
| 23 |
|
| 369 |
add_action( 'admin_notices', 'eael_is_failed_to_load' );
|
| 370 |
}
|
| 371 |
}
|
| 372 |
+
add_action( 'plugins_loaded', 'eael_init' );
|
| 373 |
+
require_once dirname( __FILE__ ) . '/includes/class-wpdev-notices.php';
|
includes/class-plugin-usage-tracker.php
CHANGED
|
@@ -85,7 +85,7 @@ if( ! class_exists( 'Eael_Plugin_Usage_Tracker') ) {
|
|
| 85 |
// add_action( 'admin_init', array( $this, 'do_tracking' ) );
|
| 86 |
|
| 87 |
// Display the admin notice on activation
|
| 88 |
-
|
| 89 |
add_action( 'admin_notices', array( $this, 'marketing_notice' ) );
|
| 90 |
|
| 91 |
// Deactivation
|
|
@@ -622,10 +622,9 @@ if( ! class_exists( 'Eael_Plugin_Usage_Tracker') ) {
|
|
| 622 |
$notice_text = __( 'Want to help make <strong>Essential Addons for Elementor</strong> even more awesome? You can get a <strong>25% discount coupon</strong> for Pro upgrade if you allow. <a class="insights-data-we-collect" href="#">What we collect.</a>', 'plugin-usage-tracker' );
|
| 623 |
}
|
| 624 |
// And we allow you to filter the text anyway
|
| 625 |
-
// ob_start();
|
| 626 |
$notice_text = apply_filters( 'wisdom_notice_text_' . esc_attr( $this->plugin_name ), $notice_text ); ?>
|
| 627 |
|
| 628 |
-
|
| 629 |
<p><?php echo __( $notice_text ); ?></p>
|
| 630 |
<div class="eael-insights-data" style="display: none;">
|
| 631 |
<p><?php echo __( 'We collect non-sensitive diagnostic data and plugin usage information. Your site URL, WordPress & PHP version, plugins & themes and email address to send you the discount coupon. This data lets us make sure this plugin always stays compatible with the most popular plugins and themes. No spam, I promise.' ); ?></p>
|
|
@@ -639,13 +638,10 @@ if( ! class_exists( 'Eael_Plugin_Usage_Tracker') ) {
|
|
| 639 |
jQuery('.eael-insights-data').slideToggle('fast');
|
| 640 |
});
|
| 641 |
</script>";?>
|
| 642 |
-
|
| 643 |
<?php
|
| 644 |
-
// echo ob_get_clean();
|
| 645 |
}
|
| 646 |
-
|
| 647 |
}
|
| 648 |
-
|
| 649 |
/**
|
| 650 |
* Display the marketing notice to users if enabled
|
| 651 |
* Only displays after the user has opted in to tracking
|
| 85 |
// add_action( 'admin_init', array( $this, 'do_tracking' ) );
|
| 86 |
|
| 87 |
// Display the admin notice on activation
|
| 88 |
+
add_action( 'wpdeveloper_notices', array( $this, 'optin_notice' ) );
|
| 89 |
add_action( 'admin_notices', array( $this, 'marketing_notice' ) );
|
| 90 |
|
| 91 |
// Deactivation
|
| 622 |
$notice_text = __( 'Want to help make <strong>Essential Addons for Elementor</strong> even more awesome? You can get a <strong>25% discount coupon</strong> for Pro upgrade if you allow. <a class="insights-data-we-collect" href="#">What we collect.</a>', 'plugin-usage-tracker' );
|
| 623 |
}
|
| 624 |
// And we allow you to filter the text anyway
|
|
|
|
| 625 |
$notice_text = apply_filters( 'wisdom_notice_text_' . esc_attr( $this->plugin_name ), $notice_text ); ?>
|
| 626 |
|
| 627 |
+
<div class="notice notice-info updated put-dismiss-notice">
|
| 628 |
<p><?php echo __( $notice_text ); ?></p>
|
| 629 |
<div class="eael-insights-data" style="display: none;">
|
| 630 |
<p><?php echo __( 'We collect non-sensitive diagnostic data and plugin usage information. Your site URL, WordPress & PHP version, plugins & themes and email address to send you the discount coupon. This data lets us make sure this plugin always stays compatible with the most popular plugins and themes. No spam, I promise.' ); ?></p>
|
| 638 |
jQuery('.eael-insights-data').slideToggle('fast');
|
| 639 |
});
|
| 640 |
</script>";?>
|
| 641 |
+
</div>
|
| 642 |
<?php
|
|
|
|
| 643 |
}
|
|
|
|
| 644 |
}
|
|
|
|
| 645 |
/**
|
| 646 |
* Display the marketing notice to users if enabled
|
| 647 |
* Only displays after the user has opted in to tracking
|
includes/class-wpdev-core-install.php
CHANGED
|
@@ -23,14 +23,6 @@ if ( ! class_exists( 'WPDeveloper_Core_Installer' ) ) :
|
|
| 23 |
}
|
| 24 |
add_action( 'wp_ajax_wpdeveloper_upsale_core_install', array( $this, 'core_install' ) );
|
| 25 |
}
|
| 26 |
-
/**
|
| 27 |
-
* Show the plugin installation notice
|
| 28 |
-
*
|
| 29 |
-
* @return void
|
| 30 |
-
*/
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
/**
|
| 35 |
* Fail if plugin installtion/activation fails
|
| 36 |
*
|
|
@@ -45,7 +37,7 @@ if ( ! class_exists( 'WPDeveloper_Core_Installer' ) ) :
|
|
| 45 |
}
|
| 46 |
|
| 47 |
/**
|
| 48 |
-
* Install
|
| 49 |
*
|
| 50 |
* @return void
|
| 51 |
*/
|
|
@@ -68,7 +60,6 @@ if ( ! class_exists( 'WPDeveloper_Core_Installer' ) ) :
|
|
| 68 |
|
| 69 |
wp_send_json_success();
|
| 70 |
}
|
| 71 |
-
|
| 72 |
/**
|
| 73 |
* Install and activate a plugin
|
| 74 |
*
|
| 23 |
}
|
| 24 |
add_action( 'wp_ajax_wpdeveloper_upsale_core_install', array( $this, 'core_install' ) );
|
| 25 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
/**
|
| 27 |
* Fail if plugin installtion/activation fails
|
| 28 |
*
|
| 37 |
}
|
| 38 |
|
| 39 |
/**
|
| 40 |
+
* Install Upsale Plugin
|
| 41 |
*
|
| 42 |
* @return void
|
| 43 |
*/
|
| 60 |
|
| 61 |
wp_send_json_success();
|
| 62 |
}
|
|
|
|
| 63 |
/**
|
| 64 |
* Install and activate a plugin
|
| 65 |
*
|
includes/class-wpdev-notices.php
CHANGED
|
@@ -6,10 +6,9 @@ class WPDeveloper_Notice {
|
|
| 6 |
* @var array
|
| 7 |
*/
|
| 8 |
const ADMIN_UPDATE_NOTICE_KEY = 'wpdeveloper_notices_seen';
|
| 9 |
-
public $
|
| 10 |
/**
|
| 11 |
* All Data
|
| 12 |
-
*
|
| 13 |
* @var array
|
| 14 |
*/
|
| 15 |
private $data = array();
|
|
@@ -26,29 +25,23 @@ class WPDeveloper_Notice {
|
|
| 26 |
*/
|
| 27 |
public $cne_time = '2 day';
|
| 28 |
public $maybe_later_time = '7 day';
|
| 29 |
-
/**
|
| 30 |
-
* Is the notice is dismissible?
|
| 31 |
-
*
|
| 32 |
-
* @var boolean
|
| 33 |
-
*/
|
| 34 |
-
private $is_dismissible = true;
|
| 35 |
/**
|
| 36 |
* Plugin Name
|
| 37 |
*
|
| 38 |
* @var string
|
| 39 |
*/
|
| 40 |
private $plugin_name;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
/**
|
| 42 |
* First Install Version Of The Plugin
|
| 43 |
*
|
| 44 |
* @var string
|
| 45 |
*/
|
| 46 |
private $version;
|
| 47 |
-
/**
|
| 48 |
-
* URL Data Args
|
| 49 |
-
* @var array
|
| 50 |
-
*/
|
| 51 |
-
private $data_args;
|
| 52 |
/**
|
| 53 |
* Saved Data in DB
|
| 54 |
* @var array
|
|
@@ -66,7 +59,6 @@ class WPDeveloper_Notice {
|
|
| 66 |
*/
|
| 67 |
public $options_args = array(
|
| 68 |
// 'first_install' => true,
|
| 69 |
-
// 'next_notice_time' => '',
|
| 70 |
// 'notice_seen' => [
|
| 71 |
// 'opt_in' => false,
|
| 72 |
// 'first_install' => false,
|
|
@@ -98,26 +90,31 @@ class WPDeveloper_Notice {
|
|
| 98 |
* @param string $plugin_name
|
| 99 |
* @param string $version
|
| 100 |
*/
|
| 101 |
-
public function __construct( $
|
| 102 |
-
$this->
|
|
|
|
| 103 |
$this->version = $version;
|
| 104 |
$this->timestamp = current_time( 'timestamp' );
|
| 105 |
$this->notice_id = 'wpdeveloper_notice_' . str_replace( '.', '_', $this->version );
|
| 106 |
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
if ( ! function_exists( 'get_plugins' ) ) {
|
| 110 |
-
require_once ABSPATH . 'wp-admin/includes/plugin.php';
|
| 111 |
-
}
|
| 112 |
-
if( ! function_exists( 'wp_get_current_user' ) ) {
|
| 113 |
-
require_once ABSPATH . 'wp-includes/pluggable.php';
|
| 114 |
}
|
| 115 |
}
|
| 116 |
-
|
|
|
|
|
|
|
|
|
|
| 117 |
public function init(){
|
| 118 |
-
add_action( '
|
| 119 |
-
add_action( 'upgrader_process_complete', array( $this, 'upgrade_completed' ), 10, 2);
|
| 120 |
add_action( 'deactivate_' . $this->plugin_name, array( $this, 'first_install_end' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 121 |
add_action( 'wp_ajax_wpdeveloper_upsale_notice_dissmiss', array( $this, 'upsale_notice_dissmiss' ) );
|
| 122 |
add_action( 'wpdeveloper_before_notice', array( $this, 'before' ) );
|
| 123 |
add_action( 'wpdeveloper_after_notice', array( $this, 'after' ) );
|
|
@@ -125,10 +122,18 @@ class WPDeveloper_Notice {
|
|
| 125 |
add_action( 'wpdeveloper_after_upsale_notice', array( $this, 'after' ) );
|
| 126 |
add_action( 'wpdeveloper_notices', array( $this, 'content' ) );
|
| 127 |
if( current_user_can( 'install_plugins' ) ) {
|
| 128 |
-
$this
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 129 |
$current_notice = $this->next_notice();
|
|
|
|
| 130 |
$deserve_notice = $this->deserve_notice( $current_notice );
|
| 131 |
$options_data = $this->get_options_data();
|
|
|
|
| 132 |
|
| 133 |
$notice_time = isset( $options_data[ $this->plugin_name ]['notice_will_show'][ $current_notice ] )
|
| 134 |
? $options_data[ $this->plugin_name ]['notice_will_show'][ $current_notice ] : $this->timestamp;
|
|
@@ -167,16 +172,26 @@ class WPDeveloper_Notice {
|
|
| 167 |
}
|
| 168 |
}
|
| 169 |
}
|
| 170 |
-
|
| 171 |
}
|
| 172 |
-
|
| 173 |
}
|
| 174 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 175 |
public function makeTime( $current, $time ) {
|
| 176 |
return strtotime( date('Y-m-d H:i:s', $current) . " +$time" );
|
| 177 |
}
|
| 178 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 179 |
private function maybe_later( $notice ){
|
|
|
|
|
|
|
|
|
|
| 180 |
$options_data = $this->get_options_data();
|
| 181 |
$options_data[ $this->plugin_name ]['notice_will_show'][ $notice ] = $this->makeTime( $this->timestamp, $this->maybe_later_time );
|
| 182 |
$this->update_options_data( $options_data[ $this->plugin_name ] );
|
|
@@ -186,19 +201,23 @@ class WPDeveloper_Notice {
|
|
| 186 |
* @return void
|
| 187 |
*/
|
| 188 |
public function clicked(){
|
| 189 |
-
if( ! isset( $_GET['
|
| 190 |
-
|
| 191 |
-
}
|
| 192 |
-
if( isset( $_GET['
|
| 193 |
$options_data = $this->get_options_data();
|
| 194 |
$clicked_from = $this->next_notice();
|
| 195 |
extract($_GET);
|
| 196 |
|
| 197 |
$later_time = '';
|
| 198 |
|
|
|
|
|
|
|
|
|
|
| 199 |
switch( $clicked_from ) {
|
| 200 |
|
| 201 |
case 'opt_in' :
|
|
|
|
| 202 |
$later_time = $this->makeTime( $this->timestamp, $this->maybe_later_time );
|
| 203 |
break;
|
| 204 |
|
|
@@ -217,7 +236,6 @@ class WPDeveloper_Notice {
|
|
| 217 |
case 'upsale' :
|
| 218 |
$later_time = $this->makeTime( $this->timestamp, $this->maybe_later_time );
|
| 219 |
break;
|
| 220 |
-
|
| 221 |
}
|
| 222 |
|
| 223 |
if( isset( $later ) && $later == true ) {
|
|
@@ -229,13 +247,34 @@ class WPDeveloper_Notice {
|
|
| 229 |
$user_notices = [];
|
| 230 |
}
|
| 231 |
$user_notices[ $this->notice_id ][ $this->plugin_name ][] = $clicked_from;
|
| 232 |
-
|
| 233 |
update_user_meta( get_current_user_id(), self::ADMIN_UPDATE_NOTICE_KEY, $user_notices);
|
| 234 |
}
|
| 235 |
$this->update_options_data( $options_data[ $this->plugin_name ] );
|
| 236 |
-
wp_safe_redirect( $this->redirect_url );
|
| 237 |
}
|
| 238 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 239 |
/**
|
| 240 |
* Before Notice
|
| 241 |
* @return void
|
|
@@ -273,8 +312,6 @@ class WPDeveloper_Notice {
|
|
| 273 |
switch( $notice ) {
|
| 274 |
case 'opt_in' :
|
| 275 |
do_action('wpdeveloper_optin_notice');
|
| 276 |
-
$this->get_thumbnail( 'opt_in' );
|
| 277 |
-
$this->get_message( 'opt_in' );
|
| 278 |
break;
|
| 279 |
case 'first_install' :
|
| 280 |
if( $options_data[ $this->plugin_name ]['first_install'] !== 'deactivated' ) {
|
|
@@ -306,6 +343,9 @@ class WPDeveloper_Notice {
|
|
| 306 |
}
|
| 307 |
echo '<div class="error notice is-dismissible wpdeveloper-upsale-notice '. $classes .'">';
|
| 308 |
}
|
|
|
|
|
|
|
|
|
|
| 309 |
public function upsale_notice(){
|
| 310 |
do_action( 'wpdeveloper_before_upsale_notice' );
|
| 311 |
do_action('wpdeveloper_upsale_notice');
|
|
@@ -314,19 +354,23 @@ class WPDeveloper_Notice {
|
|
| 314 |
do_action( 'wpdeveloper_after_upsale_notice' );
|
| 315 |
$this->upsale_button_script();
|
| 316 |
}
|
| 317 |
-
|
|
|
|
|
|
|
|
|
|
| 318 |
private function get_upsale_args(){
|
| 319 |
-
return $this->upsale_args;
|
| 320 |
}
|
| 321 |
-
|
|
|
|
|
|
|
| 322 |
private function upsale_button(){
|
| 323 |
$upsale_args = $this->get_upsale_args();
|
| 324 |
$plugin_slug = ( isset( $upsale_args['slug'] )) ? $upsale_args['slug'] : '' ;
|
| 325 |
if( empty( $plugin_slug ) ) {
|
| 326 |
return;
|
| 327 |
}
|
| 328 |
-
|
| 329 |
-
echo '<button data-slug="'. $plugin_slug .'" id="plugin-install-core" class="button button-primary">'. __( 'Install Now!' ) .'</button>';
|
| 330 |
}
|
| 331 |
/**
|
| 332 |
* This methods is responsible for get notice image.
|
|
@@ -358,7 +402,6 @@ class WPDeveloper_Notice {
|
|
| 358 |
}
|
| 359 |
return false;
|
| 360 |
}
|
| 361 |
-
|
| 362 |
/**
|
| 363 |
* This method is responsible for get messages.
|
| 364 |
*
|
|
@@ -388,7 +431,6 @@ class WPDeveloper_Notice {
|
|
| 388 |
} else {
|
| 389 |
$return_notice = $options_data[ $this->plugin_name ]['notice_will_show'];
|
| 390 |
}
|
| 391 |
-
|
| 392 |
$deserve_notice_timestamp = INF;
|
| 393 |
$deserve_notice = '';
|
| 394 |
foreach( $return_notice as $notice => $timestamp ) {
|
|
@@ -399,7 +441,11 @@ class WPDeveloper_Notice {
|
|
| 399 |
}
|
| 400 |
return $deserve_notice;
|
| 401 |
}
|
| 402 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 403 |
private function deserve_notice( $notice ) {
|
| 404 |
$notices = $this->get_user_notices();
|
| 405 |
if( empty( $notices ) ) {
|
|
@@ -408,18 +454,25 @@ class WPDeveloper_Notice {
|
|
| 408 |
if( isset( $notices[ $this->notice_id ] ) && isset( $notices[ $this->notice_id ][ $this->plugin_name ] ) ) {
|
| 409 |
if( in_array( $notice, $notices[ $this->notice_id ][ $this->plugin_name ] ) ) {
|
| 410 |
return false;
|
|
|
|
|
|
|
| 411 |
}
|
| 412 |
} else {
|
| 413 |
return true;
|
| 414 |
}
|
| 415 |
}
|
| 416 |
}
|
| 417 |
-
|
| 418 |
/**
|
| 419 |
* This is the main methods for generate the notice.
|
| 420 |
* @return void
|
| 421 |
*/
|
| 422 |
public function admin_notices(){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 423 |
do_action( 'wpdeveloper_before_notice' );
|
| 424 |
do_action( 'wpdeveloper_notices' );
|
| 425 |
do_action( 'wpdeveloper_after_notice' );
|
|
@@ -447,7 +500,7 @@ class WPDeveloper_Notice {
|
|
| 447 |
foreach( $link_value['data_args'] as $key => $args_value ) {
|
| 448 |
$data_args[ $key ] = $args_value;
|
| 449 |
}
|
| 450 |
-
$data_args[ '
|
| 451 |
$normal_link = add_query_arg( $data_args, $link );
|
| 452 |
$link = wp_nonce_url( $normal_link, 'wpdeveloper-nonce' );
|
| 453 |
}
|
|
@@ -476,19 +529,22 @@ class WPDeveloper_Notice {
|
|
| 476 |
}
|
| 477 |
/**
|
| 478 |
* First Installation Track
|
| 479 |
-
*
|
| 480 |
* @return void
|
| 481 |
*/
|
| 482 |
public function first_install_track( $args = array() ){
|
|
|
|
|
|
|
|
|
|
| 483 |
if( empty( $args ) ) {
|
| 484 |
$args = array(
|
| 485 |
'time' => $this->timestamp,
|
|
|
|
| 486 |
);
|
| 487 |
}
|
| 488 |
$options_data = $this->get_options_data();
|
| 489 |
$args = wp_parse_args( $args, $this->get_args() );
|
| 490 |
-
|
| 491 |
-
|
| 492 |
$this->update_options_data( $args );
|
| 493 |
}
|
| 494 |
}
|
|
@@ -558,7 +614,11 @@ class WPDeveloper_Notice {
|
|
| 558 |
$this->data[ $name ][ $values[0] ] = $values[1];
|
| 559 |
}
|
| 560 |
}
|
| 561 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 562 |
private function get_args( $key = '' ){
|
| 563 |
if( empty( $key ) ) {
|
| 564 |
return $this->options_args;
|
|
@@ -570,18 +630,37 @@ class WPDeveloper_Notice {
|
|
| 570 |
|
| 571 |
return false;
|
| 572 |
}
|
| 573 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 574 |
public function upgrade_completed( $upgrader_object, $options ) {
|
| 575 |
// If an update has taken place and the updated type is plugins and the plugins element exists
|
| 576 |
-
if( $options['action']
|
| 577 |
-
|
| 578 |
-
|
| 579 |
-
|
| 580 |
-
|
| 581 |
-
|
| 582 |
-
) );
|
| 583 |
}
|
| 584 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 585 |
}
|
| 586 |
}
|
| 587 |
/**
|
|
@@ -591,25 +670,32 @@ class WPDeveloper_Notice {
|
|
| 591 |
private function get_user_notices() {
|
| 592 |
return get_user_meta( get_current_user_id(), self::ADMIN_UPDATE_NOTICE_KEY, true );
|
| 593 |
}
|
| 594 |
-
|
|
|
|
|
|
|
|
|
|
| 595 |
public function upsale_notice_dissmiss(){
|
| 596 |
-
|
| 597 |
-
|
| 598 |
if( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['_wpnonce'] ) ), 'wpdeveloper_upsale_notice_dissmiss' ) ) {
|
| 599 |
return;
|
| 600 |
}
|
| 601 |
-
|
| 602 |
if( ! isset( $_POST['action'] ) || ( $_POST['action'] !== 'wpdeveloper_upsale_notice_dissmiss' ) ) {
|
| 603 |
return;
|
| 604 |
}
|
| 605 |
|
|
|
|
| 606 |
if( $dismiss ) {
|
| 607 |
$user_notices = $this->get_user_notices();
|
| 608 |
if( ! $user_notices ) {
|
| 609 |
$user_notices = [];
|
| 610 |
}
|
| 611 |
$user_notices[ $this->notice_id ][ $this->plugin_name ][] = 'upsale';
|
| 612 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 613 |
update_user_meta( get_current_user_id(), self::ADMIN_UPDATE_NOTICE_KEY, $user_notices);
|
| 614 |
echo 'success';
|
| 615 |
} else {
|
|
@@ -617,7 +703,12 @@ class WPDeveloper_Notice {
|
|
| 617 |
}
|
| 618 |
die();
|
| 619 |
}
|
| 620 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 621 |
public function upsale_button_script(){
|
| 622 |
$upsale_args = $this->get_upsale_args();
|
| 623 |
|
|
@@ -752,10 +843,9 @@ $notice->thumbnail( 'review', plugins_url( 'admin/assets/images/ea-logo.svg', ES
|
|
| 752 |
|
| 753 |
/**
|
| 754 |
* Current Notice End Time.
|
| 755 |
-
* Notice will dismiss in
|
| 756 |
*/
|
| 757 |
$notice->cne_time = '3 Day';
|
| 758 |
-
$notice->redirect_url = admin_url( 'admin.php?page=eael-settings' );
|
| 759 |
/**
|
| 760 |
* Current Notice Maybe Later Time.
|
| 761 |
* Notice will show again in 7 days
|
|
@@ -768,12 +858,16 @@ $notice->upsale_args = array(
|
|
| 768 |
'file' => 'wp-scheduled-posts.php'
|
| 769 |
);
|
| 770 |
|
|
|
|
|
|
|
| 771 |
$notice->options_args = array(
|
| 772 |
'notice_seen' => [
|
| 773 |
'review' => false,
|
| 774 |
'upsale' => false,
|
|
|
|
| 775 |
],
|
| 776 |
'notice_will_show' => [
|
|
|
|
| 777 |
'review' => $notice->makeTime( $notice->timestamp, '4 Day' ), // after 4 days
|
| 778 |
'upsale' => $notice->makeTime( $notice->timestamp, '2 Hour' ), // will be after 2 hours
|
| 779 |
]
|
| 6 |
* @var array
|
| 7 |
*/
|
| 8 |
const ADMIN_UPDATE_NOTICE_KEY = 'wpdeveloper_notices_seen';
|
| 9 |
+
public $text_domain = 'wpdeveloper-notice-text-domain';
|
| 10 |
/**
|
| 11 |
* All Data
|
|
|
|
| 12 |
* @var array
|
| 13 |
*/
|
| 14 |
private $data = array();
|
| 25 |
*/
|
| 26 |
public $cne_time = '2 day';
|
| 27 |
public $maybe_later_time = '7 day';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
/**
|
| 29 |
* Plugin Name
|
| 30 |
*
|
| 31 |
* @var string
|
| 32 |
*/
|
| 33 |
private $plugin_name;
|
| 34 |
+
/**
|
| 35 |
+
* Plugin File Name
|
| 36 |
+
* @var string
|
| 37 |
+
*/
|
| 38 |
+
private $plugin_file;
|
| 39 |
/**
|
| 40 |
* First Install Version Of The Plugin
|
| 41 |
*
|
| 42 |
* @var string
|
| 43 |
*/
|
| 44 |
private $version;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
/**
|
| 46 |
* Saved Data in DB
|
| 47 |
* @var array
|
| 59 |
*/
|
| 60 |
public $options_args = array(
|
| 61 |
// 'first_install' => true,
|
|
|
|
| 62 |
// 'notice_seen' => [
|
| 63 |
// 'opt_in' => false,
|
| 64 |
// 'first_install' => false,
|
| 90 |
* @param string $plugin_name
|
| 91 |
* @param string $version
|
| 92 |
*/
|
| 93 |
+
public function __construct( $plugin_file = '', $version = '' ) {
|
| 94 |
+
$this->plugin_file = $plugin_file;
|
| 95 |
+
$this->plugin_name = basename( $plugin_file, '.php' );
|
| 96 |
$this->version = $version;
|
| 97 |
$this->timestamp = current_time( 'timestamp' );
|
| 98 |
$this->notice_id = 'wpdeveloper_notice_' . str_replace( '.', '_', $this->version );
|
| 99 |
|
| 100 |
+
if( ! class_exists( 'WPDeveloper_Core_Installer' ) ) {
|
| 101 |
+
require_once dirname( __FILE__ ) . '/class-wpdev-core-install.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 102 |
}
|
| 103 |
}
|
| 104 |
+
/**
|
| 105 |
+
* Initiate The Plugin
|
| 106 |
+
* @return void
|
| 107 |
+
*/
|
| 108 |
public function init(){
|
| 109 |
+
add_action( 'init', array( $this, 'first_install_track') );
|
|
|
|
| 110 |
add_action( 'deactivate_' . $this->plugin_name, array( $this, 'first_install_end' ) );
|
| 111 |
+
add_action( 'init', array( $this, 'hooks' ) );
|
| 112 |
+
}
|
| 113 |
+
/**
|
| 114 |
+
* All Hooks
|
| 115 |
+
* @return void
|
| 116 |
+
*/
|
| 117 |
+
public function hooks(){
|
| 118 |
add_action( 'wp_ajax_wpdeveloper_upsale_notice_dissmiss', array( $this, 'upsale_notice_dissmiss' ) );
|
| 119 |
add_action( 'wpdeveloper_before_notice', array( $this, 'before' ) );
|
| 120 |
add_action( 'wpdeveloper_after_notice', array( $this, 'after' ) );
|
| 122 |
add_action( 'wpdeveloper_after_upsale_notice', array( $this, 'after' ) );
|
| 123 |
add_action( 'wpdeveloper_notices', array( $this, 'content' ) );
|
| 124 |
if( current_user_can( 'install_plugins' ) ) {
|
| 125 |
+
add_action( 'wpdeveloper_notice_clicked', array( $this, 'clicked' ) );
|
| 126 |
+
if( isset( $_GET['plugin'] ) ) {
|
| 127 |
+
/**
|
| 128 |
+
* Redirect User To the Current URL, but without set query arguments.
|
| 129 |
+
*/
|
| 130 |
+
wp_safe_redirect( $this->redirect_to() );
|
| 131 |
+
}
|
| 132 |
$current_notice = $this->next_notice();
|
| 133 |
+
|
| 134 |
$deserve_notice = $this->deserve_notice( $current_notice );
|
| 135 |
$options_data = $this->get_options_data();
|
| 136 |
+
$user_notices = $this->get_user_notices();
|
| 137 |
|
| 138 |
$notice_time = isset( $options_data[ $this->plugin_name ]['notice_will_show'][ $current_notice ] )
|
| 139 |
? $options_data[ $this->plugin_name ]['notice_will_show'][ $current_notice ] : $this->timestamp;
|
| 172 |
}
|
| 173 |
}
|
| 174 |
}
|
|
|
|
| 175 |
}
|
|
|
|
| 176 |
}
|
| 177 |
+
/**
|
| 178 |
+
* Make time using timestamp and a string like 2 Hour, 2 Day, 30 Minutes, 1 Week, 1 year
|
| 179 |
+
* @param integer $current
|
| 180 |
+
* @param string $time
|
| 181 |
+
* @return integer
|
| 182 |
+
*/
|
| 183 |
public function makeTime( $current, $time ) {
|
| 184 |
return strtotime( date('Y-m-d H:i:s', $current) . " +$time" );
|
| 185 |
}
|
| 186 |
+
/**
|
| 187 |
+
* Automatice Maybe Later.
|
| 188 |
+
* @param string $notice
|
| 189 |
+
* @return void
|
| 190 |
+
*/
|
| 191 |
private function maybe_later( $notice ){
|
| 192 |
+
if( empty( $notice ) ) {
|
| 193 |
+
return;
|
| 194 |
+
}
|
| 195 |
$options_data = $this->get_options_data();
|
| 196 |
$options_data[ $this->plugin_name ]['notice_will_show'][ $notice ] = $this->makeTime( $this->timestamp, $this->maybe_later_time );
|
| 197 |
$this->update_options_data( $options_data[ $this->plugin_name ] );
|
| 201 |
* @return void
|
| 202 |
*/
|
| 203 |
public function clicked(){
|
| 204 |
+
// if( ! isset( $_GET['plugin'] ) || ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_GET['_wpnonce'] ) ), 'wpdeveloper-nonce' ) ) {
|
| 205 |
+
// return;
|
| 206 |
+
// }
|
| 207 |
+
if( isset( $_GET['plugin'] ) && $_GET['plugin'] === $this->plugin_name ) {
|
| 208 |
$options_data = $this->get_options_data();
|
| 209 |
$clicked_from = $this->next_notice();
|
| 210 |
extract($_GET);
|
| 211 |
|
| 212 |
$later_time = '';
|
| 213 |
|
| 214 |
+
// dump( $_GET );
|
| 215 |
+
// die;
|
| 216 |
+
|
| 217 |
switch( $clicked_from ) {
|
| 218 |
|
| 219 |
case 'opt_in' :
|
| 220 |
+
$dismiss = ( isset( $plugin_action ) ) ? $plugin_action : false ;
|
| 221 |
$later_time = $this->makeTime( $this->timestamp, $this->maybe_later_time );
|
| 222 |
break;
|
| 223 |
|
| 236 |
case 'upsale' :
|
| 237 |
$later_time = $this->makeTime( $this->timestamp, $this->maybe_later_time );
|
| 238 |
break;
|
|
|
|
| 239 |
}
|
| 240 |
|
| 241 |
if( isset( $later ) && $later == true ) {
|
| 247 |
$user_notices = [];
|
| 248 |
}
|
| 249 |
$user_notices[ $this->notice_id ][ $this->plugin_name ][] = $clicked_from;
|
| 250 |
+
unset( $options_data[ $this->plugin_name ]['notice_will_show'][ $clicked_from ] );
|
| 251 |
update_user_meta( get_current_user_id(), self::ADMIN_UPDATE_NOTICE_KEY, $user_notices);
|
| 252 |
}
|
| 253 |
$this->update_options_data( $options_data[ $this->plugin_name ] );
|
|
|
|
| 254 |
}
|
| 255 |
}
|
| 256 |
+
/**
|
| 257 |
+
* For Redirecting Current Page without Arguments!
|
| 258 |
+
*
|
| 259 |
+
* @return void
|
| 260 |
+
*/
|
| 261 |
+
private function redirect_to(){
|
| 262 |
+
$request_uri = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_PATH );
|
| 263 |
+
$query_string = parse_url( $_SERVER['REQUEST_URI'], PHP_URL_QUERY );
|
| 264 |
+
parse_str( $query_string, $current_url );
|
| 265 |
+
|
| 266 |
+
$unset_array = array( 'dismiss', 'plugin', '_wpnonce', 'later', 'plugin_action' );
|
| 267 |
+
|
| 268 |
+
foreach( $unset_array as $value ) {
|
| 269 |
+
if( isset( $current_url[ $value ] ) ) {
|
| 270 |
+
unset( $current_url[ $value ] );
|
| 271 |
+
}
|
| 272 |
+
}
|
| 273 |
+
|
| 274 |
+
$current_url = http_build_query($current_url);
|
| 275 |
+
$redirect_url = $request_uri . '?' . $current_url;
|
| 276 |
+
return $redirect_url;
|
| 277 |
+
}
|
| 278 |
/**
|
| 279 |
* Before Notice
|
| 280 |
* @return void
|
| 312 |
switch( $notice ) {
|
| 313 |
case 'opt_in' :
|
| 314 |
do_action('wpdeveloper_optin_notice');
|
|
|
|
|
|
|
| 315 |
break;
|
| 316 |
case 'first_install' :
|
| 317 |
if( $options_data[ $this->plugin_name ]['first_install'] !== 'deactivated' ) {
|
| 343 |
}
|
| 344 |
echo '<div class="error notice is-dismissible wpdeveloper-upsale-notice '. $classes .'">';
|
| 345 |
}
|
| 346 |
+
/**
|
| 347 |
+
* Upsale Notice
|
| 348 |
+
*/
|
| 349 |
public function upsale_notice(){
|
| 350 |
do_action( 'wpdeveloper_before_upsale_notice' );
|
| 351 |
do_action('wpdeveloper_upsale_notice');
|
| 354 |
do_action( 'wpdeveloper_after_upsale_notice' );
|
| 355 |
$this->upsale_button_script();
|
| 356 |
}
|
| 357 |
+
/**
|
| 358 |
+
* Get upsale arguments.
|
| 359 |
+
* @return void
|
| 360 |
+
*/
|
| 361 |
private function get_upsale_args(){
|
| 362 |
+
return ( empty( $this->upsale_args ) ) ? array() : $this->upsale_args;
|
| 363 |
}
|
| 364 |
+
/**
|
| 365 |
+
* This function is responsible for making the button visible to the upsale notice.
|
| 366 |
+
*/
|
| 367 |
private function upsale_button(){
|
| 368 |
$upsale_args = $this->get_upsale_args();
|
| 369 |
$plugin_slug = ( isset( $upsale_args['slug'] )) ? $upsale_args['slug'] : '' ;
|
| 370 |
if( empty( $plugin_slug ) ) {
|
| 371 |
return;
|
| 372 |
}
|
| 373 |
+
echo '<button data-slug="'. $plugin_slug .'" id="plugin-install-core" class="button button-primary">'. __( 'Install Now!', $this->text_domain ) .'</button>';
|
|
|
|
| 374 |
}
|
| 375 |
/**
|
| 376 |
* This methods is responsible for get notice image.
|
| 402 |
}
|
| 403 |
return false;
|
| 404 |
}
|
|
|
|
| 405 |
/**
|
| 406 |
* This method is responsible for get messages.
|
| 407 |
*
|
| 431 |
} else {
|
| 432 |
$return_notice = $options_data[ $this->plugin_name ]['notice_will_show'];
|
| 433 |
}
|
|
|
|
| 434 |
$deserve_notice_timestamp = INF;
|
| 435 |
$deserve_notice = '';
|
| 436 |
foreach( $return_notice as $notice => $timestamp ) {
|
| 441 |
}
|
| 442 |
return $deserve_notice;
|
| 443 |
}
|
| 444 |
+
/**
|
| 445 |
+
* Which notice is deserve to show in next slot.
|
| 446 |
+
* @param string $notice
|
| 447 |
+
* @return boolean
|
| 448 |
+
*/
|
| 449 |
private function deserve_notice( $notice ) {
|
| 450 |
$notices = $this->get_user_notices();
|
| 451 |
if( empty( $notices ) ) {
|
| 454 |
if( isset( $notices[ $this->notice_id ] ) && isset( $notices[ $this->notice_id ][ $this->plugin_name ] ) ) {
|
| 455 |
if( in_array( $notice, $notices[ $this->notice_id ][ $this->plugin_name ] ) ) {
|
| 456 |
return false;
|
| 457 |
+
} else {
|
| 458 |
+
return true;
|
| 459 |
}
|
| 460 |
} else {
|
| 461 |
return true;
|
| 462 |
}
|
| 463 |
}
|
| 464 |
}
|
|
|
|
| 465 |
/**
|
| 466 |
* This is the main methods for generate the notice.
|
| 467 |
* @return void
|
| 468 |
*/
|
| 469 |
public function admin_notices(){
|
| 470 |
+
$current_notice = $this->next_notice();
|
| 471 |
+
do_action( 'wpdeveloper_notice_clicked' );
|
| 472 |
+
if( $current_notice == 'opt_in' ) {
|
| 473 |
+
do_action( 'wpdeveloper_notices' );
|
| 474 |
+
return;
|
| 475 |
+
}
|
| 476 |
do_action( 'wpdeveloper_before_notice' );
|
| 477 |
do_action( 'wpdeveloper_notices' );
|
| 478 |
do_action( 'wpdeveloper_after_notice' );
|
| 500 |
foreach( $link_value['data_args'] as $key => $args_value ) {
|
| 501 |
$data_args[ $key ] = $args_value;
|
| 502 |
}
|
| 503 |
+
$data_args[ 'plugin' ] = $this->plugin_name;
|
| 504 |
$normal_link = add_query_arg( $data_args, $link );
|
| 505 |
$link = wp_nonce_url( $normal_link, 'wpdeveloper-nonce' );
|
| 506 |
}
|
| 529 |
}
|
| 530 |
/**
|
| 531 |
* First Installation Track
|
|
|
|
| 532 |
* @return void
|
| 533 |
*/
|
| 534 |
public function first_install_track( $args = array() ){
|
| 535 |
+
if( ! current_user_can( 'manage_options' ) ) {
|
| 536 |
+
return;
|
| 537 |
+
}
|
| 538 |
if( empty( $args ) ) {
|
| 539 |
$args = array(
|
| 540 |
'time' => $this->timestamp,
|
| 541 |
+
'version' => $this->version,
|
| 542 |
);
|
| 543 |
}
|
| 544 |
$options_data = $this->get_options_data();
|
| 545 |
$args = wp_parse_args( $args, $this->get_args() );
|
| 546 |
+
if( ! isset( $options_data[ $this->plugin_name ] )
|
| 547 |
+
|| ( isset( $options_data[ $this->plugin_name ]['version'] ) && version_compare( $options_data[ $this->plugin_name ]['version'], $this->version, '!=' ) ) ) {
|
| 548 |
$this->update_options_data( $args );
|
| 549 |
}
|
| 550 |
}
|
| 614 |
$this->data[ $name ][ $values[0] ] = $values[1];
|
| 615 |
}
|
| 616 |
}
|
| 617 |
+
/**
|
| 618 |
+
* Get all option arguments.
|
| 619 |
+
* @param string $key
|
| 620 |
+
* @return array
|
| 621 |
+
*/
|
| 622 |
private function get_args( $key = '' ){
|
| 623 |
if( empty( $key ) ) {
|
| 624 |
return $this->options_args;
|
| 630 |
|
| 631 |
return false;
|
| 632 |
}
|
| 633 |
+
/**
|
| 634 |
+
* Resetting data on update.
|
| 635 |
+
* @return void
|
| 636 |
+
*/
|
| 637 |
+
private function set_args_on_update(){
|
| 638 |
+
$args = $this->get_args();
|
| 639 |
+
$options_data = $this->get_options_data();
|
| 640 |
+
$set_data = $options_data[ $this->plugin_name ];
|
| 641 |
+
$args = wp_parse_args( $set_data, $args );
|
| 642 |
+
$this->update_options_data( $args );
|
| 643 |
+
}
|
| 644 |
+
/**
|
| 645 |
+
* When upgrade is complete. it will fired.
|
| 646 |
+
* @param WP_Upgrader $upgrader_object
|
| 647 |
+
* @param array $options
|
| 648 |
+
* @return void
|
| 649 |
+
*/
|
| 650 |
public function upgrade_completed( $upgrader_object, $options ) {
|
| 651 |
// If an update has taken place and the updated type is plugins and the plugins element exists
|
| 652 |
+
if( isset( $options['action'] ) && $options['action'] == 'update' && $options['type'] == 'plugin' ) {
|
| 653 |
+
if( ! isset( $options['plugin'] ) && isset( $options['plugins'] ) ) {
|
| 654 |
+
foreach( $options['plugins'] as $plugin ) {
|
| 655 |
+
if( $plugin == $this->plugin_name ) {
|
| 656 |
+
$this->set_args_on_update();
|
| 657 |
+
}
|
|
|
|
| 658 |
}
|
| 659 |
}
|
| 660 |
+
|
| 661 |
+
if( isset( $options['plugin'] ) && $options['plugin'] == $this->plugin_name ) {
|
| 662 |
+
$this->set_args_on_update();
|
| 663 |
+
}
|
| 664 |
}
|
| 665 |
}
|
| 666 |
/**
|
| 670 |
private function get_user_notices() {
|
| 671 |
return get_user_meta( get_current_user_id(), self::ADMIN_UPDATE_NOTICE_KEY, true );
|
| 672 |
}
|
| 673 |
+
/**
|
| 674 |
+
* This function is responsible for do action when
|
| 675 |
+
* the dismiss button clicked in upsale notice.
|
| 676 |
+
*/
|
| 677 |
public function upsale_notice_dissmiss(){
|
| 678 |
+
|
|
|
|
| 679 |
if( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( sanitize_key( wp_unslash( $_POST['_wpnonce'] ) ), 'wpdeveloper_upsale_notice_dissmiss' ) ) {
|
| 680 |
return;
|
| 681 |
}
|
| 682 |
+
|
| 683 |
if( ! isset( $_POST['action'] ) || ( $_POST['action'] !== 'wpdeveloper_upsale_notice_dissmiss' ) ) {
|
| 684 |
return;
|
| 685 |
}
|
| 686 |
|
| 687 |
+
$dismiss = isset( $_POST['dismiss'] ) ? $_POST['dismiss'] : false;
|
| 688 |
if( $dismiss ) {
|
| 689 |
$user_notices = $this->get_user_notices();
|
| 690 |
if( ! $user_notices ) {
|
| 691 |
$user_notices = [];
|
| 692 |
}
|
| 693 |
$user_notices[ $this->notice_id ][ $this->plugin_name ][] = 'upsale';
|
| 694 |
+
// Remove the upsale from notice_will_show field in options DB.
|
| 695 |
+
$options_data = $this->get_options_data();
|
| 696 |
+
unset( $options_data[ $this->plugin_name ]['notice_will_show'][ 'upsale' ] );
|
| 697 |
+
$this->update_options_data( $options_data[ $this->plugin_name ] );
|
| 698 |
+
// Set users meta, not to show again current_version notice.
|
| 699 |
update_user_meta( get_current_user_id(), self::ADMIN_UPDATE_NOTICE_KEY, $user_notices);
|
| 700 |
echo 'success';
|
| 701 |
} else {
|
| 703 |
}
|
| 704 |
die();
|
| 705 |
}
|
| 706 |
+
/**
|
| 707 |
+
* Upsale Button Script.
|
| 708 |
+
* When install button is clicked, it will do its own things.
|
| 709 |
+
* also for dismiss button JS.
|
| 710 |
+
* @return void
|
| 711 |
+
*/
|
| 712 |
public function upsale_button_script(){
|
| 713 |
$upsale_args = $this->get_upsale_args();
|
| 714 |
|
| 843 |
|
| 844 |
/**
|
| 845 |
* Current Notice End Time.
|
| 846 |
+
* Notice will dismiss in 3 days if user does nothing.
|
| 847 |
*/
|
| 848 |
$notice->cne_time = '3 Day';
|
|
|
|
| 849 |
/**
|
| 850 |
* Current Notice Maybe Later Time.
|
| 851 |
* Notice will show again in 7 days
|
| 858 |
'file' => 'wp-scheduled-posts.php'
|
| 859 |
);
|
| 860 |
|
| 861 |
+
$notice->text_domain = 'essential-addons-elementor';
|
| 862 |
+
|
| 863 |
$notice->options_args = array(
|
| 864 |
'notice_seen' => [
|
| 865 |
'review' => false,
|
| 866 |
'upsale' => false,
|
| 867 |
+
'opt_in' => false,
|
| 868 |
],
|
| 869 |
'notice_will_show' => [
|
| 870 |
+
'opt_in' => $notice->timestamp,
|
| 871 |
'review' => $notice->makeTime( $notice->timestamp, '4 Day' ), // after 4 days
|
| 872 |
'upsale' => $notice->makeTime( $notice->timestamp, '2 Hour' ), // will be after 2 hours
|
| 873 |
]
|
includes/eael-rollback.php
CHANGED
|
@@ -40,6 +40,9 @@ if( ! class_exists('EAEL_Rollback') ) {
|
|
| 40 |
* @var array
|
| 41 |
*/
|
| 42 |
public $versions = [
|
|
|
|
|
|
|
|
|
|
| 43 |
'2.8.6',
|
| 44 |
'2.8.5',
|
| 45 |
'2.8.4',
|
| 40 |
* @var array
|
| 41 |
*/
|
| 42 |
public $versions = [
|
| 43 |
+
'2.9.1',
|
| 44 |
+
'2.9.0',
|
| 45 |
+
'2.8.7',
|
| 46 |
'2.8.6',
|
| 47 |
'2.8.5',
|
| 48 |
'2.8.4',
|
readme.txt
CHANGED
|
@@ -4,7 +4,7 @@ Tags: elementor, elements, addons, elementor addon, elementor widget, page build
|
|
| 4 |
Requires at least: 4.0
|
| 5 |
Tested up to: 5.0.3
|
| 6 |
Requires PHP: 5.4
|
| 7 |
-
Stable tag: 2.9.
|
| 8 |
License: GPLv3
|
| 9 |
License URI: https://opensource.org/licenses/GPL-3.0
|
| 10 |
|
|
@@ -169,6 +169,10 @@ Your existing elements/content will work with premium version. So you won't lose
|
|
| 169 |
|
| 170 |
== Changelog ==
|
| 171 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 172 |
= 2.9.1 =
|
| 173 |
|
| 174 |
- Fixed: Conflict with wp_mail function
|
| 4 |
Requires at least: 4.0
|
| 5 |
Tested up to: 5.0.3
|
| 6 |
Requires PHP: 5.4
|
| 7 |
+
Stable tag: 2.9.2
|
| 8 |
License: GPLv3
|
| 9 |
License URI: https://opensource.org/licenses/GPL-3.0
|
| 10 |
|
| 169 |
|
| 170 |
== Changelog ==
|
| 171 |
|
| 172 |
+
= 2.9.2 =
|
| 173 |
+
|
| 174 |
+
- Few minor bugfix and improvements
|
| 175 |
+
|
| 176 |
= 2.9.1 =
|
| 177 |
|
| 178 |
- Fixed: Conflict with wp_mail function
|
