PluginProbe
Elementor Website Builder – more than just a page builder / 4.1.0-beta3
Elementor Website Builder – more than just a page builder v4.1.0-beta3
4.3.0 4.3.0-beta3 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 All 453 releases
elementor / app / modules / site-builder / rest / rest-api.php

rest-api.php in Elementor Website Builder – more than just a page builder 4.1.0-beta3, at app/modules/site-builder/rest/rest-api.php

111 lines 2.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor\App\Modules\SiteBuilder\Rest;
3
4 use Elementor\Plugin;
5 use WP_Error;
6 use WP_REST_Response;
7 use WP_REST_Server;
8
9 if ( ! defined( 'ABSPATH' ) ) {
10 exit; // Exit if accessed directly.
11 }
12
13 class Rest_Api {
14 const API_NAMESPACE = 'elementor/v1';
15 const API_BASE = 'site-builder';
16 const SNAPSHOT_MAX_KEYS = 20;
17
18 public function register_routes(): void {
19 register_rest_route( self::API_NAMESPACE, '/' . self::API_BASE . '/home-screen', [
20 'methods' => WP_REST_Server::READABLE,
21 'callback' => [ $this, 'get_home_screen' ],
22 'permission_callback' => fn() => current_user_can( 'manage_options' ),
23 ] );
24
25 register_rest_route( self::API_NAMESPACE, '/' . self::API_BASE . '/snapshot', [
26 [
27 'methods' => WP_REST_Server::READABLE,
28 'callback' => [ $this, 'get_snapshot' ],
29 'permission_callback' => fn() => current_user_can( 'manage_options' ),
30 ],
31 [
32 'methods' => WP_REST_Server::EDITABLE,
33 'callback' => [ $this, 'update_snapshot' ],
34 'permission_callback' => fn() => current_user_can( 'manage_options' ),
35 'args' => [
36 'value' => [
37 'required' => true,
38 'type' => 'object',
39 'validate_callback' => fn( $value ) => is_array( $value ),
40 'sanitize_callback' => fn( $value ) => is_array( $value ) ? $value : [],
41 ],
42 ],
43 ],
44 ] );
45 }
46
47 public function get_home_screen() {
48 $app = $this->get_connect_app();
49
50 if ( ! $app || ! $app->is_connected() ) {
51 return new WP_Error( 'site_builder_unavailable', 'Site builder is not connected.', [ 'status' => 503 ] );
52 }
53
54 $data = $app->get_home_screen();
55
56 if ( is_wp_error( $data ) ) {
57 return $data;
58 }
59
60 return new WP_REST_Response( $data, 200 );
61 }
62
63 public function get_snapshot() {
64 $snapshot = get_option( 'elementor_site_builder_snapshot', [] );
65 return new WP_REST_Response( [
66 'success' => true,
67 'data' => [ 'value' => $snapshot ],
68 ], 200 );
69 }
70
71 public function update_snapshot( $request ) {
72 $value = $request->get_param( 'value' );
73 $sanitized = is_array( $value ) ? $value : [];
74
75 if ( count( $sanitized ) > self::SNAPSHOT_MAX_KEYS ) {
76 return new WP_REST_Response( [
77 'success' => false,
78 'data' => [ 'message' => 'Snapshot exceeds maximum allowed size.' ],
79 ], 400 );
80 }
81
82 $success = update_option( 'elementor_site_builder_snapshot', $sanitized, false );
83
84 if ( $success || get_option( 'elementor_site_builder_snapshot' ) === $sanitized ) {
85 return new WP_REST_Response( [
86 'success' => true,
87 'data' => [ 'message' => 'Snapshot updated successfully.' ],
88 ], 200 );
89 }
90
91 return new WP_REST_Response( [
92 'success' => false,
93 'data' => [ 'message' => 'Failed to update snapshot.' ],
94 ], 500 );
95 }
96
97 protected function get_connect_app() {
98 if ( ! Plugin::$instance->common ) {
99 return null;
100 }
101
102 $connect = Plugin::$instance->common->get_component( 'connect' );
103
104 if ( ! $connect ) {
105 return null;
106 }
107
108 return $connect->get_app( 'site-builder' );
109 }
110 }
111