/home/edulekha/sriramaaresorts.com/wp-content/plugins/adminify/Inc/Classes/Pro_Upgrade.php
<?php
namespace WPAdminify\Inc\Classes;
use WPAdminify\Inc\Classes\Helper;
use WPAdminify\Inc\Classes\Notifications\Base\Date;
// No, Direct access Sir !!!
if ( !defined( 'ABSPATH' ) ) {
exit;
}
/**
* Upgrade to Pro Class
*
* Jewel Theme <support@jeweltheme.com>
*/
class Pro_Upgrade {
use Date;
public $slug;
protected $data = array();
protected $modes = array(
'development' => array(
'sheet_id' => '1VLpfKspHHNM6JIFOQtohqDRyHR85J3KR5RLF4jqlz0Q',
'tab_id' => 0,
),
'production' => array(
'sheet_id' => '1VLpfKspHHNM6JIFOQtohqDRyHR85J3KR5RLF4jqlz0Q',
'tab_id' => 0,
),
);
/**
* Construct method
*/
public function __construct() {
$this->slug = Helper::jltwp_adminify_slug_cleanup();
$this->maybe_sync_remote_data();
$this->register_sync_hook();
$this->set_data();
add_action( 'admin_footer', array($this, 'display_popup') );
add_action( 'wp_dashboard_setup', array($this, 'dashboard_widget') );
add_action( 'wp_network_dashboard_setup', array($this, 'dashboard_widget') );
}
/**
* Register Dashboard widget
*
* @return void
* @author Jewel Theme <support@jeweltheme.com>
*/
public function dashboard_widget() {
wp_add_dashboard_widget(
'jltwp_adminify_dashboard_widget',
// Widget slug.
esc_html__( 'WP Adminify News & Updates', 'adminify' ),
// Title.
array($this, 'dashboard_widget_render')
);
// Globalize the metaboxes array, this holds all the widgets for wp-admin.
global $wp_meta_boxes;
// Get the regular dashboard widgets array
// (which already has our new widget but appended at the end).
if ( is_network_admin() ) {
$default_dashboard = $wp_meta_boxes['dashboard-network']['normal']['core'];
} else {
$default_dashboard = $wp_meta_boxes['dashboard']['normal']['core'];
}
// Backup and delete our new dashboard widget from the end of the array.
$example_widget_backup = array(
'jltwp_adminify_dashboard_widget' => $default_dashboard['jltwp_adminify_dashboard_widget'],
);
unset($default_dashboard['jltwp_adminify_dashboard_widget']);
// Merge the two arrays together so our widget is at the beginning.
$sorted_dashboard = array_merge( $example_widget_backup, $default_dashboard );
// Save the sorted array back into the original metaboxes .
if ( is_network_admin() ) {
$wp_meta_boxes['dashboard-network']['normal']['core'] = $sorted_dashboard;
} else {
$wp_meta_boxes['dashboard']['normal']['core'] = $sorted_dashboard;
}
}
/**
* Render dashboard widget
*
* @author Jewel Theme <support@jeweltheme.com>
*/
public function dashboard_widget_render() {
include_once ABSPATH . WPINC . '/feed.php';
$feed_url = 'https://jeweltheme.com/feed.xml';
// Get a SimplePie feed object from the specified feed source .
$rss = fetch_feed( $feed_url );
$maxitems = 0;
if ( !is_wp_error( $rss ) ) {
// Checks that the object is created correctly .
// Figure out how many total items there are, and choose a limit .
$maxitems = $rss->get_item_quantity( 5 );
// Build an array of all the items, starting with element 0 (first element).
$rss_items = $rss->get_items( 0, $maxitems );
// Get RSS title .
$rss_title = '<a href="' . $rss->get_permalink() . '" target="_blank">' . strtoupper( $rss->get_title() ) . '</a>';
}
// Display the container .
echo '<div class="wp-adminify-rss-widget">';
if ( wp_validate_boolean( $this->get_content( 'is_campaign' ) ) ) {
?>
<div class="wp-adminify-dashboard-promo" style="--wp-adminify-popup-color: <?php
echo esc_attr( $this->get_content( 'btn_color' ) );
?>;">
<a target="_blank" href="<?php
echo esc_url( $this->get_content( 'button_url' ) );
?>">
<img src="<?php
echo esc_url( $this->get_content( 'image_url' ) );
?>" alt="WP Adminify Promo Image" style="width: 100%; height: auto;">
</a>
<a class="wp-adminify-popup-button" style="color: #fff!important;" target="_blank" href="<?php
echo esc_url( $this->get_content( 'button_url' ) );
?>">
<?php
echo esc_html( $this->get_content( 'button_text' ) );
?>
</a>
</div>
<?php
}
// Starts items listing within <ul> tag
// Check items .
if ( !empty( $maxitems ) ) {
echo '<ul>';
// Loop through each feed item and display each item as a hyperlink.
foreach ( $rss_items as $item ) {
// Uncomment line below to display non human date
// $item_date = $item->get_date( get_option('date_format').' @ '.get_option('time_format') ); .
// Get human date (comment if you want to use non human date) .
// $item_date = human_time_diff( $item->get_date( 'U' ), current_time( 'timestamp' ) ) . ' ' . __( 'ago', 'adminify' );
// Start displaying item content within a <li> tag .
echo '<li>';
// create item link .
echo '<a href="' . esc_url( $item->get_permalink() ) . '" title="' . esc_attr( $item->get_title() ) . '" target="_blank">';
// Get item title .
echo esc_html( $item->get_title() );
echo '</a>';
// Display date .
// echo ' <span class="rss-date">' . esc_html( $item_date ) . '</span><br />';
// Get item content .
$content = $item->get_content();
// Shorten content .
$content = wp_html_excerpt( $content, 120 ) . ' ';
// Display content .
echo esc_html( $content );
// End <li> tag .
echo '</li>';
}
echo '</ul>';
// End <ul> tag .
}
?>
<div class="wp-adminify-dashboard_footer">
<ul>
<li class="wp-adminify-overview__blog">
<a href="https://wpadminify.com/blog" target="_blank">
Blog
<span class="screen-reader-text">
<?php
echo esc_html__( '(opens in a new window)', 'adminify' );
?>
</span>
<span aria-hidden="true" class="dashicons dashicons-external"></span>
</a>
</li>
<li class="wp-adminify-overview__help">
<a href="https://wpadminify.com/docs" target="_blank">
Help
<span class="screen-reader-text">
<?php
echo esc_html__( '(opens in a new window)', 'adminify' );
?>
</span>
<span aria-hidden="true" class="dashicons dashicons-external"></span>
</a>
</li>
<li class="wp-adminify-overview__upgrade">
<a href="https://wpadminify.com/pricing" target="_blank">
Upgrade
<span class="screen-reader-text">
<?php
echo esc_html__( '(opens in a new window)', 'adminify' );
?>
</span>
<span aria-hidden="true" class="dashicons dashicons-external"></span>
</a>
</li>
</ul>
</div>
<style>
/* News Dashboard Widget */
.wp-adminify-rss-widget .hndle.ui-sortable-handle img {
margin: -5px 10px -5px 0;
}
.wp-adminify-rss-widget .wp-adminify-dashboard_footer {
margin: 0 -12px -12px;
padding: 0 12px;
border-top: 1px solid #eee;
}
.wp-adminify-rss-widget .wp-adminify-dashboard_footer ul {
display: flex;
list-style: none;
}
.wp-adminify-rss-widget .wp-adminify-dashboard_footer ul li:first-child {
padding-left: 0;
border: none;
}
.wp-adminify-rss-widget .wp-adminify-dashboard_footer li {
padding: 0 10px;
margin: 0;
border-left: 1px solid #ddd;
}
.wp-adminify-rss-widget .wp-adminify-overview__go-pro a {
color: #FCB92C;
font-weight: 500;
}
</style>
<?php
echo '</div>';
}
/**
* Set merged data
*
* @return void
* @author Jewel Theme <support@jeweltheme.com>
*/
public function set_data() {
$this->data = Helper::get_merged_data( self::get_data() );
}
/**
* Get Sheet data
*
* @author Jewel Theme <support@jeweltheme.com>
*/
public static function get_data() {
return get_option( 'jltwp_adminify_sheet_promo_data' );
}
/**
* Get Contents
*
* @param [type] $key .
*
* @author Jewel Theme <support@jeweltheme.com>
*/
public function get_content( $key ) {
return $this->data[$key];
}
/**
* Get Option has data
*
* @author Jewel Theme <support@jeweltheme.com>
*/
public function get_data_hash() {
return get_option( 'jltwp_adminify_sheet_promo_data_hash' );
}
/**
* Sync to remote data
*
* @author Jewel Theme <support@jeweltheme.com>
*/
public function maybe_sync_remote_data() {
$data = self::get_data();
if ( empty( $data ) ) {
$this->sheet_data_remote_sync();
}
}
/**
* Register Sync hook
*
* @return void
* @author Jewel Theme <support@jeweltheme.com>
*/
public function register_sync_hook() {
$hook_action = 'jltwp_adminify_sheet_promo_data_remote_sync';
add_action( $hook_action, array($this, 'sheet_data_remote_sync') );
if ( !wp_next_scheduled( $hook_action ) ) {
wp_schedule_event( time(), 'daily', $hook_action );
}
register_deactivation_hook( WP_ADMINIFY_FILE, array($this, 'clear_register_sync_hook') );
}
/**
* Clear register sync hook
*
* @return void
* @author Jewel Theme <support@jeweltheme.com>
*/
public function clear_register_sync_hook() {
wp_clear_scheduled_hook( 'jltwp_adminify_sheet_promo_data_remote_sync' );
}
/**
* Data sync with remote
*
* @return void
* @author Jewel Theme <support@jeweltheme.com>
*/
public function sheet_data_remote_sync() {
$data = self::get_data();
$force = false;
if ( empty( $data ) ) {
$force = true;
}
$sheet_hash_data = $this->get_data_hash();
$remote_data = $this->get_sheet_promo_remote_data();
$sheet_data_hash = base64_encode( json_encode( $remote_data ) );
if ( $force || $sheet_hash_data !== $sheet_data_hash ) {
update_option( 'jltwp_adminify_sheet_promo_data', $remote_data );
update_option( 'jltwp_adminify_sheet_promo_data_hash', $sheet_data_hash );
do_action( 'jltwp_adminify_sheet_promo_data_reset' );
}
}
/**
* Get Environment mode
*
* @author Jewel Theme <support@jeweltheme.com>
*/
public function get_mode() {
return ( defined( 'WP_DEBUG' ) && WP_DEBUG ? 'development' : 'production' );
}
/**
* Get Sheet URL
*
* @author Jewel Theme <support@jeweltheme.com>
*/
public function get_sheet_url() {
$sheet_id = $this->modes[$this->get_mode()]['sheet_id'];
$tab_id = $this->modes[$this->get_mode()]['tab_id'];
return "https://docs.google.com/spreadsheets/export?format=csv&id={$sheet_id}&gid={$tab_id}";
}
/**
* Promotional remote data
*
* @author Jewel Theme <support@jeweltheme.com>
*/
public function get_sheet_promo_remote_data() {
$transient_key = $this->slug . '_sheet_promo_data';
$data = get_transient( $transient_key );
if ( $data !== false ) {
return $data;
}
$url = $this->get_sheet_url();
$response = wp_remote_get( $url );
if ( is_wp_error( $response ) ) {
return false;
}
$response = wp_remote_retrieve_body( $response );
if ( !$response ) {
return false;
}
$data = array_map( 'str_getcsv', explode( "\n", $response ) );
$header = array_shift( $data );
$data = array_map( function ( array $row ) use($header) {
return array_combine( $header, $row );
}, $data );
// filter plugin is not empty .
$data = array_filter( $data, function ( $row ) {
return !empty( $row['name'] );
} );
$plugin_slug = Helper::jltwp_adminify_slug_cleanup();
$data = wp_list_filter( $data, array(
'product_slug' => $plugin_slug,
) );
if ( !empty( $data ) ) {
$data = array_values( $data )[0];
}
set_transient( $transient_key, $data, HOUR_IN_SECONDS );
return $data;
}
/**
* Display popup contents
*
* @author Jewel Theme <support@jeweltheme.com>
*/
public function display_popup() {
if ( 'FALSE' === $this->get_content( 'is_campaign' ) ) {
$image_url = WP_ADMINIFY_ASSETS_IMAGE . 'promo-image.png';
$notice = 'Use "SPECIAL40" to Get Flat 40% OFF';
$btn_url = 'https://wpadminify.com/pricing/';
$btn_text = 'GET THE DEAL';
} else {
$image_url = $this->get_content( 'image_url' );
$notice = $this->get_content( 'notice' );
$btn_url = $this->get_content( 'button_url' );
$btn_text = $this->get_content( 'button_text' );
}
?>
<div class="wp-adminify-popup wp-adminify-upgrade-popup" id="wp-adminify-popup" data-plugin="<?php
echo esc_attr( $this->slug );
?>" tabindex="1" style="display: none;">
<div class="wp-adminify-popup-overlay"></div>
<div class="wp-adminify-popup-modal" style="background-image: url('<?php
echo esc_url( $image_url );
?>'); --wp-adminify-popup-color: <?php
echo esc_attr( $this->get_content( 'btn_color' ) );
?>;">
<!-- close -->
<div class="wp-adminify-popup-modal-close popup-dismiss">×</div>
<!-- content section -->
<div class="wp-adminify-popup-modal-footer">
<!-- countdown -->
<div class="wp-adminify-popup-countdown" style="display: none;">
<?php
if ( !empty( $notice ) ) {
?>
<span data-counter="notice" style="color:#F4B740; font-size:14px; padding-bottom:20px; font-style:italic;"><?php
echo esc_html__( 'Notice:', 'adminify' );
?> <?php
echo $notice;
?></span>
<?php
}
?>
<span class="wp-adminify-popup-countdown-text"><?php
echo esc_html__( 'Deal Ends In', 'adminify' );
?></span>
<div class="wp-adminify-popup-countdown-time">
<div>
<span data-counter="days">00</span>
<span><?php
echo esc_html__( 'Days', 'adminify' );
?></span>
</div>
<span>:</span>
<div>
<span data-counter="hours">00</span>
<span><?php
echo esc_html__( 'Hours', 'adminify' );
?></span>
</div>
<span>:</span>
<div>
<span data-counter="minutes">00</span>
<span><?php
echo esc_html__( 'Minutes', 'adminify' );
?></span>
</div>
<span>:</span>
<div>
<span data-counter="seconds">00</span>
<span><?php
echo esc_html__( 'Seconds', 'adminify' );
?></span>
</div>
</div>
</div>
<!-- button -->
<a class="wp-adminify-popup-button" style="color: #fff!important;" target="_blank" href="<?php
echo esc_url( $btn_url );
?>"><?php
echo esc_html( $btn_text );
?></a>
</div>
</div>
</div>
<script>
var $container = jQuery('#wp-adminify-popup'),
plugin_data = <?php
echo json_encode( $this->get_sheet_promo_remote_data(), true );
?>,
events = {}; //Events
// Update Counter
function updateCounter(seconds) {
const $counter = $container.find(".wp-adminify-popup-countdown-time");
const $days = $counter.find("[data-counter='days']");
const $hours = $counter.find("[data-counter='hours']");
const $minutes = $counter.find("[data-counter='minutes']");
const $seconds = $counter.find("[data-counter='seconds']");
const days = Math.floor(seconds / (3600 * 24));
seconds -= days * 3600 * 24;
const hrs = Math.floor(seconds / 3600);
seconds -= hrs * 3600;
const mnts = Math.floor(seconds / 60);
seconds -= mnts * 60;
$days.text(days);
$hours.text(hrs);
$minutes.text(mnts);
$seconds.text(seconds);
}
// Trigger Event
function trigger(event, args = []) {
if (typeof(events[event]) !== 'undefined') {
events[event].forEach(callback => {
callback.apply(this, args);
});
}
}
// initCounter
function initCounter(last_date) {
$container.find(".wp-adminify-popup-countdown-time").show();
const countdown = () => {
// system time
const now = new Date().getTime();
// set end time to 11:59:59 PM
const endDate = new Date(last_date);
endDate.setHours(23);
endDate.setMinutes(59);
endDate.setSeconds(59);
const seconds = Math.floor((endDate.getTime() - now) / 1000);
if (seconds < 0) {
return false;
}
updateCounter(seconds);
return true;
}
let result = countdown();
if (result) {
trigger("countdownStart", [plugin_data]);
$container.find(".wp-adminify-popup-countdown").show(0);
} else {
trigger("countdownFinish", [plugin_data]);
$container.find(".wp-adminify-popup-countdown").hide(0);
}
// update counter every 1 second
const counter = setInterval(() => {
const result = countdown();
if (!result) {
clearInterval(counter);
trigger("counter_end", [plugin_data]);
$container.find(".wp-adminify-popup-countdown").hide(0);
}
}, 1000);
}
initCounter('<?php
echo esc_attr( $this->counter_date() );
?>');
</script>
<?php
}
/**
* Counter Date
*
* @author Jewel Theme <support@jeweltheme.com>
*/
public function counter_date() {
$endDate = $this->get_content( 'end_date' );
$is_active = $this->date_is_current_or_next( $endDate );
if ( $is_active ) {
return $endDate;
}
return $this->date_increment( $this->current_time(), 3 );
}
}