diff --git a/includes/api.php b/includes/api.php index d25a18c..08f3082 100644 --- a/includes/api.php +++ b/includes/api.php @@ -5,36 +5,65 @@ function acf_set_language() } add_action('rest_api_init', function () { + + // ################ SCREENS ################ register_rest_route('lhoist-datas/screen', '/welcome', array( 'methods' => 'GET', 'callback' => 'get_interface_welcome_screen_datas', 'permission_callback' => '__return_true', + // 'permission_callback' => 'lhoist_datas_permission_callback', + )); register_rest_route('lhoist-datas/screen', '/profile', array( 'methods' => 'GET', 'callback' => 'get_interface_profile_screen_datas', 'permission_callback' => '__return_true', - )); + // ################ GAME ################ + register_rest_route('lhoist-datas/screen', '/play/latest', array( + 'methods' => 'GET', + 'callback' => 'get_interface_play_screen_datas', + 'permission_callback' => '__return_true', + )); + + + // ################ UTILS ################ register_rest_route('lhoist-datas', '/available-countries', array( 'methods' => 'GET', 'callback' => 'get_interface_available_countries', 'permission_callback' => '__return_true', )); + + // ################ POST ################ register_rest_route('lhoist-datas/statistics', '/post', array( 'methods' => 'POST', - 'callback' => 'wp_learn_create_database_table', + 'callback' => 'lhoist_post_game_datas_statistics', 'permission_callback' => 'lhoist_datas_permission_callback', + // 'permission_callback' => '__return_true', )); }); -function wp_learn_create_database_table(WP_REST_Request $request) + +function lhoist_datas_permission_callback( + WP_REST_Request $request +) { + $user_ip = $request->get_header('x_real_ip'); + + if ($user_ip === API_GILLES_AUTHORIZED_IP || $user_ip === API_ANTOINE_AUTHORIZED_IP) { + return true; + } + + return false; +} +// ################ RETURN GAME STATISTICS ################ + +function lhoist_post_game_datas_statistics(WP_REST_Request $request) { + $data = $request->get_json_params(); // Récupération des données envoyées avec la requête POST - $user_name = $data['user_name'] ?? null; $user_locale = $data['user_locale'] ?? null; $user_country = $data['user_country'] ?? null; $level_post_id = $data['level_post_id'] ?? null; @@ -43,31 +72,31 @@ function wp_learn_create_database_table(WP_REST_Request $request) $level_score = $data['level_score'] ?? null; if (!$data) { - return rest_ensure_response(array('success' => false, 'message' => 'Erreur lors de l\'enregistrement des données.')); + return rest_ensure_response(array('success' => false, 'message' => 'yooo Erreur lors de l\'enregistrement des données.')); exit; } + global $wpdb; $table_name = 'wp_app_users_statistics'; $post_id = uniqid(); - write_log("user_locale : " . $user_locale); + $gameStats = array( + 'session_ID' => $post_id, + 'user_locale' => $user_locale, + 'user_country' => $user_country, + 'level_post_id' => $level_post_id, + 'level_is_completed' => $level_is_completed ?? "0", + 'level_completion_time' => $level_completion_time, + 'level_score' => $level_score, + ); + $result_check = $wpdb->insert( $table_name, - array( - 'session_ID' => $post_id, - 'user_name' => $user_name, - 'user_locale' => $user_locale, - 'user_country' => $user_country, - 'level_post_id' => $level_post_id, - 'level_is_completed' => $level_is_completed, - 'level_completion_time' => $level_completion_time, - 'level_score' => $level_score, - - ) + $gameStats ); - + if ($result_check) { return rest_ensure_response(array('success' => true, 'message' => 'Données enregistrées avec succès.')); } else { @@ -75,19 +104,17 @@ function wp_learn_create_database_table(WP_REST_Request $request) } } -function lhoist_datas_permission_callback() -{ - if (is_user_logged_in() && current_user_can('administrator')) { - return true; - } - return false; -} -// ################ WELCOME SCREEN ################ +// ################ INTERFACE SCREEN DATAS ################ function get_interface_welcome_screen_datas($request) { + $user_ip = $request->get_header('x_real_ip'); + write_log("API_TOKEN :" . API_TOKEN); + write_log("API_AUTHORIZED_IP :" . API_AUTHORIZED_IP); + write_log("USER_IP :" . $user_ip); + // write_log($request); // $language = sanitize_text_field($request['language']); $currentLanguage = $request->get_param('current-language') ?? 'fr'; @@ -150,6 +177,49 @@ function get_interface_profile_screen_datas($request) return $response; } +function get_interface_play_screen_datas($request) +{ + + // $language = sanitize_text_field($request['language']); + $currentLanguage = $request->get_param('current-language') ?? 'fr'; + + // SWITCH TO CURRENT REQUEST LANGUAGE + do_action('wpml_switch_language', $currentLanguage); + add_filter('acf/settings/current_language', 'acf_set_language'); + + // GET LATESTS PLAY LEVEL + $args = array( + 'post_type' => 'search-and-find', + 'posts_per_page' => 1, + ); + $searchAndFindsQuery = new WP_Query($args); + // RETURN IF NO GAME DATAS + if (!$searchAndFindsQuery->posts || !$searchAndFindsQuery->posts[0] || !$searchAndFindsQuery->posts[0]->post_content) return rest_ensure_response(array('error' => 'impossible de trouver les données du jeu')); + + + $lastGamePageBlocks = parse_blocks($searchAndFindsQuery->posts[0]->post_content); + $gameBlock = null; + + + foreach ($lastGamePageBlocks as $block) { + + if ('lhoist-blocks/search-and-find' === $block['blockName']) { + $gameBlock = $block; + break; + } + } + $responseDatas = array( + 'gameId' => $searchAndFindsQuery->posts[0]->ID, + 'gameHtmlTemplate' => $searchAndFindsQuery->posts[0]->post_content, + 'gameBlockDatas' => $gameBlock, + 'gameObjects' => $gameBlock['innerBlocks'], + ); + + $response = new WP_REST_Response($responseDatas); + $response->set_status(200); + + return $response; +} function get_interface_available_countries($request) {