uawdijnntqw1x1x1
IP : 216.73.216.109
Hostname : premium160.web-hosting.com
Kernel : Linux premium160.web-hosting.com 4.18.0-553.54.1.lve.el8.x86_64 #1 SMP Wed Jun 4 13:01:13 UTC 2025 x86_64
Disable Function : None :)
OS : Linux
PATH:
/
home
/
batcwwjx
/
public_html
/
Update
/
..
/
wp-content
/
plugins
/
wp-smushit
/
core
/
class-hub-connector.php
/
/
<?php /** * Hub_Connector class. * * @package Smush */ namespace Smush\Core; use Smush\Core\Membership\Membership; use WPMUDEV\Hub\Connector\API; use WPMUDEV_Dashboard; use WPMUDEV\Hub\Connector; if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Class Hub_Connector * * Handles Hub connection functionality for the Smush plugin. */ class Hub_Connector extends Controller { /** * The identifier for the Smush plugin in the Hub. * * @const string */ public const PLUGIN_IDENTIFIER = 'smush'; /** * The action name used for the Hub connection. * * @const string */ public const CONNECTION_ACTION = 'hub_connection'; /** * Valid screens for the Hub Connector. * * @var array */ private static array $valid_screens = array( 'smush_page_smush-bulk', 'smush-pro_page_smush-bulk', 'smush_page_smush-bulk-network', 'smush-pro_page_smush-bulk-network', ); /** * Array utilities instance. * * @var Array_Utils */ private $array_utils; /** * Hub_Connector constructor. * * Private constructor to enforce singleton pattern. */ public function __construct() { $this->initialize(); $this->array_utils = new Array_Utils(); $this->register_action( 'wpmudev_hub_connector_first_sync_completed', array( $this, 'sync_after_connect' ) ); $this->register_filter( 'wp_smush_modals', array( $this, 'register_hub_connection_success_modal' ) ); $this->register_filter( 'pre_site_option_wp-smush-networkwide', array( $this, 'disable_subsite_controls_for_unconnected_free_users' ) ); $this->register_action( 'wp_smush_render_general_setting_rows', array( $this, 'render_hub_connector_actions' ), 30 ); $this->register_filter( 'wp_smush_localize_script_messages', array( $this, 'add_site_disconnected_success_message' ) ); $this->register_action( 'wp_ajax_wp_smush_disconnect_site', array( $this, 'ajax_disconnect_site' ) ); if ( ! self::is_connection_flow() ) { return; } $this->register_action( 'admin_body_class', array( $this, 'admin_body_class' ), 11 ); $this->register_action( 'wpmudev_hub_connector_localize_text_vars', array( $this, 'customize_text_vars' ), 10, 2 ); $this->register_filter( 'wpmudev_hub_connector_localize_vars', array( $this, 'add_hub_connector_data' ), 10, 2 ); } /** * Initialize the Hub Connector module and set its options. * * @return void */ private function initialize(): void { $this->load_hub_connector_library(); $this->configure_hub_connector(); } /** * Add Hub Connector specific classes to admin body. * * @param string $classes Existing CSS classes. * @return string Modified CSS classes. */ public function admin_body_class( string $classes ): string { if ( ! self::is_valid_screen() || self::is_logged_in() ) { return $classes; } $sui_version = $this->get_sui_version(); if ( ! empty( $sui_version ) ) { $classes .= ' ' . esc_attr( $sui_version ); } return $classes; } /** * Load the Hub Connector library. * * @return void * @throws \RuntimeException If library file doesn't exist. */ private function load_hub_connector_library(): void { $hub_connector_lib = WP_SMUSH_DIR . 'core/external/hub-connector/connector.php'; if ( ! file_exists( $hub_connector_lib ) ) { wp_die( esc_html__( 'Required library is missing. Please reinstall the plugin.', 'wp-smushit' ), esc_html__( 'Library Error', 'wp-smushit' ), array( 'response' => 500, 'back_link' => true, ) ); } require_once $hub_connector_lib; } /** * Configure Hub Connector options. * * @return void */ private function configure_hub_connector(): void { if ( ! class_exists( '\WPMUDEV\Hub\Connector' ) ) { return; } $options = array( 'screens' => self::$valid_screens, ); Connector::get()->set_options( self::PLUGIN_IDENTIFIER, $options ); } /** * Get SUI version constant. * * @return string */ private function get_sui_version(): string { return defined( 'WPMUDEV_HUB_CONNECTOR_SUI_VERSION' ) ? WPMUDEV_HUB_CONNECTOR_SUI_VERSION : ''; } /** * Check if current screen is valid for Hub Connector. * * @return bool */ private static function is_valid_screen(): bool { $current_screen = get_current_screen(); if ( ! $current_screen || ! isset( $current_screen->id ) ) { return false; } return in_array( $current_screen->id, self::$valid_screens, true ); } /** * Render the Hub Connector page. * * @return void */ public static function render(): void { do_action( 'wpmudev_hub_connector_ui', self::PLUGIN_IDENTIFIER ); } /** * Checks if the current request is a Hub Connection flow. * * @return bool */ public static function is_connection_flow(): bool { $action = self::get_sanitized_input( 'page_action' ); return ! empty( $action ) && self::CONNECTION_ACTION === $action; } /** * Checks if Hub Connector grants access to the page. * * @return bool */ public static function has_access(): bool { return self::is_hub_connector_available() && self::is_logged_in(); } /** * Checks if Hub Connector is available. * * @return bool */ private static function is_hub_connector_available(): bool { return class_exists( '\WPMUDEV\Hub\Connector' ); } /** * Checks if Hub Connector is logged in. * * @return bool */ public static function is_logged_in(): bool { if ( ! class_exists( '\WPMUDEV\Hub\Connector\API' ) ) { return false; } $api = API::get(); return $api && method_exists( $api, 'is_logged_in' ) && $api->is_logged_in(); } /** * Disconnect site from Hub. * * @return bool */ public static function disconnect(): bool { if ( ! class_exists( '\WPMUDEV\Hub\Connector\API' ) ) { return false; } $api = API::get(); return $api && method_exists( $api, 'logout' ) && $api->logout(); } /** * Get connection URL for Hub. * * @param string $target_page The target page to connect to. * @param string $utm_campaign The UTM campaign to append to the URL. * * @return string The connection URL. */ public static function get_connect_site_url( string $target_page = 'smush-bulk', string $utm_campaign = '' ): string { $args = array(); if ( self::should_redirect_to_dashboard() ) { $args['page'] = 'wpmudev'; } else { $args = self::get_connection_args( $target_page ); } if ( ! empty( $utm_campaign ) ) { $args['utm_campaign'] = sanitize_text_field( $utm_campaign ); } $admin_url = self::get_admin_url(); return add_query_arg( $args, $admin_url ); } /** * Check if should redirect to WPMUDEV Dashboard. * * @return bool */ private static function should_redirect_to_dashboard(): bool { return ! self::is_wpmudev_dashboard_connected() && class_exists( 'WPMUDEV_Dashboard' ); } /** * Get connection arguments for URL. * * @param string $target_page The target page. * @return array */ private static function get_connection_args( string $target_page ): array { return array( 'page' => sanitize_text_field( $target_page ), '_wpnonce' => wp_create_nonce( self::CONNECTION_ACTION ), 'page_action' => self::CONNECTION_ACTION, ); } /** * Get appropriate admin URL. * * @return string */ private static function get_admin_url(): string { return is_network_admin() ? network_admin_url( 'admin.php' ) : admin_url( 'admin.php' ); } /** * Check if WPMUDEV Dashboard is connected. * * @return bool */ public static function is_wpmudev_dashboard_connected(): bool { if ( ! class_exists( 'WPMUDEV_Dashboard' ) ) { return false; } $dashboard_api = WPMUDEV_Dashboard::$api ?? null; return is_object( $dashboard_api ) && method_exists( $dashboard_api, 'get_membership_status' ) && method_exists( $dashboard_api, 'has_key' ) && $dashboard_api->has_key(); } /** * Checks if the Hub connector should render its UI. * * Verifies the nonce and login status to determine if the Hub connector should render its UI. * * @return bool True if should render, false otherwise. */ public static function should_render(): bool { if ( self::is_logged_in() || ! self::is_valid_screen() ) { return false; } return self::verify_connection_nonce(); } /** * Verify the connection nonce. * * @return bool */ private static function verify_connection_nonce(): bool { $nonce = self::get_sanitized_input( '_wpnonce' ); if ( empty( $nonce ) ) { return false; } return wp_verify_nonce( $nonce, self::CONNECTION_ACTION ) !== false; } /** * Get sanitized input from GET parameters. * * @param string $key The input key to retrieve. * @param mixed $default_value Default value if key doesn't exist. * @return mixed Sanitized input value or default. */ private static function get_sanitized_input( string $key, $default_value = '' ) { $value = filter_input( INPUT_GET, $key, FILTER_UNSAFE_RAW ); if ( null === $value ) { return $default_value; } return sanitize_text_field( $value ); } /** * Modify text string vars. * * @param array $texts Vars. * @param string $plugin_id Plugin identifier. * * @return array */ public function customize_text_vars( $texts, $plugin_id ): array { if ( self::PLUGIN_IDENTIFIER === $plugin_id ) { $feature = $this->get_feature_name(); $feature_part = ucfirst( self::PLUGIN_IDENTIFIER ) . ' - ' . esc_html( $feature ); $texts['create_account_desc'] = sprintf( /* translators: %1$s: Feature, %2$s: Opening italic tag, %3$s: Closing italic tag. */ esc_html__( 'Create a free account to connect your site to WPMU DEV and activate %1$s. %2$s It`s fast, seamless, and free. %3$s', 'wp-smushit' ), '<strong>' . $feature_part . '</strong>', '<i>', '</i>' ); $texts['login_desc'] = sprintf( /* translators: %s: Feature */ esc_html__( 'Log in with your WPMU DEV account credentials to activate %s.', 'wp-smushit' ), $feature_part ); } return $texts; } /** * Get the feature name for the current screen. * * @return string */ private function get_feature_name(): string { $feature_name = __( 'Bulk Smush', 'wp-smushit' ); $request_uri = ( new Server_Utils() )->get_request_uri(); if ( str_contains( $request_uri, 'smush_settings_permissions_subsite_controls' ) ) { $feature_name = __( 'Subsite Controls', 'wp-smushit' ); } return $feature_name; } /** * Adds the Hub connector data to the Smush data. * * @param array $extra_args The Smush data. * @param string $plugin_id Plugin identifier. * * @return array The Smush data with the Hub connector data. */ public function add_hub_connector_data( $extra_args, $plugin_id ): array { if ( self::PLUGIN_IDENTIFIER === $plugin_id ) { $register_url = $this->array_utils->get_array_value( $extra_args, array( 'login', 'register_url' ) ); if ( $register_url && is_string( $register_url ) ) { $extra_args['login']['register_url'] = $this->get_register_url_with_utm( $register_url ); } if ( is_multisite() ) { $this->remove_filter( 'pre_site_option_wp-smush-networkwide' ); $activated_subsite_modules = Settings::get_instance()->get_activated_subsite_modules_list(); $network_can_access_bulk = ! in_array( 'bulk', $activated_subsite_modules, true ); $current_url = $this->array_utils->get_array_value( $extra_args, array( 'login', 'current_url' ) ); if ( $current_url && ! $network_can_access_bulk ) { $dashboard_url = Helper::get_page_url( 'smush' ); // Update the redirect URL after the site is connected successfully. $extra_args['login']['current_url'] = $dashboard_url; } $this->restore_filter( 'pre_site_option_wp-smush-networkwide' ); } } return $extra_args; } /** * Get register URL with UTM parameters. * * @param string $register_url The base register URL. * @return string The register URL with UTM parameters. */ private function get_register_url_with_utm( string $register_url ): string { $utm_campaign = filter_input( INPUT_GET, 'utm_campaign', FILTER_UNSAFE_RAW ); return add_query_arg( array( 'utm_medium' => 'plugin', 'utm_source' => self::PLUGIN_IDENTIFIER, 'utm_campaign' => empty( $utm_campaign ) ? 'smush_bulk_smush_connect' : esc_attr( $utm_campaign ), 'utm_content' => 'hub-connector', ), $register_url ); } /** * Sync data after successful connection. * * @return void */ public function sync_after_connect() { add_site_option( 'wp_smush_show_connected_modal', true ); } /** * Register the hub connection success modal. * * @param array $modals Registered modals. * @return array */ public function register_hub_connection_success_modal( $modals ) { if ( get_site_option( 'wp_smush_show_connected_modal' ) ) { delete_site_option( 'wp_smush_show_connected_modal' ); $modals['hub-connection-success'] = array(); } if ( self::is_logged_in() ) { $modals['disconnect-site'] = array(); } return $modals; } /** * Disable Subsite Controls for Unconnected Free Users. * * @param mixed $pre_value Pre option value. * @return mixed */ public function disable_subsite_controls_for_unconnected_free_users( $pre_value ) { if ( Membership::get_instance()->is_api_hub_access_required() ) { // 0: None, 1: All, Array list modules: Custom. return 0; } return $pre_value; } /** * Renders the Hub Connector actions. dddddd */ public function render_hub_connector_actions() { $is_site_connected = self::is_logged_in(); $is_required_api_hub_access = Membership::get_instance()->is_api_hub_access_required(); if ( ! $is_site_connected && ! $is_required_api_hub_access ) { return; } ?> <div class="sui-box-settings-row" id="general-hub-connector-row"> <div class="sui-box-settings-col-1"> <span class="sui-settings-label "><?php esc_html_e( 'Hub Connector', 'wp-smushit' ); ?></span> <span class="sui-description"> <?php esc_html_e( "Connects your site to the WPMU DEV Free Plan, unlocking the plugin's Free plan features.", 'wp-smushit' ); ?> </span> </div> <div class="sui-box-settings-col-2"> <?php if ( $is_site_connected ) : ?> <button class="sui-button sui-button-ghost" data-esc-close="false" data-modal-open="smush-disconnect-site-modal" data-modal-open-focus="dialog-close-div" data-modal-mask="true"> <span class="sui-button-text-default"> <span class="sui-icon-plug-disconnected" aria-hidden="true"></span> <?php esc_html_e( 'Disconnect site', 'wp-smushit' ); ?> </span> </button> <?php else : ?> <a href="<?php echo esc_url( self::get_connect_site_url( 'smush-bulk', 'smush_settings_general_connect' ) ); ?>" class="sui-button sui-button-blue smush-button-dark-blue"> <span class="sui-icon-plug-connected" aria-hidden="true"></span> <?php esc_html_e( 'Connect site', 'wp-smushit' ); ?> </a> <?php endif; ?> <span class="sui-description"><?php esc_html_e( 'Note: disconnecting your site from WPMU DEV will disable other services that rely on this connection.', 'wp-smushit' ); ?></span> </div> </div> <?php } /** * Disconnect the site from the hub. * * @return void */ public function ajax_disconnect_site() { check_ajax_referer( 'wp-smush-ajax' ); // Check capability. if ( ! Helper::is_user_allowed( 'manage_options' ) ) { wp_die( esc_html__( 'Unauthorized', 'wp-smushit' ), 403 ); } $this->disconnect(); // No Need to send json response for other requests. wp_send_json_success(); } /** * Add site disconnected success message. * * @param mixed $messages Smush data messages. * @return array */ public function add_site_disconnected_success_message( $messages ): array { $messages['site_disconnected_success'] = __( 'Site disconnected successfully.', 'wp-smushit' ); return $messages; } }
/home/batcwwjx/public_html/Update/../wp-content/plugins/wp-smushit/core/class-hub-connector.php