| @@ -1,12 +1,25 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | |
| 3 | 3 | class Hostinger_Helper { |
| 4 | 4 | public const HOSTINGER_FREE_SUBDOMAIN_URL = 'hostingersite.com'; |
| 5 | - public const HOSTINGER_PAGE = [ | |
| 6 | - '/wp-admin/admin.php?page=hostinger' | |
| 7 | - ]; | |
| 5 | + public const HOSTINGER_PAGE = '/wp-admin/admin.php?page=hostinger'; | |
| 6 | + public const CLIENT_WOO_COMPLETED_ACTIONS = 'woocommerce_task_list_tracked_completed_tasks'; | |
| 7 | + private const PROMOTIONAL_LINKS = array( | |
| 8 | + 'fr_FR' => 'https://www.hostinger.fr/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', | |
| 9 | + 'es_ES' => 'https://www.hostinger.es/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', | |
| 10 | + 'ar' => 'https://www.hostinger.ae/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', | |
| 11 | + 'zh_CN' => 'https://www.hostinger.com.hk/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', | |
| 12 | + 'id_ID' => 'https://www.hostinger.co.id/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', | |
| 13 | + 'lt_LT' => 'https://www.hostinger.lt/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', | |
| 14 | + 'pt_PT' => 'https://www.hostinger.pt/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', | |
| 15 | + 'uk' => 'https://www.hostinger.com.ua/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', | |
| 16 | + 'tr_TR' => 'https://www.hostinger.com.tr/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', | |
| 17 | + 'en_US' => 'https://www.hostinger.com/cpanel-login?r=%2Fjump-to%2Fnew-panel%2Fsection%2Freferrals&utm_source=Banner&utm_medium=HostingerWPplugin', | |
| 18 | + ); | |
| 8 | 19 | |
| 20 | + private const HPANEL_DOMAIN_URL = 'https://hpanel.hostinger.com/websites/'; | |
| 21 | + | |
| 9 | 22 | /** |
| 10 | 23 | * |
| 11 | 24 | * Check if plugin is active |
| 12 | 25 | * |
| @@ -30,9 +43,8 @@ | ||
| 30 | 43 | |
| 31 | 44 | if ( file_exists( $token_file ) && ! empty( file_get_contents( $token_file ) ) ) { |
| 32 | 45 | $api_token = file_get_contents( $token_file ); |
| 33 | 46 | } |
| 34 | - | |
| 35 | 47 | return $api_token; |
| 36 | 48 | } |
| 37 | 49 | |
| 38 | 50 | /** |
| @@ -41,11 +53,10 @@ | ||
| 41 | 53 | * |
| 42 | 54 | * @since 1.7.0 |
| 43 | 55 | * @access public |
| 44 | 56 | */ |
| 45 | - | |
| 46 | 57 | public function get_host_info(): string { |
| 47 | - $host = $_SERVER['HTTP_HOST'] ?? ''; | |
| 58 | + $host = isset( $_SERVER['HTTP_HOST'] ) ? sanitize_text_field( $_SERVER['HTTP_HOST'] ) : ''; | |
| 48 | 59 | $site_url = get_site_url(); |
| 49 | 60 | $site_url = preg_replace( '#^https?://#', '', $site_url ); |
| 50 | 61 | |
| 51 | 62 | if ( ! empty( $site_url ) && ! empty( $host ) && strpos( $site_url, $host ) === 0 ) { |
| @@ -77,8 +88,13 @@ | ||
| 77 | 88 | return ! empty( $site_url ) && strpos( $site_url, self::HOSTINGER_FREE_SUBDOMAIN_URL ) !== false; |
| 78 | 89 | } |
| 79 | 90 | |
| 80 | 91 | public function is_hostinger_admin_page(): bool { |
| 92 | + | |
| 93 | + if ( ! isset( $_SERVER['REQUEST_URI'] ) ) { | |
| 94 | + return false; | |
| 95 | + } | |
| 96 | + | |
| 81 | 97 | $current_uri = sanitize_text_field( $_SERVER['REQUEST_URI'] ); |
| 82 | 98 | |
| 83 | 99 | if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { |
| 84 | 100 | return false; |
| @@ -87,15 +103,99 @@ | ||
| 87 | 103 | if ( isset( $current_uri ) && strpos( $current_uri, '/wp-json/' ) !== false ) { |
| 88 | 104 | return false; |
| 89 | 105 | } |
| 90 | 106 | |
| 91 | - if ( in_array( $current_uri, self::HOSTINGER_PAGE ) ) { | |
| 107 | + if ( strpos( $current_uri, self::HOSTINGER_PAGE ) !== false ) { | |
| 92 | 108 | return true; |
| 93 | 109 | } |
| 94 | 110 | |
| 95 | 111 | return false; |
| 112 | + } | |
| 96 | 113 | |
| 114 | + /** | |
| 115 | + * | |
| 116 | + * Error log | |
| 117 | + * | |
| 118 | + * @since 1.9.6 | |
| 119 | + * @access public | |
| 120 | + */ | |
| 121 | + public function error_log( string $message ): void { | |
| 122 | + if ( defined( 'WP_DEBUG' ) && WP_DEBUG === true ) { | |
| 123 | + error_log( print_r( $message, true ) ); | |
| 124 | + } | |
| 97 | 125 | } |
| 98 | 126 | |
| 127 | + public function default_woocommerce_survey_steps_completed( array $steps ): bool { | |
| 128 | + $completed_actions = get_option( self::CLIENT_WOO_COMPLETED_ACTIONS, array() ); | |
| 129 | + | |
| 130 | + return empty( array_diff( $steps, $completed_actions ) ); | |
| 131 | + } | |
| 132 | + | |
| 133 | + public function is_this_page( string $page ): bool { | |
| 134 | + | |
| 135 | + if ( ! isset( $_SERVER['REQUEST_URI'] ) ) { | |
| 136 | + return false; | |
| 137 | + } | |
| 138 | + | |
| 139 | + $current_uri = sanitize_text_field( $_SERVER['REQUEST_URI'] ); | |
| 140 | + | |
| 141 | + if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { | |
| 142 | + return false; | |
| 143 | + } | |
| 144 | + | |
| 145 | + if ( isset( $current_uri ) && strpos( $current_uri, '/wp-json/' ) !== false ) { | |
| 146 | + return false; | |
| 147 | + } | |
| 148 | + | |
| 149 | + if ( strpos( $current_uri, $page ) !== false ) { | |
| 150 | + return true; | |
| 151 | + } | |
| 152 | + | |
| 153 | + return false; | |
| 154 | + } | |
| 155 | + | |
| 156 | + public function get_promotional_link_url( string $locale ): string { | |
| 157 | + if ( isset( self::PROMOTIONAL_LINKS[ $locale ] ) ) { | |
| 158 | + return self::PROMOTIONAL_LINKS[ $locale ]; | |
| 159 | + } | |
| 160 | + | |
| 161 | + return self::PROMOTIONAL_LINKS['en_US']; | |
| 162 | + } | |
| 163 | + | |
| 164 | + public function get_domain_from_url(): string { | |
| 165 | + $host = parse_url( get_site_url(), PHP_URL_HOST ); | |
| 166 | + | |
| 167 | + return $host === false ? self::HPANEL_DOMAIN_URL : $host; | |
| 168 | + } | |
| 169 | + | |
| 170 | + public function get_hpanel_domain_url(): string { | |
| 171 | + $domain_url = $this->get_domain_from_url(); | |
| 172 | + | |
| 173 | + if( $domain_url === self::HPANEL_DOMAIN_URL ) { | |
| 174 | + return $domain_url; | |
| 175 | + } | |
| 176 | + | |
| 177 | + return self::HPANEL_DOMAIN_URL . $domain_url; | |
| 178 | + } | |
| 179 | + | |
| 180 | + public function check_transient_eligibility( $transient_request_key, $cache_time = 3600 ): bool { | |
| 181 | + try { | |
| 182 | + // Set transient | |
| 183 | + set_transient( $transient_request_key, true, $cache_time ); | |
| 184 | + | |
| 185 | + // Check if transient was set successfully | |
| 186 | + if ( false === get_transient( $transient_request_key ) ) { | |
| 187 | + throw new Exception( 'Unable to create transient in WordPress.' ); | |
| 188 | + } | |
| 189 | + | |
| 190 | + // If everything is fine, return true | |
| 191 | + return true; | |
| 192 | + | |
| 193 | + } catch ( Exception $exception ) { | |
| 194 | + // If there's an exception, log the error and return false | |
| 195 | + $this->helper->error_log( 'Error checking eligibility: ' . $exception->getMessage() ); | |
| 196 | + return false; | |
| 197 | + } | |
| 198 | + } | |
| 99 | 199 | } |
| 100 | 200 | |
| 101 | -$hostiner_helper = new Hostinger_Helper(); | |
| 201 | +$hostinger_helper = new Hostinger_Helper(); | |