refining api routes with permission callbacks and ip tracking
This commit is contained in:
parent
b26f4cf578
commit
5af51603c8
122
includes/api.php
122
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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user