1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
demos.php
См. документацию.
1<?php
2namespace Bitrix\Landing\PublicAction;
3
4use \Bitrix\Main\Localization\Loc;
5use \Bitrix\Landing\Demos as DemoCore;
6use \Bitrix\Landing\PublicActionResult;
7
8Loc::loadMessages(__FILE__);
9
10class Demos
11{
18 protected static function isItemSuitable(array $item, array $filter = [])
19 {
20 if ($filter)
21 {
22 foreach ($item as $key => $value)
23 {
24 $key = mb_strtoupper($key);
25 if (isset($filter[$key]))
26 {
27 $value = (array)$value;
29 if (!array_intersect($value, $filter[$key]))
30 {
31 return false;
32 }
33 }
34 }
35 }
36
37 return true;
38 }
39
47 protected static function getFilesList($type, $page = false, array $filter = [])
48 {
50
51 if (!is_string($type))
52 {
53 return $result;
54 }
55
56 $componentName = 'bitrix:landing.demo';
57 $className = \CBitrixComponent::includeComponentClass($componentName);
58 $demoCmp = new $className;
59 $demoCmp->initComponent($componentName);
60 $demoCmp->arParams = [
61 'TYPE' => mb_strtoupper($type),
62 'SKIP_REMOTE' => 'Y',
63 ];
64
65 if ($page)
66 {
67 $data = $demoCmp->getDemoPage();
68 }
69 else
70 {
71 $data = $demoCmp->getDemoSite();
72 }
73
74 if (is_array($data))
75 {
76 foreach ($data as $key => &$item)
77 {
78 if (
79 !is_array($item) ||
80 !self::isItemSuitable($item, $filter)
81 )
82 {
83 unset($data[$key]);
84 continue;
85 }
86 if (isset($item['DATA']['items']))
87 {
88 // always convert to UTF-8 for REST
89 $item['DATA']['encoded'] = true;
90 $item['DATA']['charset'] = 'UTF-8';
91 }
92 }
93 unset($item);
94 }
95
96 $result->setResult($data);
97
98 return $result;
99 }
100
107 public static function getSiteList($type, array $filter = [])
108 {
109 $filter = array_change_key_case($filter, CASE_UPPER);
110 return self::getFilesList($type, false, $filter);
111 }
112
119 public static function getPageList($type, array $filter = [])
120 {
121 $filter = array_change_key_case($filter, CASE_UPPER);
122 return self::getFilesList($type, true, $filter);
123 }
124
131 public static function getUrlPreview($code, $type)
132 {
134
135 if (!is_string($code) || !is_string($type))
136 {
137 return $result;
138 }
139
140 $componentName = 'bitrix:landing.demo';
141 $className = \CBitrixComponent::includeComponentClass($componentName);
142 $demoCmp = new $className;
143 $demoCmp->initComponent($componentName);
144 $demoCmp->arParams = array(
145 'TYPE' => mb_strtoupper($type)
146 );
147
148 $result->setResult($demoCmp->getUrlPreview($code));
149
150 return $result;
151 }
152
160 public static function register(array $data = array(), array $params = array())
161 {
163 $error = new \Bitrix\Landing\Error;
164 $themeCode = null;
165 $themeCodeTypo = null;
166
167 // make line array from site and pages
168 if (
169 isset($data['items'])
170 )
171 {
172 if (is_array($data['items']))
173 {
174 $dataPages = $data['items'];
175 }
176 else
177 {
178 $dataPages = array();
179 }
180 unset($data['items']);
181 // set theme codes from sites to pages
182 if (isset($data['fields']['ADDITIONAL_FIELDS']['THEME_CODE']))
183 {
184 $themeCode = $data['fields']['ADDITIONAL_FIELDS']['THEME_CODE'];
185 }
186 if (isset($data['fields']['ADDITIONAL_FIELDS']['THEME_CODE_TYPO']))
187 {
188 $themeCodeTypo = $data['fields']['ADDITIONAL_FIELDS']['THEME_CODE_TYPO'];
189 }
190 foreach ($dataPages as &$page)
191 {
192 if (
193 !isset($page['fields']) ||
194 !is_array($page['fields'])
195 )
196 {
197 $page['fields'] = array();
198 }
199 if (
200 !isset($page['fields']['ADDITIONAL_FIELDS']) ||
201 !is_array($page['fields']['ADDITIONAL_FIELDS'])
202 )
203 {
204 $page['fields']['ADDITIONAL_FIELDS'] = array();
205 }
206 if (!isset($page['fields']['ADDITIONAL_FIELDS']['THEME_CODE']))
207 {
208 $page['fields']['ADDITIONAL_FIELDS']['THEME_CODE'] = $themeCode;
209 }
210 if (!isset($page['fields']['ADDITIONAL_FIELDS']['THEME_CODE_TYPO']))
211 {
212 $page['fields']['ADDITIONAL_FIELDS']['THEME_CODE_TYPO'] = $themeCodeTypo;
213 }
214 }
215 unset($page);
216
217 $data['items'] = array_keys($dataPages);
218 $data['tpl_type'] = DemoCore::TPL_TYPE_SITE;
219 $data = array_merge([$data], $dataPages);
220 }
221
222 if (empty($data) || !is_array($data))
223 {
224 $error->addError(
225 'REGISTER_ERROR_DATA',
226 Loc::getMessage('LANDING_DEMO_REGISTER_ERROR_DATA')
227 );
228 $result->setError($error);
229 return $result;
230 }
231
232 // set app code
233 if (($app = \Bitrix\Landing\PublicAction::restApplication()))
234 {
235 $appCode = $app['CODE'];
236 }
237 else
238 {
239 $appCode = null;
240 }
241
242 $deleteAdded = function(array $added)
243 {
244 foreach ($added as $id)
245 {
246 DemoCore::delete($id);
247 }
248 };
249
250 // add item separate
251 $success = $return = array();
252 $fieldCode = array(
253 'TYPE', 'TPL_TYPE', 'SHOW_IN_LIST', 'TITLE', 'DESCRIPTION',
254 'PREVIEW_URL', 'PREVIEW', 'PREVIEW2X', 'PREVIEW3X'
255 );
256 foreach ($data as $item)
257 {
258 // collect fields
259 $fields = array(
260 'XML_ID' => null,
261 'APP_CODE' => $appCode,
262 'TPL_TYPE' => DemoCore::TPL_TYPE_PAGE,
263 'LANG' => []
264 );
265 if (isset($params['site_template_id']))
266 {
267 $fields['SITE_TEMPLATE_ID'] = $params['site_template_id'];
268 }
269 else
270 {
271 $fields['SITE_TEMPLATE_ID'] = '';
272 }
273 if (isset($item['code']))
274 {
275 $fields['XML_ID'] = trim($item['code']);
276 }
277 if (isset($item['name']))
278 {
279 $fields['TITLE'] = $item['name'];
280 }
281 if (isset($params['lang']))
282 {
283 $fields['LANG']['lang'] = $params['lang'];
284 }
285 if (isset($params['lang_original']))
286 {
287 $fields['LANG']['lang_original'] = $params['lang_original'];
288 }
289 if (isset($item['items']) && !is_array($item['items']))
290 {
291 $item['items'] = [];
292 }
293 foreach ($fieldCode as $code)
294 {
295 $codel = mb_strtolower($code);
296 if (isset($item[$codel]))
297 {
298 $fields[$code] = $item[$codel];
299 }
300 }
301 // serialize and check content
302 $item = (array) $item;
303 $fields['LANG'] = (array) $fields['LANG'];
304 $fields['MANIFEST'] = serialize($item);
305 if ($fields['LANG'])
306 {
307 $fields['LANG'] = serialize($fields['LANG']);
308 }
309 else
310 {
311 unset($fields['LANG']);
312 }
313 if (isset($item['fields']['ADDITIONAL_FIELDS']))
314 {
315 unset($item['fields']['ADDITIONAL_FIELDS']);
316 }
318 serialize($item),
319 $bad
320 );
321 if ($bad)
322 {
323 $error->addError(
324 'CONTENT_IS_BAD',
325 Loc::getMessage('LANDING_DEMO_CONTENT_IS_BAD') .
326 ' [code: ' . $fields['XML_ID'] . ']'
327 );
328 $result->setError($error);
329 $deleteAdded($success);
330 return $result;
331 }
332 $check = false;
333 // check unique
334 if ($fields['XML_ID'])
335 {
336 $check = DemoCore::getList(array(
337 'select' => array(
338 'ID'
339 ),
340 'filter' =>
341 isset($fields['APP_CODE'])
342 ? array(
343 '=XML_ID' => $fields['XML_ID'],
344 '=APP_CODE' => $fields['APP_CODE'],
345 '=TPL_TYPE' => $fields['TPL_TYPE']
346 )
347 : array(
348 '=XML_ID' => $fields['XML_ID'],
349 '=TPL_TYPE' => $fields['TPL_TYPE']
350 )
351 )
352 )->fetch();
353 }
354 // register (add / update)
355 if ($check)
356 {
357 $res = DemoCore::update($check['ID'], $fields);
358 }
359 else
360 {
361 $res = DemoCore::add($fields);
362 if ($res->isSuccess())
363 {
364 $success[] = $res->getId();
365 }
366 }
367 if ($res->isSuccess())
368 {
369 $return[] = (int)$res->getId();
370 }
371 else
372 {
373 $error->addFromResult($res);
374 $result->setError($error);
375 $deleteAdded($success);
376 return $result;
377 }
378 }
379
380 $result->setResult($return);
381
382 return $result;
383 }
384
390 public static function unregister($code)
391 {
393 $error = new \Bitrix\Landing\Error;
394
395 $result->setResult(false);
396
397 if (!is_string($code))
398 {
399 return $result;
400 }
401
402 // search and delete
403 if ($code)
404 {
405 // set app code
406 $app = \Bitrix\Landing\PublicAction::restApplication();
407
409 'select' => array(
410 'ID'
411 ),
412 'filter' =>
413 isset($app['CODE'])
414 ? array(
415 '=XML_ID' => $code,
416 '=APP_CODE' => $app['CODE']
417 )
418 : array(
419 '=XML_ID' => $code
420 )
421 ));
422 while ($row = $res->fetch())
423 {
424 // delete block from repo
425 $resDel = DemoCore::delete($row['ID']);
426 if ($resDel->isSuccess())
427 {
428 $result->setResult(true);
429 }
430 else
431 {
432 $error->addFromResult($resDel);
433 $result->setError($error);
434 return $result;
435 }
436 }
437 }
438
439 return $result;
440 }
441
447 public static function getList(array $params = array())
448 {
450 $params = $result->sanitizeKeys($params);
451
452 if (!is_array($params))
453 {
454 $params = array();
455 }
456 if (
457 !isset($params['filter']) ||
458 !is_array($params['filter'])
459 )
460 {
461 $params['filter'] = array();
462 }
463
464 // set app code
465 if (($app = \Bitrix\Landing\PublicAction::restApplication()))
466 {
467 $params['filter']['=APP_CODE'] = $app['CODE'];
468 }
469
470 $data = array();
472 while ($row = $res->fetch())
473 {
474 if (isset($row['DATE_CREATE']))
475 {
476 $row['DATE_CREATE'] = (string) $row['DATE_CREATE'];
477 }
478 if (isset($row['DATE_MODIFY']))
479 {
480 $row['DATE_MODIFY'] = (string) $row['DATE_MODIFY'];
481 }
482 $row['MANIFEST'] = unserialize($row['MANIFEST'], ['allowed_classes' => false]);
483 if ($row['LANG'])
484 {
485 $row['LANG'] = unserialize($row['LANG'], ['allowed_classes' => false]);
486 }
487 $data[] = $row;
488 }
489 $result->setResult($data);
490
491 return $result;
492 }
493}
$type
Определения options.php:106
Определения demos.php:5
const TPL_TYPE_PAGE
Определения demos.php:14
const TPL_TYPE_SITE
Определения demos.php:9
static sanitize($value, &$bad=false, $splitter=' ')
Определения manager.php:1310
static getFilesList($type, $page=false, array $filter=[])
Определения demos.php:47
static getList(array $params=array())
Определения demos.php:447
static getUrlPreview($code, $type)
Определения demos.php:131
static isItemSuitable(array $item, array $filter=[])
Определения demos.php:18
static unregister($code)
Определения demos.php:390
static getSiteList($type, array $filter=[])
Определения demos.php:107
static getPageList($type, array $filter=[])
Определения demos.php:119
$componentName
Определения component_props2.php:49
$data['IS_AVAILABLE']
Определения .description.php:13
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$res
Определения filter_act.php:7
$result
Определения get_property_values.php:14
$filter
Определения iblock_catalog_list.php:54
$app
Определения proxy.php:8
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
Определения options.php:195
$success
Определения mail_entry.php:69
Определения agent.php:3
if(empty($signedUserToken)) $key
Определения quickway.php:257
$page
Определения order_form.php:33
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
Определения template.php:799
$error
Определения subscription_card_product.php:20
$fields
Определения yandex_run.php:501