/
home
/
assocoweys
/
comgk
/
wp-content
/
plugins
/
defender-security
/
src
/
component
/
Upload File
HOME
<?php /** * Hub Connector class. * * @package WP_Defender\Component */ namespace WP_Defender\Component; use WPMUDEV\Hub\Connector; use Calotes\Base\Component; use WP_Defender\Traits\Defender_Dashboard_Client; /** * Handles the functionality related to the Hub Connector module. * * @since 4.10.0 */ class Hub_Connector extends Component { use Defender_Dashboard_Client; /** * The identifier for the WP Defender plugin in the Hub. * * @const string */ public const PLUGIN_IDENTIFIER = 'defender'; /** * The action name used for the Hub connection. * * @const string */ public const CONNECTION_ACTION = 'hub_connection'; /** * Checks if the Hub connector should render its UI. * * Verifies the nonce from the global-ip page to determine if the Hub connector should render its UI. * * @return bool The nonce value on success, false on failure. */ public static function should_render() { return ! self::get_status() && wp_verify_nonce( defender_get_data_from_request( '_def_nonce', 'g' ), self::CONNECTION_ACTION ); } /** * Initialize the Hub Connector module and set its options. * * The `extra/hub-connector/connector.php` file is required, and the options are set for the Hub Connector module. * * @return void */ public function init() { require_once defender_path( 'extra/hub-connector/connector.php' ); $options = array( 'screens' => array( 'toplevel_page_wp-defender', 'toplevel_page_wp-defender-network', 'defender_page_wdf-ip-lockout', 'defender_page_wdf-ip-lockout-network', 'defender-pro_page_wdf-ip-lockout', 'defender-pro_page_wdf-ip-lockout-network', ), 'extra_args' => array( 'register' => array( 'connect_ref' => self::PLUGIN_IDENTIFIER, 'utm_medium' => 'plugin', 'utm_source' => self::PLUGIN_IDENTIFIER, ), ), ); // Get advanced params. $page = defender_get_data_from_request( 'page', 'g' ); $view = defender_get_data_from_request( 'view', 'g' ); $result = $this->maybe_summary_box_trigger( $view ); // Get advanced params. $res = $this->get_utm_tags( $page, $result['view'], $result['is_summary'] ); if ( '' !== $res['utm_campaign'] ) { $options['extra_args']['register']['utm_campaign'] = $res['utm_campaign']; } if ( '' !== $res['utm_content'] ) { $options['extra_args']['register']['utm_content'] = $res['utm_content']; } Connector::get()->set_options( self::PLUGIN_IDENTIFIER, $options ); } /** * Gets the label for the button to connect the site to the Hub. * * @return string The label for the button. */ public function get_button_label(): string { if ( $this->is_dash_installed() && ! $this->is_dash_activated() ) { return __( 'Activate WPMU DEV Dashboard', 'defender-security' ); } if ( $this->is_dash_activated() ) { return __( 'Log in to WPMU DEV', 'defender-security' ); } return __( 'Connect site for Full protection', 'defender-security' ); } /** * Modify text string vars. * * @param array $texts Vars. * @param string $plugin Plugin identifier. * * @return array */ public static function customize_text_vars( $texts, $plugin ): array { if ( self::PLUGIN_IDENTIFIER === $plugin ) { $feature_name = self::get_feature_name(); $texts['create_account_desc'] = sprintf( /* translators: 1. Feature name. 2. Opened tag. 3. Closed tag. */ esc_html__( 'Create a free account to connect your site to WPMU DEV and activate %1$s. %2$sIt`s fast, seamless, and free%3$s.', 'defender-security' ), '<strong>' . __( 'Defender - ', 'defender-security' ) . $feature_name . '</strong>', '<i>', '</i>' ); $texts['login_desc'] = sprintf( /* translators: %s: Feature name. */ esc_html__( 'Log in with your WPMU DEV account credentials to activate %s.', 'defender-security' ), $feature_name ); } return $texts; } /** * Get feature's name. * * @return string */ public static function get_feature_name(): string { $feature_name = defender_get_data_from_request( 'module_name', 'g' ); if ( ! is_null( $feature_name ) && '' !== $feature_name ) { return $feature_name; } $view = defender_get_data_from_request( 'view', 'g' ); switch ( $view ) { case 'blocklist': return __( 'Custom IP Allow/Block list', 'defender-security' ); default: return __( 'AntiBot Global Firewall', 'defender-security' ); } } /** * Get UTM tags. * * @param string $page The page to load. * @param string $view The view to load. * @param bool $is_summary Is this from the Summary section? Default false. * * @return array */ private function get_utm_tags( string $page = '', string $view = '', bool $is_summary = false ): array { $utm_campaign = ''; $utm_content = ''; if ( '' !== $page ) { switch ( $page ) { // There are buttons on notice or widget on the Dashboard page. case 'wp-defender': $utm_content = 'hub-connector'; $utm_campaign = ( 'dashboard' === $view ) ? 'defender_dashboard_firewall_antibot' : 'defender_onboarding_antibot'; break; case 'wdf-ip-lockout': $utm_content = 'hub-connector'; if ( $is_summary ) { $utm_campaign = 'defender_firewall_antibot_summary'; } else { $utm_campaign = ( 'blocklist' === $view ) ? 'defender_firewall_centralip' : 'defender_firewall_antibot'; } break; default: break; } } return array( 'utm_campaign' => $utm_campaign, 'utm_content' => $utm_content, ); } /** * Update data if a trigger is the Summary section. * * @param string $view The view to load. * * @return array */ private function maybe_summary_box_trigger( string $view ): array { return array( 'view' => 'summary-box' === $view ? 'global-ip' : $view, 'is_summary' => 'summary-box' === $view, ); } /** * Retrieve the Hub connector URL. * * @param string $page Optional. The page to load. Default is empty string. * @param string $view Optional. The view to load. Default is empty string. * @param string $utm_campaign Optional. The UTM campaign parameter. Default is empty string. * @param string $utm_content Optional. The UTM content parameter. Default is empty string. * * @return string */ public function get_url( string $page = '', string $view = '', string $utm_campaign = '', string $utm_content = '' ): string { if ( $this->is_dash_activated() ) { $args = array( 'page' => 'wpmudev', 'utm_source' => self::PLUGIN_IDENTIFIER, 'utm_medium' => 'plugin', ); $result = $this->maybe_summary_box_trigger( $view ); // Get advanced params. $res = $this->get_utm_tags( $page, $result['view'], $result['is_summary'] ); if ( '' !== $utm_campaign ) { $args['utm_campaign'] = $utm_campaign; } elseif ( '' !== $res['utm_campaign'] ) { $args['utm_campaign'] = $res['utm_campaign']; } if ( '' !== $utm_content ) { $args['utm_content'] = $utm_content; } elseif ( '' !== $res['utm_content'] ) { $args['utm_content'] = $res['utm_content']; } return add_query_arg( $args, network_admin_url( 'admin.php' ) ); } $query = array( '_def_nonce' => wp_create_nonce( self::CONNECTION_ACTION ), ); if ( '' !== $page ) { $query['page'] = $page; } if ( '' !== $view ) { $query['view'] = $view; } return add_query_arg( $query, network_admin_url( 'admin.php' ) ); } }