"error", "message" => "stream_socket_client function is not allowed by your host. Read more" ) ); } if ( ! speedpage_check_func_availability( 'stream_context_create' ) ) { speedpage_json_and_exit( array( "status" => "error", "message" => "stream_context_create function is not allowed by your host." ) ); } if ( empty( $siteId ) || empty( $siteSecret ) ) { speedpage_json_and_exit( array( "status" => "error", "message" => __( 'Invalid API key or API secret key value', 'speedpage' ) ) ); } $siteId = trim( esc_attr( $siteId ) ); $siteSecret = trim( esc_attr( $siteSecret ) ); if ( ! speedpage_validate_site_id( $siteId ) || ! speedpage_validate_site_secret( $siteSecret ) ) { speedpage_json_and_exit( array( "status" => "error", "message" => __( 'Invalid API key or API secret key value', 'speedpage' ) ) ); } try { $domain = ! empty( $_SERVER["HTTP_HOST"] ) ? sanitize_text_field( wp_unslash( $_SERVER["HTTP_HOST"] ) ) : 'Unknown'; $event = "connect"; if ( is_plugin_active( 'woocommerce/woocommerce.php' ) ) { $platform = 'WooCommerce'; } else { $platform = 'WordPress'; } $pages = []; $query = new WP_Query( [ 'post_type' => 'page', 'posts_per_page' => - 1, // toutes les pages 'orderby' => 'menu_order', 'order' => 'ASC', ] ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); $pages[] = [ "id" => get_the_ID(), "url" => get_permalink(), "title" => get_the_title(), "is_front_page" => ( get_the_ID() == get_option( 'page_on_front' ) ) ]; } wp_reset_postdata(); } $body = array( 'event' => $event, 'platform' => $platform, 'platform_version' => $wp_version, 'speedpage_extension_version' => SPEEDPAGE_VERSION, 'domain' => $domain, 'additional_meta_data' => [ "siteId" => $siteId, "siteSecret" => $siteSecret, "domain" => $domain, "pages" => $pages ], ); check_ajax_referer( 'speedpage_nonce', 'nonce' ); $url = SPEEDPAGE_API_URL . "auth/check"; $result = wp_remote_post( $url, array( 'method' => 'POST', 'body' => $body, 'timeout' => 1500, 'headers' => array( "Accept" => "application/x.speed.page.v1+json" ) ) ); if ( is_wp_error( $result ) ) { wp_send_json_error( [ "message" => "API inaccessible" ] ); wp_die(); return false; } else { $result = json_decode( wp_remote_retrieve_body( $result ), true ); if ( ! empty( $result['valid'] ) ) { $stockage = get_option( 'speedpage_stockage' ); $stockage['subscription_status'] = isset( $result['subscription_status'] ) ? $result['subscription_status'] : false; $stockage['subscription_start'] = isset( $result['subscription_start'] ) ? $result['subscription_start'] : false; $stockage['subscription_expiry'] = isset( $result['subscription_expiry'] ) ? $result['subscription_expiry'] : false; $stockage['subscription_get_ready'] = isset( $result['subscription_get_ready'] ) ? $result['subscription_get_ready'] : false; foreach ( $result['data']['stockages'] as $stockagePage ) { $is_front_page = $stockagePage["is_front_page"]; if ( $is_front_page == 1 ) { $stockage['front_page']['before'] = json_decode( $stockagePage["score_before"], true ); $stockage['front_page']['after'] = json_decode( $stockagePage["score_after"], true ); } if ( $stockagePage["score_before"] ) { $stockage['pages'][ $stockagePage["page_id"] ]['before'] = json_decode( $stockagePage["score_before"], true ); } if ( $stockagePage["score_after"] ) { $stockage['pages'][ $stockagePage["page_id"] ]['after'] = json_decode( $stockagePage["score_after"], true ); } } update_option( "speedpage_allow_api_sync", true ); update_option( "speedpage_stockage", $stockage ); if ( isset( get_option( "speedpage_stockage" )["front_page"] ) ) { update_option( "speedpage_old_front_page", get_option( "speedpage_stockage" )["front_page"]["before"] ); update_option( "speedpage_after_front_page", get_option( "speedpage_stockage" )["front_page"]["after"] ); update_option( "speedpage_front_page_mobile", get_option( "speedpage_stockage" )["front_page"]["after"]["mobile"] ); update_option( "speedpage_front_page_desktop", get_option( "speedpage_stockage" )["front_page"]["after"]["desktop"] ); } // var_dump(get_option("speedpage_stockage")); // die(); update_option( 'speedpage_site_id', $siteId ); update_option( 'speedpage_site_secret', $siteSecret ); update_option( 'speedpage_authentication', 'authorized' ); wp_send_json_success( [ 'status' => 'success', 'url' => admin_url( 'admin.php?page=speedpage_settings_page' ) ] ); } else { wp_send_json( wp_json_encode( [ 'status' => 'error', 'message' => 'Invalid API key or secret!' ] ) ); } } die( "to this point" ); } catch ( Exception $e ) { speedpage_json_and_exit( array( "status" => "error", "message" => $e ) ); } speedpage_json_and_exit( array( "status" => "error" ) ); } function speedpage_json_and_exit( $array ) { if ( speedpage_is_wp_cli() ) { $type = null; if ( array_key_exists( "status", $array ) ) { $type = $array["status"]; } else if ( array_key_exists( "type", $array ) ) { $type = $array["type"]; } } else { echo wp_json_encode( $array ); } exit; } function speedpage_check_func_availability( $func_name ) { if ( function_exists( 'ini_get' ) ) { $existsResult = stripos( ini_get( 'disable_functions' ), $func_name ) === false; } else { $existsResult = function_exists( $func_name ); } return $existsResult; } function speedpage_is_wp_cli() { return defined( "WP_CLI" ); } function speedpage_validate_site_id( $siteId ) { // return preg_match( "/^([a-zA-Z]{32})$/", trim( $siteId ) ); return preg_match( "/^[a-f0-9]{32}$/i", trim( $siteId ) ); } function speedpage_validate_site_secret( $siteSecret ) { return preg_match( "/^([a-zA-Z0-9]{64})$/", trim( $siteSecret ) ); } function speedpage_get_random_index( $taken_indexes, $min, $max ) { do { $random_index = wp_rand( $min, $max ); } while ( in_array( $random_index, $taken_indexes ) && count( $taken_indexes ) < $max ); return $random_index; } function speedpage_google_check_score_response( $key, $page_url, $device ) { $url = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=" . $page_url . "&key=" . $key; if ( $device == "mobile" ) { $url .= "&strategy=mobile"; } $response = wp_remote_get( $url, array( 'timeout' => 600 ) ); return $response; } function speedpage_score_checker( $page_url, $device ) { $google_api_keys = [ 'AIzaSyAgXPc9Yp0auiap8L6BsHWoSVzkSYgHdrs', 'AIzaSyC-6oKLqdvufJnysAxd0O56VgZrCgyNMHg', 'AIzaSyAh8baU4m_C1qgSNsGiYU6q4iMDe6q_dSY', 'AIzaSyB1QHYGZZ6JIuUUce4VyBt5gF_-LwI5Xsk', 'AIzaSyCjwzqteBYBPdYxyXPrcQGNtoQ20U89G2A', 'AIzaSyDZLf5UpZ914NoCZF16ad0PrspINs6ak0g', 'AIzaSyCQmF4ZSbZB8prjxci3GWVK4UWc-Yv7vbw', 'AIzaSyDvLQHgtF94eha7sDCLIUiQ0lmfsIOR_sw', 'AIzaSyCftPiteYkBsC2hamGbGax5D9JQ4CzexPU', ]; $taken_indexes = []; do { $random_index = speedpage_get_random_index( $taken_indexes, 0, count( $google_api_keys ) - 1 ); $taken_indexes[] = $random_index; $key = $google_api_keys[ $random_index ]; $response = speedpage_google_check_score_response( $key, $page_url, $device ); } while ( is_wp_error( $response ) && count( $taken_indexes ) < 3 ); // $a = json_decode( $response['body'], true ); // var_dump( $a["lighthouseResult"]["audits"]["interactive"]["displayValue"] ); //// print($a->lighthouseResult->audits); // die(); $data = []; if ( is_array( $response ) && ! is_wp_error( $response ) ) { $body = $response['body']; $body = json_decode( $body, true ); if ( isset( $body->error ) ) { $data['error'] = 1; } else { $data[ $device . '_score' ] = (float) ( 100 * $body["lighthouseResult"]["categories"]["performance"]["score"] ); $data[ $device . '_loading_time' ] = trim( rtrim( $body["lighthouseResult"]["audits"]["interactive"]["displayValue"], 's' ) );#loading time $data[ $device . '_fcp' ] = $body['lighthouseResult']['audits']['first-contentful-paint']['displayValue']; $data[ $device . '_lcp' ] = $body['lighthouseResult']['audits']['largest-contentful-paint']['displayValue']; $data[ $device . '_tbt' ] = $body['lighthouseResult']['audits']['total-blocking-time']['displayValue']; $data[ $device . '_cls' ] = $body['lighthouseResult']['audits']['cumulative-layout-shift']['displayValue']; $data[ $device . '_si' ] = $body['lighthouseResult']['audits']['speed-index']['displayValue']; } } else { $data['error'] = 1; } return $data; } function speedpage_score_checker_ajax() { check_ajax_referer( 'speedpage_nonce', 'nonce' ); // 2. Vérification des droits d'administration if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( 'Droits insuffisants', 403 ); } $page_id = isset( $_POST['page_id'] ) ? sanitize_text_field( wp_unslash( $_POST['page_id'] ) ) : ''; $platform = isset( $_POST['platform'] ) ? sanitize_text_field( wp_unslash( $_POST['platform'] ) ) : ''; try { if ( ! isset( $_POST['nonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), 'speedpage_nonce' ) ) { speedpage_json_and_exit( array( "status" => "error", "message" => __( 'Permission Denied.', 'speedpage' ) ) ); wp_die(); return false; } $desktop = speedpage_score_checker( preg_replace( '/^www\./', '', wp_parse_url( home_url(), PHP_URL_HOST ) ), "desktop" ); if ( is_wp_error( $desktop ) ) { speedpage_json_and_exit( array( "status" => "error", "message" => __( 'API inaccessible Desktop.', 'speedpage' ) ) ); wp_die(); return false; } else { update_option( 'speedpage_' . $page_id . "_" . "desktop", $desktop ); } $mobile = speedpage_score_checker( preg_replace( '/^www\./', '', wp_parse_url( home_url(), PHP_URL_HOST ) ), "mobile" ); if ( is_wp_error( $mobile ) ) { speedpage_json_and_exit( array( "status" => "error", "message" => __( 'API inaccessible Mobile.', 'speedpage' ) ) ); wp_die(); return false; } else { update_option( 'speedpage_' . $page_id . "_" . "mobile", $mobile ); } wp_send_json_success( [ 'status' => 'success', 'desktop' => $desktop, 'mobile' => $mobile ] ); } catch ( Exception $e ) { speedpage_json_and_exit( array( "status" => "error", "message" => $e ) ); } speedpage_json_and_exit( array( "status" => "error" ) ); } function speedpage_update_score_info( $post_id, $page_score ) { if ( $post_id == 'front_page' || $post_id == get_option( 'page_on_front' ) ) { update_option( 'speedpage-front-page-speed', $page_score ); // If front page is a page and has ID, check and save the score also as post meta. $home_page_id = url_to_postid( get_home_url() ); if ( $home_page_id ) { update_post_meta( $home_page_id, 'speedpage_page_speed', $page_score ); } } else { update_post_meta( $post_id, 'speedpage_page_speed', $page_score ); } } function speedpage_allow_api_synchro() { if ( isset( $_POST['nonce'], $_POST['checkbox'] ) ) { $nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) ); $checkbox = isset( $_POST['checkbox'] ) ? sanitize_text_field( wp_unslash( $_POST['checkbox'] ) ) : ''; if ( wp_verify_nonce( $nonce, 'speedpage_nonce' ) ) { update_option( 'speedpage_allow_api_sync', ( 'true' === $checkbox ) ); wp_send_json_success( [ "message" => "success" ] ); } } wp_send_json_error( [ "message" => "speedpage_deactivate_plugin_ajax() API inaccessible" ] ); } function speedpage_deactivate_plugin_ajax() { if ( isset( $_POST['nonce'], $_POST['plugin_slug'] ) ) { $nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) ); $plugin_slug = sanitize_text_field( wp_unslash( $_POST['plugin_slug'] ) ); if ( wp_verify_nonce( $nonce, 'speedpage_nonce' ) && current_user_can( 'deactivate_plugins' ) ) { $speedpage_incompatible_plugins = speedpage_get_conflicting_plugins(); $plugin_slug = sanitize_text_field( wp_unslash( $_POST['plugin_slug'] ) ); if ( array_key_exists( $plugin_slug, $speedpage_incompatible_plugins ) ) { deactivate_plugins( $plugin_slug ); wp_send_json_success( [ "message" => "success" ] ); } wp_send_json_error( [ "message" => "speedpage_deactivate_plugin_ajax() API inaccessible" ] ); } } wp_send_json_error( [ "message" => "speedpage_deactivate_plugin_ajax() API inaccessible" ] ); } function speedpage_realtime_ajax() { if ( isset( $_POST['nonce'] ) ) { $nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) ); if ( wp_verify_nonce( $nonce, 'speedpage_nonce' ) ) { wp_send_json_success( [ "message" => "success", "speedpage_stockage" => get_option( 'speedpage_stockage' ) ] ); } } wp_send_json_error( [ "message" => "speedpage_realtime_ajax() API inaccessible" ] ); } function speedpage_recive_data_all_pages_ajax() { if ( isset( $_POST['nonce'] ) ) { $nonce = sanitize_text_field( wp_unslash( $_POST['nonce'] ) ); if ( wp_verify_nonce( $nonce, 'speedpage_nonce' ) ) { $domain = preg_replace( '/^www\./', '', wp_parse_url( home_url(), PHP_URL_HOST ) ); $response = wp_remote_post( "https://api.speed.page/get-all-data-website", [ 'method' => 'POST', 'body' => [ 'domain' => $domain, 'api_key' => get_option( 'speedpage_site_id' ), 'api_secret' => get_option( 'speedpage_site_secret' ) ] ] ); wp_send_json_success( [ "message" => "success", "speedpage_stockage" => get_option( 'speedpage_stockage' ) ] ); } } wp_send_json_error( [ "message" => "speedpage_realtime_ajax() API inaccessible" ] ); } function speedpage_before_score_checker_ajax() { try { check_ajax_referer( 'speedpage_nonce', 'nonce' ); $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : ''; if ( ! wp_verify_nonce( $nonce, 'speedpage_nonce' ) ) { speedpage_json_and_exit( array( "status" => "error", "message" => __( 'Permission Denied.', 'speedpage' ) ) ); wp_die(); return false; } $domain = preg_replace( '/^www\./', '', wp_parse_url( home_url(), PHP_URL_HOST ) ); $response = wp_remote_post( "https://api.speed.page/get-score", [ 'method' => 'POST', 'body' => [ 'domain' => $domain, 'api_key' => get_option( 'speedpage_site_id' ), 'api_secret' => get_option( 'speedpage_site_secret' ) ] ] ); if ( is_wp_error( $response ) ) { wp_send_json_error( [ "message" => $response->get_error_message() ] ); } else { $pages = wp_remote_retrieve_body( $response ); update_option( "speedpage_data_all_pages", json_decode( $pages, true ) ); foreach ( json_decode( $pages, true ) as $page ) { if ( $page["is_front_page"] ) { if ( $page["score_before"] ) { update_option( "speedpage_old_front_page", json_decode( $page["score_before"], true ) ); } if ( $page["score_after"] ) { update_option( 'speedpage_front_page_mobile', json_decode( $page["score_after"], true )["mobile"] ); update_option( 'speedpage_front_page_desktop', json_decode( $page["score_after"], true )["desktop"] ); } } } wp_send_json_success( [ 'status' => 'success', 'pages' => $pages ] ); } } catch ( Exception $e ) { speedpage_json_and_exit( array( "status" => "error", "message" => $e ) ); } speedpage_json_and_exit( array( "status" => "error" ) ); } //if ( $_SERVER["REQUEST_URI"] == "/wp-admin/admin.php?page=speedpage_settings_page" ) { // echo "Before optimization"; // echo "desktop version"; // $a = speedpage_score_checker( "https://wersite.com/", "desktop" ); // var_dump( $a ); // // echo "Before optimization"; // echo "mobile version"; // $a = speedpage_score_checker( "https://wersite.com/", "mobile" ); // var_dump( $a ); // die(); //}