PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.3
Elementor Website Builder – more than just a page builder v4.0.3
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 / components / overridable-props / overridable-props-parser.php

overridable-props-parser.php in Elementor Website Builder – more than just a page builder 4.0.3, at modules/components/overridable-props/overridable-props-parser.php

89 lines 2.2 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\Components\OverridableProps;
4
5 use Elementor\Core\Utils\Api\Parse_Result;
6 use Elementor\Modules\Components\Utils\Parsing_Utils;
7
8 if ( ! defined( 'ABSPATH' ) ) {
9 exit;
10 }
11
12 class Overridable_Props_Parser {
13 private Overridable_Prop_Parser $prop_parser;
14
15 public function __construct( Overridable_Prop_Parser $prop_parser ) {
16 $this->prop_parser = $prop_parser;
17 }
18
19 public static function make(): self {
20 return new static( Overridable_Prop_Parser::make() );
21 }
22
23 public function parse( array $props ): Parse_Result {
24 $parse_props_result = $this->parse_props( $props );
25
26 if ( ! $parse_props_result->is_valid() ) {
27 return $parse_props_result;
28 }
29
30 $parsed_props = $parse_props_result->unwrap();
31
32 $validation_result = $this->validate( $parsed_props );
33
34 if ( ! $validation_result->is_valid() ) {
35 return $validation_result;
36 }
37
38 return Parse_Result::make()->wrap( $parsed_props );
39 }
40
41 private function parse_props( array $props ): Parse_Result {
42 $result = Parse_Result::make();
43 $parsed_props = [];
44
45 foreach ( $props as $prop_id => $prop ) {
46 if ( ! is_array( $prop ) ) {
47 $result->errors()->add( "props.$prop_id", 'invalid_structure' );
48
49 continue;
50 }
51
52 $prop_result = $this->prop_parser->parse( $prop );
53
54 if ( ! $prop_result->is_valid() ) {
55 $result->errors()->merge( $prop_result->errors(), "props.$prop_id" );
56
57 continue;
58 }
59
60 $parsed_prop = $prop_result->unwrap();
61 $parsed_prop_id = sanitize_key( $prop_id );
62
63 if ( $parsed_prop_id != $parsed_prop['overrideKey'] ) {
64 $result->errors()->add( "props.$parsed_prop_id", 'mismatching_override_key' );
65
66 continue;
67 }
68
69 $parsed_props[ $parsed_prop_id ] = $parsed_prop;
70 }
71
72 return $result->wrap( $parsed_props );
73 }
74
75 private function validate( array $props ): Parse_Result {
76 $result = Parse_Result::make();
77
78 $duplicate_prop_keys_for_same_element = Parsing_Utils::get_duplicates( array_map( fn( $prop ) => $prop['elementId'] . '.' . $prop['propKey'], $props ) );
79
80 if ( ! empty( $duplicate_prop_keys_for_same_element ) ) {
81 $result->errors()->add( 'props', 'duplicate_prop_keys_for_same_element: ' . implode( ', ', $duplicate_prop_keys_for_same_element ) );
82
83 return $result;
84 }
85
86 return $result;
87 }
88 }
89