File: /home/axxoncom/domains/iamsnmovie.com/public_html/wp-content/plugins/photo-gallery/booster/main.php
<?php
class TenWebBoosterBWG {
const VERSION = '1.0.0';
const PREFIX = 'twbbwg';
const BOOSTER_PlUGIN_FILE = 'tenweb-speed-optimizer/tenweb_speed_optimizer.php';
public $submenu = array(
'parent_slug' => FALSE,
'title' => 'Speed & Image Optimization',
'icon' => '',
);
public $page = array(
'section_booster_title' => 'Optimize all images and galleries',
'section_booster_desc' => 'Use the free 10Web Booster plugin to automatically optimize your images and boost PageSpeed score.',
'section_booster_success_title' => 'Optimize all images',
'section_booster_success_desc' => 'Speed up the entire website',
'section_optimize_images' => TRUE,
'section_analyze' => TRUE,
'section_analyze_desc' => 'Speed up your website and increase PageSpeed score by optimizing all images.',
);
public $cta_button = array(
'section_label' => 'PageSpeed score',
'label' => 'Check PageSpeed score',
'button_color' => '',
'text_color' => '',
'class' => 'twb-green-button',
);
private $admin_bar = TRUE;
private $gutenberg = TRUE;
private $elementor = TRUE;
public $show_cta_option = TRUE;
public $show_cta = TRUE;
private $list = TRUE;
public $slug = '';
public $plugin_dir = '';
public $plugin_url = '';
public $booster_plugin_status = 0; //0-not installed, 1-not active, 2-active
public $booster_is_connected = FALSE;
public $is_paid = FALSE;
public $subscription_id = FALSE;
public $status = 'not_installed';
/* is booster SDK called from plugin or theme */
public $is_plugin = TRUE;
public $submenu_url = '';
public function __construct($params = array()) {
$this->define_params($params);
$this->change_defaults($params);
$this->set_booster_data();
$this->add_actions();
}
private function add_actions() {
add_action('init', array( $this, 'register_meta' ));
add_action('admin_enqueue_scripts', array( $this, 'register_admin_scripts' ));
add_action('wp_enqueue_scripts', array( $this, 'register_scripts' ));
if ( $this->submenu['parent_slug'] || !$this->is_plugin ) {
add_action('admin_menu', array( $this, 'add_submenu' ));
}
add_action('wp_ajax_twb', array( $this, 'admin_ajax' ));
add_action('wp_ajax_twb_check_score', array( $this, 'check_score' ));
add_action('wp_ajax_twb_notif_check', array( $this, 'notif_check' ));
/* Booster is inactive and (CTAs are enabled from options or option desabled at all).*/
if ( $this->booster_plugin_status != 2 && ($this->show_cta || !$this->show_cta_option) ) {
if ( $this->admin_bar ) {
add_action('admin_bar_menu', array( $this, 'admin_bar_menu' ), 100);
}
if ( $this->elementor && !class_exists('TWBElementor') ) {
require_once('Elementor.php');
new TWBBWGElementor($this);
}
if ( $this->gutenberg && !class_exists('TWBGutenberg') ) {
require_once('Gutenberg.php');
new TWBBWGGutenberg($this);
}
if ( $this->list && !class_exists('TWBList') ) {
require_once('List.php');
$this->list = TWBBWGList($this);
}
}
}
public function admin_ajax() {
$speed_ajax_nonce = isset($_POST['speed_ajax_nonce']) ? sanitize_text_field($_POST['speed_ajax_nonce']) : '';
if ( !wp_verify_nonce($speed_ajax_nonce, 'speed_ajax_nonce') ){
die('Permission Denied.');
}
if ( !isset($_POST['action']) ) {
return;
}
$page = sanitize_text_field($_POST['action']);
$allowed_pages = array( 'twb' );
if ( !in_array($page, $allowed_pages) ) {
return;
}
$this->admin_page();
}
public function check_score() {
$twb_nonce = isset($_POST['twb_nonce']) ? sanitize_text_field($_POST['twb_nonce']) : '';
if ( !wp_verify_nonce($twb_nonce, 'twb_nonce')
|| !function_exists('current_user_can')
|| !current_user_can('manage_options') ) {
die('Permission Denied.');
}
if ( !isset($_POST['action']) ) {
return;
}
$page = sanitize_text_field($_POST['action']);
$allowed_pages = array( 'twb_check_score' );
if ( !in_array($page, $allowed_pages) ) {
return;
}
$post_id = isset($_POST["post_id"]) ? sanitize_text_field($_POST["post_id"]) : 0;
echo TWBBWGLibrary::check_score($post_id);
die();
}
/* Ajax action which is checking if score count in progress/complete to show notification */
public function notif_check() {
$twb_nonce = isset($_POST['twb_nonce']) ? sanitize_text_field($_POST['twb_nonce']) : '';
if ( !wp_verify_nonce($twb_nonce, 'twb_nonce') ){
die('Permission Denied.');
}
if ( !isset($_POST['action']) ) {
return;
}
$page = sanitize_text_field($_POST['action']);
$allowed_pages = array( 'twb_notif_check' );
if ( !in_array($page, $allowed_pages) ) {
return;
}
require_once('AdminBar.php');
new TWBBWGAdminBar('', $this);
}
private function define_params($params) {
require_once('TWBLibrary.php');
$submenu_icon_styles = array(
'background-color: #22B339',
'border-radius: 20px',
'display: inline-block',
'height: 6px',
'margin: 0 0 1px 3px',
'width: 6px',
);
$this->submenu['icon'] = '<span class="' . self::PREFIX . '-submenu-icon" style="' . implode(';', $submenu_icon_styles) . '"></span>';
if ( isset($params['page']['slug']) ) {
$this->slug = $params['page']['slug'];
}
else {
if ( isset($params['is_plugin']) && !$params['is_plugin'] ) {
$path = explode('/themes/', get_template_directory());
$this->slug = isset($path[1]) ? $path[1] : 'theme';
}
else {
$this->slug = str_replace(array( 'booster', '/' ), array( '', '' ), plugin_basename(dirname(__FILE__)));
}
}
$admin_page = admin_url((isset($params['is_plugin']) && !$params['is_plugin']) ? 'themes.php' : 'admin.php');
$this->submenu_url = add_query_arg( array('page' => self::PREFIX . '_' . $this->slug), $admin_page );
}
private function change_defaults( $params = array()) {
foreach ( $params as $key => $param ) {
if ( isset($this->$key) ) {
if ( is_array($param) ) {
foreach ( $param as $par_key => $par ) {
$param[$par_key] = sanitize_text_field($par);
}
$this->$key = array_merge($this->$key, $param);
}
else {
$this->$key = sanitize_text_field($param);
}
}
}
}
public function register_scripts( ) {
$required_scripts = array( 'jquery' );
$required_styles = array( 'twb-open-sans' );
wp_register_style('twb-open-sans', 'https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,600,700,800&display=swap');
wp_register_style(self::PREFIX . '-global', $this->plugin_url . '/assets/css/global.css', $required_styles, self::VERSION);
if ( $this->cta_button['button_color'] || $this->cta_button['text_color'] ) {
$cutom_css = "
#wp-admin-bar-booster-top-button a.ab-item,
#wp-admin-bar-twb_adminbar_info .twb_admin_bar_menu_header:not(.twb_not_optimized),
#wp-admin-bar-booster-top-button a.ab-item:hover,
#wpadminbar:not(.mobile) .ab-top-menu>#wp-admin-bar-booster-top-button:hover>.ab-item {
background-color: " . $this->cta_button['button_color'] . " !important;
color: " . $this->cta_button['text_color'] . " !important;
}";
wp_add_inline_style(self::PREFIX . '-global', $cutom_css);
}
wp_register_script(self::PREFIX . '-circle', $this->plugin_url . '/assets/js/circle-progress.js', $required_scripts, '1.2.2');
array_push($required_scripts, self::PREFIX . '-circle');
wp_register_script(self::PREFIX . '-global', $this->plugin_url . '/assets/js/global.js', $required_scripts, self::VERSION);
wp_localize_script(self::PREFIX . '-global', 'twb', array(
'nonce' => wp_create_nonce('twb_nonce'),
'ajax_url' => admin_url('admin-ajax.php'),
'plugin_url' => $this->plugin_url,
'href' => $this->submenu_url,
));
}
public function add_submenu() {
if ( $this->is_plugin ) {
add_submenu_page(
$this->submenu['parent_slug'],
$this->submenu['title'],
$this->submenu['title'] . $this->submenu['icon'],
'manage_options',
self::PREFIX . '_' . $this->slug,
array($this, 'admin_page'),
1
);
}
else {
add_theme_page(
$this->submenu['title'],
$this->submenu['title'] . $this->submenu['icon'],
'manage_options',
self::PREFIX . '_' . $this->slug,
array($this, 'admin_page')
);
}
}
/**
* Display page.
*/
public function admin_page() {
require_once($this->plugin_dir . '/controller.php');
$controller = new BoosterControllerBWG($this);
$controller->execute();
}
/**
* Top banner.
*
* @param $params
*/
public function top_banner($params = array()) {
require_once($this->plugin_dir . '/controller.php');
$controller = new BoosterControllerBWG($this);
$controller->execute('top_banner', $params);
}
/**
* Admin bar menu.
*
* @param $wp_admin_bar
*/
public function admin_bar_menu( $wp_admin_bar ) {
require_once('AdminBar.php');
new TWBBWGAdminBar($wp_admin_bar, $this);
}
/**
* Set the data for Booster.
*
* @return void
*/
public function set_booster_data() {
$this->show_cta = get_option("twb_show_cta", TRUE);
$this->subscription_id = get_transient('tenweb_subscription_id');
$this->booster_plugin_status = $this->get_booster_status();
if ( ( defined('TENWEB_CONNECTED_SPEED') &&
class_exists('\Tenweb_Authorization\Login') &&
\Tenweb_Authorization\Login::get_instance()->check_logged_in() &&
\Tenweb_Authorization\Login::get_instance()->get_connection_type() == TENWEB_CONNECTED_SPEED ) ||
( defined('TENWEB_SO_HOSTED_ON_10WEB') && TENWEB_SO_HOSTED_ON_10WEB ) ) {
$this->booster_is_connected = TRUE;
if ( method_exists('\TenWebOptimizer\OptimizerUtils', 'is_paid_user')
&& TenWebOptimizer\OptimizerUtils::is_paid_user() ) {
$this->is_paid = TRUE;
}
}
if ( $this->booster_is_connected ) {
$this->status = 'connected';
}
else {
$this->status = 'sign_up';
if ( $this->booster_plugin_status == 2 || $this->subscription_id ) {
$this->status = 'connect';
}
}
// if ( $this->booster_plugin_status == 2 ) {
// if ( $this->booster_is_connected ) {
// $this->status = 'connected';
// }
// else {
// if ( $this->subscription_id ) {
// $this->status = 'connect';
// } else {
// $this->status = 'sign_up';
// }
// }
// }
return $this;
}
/**
* Check the plugin status.
*
* @return int 0-not installed, 1-not active, 2-active
*/
private function get_booster_status() {
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
if ( is_plugin_active(self::BOOSTER_PlUGIN_FILE) ) {
return 2;
}
elseif ( $this->is_plugin_installed() ) {
return 1;
}
else {
return 0;
}
}
/**
* Check if the plugin already installed.
*
* @param string $slug plugin's slug
*
* @return bool
*/
private function is_plugin_installed() {
if ( ! function_exists( 'get_plugins' ) ) {
require_once( ABSPATH . 'wp-admin/includes/plugin.php');
}
$all_plugins = get_plugins();
return !empty($all_plugins[self::BOOSTER_PlUGIN_FILE]);
}
public function register_admin_scripts() {
$required_scripts = array( 'jquery' );
$required_styles = array('twb-open-sans');
wp_register_style('twb-open-sans', 'https://fonts.googleapis.com/css?family=Open+Sans:300,400,500,600,700,800&display=swap');
wp_register_style(self::PREFIX . '-global', $this->plugin_url . '/assets/css/global.css', $required_styles, self::VERSION);
wp_register_script(self::PREFIX . '-circle', $this->plugin_url . '/assets/js/circle-progress.js', $required_scripts, '1.2.2');
array_push($required_scripts, self::PREFIX . '-circle');
wp_register_script(self::PREFIX . '-global', $this->plugin_url . '/assets/js/global.js', $required_scripts, self::VERSION);
wp_localize_script(self::PREFIX . '-global', 'twb', array(
'nonce' => wp_create_nonce('twb_nonce'),
'ajax_url' => admin_url('admin-ajax.php'),
'cta_button' => $this->cta_button,
'href' => $this->submenu_url,
));
wp_register_style(self::PREFIX, $this->plugin_url . '/assets/css/speed.css', $required_styles, self::VERSION);
wp_register_style(self::PREFIX . '-top-banner', $this->plugin_url . '/assets/css/top_banner.css', $required_styles, self::VERSION);
wp_register_script(self::PREFIX . '-script', $this->plugin_url . '/assets/js/speed.js', $required_scripts, self::VERSION);
wp_localize_script(self::PREFIX . '-script', 'twb', array(
'install_button_text' => __('Install 10Web Booster plugin', 'tenweb-booster'),
'activate_button_text' => __('Activate 10Web Booster plugin', 'tenweb-booster'),
'wrong_email' => __('Please enter a valid email address.', 'tenweb-booster'),
'empty_email' => __('Email field should not be empty.', 'tenweb-booster'),
'wrong_domain_url' => __('Please enter a URL from your domain.', 'tenweb-booster'),
'wrong_url' => __('Please enter correct URL.', 'tenweb-booster'),
'enter_page_url' => __('Please enter a Page URL.', 'tenweb-booster'),
'page_is_not_public' => __('This page is not public. Please publish the page to check the score.', 'tenweb-booster'),
'sign_up' => __('Sign up', 'tenweb-booster'),
'connect' => __('Connect', 'tenweb-booster'),
'home_url' => get_home_url(),
'home_speed_status' => $this->check_home_speed_status(),
'analyze_button_text' => __('Analyze', 'tenweb-booster'),
'something_wrong' => __('Something went wrong, please try again.', 'tenweb-booster'),
'speed_ajax_nonce' => wp_create_nonce('speed_ajax_nonce'),
'compressed_pages_status' => $this->compressed_pages_status(),
'nonce' => wp_create_nonce('twb_nonce'),
'ajax_url' => admin_url('admin-ajax.php'),
'cta_button' => $this->cta_button,
'href' => $this->submenu_url,
));
}
/**
* Check if data of optimized pages/images kept in DB
* Using to send localized status to js and run ajax if needed to get data from endpoint
*
* @return bool
*/
public function compressed_pages_status() {
$data = get_transient( 'twb_optimized_pages' );
if( !empty( $data) ) {
return 1;
}
return 0;
}
public function check_home_speed_status() {
$twb_hompage_optimized = get_option('twb_hompage_optimized');
/* Case when homepage optimized but score not updated */
if ( !empty($twb_hompage_optimized) && $twb_hompage_optimized == 1 ) {
return 0;
}
$twb_speed_score = get_option('twb_speed_score');
if ( !empty($twb_speed_score) && isset($twb_speed_score['last']) && isset($twb_speed_score['last']['url']) ) {
$url = $twb_speed_score['last']['url'];
if ( isset($twb_speed_score[$url]) && $twb_speed_score[$url]['desktop_score'] && $twb_speed_score[$url]['mobile_score'] ) {
return array(
'desktop_score' => $twb_speed_score[$url]['desktop_score'],
'mobile_score' => $twb_speed_score[$url]['mobile_score'],
);
}
}
return 0;
}
public function register_meta() {
$allowed_post_types = array('post', 'page');
foreach ($allowed_post_types as $type) {
register_post_meta($type, 'two_page_speed', [
'show_in_rest' => array(
'schema' => array(
'type' => 'object',
'properties' => array(
'previous_score' => array(
'type' => 'object',
'properties' => array(
'desktop_score' => array(
'type' => 'number',
),
'desktop_tti' => array(
'type' => 'string',
),
'mobile_score' => array(
'type' => 'number',
),
'mobile_tti' => array(
'type' => 'string',
),
'date' => array(
'type' => 'string',
),
),
),
'current_score' => array(
'type' => 'object',
'properties' => array(
'desktop_score' => array(
'type' => 'number',
),
'desktop_tti' => array(
'type' => 'string',
),
'mobile_score' => array(
'type' => 'number',
),
'mobile_tti' => array(
'type' => 'string',
),
'date' => array(
'type' => 'string',
),
),
),
),
),
),
'single' => TRUE,
'type' => 'object'
]);
}
}
}