File "OptimizerAdminBar.php"
Full Path: /home/aiclgcwq/photonindustriespvt.com/wp-content/plugins/tenweb-speed-optimizer/OptimizerAdminBar.php
File size: 52.73 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace TenWebOptimizer;
/**
* Class OptimizerAdminBar
*/
class OptimizerAdminBar
{
/* 1 - active and connected, 2 - test mode, 3 - disconnected, 4 - pro case, 5 - abandoned, 6 - connection issues */
public $two_booster_status = 1;
/* Total pages count */
public $total_pages_count;
/* Not optimized pages count */
public $notoptimized_pages_count;
/* Optimized pages count */
public $optimized_pages_count;
/* Total count of optimized images */
public $optimized_images_count;
/* Total count of images */
public $total_images_count;
/* Domain Id */
private $domain_id;
/* Workspace Id */
private $workspace_id;
/* Booster active and connected */
public const TWO_CONNECTED = 1;
/* Booster active and in test mode */
public const TWO_TEST_MODE = 2;
/* Booster disconnected */
public const TWO_DISCONNECTED = 3;
/* Booster connection issues */
public const TWO_CONNECTIONISSUES = 6;
/* Booster is PRO */
public const TWO_PRO_CONNECTED = 4;
/* Booster is ABANDONED */
public const TWO_ABANDONED = 5;
private $current_plan;
private $empty_images_count_transient;
private $referral_hash;
public $two_frontend;
public function __construct($wp_admin_bar)
{
$this->referral_hash = get_site_option(TENWEB_PREFIX . '_client_referral_hash');
global $tenweb_plan_title;
$this->current_plan = !empty($tenweb_plan_title) ? $tenweb_plan_title : 'Free'; //this check is just to be sure that plan_title is set
$this->current_plan = strtolower($this->current_plan) == 'speed' ? 'Free' : $this->current_plan; // just a dirty fix
if (!is_admin() && !OptimizerUrl::urlIsOptimizable(null, true)) {
return;
}
$this->two_set_data();
/* Case when page is frontend and user is Pro*/
if (!is_admin() && $this->two_booster_status == 4) {
return;
}
wp_enqueue_style('two_speed_css', TENWEB_SO_URL . '/assets/css/speed.css', ['two-open-sans'], TENWEB_SO_VERSION);
//add some inline style to have free user's admin bar visible for small screens too
if ($this->two_booster_status == 1) {
$style_for_free_admin_bar = '@media screen and (max-width:1279px) {
#wpadminbar div.two_admin_bar_menu_main {
left: -322px;
}
}';
wp_add_inline_style('two_speed_css', $style_for_free_admin_bar);
}
wp_enqueue_script('two_circle_js', TENWEB_SO_URL . '/assets/js/circle-progress.js', ['jquery'], TENWEB_SO_VERSION);
wp_enqueue_script('two_speed_js', TENWEB_SO_URL . '/assets/js/speed.js', ['jquery', 'two_circle_js'], TENWEB_SO_VERSION);
wp_localize_script('two_speed_js', 'two_speed', [
'nonce' => wp_create_nonce('two_ajax_nonce'),
'ajax_url' => admin_url('admin-ajax.php'),
'clearing' => __('Clearing...', 'tenweb-speed-optimizer'),
'cleared' => __('Cleared cache', 'tenweb-speed-optimizer'),
'clear' => __('Clear cache', 'tenweb-speed-optimizer'),
]);
wp_enqueue_script(
'two_referral_program_js',
TENWEB_SO_URL . '/assets/js/referral_program.js',
['jquery'],
TENWEB_SO_VERSION
);
$wp_admin_bar->add_menu([
'id' => 'two_adminbar_info',
'title' => $this->two_admin_menu(),
'meta' => [
'html' => $this->two_admin_bar_menu_content(),
],
]);
if (is_admin()) {
$wp_admin_bar->add_menu([
'id' => 'two_adminbar_progress_info',
'title' => $this->two_admin_notif_menu(),
'meta' => [
'html' => $this->two_optimize_notification(),
],
]);
}
}
/**
* Set values to class variables.
*/
public function two_set_data()
{
if (is_admin()) {
$this->two_frontend = 0;
}
$this->optimized_pages_count = count(\TenWebOptimizer\OptimizerUtils::getCriticalPages());
$count_pages = wp_count_posts('page');
$count_posts = wp_count_posts('post');
$terms_count = (int) get_terms(['fields' => 'count', 'hide_empty' => false]);
$this->total_pages_count = $count_pages->publish + $count_posts->publish + $terms_count;
if ($this->optimized_pages_count > $this->total_pages_count) {
$this->optimized_pages_count = $this->total_pages_count;
}
$this->notoptimized_pages_count = $this->total_pages_count - $this->optimized_pages_count;
$this->workspace_id = (int) get_site_option(TENWEBIO_MANAGER_PREFIX . '_workspace_id', 0);
$this->domain_id = (int) get_option(TENWEBIO_MANAGER_PREFIX . '_domain_id', 0);
$two_settings = get_option('two_settings');
$two_settings = json_decode($two_settings, 1);
$this->two_booster_status = self::TWO_DISCONNECTED;
if ((\Tenweb_Authorization\Login::get_instance()->check_logged_in() && $this->domain_id == 0)
|| (!\Tenweb_Authorization\Login::get_instance()->check_logged_in() && !empty(get_option('two_first_connect')) && $this->domain_id != 0)) {
$this->two_booster_status = self::TWO_CONNECTIONISSUES;
} elseif ((defined('TWO_INCOMPATIBLE_ERROR') && TWO_INCOMPATIBLE_ERROR) || !OptimizerUtils::is_tenweb_booster_connected()) {
$this->two_booster_status = self::TWO_DISCONNECTED;
} elseif (\TenWebOptimizer\OptimizerUtils::is_paid_user()) {
$this->two_booster_status = self::TWO_PRO_CONNECTED;
} elseif (!empty($two_settings)) {
if (isset($two_settings['two_test_mode']) && $two_settings['two_test_mode'] == 'on') {
$this->two_booster_status = self::TWO_TEST_MODE;
} elseif (isset($two_settings['two_connected']) && $two_settings['two_connected'] == 1) {
$two_flow_finished = get_option('two_flow_status') != 1 ? true : false;
if (!$two_flow_finished) {
$this->two_booster_status = self::TWO_ABANDONED;
} else {
$this->two_booster_status = self::TWO_CONNECTED;
}
}
}
if ($this->two_booster_status != 3 && $this->two_booster_status != 2) {
$this->get_images_data_api();
}
}
/**
* Admin bar menu.
*
* @return string
*/
public function two_admin_menu()
{
if (!is_admin() && $this->two_booster_status != 3 && $this->two_booster_status != 2) {
$img = '<img src="' . TENWEB_SO_URL . '/assets/images/logo_green.svg" />';
$img_display_none = '<img src="' . TENWEB_SO_URL . '/assets/images/logo_green.svg" / style="display:none">';
$className = ' two_frontpage_not_optimized';
if ($this->two_is_page_optimized()) {
$className = ' two_frontpage_optimized';
}
$two_admin_bar_menu = '<div class="two_admin_bar_menu two_frontend"><div class="two_admin_bar_menu_header' . $className . '"><span class="two_hidden"></span>' . $img . TWO_SO_ORGANIZATION_NAME . ' Booster' . '</div></div>';
if ($this->two_is_optimize_inprogress()) {
$className = ' two_frontpage_optimizing';
$two_admin_bar_menu = '<div class="two_admin_bar_menu two_frontend"><div class="two_admin_bar_menu_header' . $className . '"><span></span>' . $img_display_none . TWO_SO_ORGANIZATION_NAME . ' Booster' . '</div></div>';
}
} else {
if ($this->two_booster_status == 1) {
$img = '<img src="' . TENWEB_SO_URL . '/assets/images/logo_green.svg" />' . TWO_SO_ORGANIZATION_NAME . ' Booster' . '<p class="two_page_count">' . $this->notoptimized_pages_count . '</p>';
} elseif ($this->two_booster_status == 4) {
$img = '<img src="' . TENWEB_SO_URL . '/assets/images/logo_green.svg" />' . TWO_SO_ORGANIZATION_NAME . ' Booster';
} else {
$img = '<img src="' . TENWEB_SO_URL . '/assets/images/logo_disconnect.svg" />' . TWO_SO_ORGANIZATION_NAME . ' Booster';
}
$two_admin_bar_menu = '<div class="two_admin_bar_menu two_backend"><div class="two_admin_bar_menu_header">' . $img . '</div></div>';
}
return $two_admin_bar_menu;
}
/**
* Admin bar notif menu.
*
* @return string
*/
public function two_admin_notif_menu()
{
if ($this->two_booster_status == 1) {
$two_admin_bar_menu = '<div class="two_admin_bar_notif_menu two_backend"><div class="two_admin_bar_menu_header"><span></span></div></div>';
return $two_admin_bar_menu;
}
}
/**
* Adminbar menu content.
*
* @return string
*/
public function two_admin_bar_menu_content()
{
$front_score_data = get_option('two-front-page-speed');
$optimized_images_count = $this->optimized_images_count;
$total_images_count = $this->total_images_count;
$rest_page_count = (int) (6 - $this->optimized_pages_count);
$free_reached = 1;
if ($this->optimized_pages_count < 6) {
$free_reached = 0;
}
$post_id = get_option('page_on_front');
ob_start();
$reanalyze_button_status_current = false;
if (!empty($front_score_data)) {
if (isset($front_score_data['current_score']) && isset($front_score_data['current_score']['status'])
&& $front_score_data['current_score']['status'] == 'inprogress') {
$reanalyze_button_status_current = true;
}
}
$hidden_class = TW_OPTIMIZE_PREFIX . '_hidden';
if ($this->two_booster_status == 6 && !get_option(TW_OPTIMIZE_PREFIX . '_reconnection_bar_was_shown')) {
$hidden_class = '';
} ?>
<div class="two_admin_bar_menu_main <?php echo esc_attr($hidden_class); ?>" dir="ltr">
<?php
/* Frontend and booster is not disconnected or in test mode or has some connection issues */
if (!is_admin() && $this->two_booster_status != 3 && $this->two_booster_status != 6 && $this->two_booster_status != 2) {
if (!$this->two_is_page_optimized()) {
$this->two_front_not_optimized_content();
} else {
$this->two_front_optimized_content();
}
} else {
if ($this->two_booster_status == 1) {
?>
<div class="two_admin_bar_menu_content two_booster_on_free two-any-reanalyzing-score-section" data-id="front_page">
<p class="two_info_row"><?php echo esc_html(sprintf(__('Not optimized pages: %s', 'tenweb-speed-optimizer'), (int) $this->notoptimized_pages_count)); ?></p>
<p class="two_status_title"><?php echo esc_html(sprintf(__('%s is ON', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<div class="two_plan_container">
<p><?php echo sprintf(__('Current Plan: %s', 'tenweb-speed-optimizer'), esc_html($this->current_plan)); ?></p>
<a href="#" class="two_clear_cache"><?php _e('Clear cache', 'tenweb-speed-optimizer'); ?></a>
</div>
<hr>
<div class="two_score_success_container">
<div class="two_score_title_container">
<p class="two_score_title"><?php _e('Your optimized homepage score:', 'tenweb-speed-optimizer'); ?></p>
<div class="two_reanalyze_container">
<span class="two-page-speed two-optimizing <?php echo $reanalyze_button_status_current ? '' : 'two-hidden'; ?>"></span>
<a onclick="two_reanalyze_score(this)" data-from-wp-admin="1" data-post_id="front_page"
data-initiator="admin-bar" class="two_reanalyze_button">
<?php $reanalyze_button_status_current ? _e('Reanalyzing...', 'tenweb-speed-optimizer') : _e('Reanalyze', 'tenweb-speed-optimizer'); ?>
</a>
</div>
</div>
<?php $this->two_score_circles($front_score_data, 'front_page'); ?>
<div class="two_pages_count_info <?php echo esc_attr($free_reached) ? 'two_free_reached' : ''; ?>">
<p>
<?php
if (!$free_reached) {
echo sprintf(__('Optimize %s more pages within the Free Plan limit.', 'tenweb-speed-optimizer'), (int) $rest_page_count);
} else {
_e('You have reached the Free plan limit.', 'tenweb-speed-optimizer'); ?>
</p>
<p><?php _e('6 of 6', 'tenweb-speed-optimizer'); ?></p>
<div class="two_red_counter_line"></div>
<?php
} ?>
</div>
</div>
<div class="two_optimized_pages_info">
<p><?php _e('Optimized pages', 'tenweb-speed-optimizer'); ?></p>
<p><?php echo sprintf(__('%s of %s', 'tenweb-speed-optimizer'), (int) $this->optimized_pages_count, (int) $this->total_pages_count); ?></p>
</div>
<div class="two_optimized_images_info">
<p><?php _e('Optimized images', 'tenweb-speed-optimizer'); ?></p>
<?php if (empty($optimized_images_count) && empty($total_images_count)) { ?>
<p class="<?php echo esc_attr($this->empty_images_count_transient); ?>"><?php _e('0', 'tenweb-speed-optimizer'); ?></p>
<?php } else { ?>
<p><?php echo sprintf(__('%s of %s', 'tenweb-speed-optimizer'), (int) $optimized_images_count, (int) $total_images_count); ?></p>
<?php } ?>
</div>
<?php if (!$free_reached) {
$url = admin_url('edit.php?post_type=page'); ?>
<a href="<?php echo esc_url($url); ?>" class="two_add_page_button"><?php _e('Optimize more pages', 'tenweb-speed-optimizer'); ?></a>
<?php
} ?>
</div>
<?php
$checkout_url = TENWEB_DASHBOARD . '/websites/' . $this->domain_id . '/booster/pro';
$current_ts = time();
$deadline_ts = mktime(0, 0, 0, 11, 29, 2022);
$black_friday_on = true;
if ($current_ts > $deadline_ts) {
$black_friday_on = false;
}
if ($black_friday_on) {
$black_friday_upgrade_button = trim(TENWEB_DASHBOARD, '/') . '/upgrade-plan'
. '?from_plugin=' . \TenWebOptimizer\OptimizerUtils::FROM_PLUGIN . '?two_comes_from=adminBarAfterLimit';
$black_friday_total_pages = (int) $this->total_pages_count;
$black_friday_total_images = (int) $total_images_count; ?>
<div class="two_pro_container two_black_friday_offer">
<?php require __DIR__ . '/views/two_black_friday.php'; ?>
</div>
<?php
} else {
?>
<div>
<div class="two_pro_container">
<p class="two_pro_container_title"><?php _e('Achieve more with Booster Pro', 'tenweb-speed-optimizer'); ?></p>
<p class="two_pro_option two_pro_option_diamond"><?php echo sprintf(__('Auto-optimize all %s pages and %s images', 'tenweb-speed-optimizer'), (int) $this->total_pages_count, (int) $total_images_count); ?></p>
<p class="two_pro_option two_pro_option_diamond"><?php _e('Pro optimization with Cloudflare CDN', 'tenweb-speed-optimizer'); ?></p>
<p class="two_pro_option"><?php _e('50% faster load times', 'tenweb-speed-optimizer'); ?></p>
<p class="two_pro_option"><?php _e('30% higher PageSpeed score', 'tenweb-speed-optimizer'); ?></p>
<p class="two_pro_option"><?php _e('275 caching locations worldwide', 'tenweb-speed-optimizer'); ?></p>
<div class="two_pages_count_info two_agency_plan_intro">
<p><?php _e('Introducing our new Agency plan:', 'tenweb-speed-optimizer'); ?></p>
<p><?php _e('Optimize unlimited number of websites.', 'tenweb-speed-optimizer'); ?></p>
</div>
<a href="<?php echo esc_url($checkout_url . '?two_comes_from=adminBarAfterLimit'); ?>" target="_blank" class="two_add_page_button"><?php _e('Upgrade', 'tenweb-speed-optimizer'); ?></a>
</div>
</div>
<?php
}
} elseif ($this->two_booster_status == 2) {
$this->two_booster_testmode_content();
} elseif ($this->two_booster_status == 3) {
$this->two_booster_disconnect_content();
} elseif ($this->two_booster_status == 6) {
$this->two_booster_reonnect_content();
} elseif ($this->two_booster_status == 4) {
$this->two_booster_pro_content();
} elseif ($this->two_booster_status == 5) {
$this->two_booster_abandoned_content();
}
} ?>
</div>
<?php
return ob_get_clean();
}
/* Adminbar menu content in case of booster disconnected */
public function two_booster_disconnect_content()
{
$care_url = TENWEB_DASHBOARD . '/websites/?open=livechat';
if (!\TenWebOptimizer\OptimizerUtils::is_paid_user()) {
$care_url = '#';
add_action('admin_footer', function () {
$this->two_contact_care_popup();
});
add_action('wp_footer', function () {
$this->two_contact_care_popup();
});
} ?>
<div class="two_admin_bar_menu_content two_booster_disconnect">
<p class="two_status_title"><?php echo esc_html(sprintf(__('%s is disconnected', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<p><?php echo esc_html(sprintf(__('Your website is disconnected from %s service.', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<p><?php
esc_html_e('Please reconnect your website or ', 'tenweb-speed-optimizer'); ?>
<a href="<?php echo esc_url($care_url); ?>" class="two-open-contact-care-team" target="_blank">
<?php esc_html_e('contact our Customer Care Team', 'tenweb-speed-optimizer'); ?></a>
<?php esc_html_e(' for further assistance.', 'tenweb-speed-optimizer'); ?></p>
</div>
<?php
}
/* Adminbar menu content in case of booster needs reconnect */
public function two_booster_reonnect_content()
{
$two_disconnect_nonce = wp_create_nonce('two_disconnect_nonce');
$two_reconnect_nonce = wp_create_nonce('two_reconnect_nonce');
$query_args['two_disconnect'] = 1;
$query_args['two_reconnect'] = 1;
$query_args['two_reconnect_nonce'] = $two_reconnect_nonce;
$query_args['nonce'] = $two_disconnect_nonce;
$reconnect_link = add_query_arg(
$query_args,
get_admin_url() . 'admin.php?page=two_settings_page'
);
update_option(TW_OPTIMIZE_PREFIX . '_reconnection_bar_was_shown', 1, false); ?>
<div class="two_admin_bar_menu_content two_booster_disconnect">
<p class="two_status_title"><?php echo esc_html(sprintf(__('%s is disconnected', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<p><?php echo wp_kses_post(sprintf(__('Looks like there might be some problems with<br> the %s connection.', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<p><?php
echo esc_html(sprintf(__('Reconnect to %s to take full advantage of its features.', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME)); ?>
</p>
<a href="<?php echo esc_url($reconnect_link); ?>" class="two_add_page_button two_button_small"><?php _e('Reconnect', 'tenweb-speed-optimizer'); ?></a>
</div>
<?php
}
private function two_contact_care_popup()
{
$main_class = 'two-contact-care-popup-main two-hidden';
$close_icon = true;
require_once __DIR__ . '/views/customer_support.php';
customer_care_html($main_class, $close_icon);
}
/* Adminbar menu content in case of booster active in test mode */
public function two_booster_testmode_content()
{
$settings_url = TENWEB_DASHBOARD . '/websites/' . $this->domain_id . '/booster/frontend?tab=settings'; ?>
<div class="two_admin_bar_menu_content two_booster_test">
<p class="two_status_title"><?php echo esc_html(sprintf(__('%s is in Test mode', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<p><?php echo wp_kses_post(sprintf(__('Test mode temporarily disables %s <br>for website visitors.', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<p><?php _e('Go to 10Web dashboard to manage Test mode settings and preview optimization levels.', 'tenweb-speed-optimizer'); ?></p>
<a href="<?php echo esc_url($settings_url); ?>" target="_blank" class="two_add_page_button"><?php _e('Manage settings', 'tenweb-speed-optimizer'); ?></a>
</div>
<?php
}
/* Adminbar if booster plugin is PRO content */
public function two_booster_pro_content()
{
$front_score_data = get_option('two-front-page-speed');
$db_cloudflare_page = TENWEB_DASHBOARD . '/websites/' . $this->domain_id . '/booster/cloudflare';
$is_homepage_score = false;
if (!empty($front_score_data) && isset($front_score_data['current_score']) && isset($front_score_data['current_score']['desktop_score'])) {
$is_homepage_score = true;
}
$reanalyze_button_status_current = false;
if (!empty($front_score_data)) {
if (isset($front_score_data['current_score']) && isset($front_score_data['current_score']['status'])
&& $front_score_data['current_score']['status'] == 'inprogress') {
$reanalyze_button_status_current = true;
}
} ?>
<div class="two_admin_bar_menu_content two_booster_on_free two-any-reanalyzing-score-section" data-id="front_page">
<?php if (!$is_homepage_score) { ?>
<p class="two_info_row two_success"><?php _e('All pages are optimized', 'tenweb-speed-optimizer'); ?></p>
<?php } ?>
<p class="two_status_title"><?php echo esc_html(sprintf(__('%s is ON', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<div class="two_plan_container">
<p><?php echo esc_html(__('Current Plan: ' . $this->current_plan, 'tenweb-speed-optimizer')); ?></p>
<a href="#" class="two_clear_cache"><?php _e('Clear cache', 'tenweb-speed-optimizer'); ?></a>
</div>
<hr>
<div class="two_score_title_container">
<p class="two_score_title"><?php _e('Your optimized homepage score:', 'tenweb-speed-optimizer'); ?></p>
<div class="two_reanalyze_container">
<span class="two-page-speed two-optimizing <?php echo $reanalyze_button_status_current ? '' : 'two-hidden'; ?>"></span>
<a onclick="two_reanalyze_score(this)" data-from-wp-admin="1" data-post_id="front_page"
data-initiator="admin-bar" class="two_reanalyze_button">
<?php $reanalyze_button_status_current ? _e('Reanalyzing...', 'tenweb-speed-optimizer') : _e('Reanalyze', 'tenweb-speed-optimizer'); ?>
</a>
</div>
</div>
<?php $this->two_score_circles($front_score_data, 'front_page'); ?>
<div class="two_pages_count_info two_pages_count_all">
<?php
_e('All pages are optimized', 'tenweb-speed-optimizer'); ?>
</div>
<div class="two_optimized_pages_info">
<p><?php _e('Optimized pages', 'tenweb-speed-optimizer'); ?></p>
<p><?php echo (int) $this->total_pages_count; ?></p>
</div>
</div>
<?php
global $TwoSettings;
if (!TENWEB_SO_HOSTED_ON_10WEB && $TwoSettings->get_settings('cloudflare_cache_status') != 'on'
&& strtolower(TWO_SO_ORGANIZATION_NAME) === '10web') {?>
<div class="two_pro_container" style="background-image: none;">
<div class="two-cdn-not-applied">
<p class="two_pro_container_title"><?php esc_html_e('Pro optimization hasn’t been applied yet', 'tenweb-speed-optimizer'); ?></p>
<p class="two_pro_container_desc"><?php echo wp_kses('You have upgraded to 10Web Booster Pro but<br> haven’t enabled the Pro optimization on your<br> website.', ['br' => []]); ?></p>
</div>
<p class="two_pro_container_title"><?php esc_html_e('Enable CDN to enjoy the benefits:', 'tenweb-speed-optimizer'); ?></p>
<p class="two_pro_option"><?php esc_html_e('30% higher PageSpeed score', 'tenweb-speed-optimizer'); ?></p>
<p class="two_pro_option"><?php esc_html_e('50% faster load times', 'tenweb-speed-optimizer'); ?></p>
<p class="two_pro_option"><?php esc_html_e('275 caching locations worldwide', 'tenweb-speed-optimizer'); ?></p>
<a href="<?php echo esc_url($db_cloudflare_page); ?>" target="_blank" class="two_add_page_button"><?php esc_html_e('Enable', 'tenweb-speed-optimizer'); ?></a>
</div>
<?php
}
}
/* Frontend Adminbar menu content in case of page not optimized */
public function two_front_not_optimized_content()
{
global $post;
if (empty($post)) {
return false;
}
$post_id = $post->ID;
$posts_in_progress = $this->two_is_optimize_inprogress();
if ($posts_in_progress) {
$this->two_front_optimize_in_progress_content($post_id, true);
} else {
$checkout_url = TENWEB_DASHBOARD . '/websites/' . $this->domain_id . '/booster/pro'; ?>
<div class="two_admin_bar_menu_content two_not_optimized_content">
<p class="two_status_title"><?php echo esc_html(sprintf(__('Optimize this page with %s', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<p><?php echo esc_html(sprintf(__('We found that this page isn’t optimized with %s.', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<p><?php _e('Get a 90+ PageSpeed score, faster load times and smoother user experience by optimizing this page.', 'tenweb-speed-optimizer'); ?></p>
<a <?php echo ($this->optimized_pages_count >= 6) ? 'href="' . esc_url($checkout_url) . '"' : 'id="two_optimize_now_button"'; ?> data-post-id="<?php echo esc_attr($post_id); ?>" data-initiator="admin-bar" target="_blank"
class="two_add_page_button"><?php _e('Optimize', 'tenweb-speed-optimizer'); ?></a>
</div>
<?php
$this->two_front_optimize_in_progress_content($post_id);
}
}
/* Frontend Adminbar menu content in case of page is optimizing */
public function two_front_optimize_in_progress_content($post_id, $optimize_inprogress = false)
{
?>
<div class="two_in_progress_cont <?php echo !$optimize_inprogress ? 'two_hidden' : ''; ?>">
<p class="two_status_title"><?php _e('Optimization in progress…', 'tenweb-speed-optimizer'); ?></p>
<?php
if ($post_id == 'front_page') {
$page_title = 'Homepage'; ?>
<p><?php echo sprintf(__('Your %s is currently being optimized.', 'tenweb-speed-optimizer'), '<span>' . esc_html($page_title) . '</span>'); ?></p>
<?php
} else {
$page_title = get_the_title($post_id); ?>
<p><?php echo sprintf(__('Your %s page is currently being optimized.', 'tenweb-speed-optimizer'), '<span>' . esc_html($page_title) . '</span>'); ?></p>
<?php
} ?>
<p><?php _e('You will receive a notification once optimization is completed.', 'tenweb-speed-optimizer'); ?></p>
</div>
<?php
$this->two_empty_front_optimized_content_template($post_id);
}
/* Adminbar menu content in case of abandoned optimization */
public function two_booster_abandoned_content()
{
$abandon_url = home_url() . '?two_setup=1'; ?>
<div class="two_admin_bar_menu_content two_not_optimized_content">
<p class="two_status_title"><?php _e('Optimization not finished', 'tenweb-speed-optimizer'); ?></p>
<p><?php _e('You haven’t finished optimizing your website,<br> which means no changes were applied to your live site.', 'tenweb-speed-optimizer'); ?></p>
<p><?php _e('Return to the flow to finish the optimization.', 'tenweb-speed-optimizer'); ?></p>
<a href="<?php echo esc_url($abandon_url); ?>" target="_blank" class="two_add_page_button"><?php _e('Finish optimization', 'tenweb-speed-optimizer'); ?></a>
</div>
<?php
}
/* Frontend Adminbar menu content in case of page is already optimized */
public function two_front_optimized_content()
{
global $post;
if (empty($post)) {
return false;
}
$post_id = $post->ID;
if (is_front_page()) {
$page_title = __('Homepage', 'tenweb-speed-optimizer');
} else {
$page_title = get_the_title($post_id);
}
/* Check home page */
if (is_front_page()) {
$score_data = get_option('two-front-page-speed');
$post_id = 'front_page';
} else {
$score_data = get_post_meta($post_id, 'two_page_speed');
$score_data = end($score_data);
}
$date = 0;
if (!empty($score_data) && !isset($score_data['previous_score'])) {
return false;
} elseif (!empty($score_data) && isset($score_data['current_score']) && isset($score_data['current_score']['desktop_score'])) {
$optimized_pages = \TenWebOptimizer\OptimizerUtils::getCriticalPages();
if (isset($optimized_pages[$post_id]) && isset($optimized_pages[$post_id]['critical_date'])) {
$date = $optimized_pages[$post_id]['critical_date'];
} elseif (isset($score_data['current_score']['date'])) {
$date = strtotime($score_data['current_score']['date']);
}
}
$modified_date = get_the_modified_date('d.m.Y h:i:s a', $post_id);
$modified_date = strtotime($modified_date);
$posts_in_progress = $this->two_is_optimize_inprogress();
if ($posts_in_progress) {
$this->two_front_optimize_in_progress_content($post_id, true);
} else { ?>
<div class="two_admin_bar_menu_content two_optimized two-any-reanalyzing-score-section" data-id="<?php echo esc_attr($post_id); ?>">
<p class="two_status_title"><?php _e('Congrats!', 'tenweb-speed-optimizer'); ?></p>
<div class="two_optimized_congrats_container">
<p class="two_optimized_congrats_subtitle">
<span class="two_optimized_congrats_title"><?php echo esc_html($page_title) . ' '; ?></span>
<?php echo esc_html(sprintf(
__(' %s is successfully optimized.', 'tenweb-speed-optimizer'),
(!is_front_page() ? 'page' : '')
)); ?>
</p>
<?php echo wp_kses_post($this->two_check_score_improvement($score_data)); ?>
</div>
<div class="two_score_success_container">
<?php $this->two_score_circles($score_data, $post_id); ?>
</div>
<?php if ($modified_date > $date && $date != 0) { ?>
<a id="two_optimize_now_button" data-post-id="<?php echo esc_attr($post_id); ?>" data-initiator="admin-bar" target="_blank"
class="two_add_page_button"><?php _e('Re-optimize', 'tenweb-speed-optimizer'); ?></a>
<?php } ?>
</div>
<?php
$this->two_front_optimize_in_progress_content($post_id);
}
}
public function two_empty_front_optimized_content_template($post_id)
{
if ($post_id == 'front_page') {
$page_title = 'Homepage';
} else {
$page_title = get_the_title($post_id);
} ?>
<div class="two_admin_bar_menu_content two_empty_front_optimized_content two_hidden two-any-reanalyzing-score-section" data-id="<?php echo esc_attr($post_id); ?>">
<p class="two_status_title"><?php _e('Congrats!', 'tenweb-speed-optimizer'); ?></p>
<div class="two_optimized_congrats_container two-any-reanalyzing-score-section" data-id="<?php echo esc_attr($post_id); ?>">
<p class="two_optimized_congrats_subtitle">
<span class="two_optimized_congrats_title"><?php echo esc_html($page_title) . ' '; ?></span>
<?php echo esc_html(sprintf(
__(' %s is successfully optimized.', 'tenweb-speed-optimizer'),
(!is_front_page() ? 'page' : '')
)); ?>
</p>
<?php $this->two_check_score_improvement(''); ?>
</div>
<?php $this->two_score_circles([], ''); ?>
</div>
<?php
}
/* Show notification during the page load if there is optimizing page in progress */
public function two_optimize_notification()
{
if (is_admin() && $this->two_booster_status == 1) {
if ($this->two_booster_status == 3 || $this->two_booster_status == 2 || $this->two_booster_status == 5) {
return;
}
$data = ['optimized' => [], 'optimizing' => []];
$post_ids = new \WP_Query([
'post_type' => ['page', 'post'],
'fields' => 'ids',
// phpcs:ignore Squiz.PHP.CommentedOutCode.Found
// 'meta_query' => array(
// array(
// 'key' => 'two_page_speed',
// ),
// )
]);
$post_ids = isset($post_ids->posts) ? $post_ids->posts : [];
$two_optimization_notif_status = get_option('two_optimization_notif_status');
foreach ($post_ids as $post_id) {
$page_score = get_post_meta($post_id, 'two_page_speed', true);
$page_title = get_the_title($post_id);
$status = 'optimized';
$critical_pages = \TenWebOptimizer\OptimizerUtils::getCriticalPages();
if (\TenWebWpTransients\OptimizerTransients::get('two_optimize_inprogress_' . $post_id)) {
$status = 'optimizing';
} elseif (!array_key_exists($post_id, $critical_pages)) {
$status = 'notOptimized';
}
if (\TenWebWpTransients\OptimizerTransients::get('two_optimize_inprogress_' . $post_id)
|| (isset($two_optimization_notif_status[$post_id]) && $two_optimization_notif_status[$post_id] == 'optimizing')) {
$data['optimizing'][] = [
'status' => $status,
'post_id' => $post_id,
'post_title' => $page_title,
];
} elseif (!empty($page_score) && isset($page_score['current_score']) && isset($page_score['previous_score'])
&& isset($two_optimization_notif_status[$post_id]) && $two_optimization_notif_status[$post_id] == 'optimized_not_closed') {
$data['optimized'][] = [
'status' => $status,
'post_id' => $post_id,
'post_title' => $page_title,
'mobile_new' => $page_score['current_score']['mobile_score'] ?? '',
'mobile_loading_time_new' => $page_score['current_score']['mobile_tti'] ?? '',
'desktop_new' => $page_score['current_score']['desktop_score'] ?? '',
'desktop_loading_time_new' => $page_score['current_score']['desktop_tti'] ?? '',
'mobile_old' => $page_score['previous_score']['mobile_score'] ?? '',
'mobile_loading_time_old' => $page_score['previous_score']['mobile_tti'] ?? '',
'desktop_old' => $page_score['previous_score']['desktop_score'] ?? '',
'desktop_loading_time_old' => $page_score['previous_score']['desktop_tti'] ?? '',
];
}
}
if (empty($data['optimized']) && empty($data['optimizing'])) {
return;
}
ob_start(); ?>
<div class="two_admin_bar_menu_main_notif <?php echo empty($data['optimized']) ? 'two_hidden' : ''; ?>">
<?php
$i = 1;
foreach ($data['optimized'] as $optimized) {
$score_data = [
'previous_score' => [
'mobile_score' => $optimized['mobile_old'],
'mobile_tti' => $optimized['mobile_loading_time_old'],
'desktop_score' => $optimized['desktop_old'],
'desktop_tti' => $optimized['desktop_loading_time_old'],
],
'current_score' => [
'mobile_score' => $optimized['mobile_new'],
'mobile_tti' => $optimized['mobile_loading_time_new'],
'desktop_score' => $optimized['desktop_new'],
'desktop_tti' => $optimized['desktop_loading_time_new']
],
]; ?>
<div class="two_admin_bar_menu_content two_optimized">
<span class="two_admin_bar_menu_main_notif_optimized_close" data-post_id="<?php echo esc_attr($optimized['post_id']); ?>"></span>
<div class="two_optimized_cont two-any-reanalyzing-score-section" data-id="<?php echo esc_attr($optimized['post_id']); ?>">
<div class="two_optimized_congrats_row">
<p class="two_status_title"><?php _e('Congrats!', 'tenweb-speed-optimizer'); ?></p>
<?php if (count($data['optimized']) > 1) { ?>
<span class="two_arrow <?php echo ($i == 1) ? 'two_up_arrow' : 'two_down_arrow'; ?>"></span>
<?php } ?>
</div>
<div class="two_optimized_congrats_container">
<p class="two_optimized_congrats_subtitle">
<span class="two_optimized_congrats_title"><?php echo esc_html($optimized['post_title'] . ' '); ?></span>
<?php echo esc_html(sprintf(
__(' %s is successfully optimized.', 'tenweb-speed-optimizer'),
(!is_front_page() ? 'page' : '')
)); ?>
</p>
<?php echo wp_kses_post($this->two_check_score_improvement($score_data)); ?>
</div>
<div class="two_score_block_container <?php echo ($i == 1) ? '' : 'two_hidden'; ?>">
<?php
$this->two_score_circles($score_data, $optimized['post_id']); ?>
</div>
</div>
<?php if ($this->referral_hash) { ?>
<div class="two_get_referral_link_admin_bar">
<p class="two_get_referral_title">
<img src="<?php echo esc_url(TENWEB_SO_URL . '/assets/images/shape.png'); ?>">
<?php _e('Refer a friend and receive a $20 credit for the first referral and $10 credit for each additional one.', 'tenweb-speed-optimizer'); ?>
</p>
<a class="two-link-to-wp-referral" href="<?php echo esc_url(admin_url('admin.php?page=two_referral_program')); ?>">
<?php esc_html_e('Get Referral link', 'tenweb-speed-optimizer'); ?>
</a>
</div>
<?php } ?>
</div>
<?php
$i++;
} ?>
<?php foreach ($data['optimizing'] as $optimizing) { ?>
<div class="two_admin_bar_menu_content two_optimizing_container" data-post_id="<?php echo esc_attr($optimizing['post_id']); ?>">
<p class="two_optimizing_title"><span></span><?php _e('Optimization in progress…', 'tenweb-speed-optimizer'); ?></p>
<p><?php echo sprintf(__('Your %s page is currently being optimized.', 'tenweb-speed-optimizer'), '<span>' . esc_html($optimizing['post_title']) . '</span>'); ?></p>
</div>
<?php } ?>
</div>
<?php
return ob_get_clean();
}
}
/* Get website images total count and optimized images count from endpoint */
public function get_images_data_api()
{
$two_images_count = \TenWebWpTransients\OptimizerTransients::get('two_images_count');
if (!empty($two_images_count)) {
$this->optimized_images_count = $two_images_count['optimized_images_count'];
$this->total_images_count = $two_images_count['total_images_count'];
$this->empty_images_count_transient = '';
} else {
$this->empty_images_count_transient = 'two-adminBar two_empty_images_count';
}
}
/* Check if current frontend page is optimized */
public function two_is_page_optimized()
{
global $post;
if (empty($post)) {
return false;
}
$post_id = $post->ID;
if (is_front_page()) {
$post_id = 'front_page';
}
$optimized_pages = \TenWebOptimizer\OptimizerUtils::getCriticalPages();
if (isset($optimized_pages[$post_id])) {
return true;
}
return false;
}
/* Check current page optimization in progress */
public function two_is_optimize_inprogress()
{
global $post;
if (empty($post)) {
return false;
}
$post_id = $post->ID;
if (is_front_page()) {
$post_id = 'front_page';
}
if (\TenWebWpTransients\OptimizerTransients::get('two_optimize_inprogress_' . $post_id)) {
return true;
}
return false;
}
/* Before and After score template */
public function two_score_circles($score_data, $post_id)
{
$reanalyze_button_status_previous = false;
$reanalyze_button_status_current = false;
if (!empty($score_data)) {
if (isset($score_data['current_score']) && isset($score_data['current_score']['status'])
&& $score_data['current_score']['status'] == 'inprogress') {
$reanalyze_button_status_current = true;
}
if (isset($score_data['previous_score']) && isset($score_data['previous_score']['status'])
&& $score_data['previous_score']['status'] == 'inprogress') {
$reanalyze_button_status_previous = true;
}
} ?>
<div class="two_score_block">
<div class="two_score_block_left">
<p class="two_score_block_title two_score_title_adminbar"><?php _e('Before optimization', 'tenweb-speed-optimizer'); ?></p>
<?php if (empty($score_data) || !isset($score_data['previous_score'])
|| !isset($score_data['previous_score']['desktop_score']) || $reanalyze_button_status_previous) {
$no_old_scores = 'two-no-scores';
} ?>
<div class="two_score_container_both two-old-scores <?php echo isset($no_old_scores) ? esc_html($no_old_scores) : ''; ?>"
data-no-score-for="<?php echo $reanalyze_button_status_previous ? esc_attr($post_id) : ''; ?>">
<div class="two_score_container two_score_container_mobile_old">
<div class="two-score-circle" data-score="<?php echo isset($no_old_scores) ? '' : (int) $score_data['previous_score']['mobile_score']; ?>" data-size="30"
data-thickness="2" data-id="mobile">
<span class="two-score-circle-animated"></span>
</div>
<div class="two_score_info">
<p><?php _e('Mobile score', 'tenweb-speed-optimizer'); ?></p>
<p><?php _e('Load time: ', 'tenweb-speed-optimizer'); ?>
<span class="two_load_time"><?php echo isset($no_old_scores) ? '' : esc_html($score_data['previous_score']['mobile_tti'] . __('s', 'tenweb-speed-optimizer')); ?></span></p>
</div>
</div>
<div class="two_score_container two_score_container_desktop_old">
<div class="two-score-circle" data-score="<?php echo isset($no_old_scores) ? '' : (int) $score_data['previous_score']['desktop_score']; ?>" data-size="30"
data-thickness="2" data-id="desktop">
<span class="two-score-circle-animated"></span>
</div>
<div class="two_score_info">
<p><?php _e('Desktop score', 'tenweb-speed-optimizer'); ?></p>
<p><?php _e('Load time: ', 'tenweb-speed-optimizer'); ?>
<span class="two_load_time"><?php echo isset($no_old_scores) ? '' : esc_html($score_data['previous_score']['desktop_tti'] . __('s', 'tenweb-speed-optimizer')); ?></span></p>
</div>
</div>
<?php if ($post_id != '') { ?>
<a onclick="<?php echo 'two_reanalyze_score(this)'; ?>" data-from-wp-admin="1" data-post_id="<?php echo esc_attr($post_id); ?>" target="_blank"
data-initiator="admin-bar" class="two_reanalyze_link <?php echo $reanalyze_button_status_previous ? 'two-hidden' : ''; ?>">
</a>
<span class="two-page-speed two-optimizing <?php echo $reanalyze_button_status_previous ? '' : 'two-hidden'; ?>"></span>
<?php } ?>
</div>
</div>
<div class="two_score_block_right">
<p class="two_score_block_title two_score_title_adminbar"><?php echo esc_html(sprintf(__('After %s optimization', 'tenweb-speed-optimizer'), TWO_SO_ORGANIZATION_NAME . ' Booster')); ?></p>
<?php if (empty($score_data) || !isset($score_data['current_score'])
|| !isset($score_data['current_score']['desktop_score']) || $reanalyze_button_status_current) {
$no_new_scores = 'two-no-scores';
} ?>
<div class="two_score_container_both two-new-scores <?php echo isset($no_new_scores) ? esc_html($no_new_scores) : ''; ?>"
data-no-score-for="<?php echo $reanalyze_button_status_current ? esc_attr($post_id) : ''; ?>">
<div class="two_score_container two_score_container_mobile">
<div class="two-score-circle" data-score="<?php echo isset($no_new_scores) ? '' : (int) $score_data['current_score']['mobile_score']; ?>" data-size="30"
data-thickness="2" data-id="mobile">
<span class="two-score-circle-animated"></span>
</div>
<div class="two_score_info">
<p><?php _e('Mobile score', 'tenweb-speed-optimizer'); ?></p>
<p><?php _e('Load time: ', 'tenweb-speed-optimizer'); ?>
<span class="two_load_time"><?php echo isset($no_new_scores) ? '' : esc_html($score_data['current_score']['mobile_tti'] . __('s', 'tenweb-speed-optimizer')); ?></span></p>
</div>
</div>
<div class="two_score_container two_score_container_desktop">
<div class="two-score-circle" data-score="<?php echo isset($no_new_scores) ? '' : (int) $score_data['current_score']['desktop_score']; ?>" data-size="30"
data-thickness="2" data-id="desktop">
<span class="two-score-circle-animated"></span>
</div>
<div class="two_score_info">
<p><?php _e('Desktop score', 'tenweb-speed-optimizer'); ?></p>
<p><?php _e('Load time: ', 'tenweb-speed-optimizer'); ?>
<span class="two_load_time"><?php echo isset($no_new_scores) ? '' : esc_html($score_data['current_score']['desktop_tti'] . __('s', 'tenweb-speed-optimizer')); ?></span></p>
</div>
</div>
<?php if ($post_id != '') { ?>
<a onclick="<?php echo 'two_reanalyze_score(this)'; ?>" data-from-wp-admin="1" data-post_id="<?php echo esc_attr($post_id); ?>" target="_blank"
data-initiator="admin-bar" class="two_reanalyze_link <?php echo $reanalyze_button_status_current ? 'two-hidden' : ''; ?>">
</a>
<span class="two-page-speed two-optimizing <?php echo $reanalyze_button_status_current ? '' : 'two-hidden'; ?>"></span>
<?php } ?>
</div>
</div>
</div>
<?php
}
public function two_check_score_improvement($score_data)
{
$improvement_sec = '';
if ($score_data == '') {
$improvement_sec = '';
} else {
if (!empty($score_data) && isset($score_data['current_score']) && isset($score_data['previous_score'])
&& isset($score_data['current_score']['desktop_score']) && isset($score_data['previous_score']['desktop_score'])
&& (float) $score_data['previous_score']['desktop_score'] != 0 && (float) $score_data['previous_score']['mobile_score'] != 0) {
/* score improvement calculation */
$desktopScoreImprove = (((float) $score_data['current_score']['desktop_score']
- (float) $score_data['previous_score']['desktop_score']) / (float) $score_data['previous_score']['desktop_score']) * 100;
$mobileScoreImprove = (((float) $score_data['current_score']['mobile_score']
- (float) $score_data['previous_score']['mobile_score']) / (float) $score_data['previous_score']['mobile_score']) * 100;
$maxScore = max($desktopScoreImprove, $mobileScoreImprove);
$showImproveBadge = round($maxScore) > 20;
$improvedPercent = round($maxScore) > 20 ? round($maxScore) : 0;
if ($showImproveBadge) {
$improvement_sec = '<p class="two_optimized_improvement">Improved<span>' . esc_html($improvedPercent) . '%' . '</span></p>';
}
}
}
return $improvement_sec;
}
}