1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
<?php namespace Elementor\Data\V2\Base;
use Elementor\Data\V2\Manager;
if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly }
abstract class Endpoint extends Base_Route { /** * Current parent. * * @var \Elementor\Data\V2\Base\Controller|\Elementor\Data\V2\Base\Endpoint */ protected $parent;
/** * Loaded sub endpoint(s). * * @var \Elementor\Data\V2\Base\Endpoint[] */ protected $sub_endpoints = [];
/** * Get endpoint name. * * @return string */ abstract public function get_name();
/** * * Get endpoint format. * The formats that generated using this function, will be used only be `Data\Manager::run()`. * * @return string */ abstract public function get_format();
/** * Get controller. * * @return \Elementor\Data\V2\Base\Controller */ public function get_controller() { return $this->controller; }
/** * Get current parent. * * @return \Elementor\Data\V2\Base\Controller|\Elementor\Data\V2\Base\Endpoint */ public function get_parent() { return $this->parent; }
/** * Get public name. * * @return string */ public function get_public_name() { return $this->get_name(); }
/** * Get full command name ( including index ). * * @return string */ public function get_full_command() { $parent = $this->get_parent();
if ( $parent instanceof Controller ) { return $this->controller->get_full_name() . '/' . $this->get_name(); }
return $this->get_name_ancestry(); }
/** * Get name ancestry format, example: 'alpha/beta/delta'. * * @return string */ public function get_name_ancestry() { $ancestors = $this->get_ancestors(); $ancestors_names = [];
foreach ( $ancestors as $ancestor ) { $ancestors_names [] = $ancestor->get_name(); }
return implode( '/', $ancestors_names ); }
/** * Register sub endpoint. * * @param \Elementor\Data\V2\Base\Endpoint $endpoint * * @return \Elementor\Data\V2\Base\Endpoint */ public function register_sub_endpoint( Endpoint $endpoint ) { $command = $endpoint->get_full_command(); $format = $endpoint->get_format();
$this->sub_endpoints[ $command ] = $endpoint;
Manager::instance()->register_endpoint_format( $command, $format );
return $endpoint; }
/** * Get ancestors. * * @return \Elementor\Data\V2\Base\Endpoint[] */ private function get_ancestors() { $ancestors = []; $current = $this;
do { if ( $current ) { $ancestors [] = $current; }
$current = $current->get_parent(); } while ( $current );
return array_reverse( $ancestors ); }
/** * Endpoint constructor. * * @param \Elementor\Data\V2\Base\Controller|\Elementor\Data\V2\Base\Endpoint $parent * @param string $route */ public function __construct( $parent, $route = '/' ) { $controller = $parent; $this->parent = $parent;
// In case, its behave like sub-endpoint. if ( ! ( $parent instanceof Controller ) ) { $controller = $parent->get_controller(); }
parent::__construct( $controller, $route ); } }
|