'0', 'message' => __( 'Unauthorized Access', 'add-multiple-marker' ), ), 403 ); } $nonce = isset( $_POST['_wpnonce'] ) ? sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ) : ''; if ( ! wp_verify_nonce( $nonce, 'addmultiplemarker_save_map' ) ) { wp_send_json_error( array( 'result' => '0', 'message' => __( 'Unauthorized Access', 'add-multiple-marker' ), ), 401 ); } $fields = array( 'amm_search_area', 'amm_map_color', 'amm_marker_type', 'amm_marker_positions', 'amm_map_control', ); $amm_maps_marker = array(); foreach ( $fields as $field ) { $data = isset( $_POST[ $field ] ) ? sanitize_text_field( wp_unslash( $_POST[ $field ] ) ) : ''; $amm_maps_marker[ $field ] = $data; } $result = update_option( 'amm_maps_marker', $amm_maps_marker ); if ( $result ) { wp_send_json_success( array( 'result' => '1', 'message' => __( 'Your changes saved successfully.', 'add-multiple-marker' ), ), 200 ); } else { wp_send_json_error( array( 'result' => '0', 'message' => __( 'You have not done any changes.', 'add-multiple-marker' ), ) ); } } add_action( 'wp_ajax_addmultiplemarker_save_maps_data', 'addmultiplemarker_save_maps_data' ); add_action( 'wp_ajax_nopriv_addmultiplemarker_save_maps_data', 'addmultiplemarker_save_maps_data' ); /** * Reset map to the default. */ function addmultiplemarker_reset_map() { // Check user capabilities. if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( array( 'result' => '0', 'message' => __( 'Unauthorized Access', 'add-multiple-marker' ), ), 403 ); } $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : ''; if ( ! wp_verify_nonce( $nonce, 'amm_reset_map' ) ) { wp_send_json_error( array( 'result' => '0', 'message' => __( 'Unauthorized Access', 'add-multiple-marker' ), ), 401 ); } $result = delete_option( 'amm_maps_marker' ); if ( $result ) { wp_send_json_success( array( 'result' => '1', 'message' => __( 'Map reset to default', 'add-multiple-marker' ), ), 201 ); } else { wp_send_json_error( array( 'result' => '0', 'message' => __( 'Failed, please try again', 'add-multiple-marker' ), ) ); } } add_action( 'wp_ajax_addmultiplemarker_reset_map', 'addmultiplemarker_reset_map' ); add_action( 'wp_ajax_nopriv_addmultiplemarker_reset_map', 'addmultiplemarker_reset_map' ); /** * Save map api key. */ function addmultiplemarker_save_map_api() { // Check user capabilities. if ( ! current_user_can( 'manage_options' ) ) { wp_send_json_error( array( 'result' => '0', 'message' => __( 'Unauthorized Access', 'add-multiple-marker' ), ), 403 ); } $nonce = isset( $_POST['nonce'] ) ? sanitize_text_field( wp_unslash( $_POST['nonce'] ) ) : ''; if ( ! wp_verify_nonce( $nonce, 'amm_save_map_api' ) ) { wp_send_json_error( array( 'result' => '0', 'message' => __( 'Unauthorized Access', 'add-multiple-marker' ), ), 401 ); } $api_key = isset( $_POST['apiKeyValue'] ) ? sanitize_text_field( wp_unslash( $_POST['apiKeyValue'] ) ) : ''; $is_key_valid = addmultiplemarker_validate_map_key( $api_key ); if ( ! $api_key || ! $is_key_valid ) { wp_send_json_error( array( 'result' => '0', 'message' => __( 'Please Enter Valid Google Map Api Key', 'add-multiple-marker' ), ) ); } $map_setting = get_option( 'amm_map_setting' ); if ( ! is_array( $map_setting ) ) { $map_setting = array(); } $map_setting['api'] = $api_key; $result = update_option( 'amm_map_setting', $map_setting ); if ( $result ) { wp_send_json_success( array( 'result' => '1', 'message' => __( 'Your changes saved successfully', 'add-multiple-marker' ), ), 201 ); } else { wp_send_json_error( array( 'result' => '0', 'message' => __( 'Fail to save API key, please try again', 'add-multiple-marker' ), ) ); } } add_action( 'wp_ajax_addmultiplemarker_save_map_api', 'addmultiplemarker_save_map_api' ); add_action( 'wp_ajax_nopriv_addmultiplemarker_save_map_api', 'addmultiplemarker_save_map_api' ); /** * Validate Google Map API key. * * @param string $api_key Map API key. */ function addmultiplemarker_validate_map_key( $api_key ) { $url = 'https://maps.googleapis.com/maps/api/geocode/json?address=New+York&key=' . $api_key; $response = wp_remote_get( $url ); $data = json_decode( wp_remote_retrieve_body( $response ), true ); if ( ! isset( $data['error_message'] ) ) { return true; } $message = sanitize_text_field( $data['error_message'] ); return ( 'The provided API key is invalid.' === $message ) ? false : true; }