PluginProbe
Brizy – Page Builder / trunk
Brizy – Page Builder vtrunk
2.8.23 2.8.22 2.8.21 2.8.20 2.8.19 2.8.18 2.8.17 2.8.16 2.8.15 2.8.14 2.6.4 2.6.5 2.6.6 2.6.7 2.6.8 2.6.9 2.7.0 2.7.1 2.7.10 2.7.11 2.7.12 2.7.13 2.7.14 2.7.15 2.7.16 All 188 releases
brizy / admin / cloud.php

cloud.php in Brizy – Page Builder trunk, at admin/cloud.php

408 lines 11.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 class Brizy_Admin_Cloud
4 {
5
6 /**
7 * @var self
8 */
9 static $instance;
10
11 /**
12 * @var Brizy_Editor_Project
13 */
14 private $project;
15
16 /**
17 * @var Brizy_Admin_Cloud_Client
18 */
19 private $cloudClient;
20
21 /**
22 * @var Brizy_Admin_Cloud_BlockBridge
23 */
24 private $blockBridge;
25
26 /**
27 * @var Brizy_Admin_Cloud_LayoutBridge
28 */
29 private $layoutBridge;
30
31 /**
32 * @param Brizy_Editor_Project|null $project
33 * @param Brizy_Admin_Cloud_Client|null $cloudClient
34 *
35 * @return Brizy_Admin_Cloud
36 * @throws Exception
37 */
38 public static function _init($project = null, $cloudClient = null)
39 {
40
41 if (!$project) {
42 $project = Brizy_Editor_Project::get();
43 }
44
45 if (!$cloudClient) {
46 $cloudClient = Brizy_Admin_Cloud_Client::instance($project, new WP_Http());
47 }
48
49 if (!wp_doing_ajax() && Brizy_Editor_Project::get()->getCloudToken()) {
50 // do not run cron actions on ajax request
51 Brizy_Admin_Cloud_Cron::_init();
52 }
53
54 return self::$instance ? self::$instance : (self::$instance = new self($project, $cloudClient));
55 }
56
57 /**
58 * Brizy_Admin_Cloud constructor.
59 *
60 * @param Brizy_Editor_Project $project
61 * @param Brizy_Admin_Cloud_Client $client
62 */
63 private function __construct(Brizy_Editor_Project $project, Brizy_Admin_Cloud_Client $client)
64 {
65
66 $this->setProject($project);
67 $this->setCloudClient($client);
68
69 $this->blockBridge = new Brizy_Admin_Cloud_BlockBridge($client);
70 $this->layoutBridge = new Brizy_Admin_Cloud_LayoutBridge($client);
71
72 add_action('wp_loaded', array($this, 'initializeActions'));
73 }
74
75 /**
76 * @param Brizy_Editor_Project $project
77 *
78 * @return Brizy_Admin_Cloud
79 */
80 public function setProject(Brizy_Editor_Project $project)
81 {
82 $this->project = $project;
83
84 return $this;
85 }
86
87 /**
88 * @param Brizy_Admin_Cloud_Client $cloudClient
89 *
90 * @return Brizy_Admin_Cloud
91 */
92 public function setCloudClient(Brizy_Admin_Cloud_Client $cloudClient)
93 {
94 $this->cloudClient = $cloudClient;
95
96 return $this;
97 }
98
99 /**
100 * @param Brizy_Admin_Cloud_BlockBridge $blockBridge
101 *
102 * @return Brizy_Admin_Cloud
103 */
104 public function setBlockBridge(Brizy_Admin_Cloud_BlockBridge $blockBridge)
105 {
106 $this->blockBridge = $blockBridge;
107
108 return $this;
109 }
110
111 /**
112 * @param Brizy_Admin_Cloud_LayoutBridge $layoutBridge
113 *
114 * @return Brizy_Admin_Cloud
115 */
116 public function setLayoutBridge(Brizy_Admin_Cloud_LayoutBridge $layoutBridge)
117 {
118 $this->layoutBridge = $layoutBridge;
119
120 return $this;
121 }
122
123 public function initializeActions()
124 {
125 try {
126 if (wp_doing_ajax() && $this->project->getCloudToken() && $this->project->getCloudContainer()) {
127 $versions = $this->cloudClient->getCloudEditorVersions();
128 if ($versions['sync'] == BRIZY_SYNC_VERSION) {
129 self::registerCloudFilters();
130 }
131 }
132
133 Brizy_Admin_Cloud_Api::_init($this->project);
134 } catch (\Exception $e) {
135 Brizy_Logger::instance()->exception($e);
136 }
137 }
138
139 static public function registerCloudFilters()
140 {
141 add_filter('brizy_get_saved_block', [self::$instance, 'onGetSavedBlock'], 10, 3);
142 add_filter('brizy_get_saved_blocks', [self::$instance, 'onGetSavedBlocks'], 10, 3);
143 add_action('brizy_saved_block_delete', [self::$instance, 'onDeleteSavedBlock']);
144
145 add_filter('brizy_get_layout', [self::$instance, 'onGetLayout'], 10, 3);
146 add_filter('brizy_get_layouts', [self::$instance, 'onGetLayouts'], 10, 3);
147 add_action('brizy_layout_delete', [self::$instance, 'onDeleteLayout']);
148 }
149
150 static public function unRegisterCloudFilters()
151 {
152 remove_filter('brizy_get_saved_block', [self::$instance, 'onGetSavedBlock']);
153 remove_filter('brizy_get_saved_blocks', [self::$instance, 'onGetSavedBlocks']);
154 remove_action('brizy_saved_block_delete', [self::$instance, 'onDeleteSavedBlock']);
155
156 remove_filter('brizy_get_layout', [self::$instance, 'onGetLayout']);
157 remove_filter('brizy_get_layouts', [self::$instance, 'onGetLayouts']);
158 remove_action('brizy_layout_delete', [self::$instance, 'onDeleteLayout']);
159 }
160
161 /**
162 * @param Brizy_Editor_Entity[] $blocks
163 * @param string[] $fields
164 * @param Brizy_Admin_Blocks_Manager $manager
165 */
166 public function onGetSavedBlocks($blocks, $fields, $manager)
167 {
168
169 if (!is_array($blocks)) {
170 $blocks = [];
171 }
172
173 try {
174 $filters = array(
175 'fields' => $fields,
176 'page' => (int) ( $_REQUEST['page'] ?: 1 ),
177 'count' => (int) ( $_REQUEST['count'] ?: 200 ),
178 'container' => $this->project->getCloudContainer()
179 );
180 $cloudBlocks = $this->cloudClient->getBlocks( $filters );
181
182 // remove all local block that came from cloud and are deleted from cloud
183 foreach ($blocks as $i => $block) {
184 $existingBlock = false;
185 foreach ((array)$cloudBlocks as $cblock) {
186 if ($cblock->uid == $block['uid']) {
187 $existingBlock = true;
188 break;
189 }
190 }
191
192 if (!$existingBlock &&
193 ($localBlock = $manager->getEntity($block['uid'])) &&
194 $localBlock->isSynchronized($this->cloudClient->getBrizyProject()->getCloudAccountId())) {
195 // delete this block as this block does not exist anymore in cloud
196 $manager->trashEntity($localBlock);
197
198 unset($blocks[$i]);
199 }
200 }
201
202 $blocks = array_values($blocks);
203
204 // remove cloud blocks that are already saved localy
205 foreach ((array)$cloudBlocks as $cblock) {
206 $existingBlock = false;
207 foreach ($blocks as $block) {
208 if ($cblock->uid == $block['uid']) {
209 $existingBlock = true;
210 break;
211 }
212 }
213
214 if (!$existingBlock) {
215
216 if (in_array('synchronized', $fields)) {
217 $localBlock = $manager->getEntity($cblock->uid);
218 if ($localBlock) {
219 $cblock->synchronized = $localBlock->isSynchronized($this->cloudClient->getBrizyProject()->getCloudAccountId());
220 } else {
221 $cblock->synchronized = false;
222 }
223 }
224
225 if (in_array('isCloudEntity', $fields)) {
226 $cblock->isCloudEntity = true;
227 }
228
229 if (in_array('synchronizable', $fields)) {
230 $cblock->synchronizable = true;
231 }
232
233 $blocks[] = (array)$cblock;
234 }
235 }
236
237 } catch (Exception $e) {
238 // do nothing...
239 }
240
241 return $blocks;
242 }
243
244 /**
245 * @param Brizy_Editor_Entity $block
246 * @param string $uid
247 * @param Brizy_Admin_Blocks_Manager $manager
248 *
249 * @throws Exception
250 */
251 public function onGetSavedBlock($block, $uid, $manager)
252 {
253 try {
254 if (!$block) {
255 $this->blockBridge->import($uid);
256 $block = $manager->getEntity($uid);
257 }
258 } catch (Exception $e) {
259
260 }
261
262 return $block;
263 }
264
265 /**
266 * @param $blockUid
267 */
268 public function onDeleteSavedBlock($blockUid)
269 {
270 try {
271 $blocks = $this->cloudClient->getBlocks(['uid' => $blockUid]);
272
273 if (isset($blocks[0])) {
274 $block = (array)$blocks[0];
275 $this->cloudClient->deleteBlock($block['id']);
276 }
277
278 } catch (Exception $e) {
279
280 }
281 }
282
283 /**
284 * @param Brizy_Editor_Entity[] $layouts
285 * @param string[] $fields
286 * @param Brizy_Admin_Layouts_Manager $manager
287 */
288 public function onGetLayouts($layouts, $fields, $manager)
289 {
290
291 if (!is_array($layouts)) {
292 $layouts = [];
293 }
294
295 try {
296 $filters = array(
297 'fields' => $fields,
298 'page' => (int) ( $_REQUEST['page'] ?: 1 ),
299 'count' => (int) ( $_REQUEST['count'] ?: 200 ),
300 'container' => $this->project->getCloudContainer()
301 );
302 $cloudLayouts = $this->cloudClient->getLayouts( $filters );
303
304 // remove all local block that came from cloud and are deleted from cloud
305 foreach ($layouts as $i => $block) {
306 $existingBlock = false;
307 foreach ((array)$cloudLayouts as $cblock) {
308 if ($cblock->uid == $block['uid']) {
309 $existingBlock = true;
310 break;
311 }
312 }
313
314 if (!$existingBlock &&
315 ($localLayout = $manager->getEntity($block['uid'])) &&
316 $localLayout->isSynchronized($this->cloudClient->getBrizyProject()->getCloudAccountId())) {
317 // delete this block as this block does not exist anymore in cloud
318 $manager->deleteEntity($localLayout);
319
320 unset($layouts[$i]);
321 }
322 }
323
324 $layouts = array_values($layouts);
325
326 foreach ((array)$cloudLayouts as $aLayout) {
327 $existingLayout = false;
328 foreach ($layouts as $block) {
329 if ($aLayout->uid == $block['uid']) {
330 $existingLayout = true;
331 break;
332 }
333 }
334
335 if (!$existingLayout) {
336
337 $localLayout = $manager->getEntity($aLayout->uid);
338
339 if (in_array('synchronized', $fields)) {
340 if ($localLayout) {
341 $aLayout->synchronized = $localLayout->isSynchronized($this->cloudClient->getBrizyProject()->getCloudAccountId());
342 } else {
343 $aLayout->synchronized = false;
344 }
345 }
346
347 if (in_array('isCloudEntity', $fields)) {
348 $aLayout->isCloudEntity = true;
349 }
350
351 if (in_array('synchronizable', $fields)) {
352 $aLayout->synchronizable = true;
353 }
354
355 $layouts[] = (array)$aLayout;
356 }
357 }
358
359 } catch (Exception $e) {
360 // do nothing...
361 }
362
363 return $layouts;
364 }
365
366
367 /**
368 * @param Brizy_Editor_Entity $block
369 * @param string $uid
370 * @param Brizy_Admin_Layouts_Manager $manager
371 *
372 * @throws Exception
373 */
374 public function onGetLayout($block, $uid, $manager)
375 {
376 try {
377 if (!$block) {
378 $this->layoutBridge->import($uid);
379 $block = $manager->getEntity($uid);
380 }
381 } catch (Exception $e) {
382
383 }
384
385 return $block;
386 }
387
388 /**
389 * @param $blockUid
390 */
391 public function onDeleteLayout($blockUid)
392 {
393 try {
394 $blocks = $this->cloudClient->getLayouts(['uid' => $blockUid]);
395
396 if (isset($blocks[0])) {
397 $block = (array)$blocks[0];
398 $this->cloudClient->deleteLayout($block['id']);
399 }
400
401 } catch (Exception $e) {
402
403 }
404 }
405
406
407 }
408