| @@ -5,11 +5,11 @@ | ||
| 5 | 5 | defined( 'ABSPATH' ) || exit; |
| 6 | 6 | |
| 7 | 7 | class Helper { |
| 8 | 8 | public const HOSTINGER_FREE_SUBDOMAIN_URL = 'hostingersite.com'; |
| 9 | - public const HOSTINGER_PAGE = '/wp-admin/admin.php?page=hostinger'; | |
| 9 | + public const HOSTINGER_PAGE = '/wp-admin/admin.php?page=hostinger'; | |
| 10 | 10 | public const CLIENT_WOO_COMPLETED_ACTIONS = 'woocommerce_task_list_tracked_completed_tasks'; |
| 11 | - private const PROMOTIONAL_LINKS = array( | |
| 11 | + private const PROMOTIONAL_LINKS = array( | |
| 12 | 12 | 'fr_FR' => 'https://www.hostinger.fr/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', |
| 13 | 13 | 'es_ES' => 'https://www.hostinger.es/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', |
| 14 | 14 | 'ar' => 'https://www.hostinger.ae/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', |
| 15 | 15 | 'zh_CN' => 'https://www.hostinger.com.hk/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', |
| @@ -40,47 +40,14 @@ | ||
| 40 | 40 | |
| 41 | 41 | return false; |
| 42 | 42 | } |
| 43 | 43 | |
| 44 | - public static function get_api_token(): string { | |
| 45 | - $api_token = ''; | |
| 46 | - $token_file = HOSTINGER_WP_TOKEN; | |
| 47 | - | |
| 48 | - if ( file_exists( $token_file ) && ! empty( file_get_contents( $token_file ) ) ) { | |
| 49 | - $api_token = file_get_contents( $token_file ); | |
| 50 | - } | |
| 51 | - | |
| 52 | - return $api_token; | |
| 53 | - } | |
| 54 | - | |
| 55 | - /** | |
| 56 | - * | |
| 57 | - * Get the host info (domain, subdomain, subdirectory) | |
| 58 | - * | |
| 59 | - * @since 1.7.0 | |
| 60 | - * @access public | |
| 61 | - */ | |
| 62 | - public function get_host_info(): string { | |
| 63 | - $host = isset( $_SERVER['HTTP_HOST'] ) ? sanitize_text_field( $_SERVER['HTTP_HOST'] ) : ''; | |
| 64 | - $site_url = get_site_url(); | |
| 65 | - $site_url = preg_replace( '#^https?://#', '', $site_url ); | |
| 66 | - | |
| 67 | - if ( ! empty( $site_url ) && ! empty( $host ) && strpos( $site_url, $host ) === 0 ) { | |
| 68 | - if ( $site_url === $host ) { | |
| 69 | - return $host; | |
| 70 | - } else { | |
| 71 | - return substr( $site_url, strlen( $host ) + 1 ); | |
| 72 | - } | |
| 73 | - } | |
| 74 | - | |
| 75 | - return $host; | |
| 76 | - } | |
| 77 | - | |
| 78 | - public function is_preview_domain(): bool { | |
| 79 | - if ( function_exists( 'getallheaders' ) ) { | |
| 44 | + public function is_preview_domain( $headers = null ): bool { | |
| 45 | + // @codeCoverageIgnoreStart | |
| 46 | + if ($headers === null && function_exists('getallheaders')) { | |
| 80 | 47 | $headers = getallheaders(); |
| 81 | 48 | } |
| 82 | - | |
| 49 | + // @codeCoverageIgnoreEnd | |
| 83 | 50 | if ( isset( $headers['X-Preview-Indicator'] ) && $headers['X-Preview-Indicator'] ) { |
| 84 | 51 | return true; |
| 85 | 52 | } |
| 86 | 53 | |
| @@ -86,184 +53,23 @@ | ||
| 86 | 53 | |
| 87 | 54 | return false; |
| 88 | 55 | } |
| 89 | 56 | |
| 90 | - public function is_free_subdomain(): bool { | |
| 91 | - $site_url = preg_replace( '#^https?://#', '', get_site_url() ); | |
| 92 | - | |
| 93 | - return ! empty( $site_url ) && strpos( $site_url, self::HOSTINGER_FREE_SUBDOMAIN_URL ) !== false; | |
| 94 | - } | |
| 95 | - | |
| 96 | - public function is_hostinger_admin_page(): bool { | |
| 97 | - | |
| 98 | - if ( ! isset( $_SERVER['REQUEST_URI'] ) ) { | |
| 99 | - return false; | |
| 100 | - } | |
| 101 | - | |
| 102 | - $current_uri = sanitize_text_field( $_SERVER['REQUEST_URI'] ); | |
| 103 | - | |
| 104 | - if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { | |
| 105 | - return false; | |
| 106 | - } | |
| 107 | - | |
| 108 | - if ( isset( $current_uri ) && strpos( $current_uri, '/wp-json/' ) !== false ) { | |
| 109 | - return false; | |
| 110 | - } | |
| 111 | - | |
| 112 | - if ( strpos( $current_uri, self::HOSTINGER_PAGE ) !== false ) { | |
| 113 | - return true; | |
| 114 | - } | |
| 115 | - | |
| 116 | - return false; | |
| 117 | - } | |
| 118 | - | |
| 119 | - /** | |
| 120 | - * | |
| 121 | - * Error log | |
| 122 | - * | |
| 123 | - * @since 1.9.6 | |
| 124 | - * @access public | |
| 125 | - */ | |
| 126 | - public function error_log( string $message ): void { | |
| 127 | - if ( defined( 'WP_DEBUG' ) && WP_DEBUG === true ) { | |
| 128 | - error_log( print_r( $message, true ) ); | |
| 129 | - } | |
| 130 | - } | |
| 131 | - | |
| 132 | - public function default_woocommerce_survey_steps_completed( array $steps ): bool { | |
| 133 | - $completed_actions = get_option( self::CLIENT_WOO_COMPLETED_ACTIONS, array() ); | |
| 134 | - | |
| 135 | - return empty( array_diff( $steps, $completed_actions ) ); | |
| 136 | - } | |
| 137 | - | |
| 138 | - public function is_this_page( string $page ): bool { | |
| 139 | - | |
| 140 | - if ( ! isset( $_SERVER['REQUEST_URI'] ) ) { | |
| 141 | - return false; | |
| 142 | - } | |
| 143 | - | |
| 144 | - $current_uri = sanitize_text_field( $_SERVER['REQUEST_URI'] ); | |
| 145 | - | |
| 146 | - if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { | |
| 147 | - return false; | |
| 148 | - } | |
| 149 | - | |
| 150 | - if ( isset( $current_uri ) && strpos( $current_uri, '/wp-json/' ) !== false ) { | |
| 151 | - return false; | |
| 152 | - } | |
| 153 | - | |
| 154 | - if ( strpos( $current_uri, $page ) !== false ) { | |
| 155 | - return true; | |
| 156 | - } | |
| 157 | - | |
| 158 | - return false; | |
| 159 | - } | |
| 160 | - | |
| 161 | - public function get_promotional_link_url( string $locale ): string { | |
| 162 | - if ( isset( self::PROMOTIONAL_LINKS[ $locale ] ) ) { | |
| 163 | - return self::PROMOTIONAL_LINKS[ $locale ]; | |
| 164 | - } | |
| 165 | - | |
| 166 | - return self::PROMOTIONAL_LINKS['en_US']; | |
| 167 | - } | |
| 168 | - | |
| 169 | - public function get_hpanel_domain_url(): string { | |
| 170 | - $parsed_url = parse_url( get_site_url() ); | |
| 171 | - $host = $parsed_url['host']; | |
| 172 | - $host_parts = explode( '.', $host ); | |
| 173 | - $subdomain = ( count( $host_parts ) > 2 ) ? array_shift( $host_parts ) . '.' : ''; | |
| 174 | - $domain = implode( '.', $host_parts ); | |
| 175 | - | |
| 176 | - return self::HPANEL_DOMAIN_URL . $domain . ( $subdomain ? "/wordpress/dashboard/$subdomain$domain" : '' ); | |
| 177 | - } | |
| 178 | - | |
| 179 | - public function check_transient_eligibility( $transient_request_key, $cache_time = 3600 ): bool { | |
| 180 | - try { | |
| 181 | - // Set transient | |
| 182 | - set_transient( $transient_request_key, true, $cache_time ); | |
| 183 | - | |
| 184 | - // Check if transient was set successfully | |
| 185 | - if ( false === get_transient( $transient_request_key ) ) { | |
| 186 | - throw new Exception( 'Unable to create transient in WordPress.' ); | |
| 187 | - } | |
| 188 | - | |
| 189 | - // If everything is fine, return true | |
| 190 | - return true; | |
| 191 | - } catch ( Exception $exception ) { | |
| 192 | - // If there's an exception, log the error and return false | |
| 193 | - $this->error_log( 'Error checking eligibility: ' . $exception->getMessage() ); | |
| 194 | - | |
| 195 | - return false; | |
| 196 | - } | |
| 197 | - } | |
| 198 | - | |
| 199 | 57 | public static function woocommerce_onboarding_choice(): bool { |
| 200 | 58 | return (bool) get_option( 'hostinger_woo_onboarding_choice', false ); |
| 201 | 59 | } |
| 202 | 60 | |
| 203 | - /** | |
| 204 | - * @return bool | |
| 205 | - */ | |
| 206 | - public static function is_woocommerce_site(): bool { | |
| 207 | - return class_exists( 'WooCommerce' ); | |
| 208 | - } | |
| 61 | + public static function generate_bypass_code( $length ) { | |
| 62 | + $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; | |
| 63 | + $code = ''; | |
| 64 | + $max_index = strlen( $characters ) - 1; | |
| 209 | 65 | |
| 210 | - /** | |
| 211 | - * @return bool | |
| 212 | - */ | |
| 213 | - public static function show_woocommerce_onboarding(): bool { | |
| 214 | - $woo_onboarding_enabled = get_option( 'hostinger_woo_onboarding_enabled', false ); | |
| 215 | - $woo_setup_wizard_completed = get_option( 'woocommerce_onboarding_profile', false ); | |
| 216 | - | |
| 217 | - return ( self::is_woocommerce_site() && ! self::woocommerce_onboarding_choice() && $woo_onboarding_enabled && ! $woo_setup_wizard_completed ); | |
| 218 | - } | |
| 219 | - | |
| 220 | - /** | |
| 221 | - * @return bool | |
| 222 | - */ | |
| 223 | - public function can_show_store_ready_message(): bool { | |
| 224 | - if ( ! self::is_woocommerce_site() || ! self::woocommerce_onboarding_choice() ) { | |
| 225 | - return false; | |
| 66 | + for ( $i = 0; $i < $length; $i++ ) { | |
| 67 | + $random_index = wp_rand( 0, $max_index ); | |
| 68 | + $code .= $characters[ $random_index ]; | |
| 226 | 69 | } |
| 227 | 70 | |
| 228 | - $store_ready_message_shown = get_option( 'hostinger_woo_ready_message_shown', null ); | |
| 229 | - | |
| 230 | - if ( $store_ready_message_shown === null ) { | |
| 231 | - return false; | |
| 232 | - } | |
| 233 | - | |
| 234 | - if ( (int) $store_ready_message_shown !== 0 ) { | |
| 235 | - return false; | |
| 236 | - } | |
| 237 | - | |
| 238 | - if ( ! $this->default_woocommerce_survey_completed() ) { | |
| 239 | - return false; | |
| 240 | - } | |
| 241 | - | |
| 242 | - return true; | |
| 71 | + return $code; | |
| 243 | 72 | } |
| 244 | - | |
| 245 | - public function default_woocommerce_survey_completed(): bool { | |
| 246 | - $completed_actions = get_option( self::CLIENT_WOO_COMPLETED_ACTIONS, array() ); | |
| 247 | - $required_completed_actions = array( 'products', 'payments' ); | |
| 248 | - | |
| 249 | - return empty( array_diff( $required_completed_actions, $completed_actions ) ); | |
| 250 | - } | |
| 251 | - | |
| 252 | - /** | |
| 253 | - * @return void | |
| 254 | - */ | |
| 255 | - public static function generate_bypass_code( $length ) { | |
| 256 | - $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; | |
| 257 | - $code = ''; | |
| 258 | - $maxIndex = strlen($characters) - 1; | |
| 259 | - | |
| 260 | - for ($i = 0; $i < $length; $i++) { | |
| 261 | - $randomIndex = mt_rand(0, $maxIndex); | |
| 262 | - $code .= $characters[$randomIndex]; | |
| 263 | - } | |
| 264 | - | |
| 265 | - return $code; | |
| 266 | - } | |
| 267 | 73 | } |
| 268 | 74 | |
| 269 | 75 | $hostinger_helper = new Helper(); |