PluginProbe
Elementor Website Builder – more than just a page builder / 4.2.0-beta1
Elementor Website Builder – more than just a page builder v4.2.0-beta1
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 4.1.0-dev1 All 452 releases
elementor / modules / wp-rest / classes / design-system-rest-api.php

design-system-rest-api.php in Elementor Website Builder – more than just a page builder 4.2.0-beta1, at modules/wp-rest/classes/design-system-rest-api.php

117 lines 2.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Elementor\Modules\WpRest\Classes;
4
5 use Elementor\App\Modules\SiteBuilder\Services\Design_System_Service;
6 use Elementor\Core\Utils\Api\Error_Builder;
7 use Elementor\Core\Utils\Api\Response_Builder;
8 use Elementor\Plugin;
9
10 if ( ! defined( 'ABSPATH' ) ) {
11 exit; // Exit if accessed directly.
12 }
13
14 class Design_System_REST_API {
15
16 const API_NAMESPACE = 'elementor/v1';
17 const API_BASE = 'site-builder/deploy-design-system';
18
19 private Design_System_Service $service;
20
21 public function __construct( ?Design_System_Service $service = null ) {
22 $this->service = $service ?? new Design_System_Service();
23 }
24
25 public function register(): void {
26 register_rest_route( self::API_NAMESPACE, '/' . self::API_BASE, [
27 [
28 'methods' => \WP_REST_Server::CREATABLE,
29 'callback' => [ $this, 'deploy' ],
30 'permission_callback' => [ $this, 'check_permissions' ],
31 'args' => $this->get_endpoint_args(),
32 ],
33 ] );
34 }
35
36 public function check_permissions() {
37 return current_user_can( 'manage_options' );
38 }
39
40 public function deploy( \WP_REST_Request $request ) {
41 $global_classes = $request->get_param( 'globalClasses' );
42 $global_variables = $request->get_param( 'globalVariables' );
43
44 if ( empty( $global_classes ) && empty( $global_variables ) ) {
45 return Error_Builder::make( 'invalid_payload' )
46 ->set_status( 400 )
47 ->set_message( esc_html__( 'Either globalClasses or globalVariables must be provided.', 'elementor' ) )
48 ->build();
49 }
50
51 try {
52 $results = [];
53
54 if ( ! empty( $global_classes ) ) {
55 $results['globalClasses'] = $this->service->deploy_global_classes( $global_classes );
56 }
57
58 if ( ! empty( $global_variables ) ) {
59 $results['globalVariables'] = $this->service->deploy_global_variables( $global_variables );
60 }
61
62 return Response_Builder::make( $results )->build();
63 } catch ( \Exception $e ) {
64 return $this->handle_unexpected_error( $e );
65 }
66 }
67
68 private function handle_unexpected_error( \Exception $e ) {
69 Plugin::$instance->logger->get_logger()->error( $e->getMessage(), [
70 'meta' => [ 'trace' => $e->getTraceAsString() ],
71 ] );
72
73 return Error_Builder::make( 'design_system_deploy_failed' )
74 ->set_status( 500 )
75 ->set_message( esc_html__( 'Something went wrong', 'elementor' ) )
76 ->build();
77 }
78
79 private function get_endpoint_args() {
80 return [
81 'globalClasses' => [
82 'type' => 'object',
83 'required' => false,
84 'properties' => [
85 'items' => [
86 'type' => 'object',
87 'required' => true,
88 ],
89 'order' => [
90 'type' => 'array',
91 'required' => true,
92 'items' => [ 'type' => 'string' ],
93 ],
94 ],
95 ],
96 'globalVariables' => [
97 'type' => 'object',
98 'required' => false,
99 'properties' => [
100 'data' => [
101 'type' => 'object',
102 'required' => true,
103 ],
104 'watermark' => [
105 'type' => 'integer',
106 'required' => false,
107 ],
108 'version' => [
109 'type' => 'integer',
110 'required' => false,
111 ],
112 ],
113 ],
114 ];
115 }
116 }
117