PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.8
Elementor Website Builder – more than just a page builder v4.0.8
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
elementor / includes / user-data.php

user-data.php in Elementor Website Builder – more than just a page builder 4.0.8, at includes/user-data.php

129 lines 3.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor;
3
4 if ( ! defined( 'ABSPATH' ) ) {
5 exit; // Exit if accessed directly.
6 }
7
8 class User_Data {
9 const API_NAMESPACE = 'elementor/v1';
10 const API_BASE = '/user-data/current-user';
11
12 public static function init() {
13 add_action( 'rest_api_init', fn() => self::register_routes() );
14 }
15
16 private static function register_routes() {
17 register_rest_route( self::API_NAMESPACE, self::API_BASE, [
18 [
19 'methods' => 'GET',
20 'callback' => fn( $request ) => self::route_wrapper( fn() => self::get_current_user( $request ) ),
21 'permission_callback' => fn() => is_user_logged_in(),
22 ],
23 [
24 'methods' => 'PATCH',
25 'callback' => fn( $request ) => self::route_wrapper( fn() => self::update_current_user( $request ) ),
26 'permission_callback' => fn() => is_user_logged_in(),
27 'args' => [
28 'suppressedMessages' => [
29 'required' => false,
30 'type' => 'array',
31 'description' => 'Array of suppressed message keys',
32 'items' => [
33 'type' => 'string',
34 ],
35 'validate_callback' => function( $param, $request, $key ) {
36 return is_array( $param );
37 },
38 'sanitize_callback' => fn( $param, $request, $key ) => self::sanitize_suppressed_messages( $param, $request, $key ),
39 ],
40 ],
41 ],
42 ] );
43 }
44
45 /**
46 * @param \WP_REST_Request $request The request object.
47 * @return \WP_REST_Response|\WP_Error Response object or error.
48 */
49 public static function get_current_user( $request ) {
50 $current_user = wp_get_current_user();
51 $introduction_meta = User::get_introduction_meta();
52
53 $suppressed_messages = [];
54 if ( is_array( $introduction_meta ) ) {
55 foreach ( $introduction_meta as $key => $value ) {
56 if ( $value ) {
57 $suppressed_messages[] = $key;
58 }
59 }
60 }
61
62 $capabilities = array_keys( $current_user->allcaps );
63
64 $data = [
65 'suppressedMessages' => $suppressed_messages,
66 'capabilities' => $capabilities,
67 ];
68
69 return new \WP_REST_Response( $data, 200 );
70 }
71
72 /**
73 * @param \WP_REST_Request $request The request object.
74 * @return \WP_REST_Response|\WP_Error Response object or error.
75 */
76 public static function update_current_user( $request ) {
77 $user_id = get_current_user_id();
78
79 $suppressed_messages = $request->get_param( 'suppressedMessages' );
80
81 if ( $request->has_param( 'suppressedMessages' ) && is_array( $suppressed_messages ) ) {
82 $introduction_meta = [];
83 foreach ( $suppressed_messages as $message ) {
84 $introduction_meta[ $message ] = true;
85 }
86
87 update_user_meta( $user_id, User::INTRODUCTION_KEY, $introduction_meta );
88 }
89
90 return self::get_current_user( $request );
91 }
92
93 /**
94 * @param array $param The parameter value.
95 * @param \WP_REST_Request $request The request object.
96 * @param string $key The parameter key.
97 *
98 * @return array|null The sanitized array or null.
99 */
100 public static function sanitize_suppressed_messages( $param, $request, $key ) {
101 if ( ! is_array( $param ) ) {
102 return null;
103 }
104
105 $sanitized_messages = [];
106 foreach ( $param as $message ) {
107 if ( is_string( $message ) ) {
108 $sanitized_message = sanitize_text_field( $message );
109
110 if ( ! empty( $sanitized_message ) ) {
111 $sanitized_messages[] = $sanitized_message;
112 }
113 }
114 }
115
116 return $sanitized_messages;
117 }
118
119 private static function route_wrapper( callable $cb ) {
120 try {
121 $response = $cb();
122 } catch ( \Exception $e ) {
123 return new \WP_Error( 'unexpected_error', 'Something went wrong', [ 'status' => 500 ] );
124 }
125
126 return $response;
127 }
128 }
129