6use \Bitrix\Landing\Landing as LandingCore;
8use \Bitrix\Landing\Site as SiteCore;
10use \Bitrix\Landing\Transfer\AppConfiguration;
11use \Bitrix\Landing\File;
12use \Bitrix\Landing\Folder;
13use \Bitrix\Landing\Hook;
14use \Bitrix\Landing\Repo;
15use \Bitrix\Landing\Block;
16use \Bitrix\Landing\Node;
17use \Bitrix\Main\Event;
21use \Bitrix\Rest\AppTable;
22use \Bitrix\Rest\Configuration;
43 self::$forceAppendRestBlocks = $mode;
52 public static function getRepoId(
string $appCode,
string $xmlId): ?int
59 $res = Repo::getList([
61 'ID',
'APP_CODE',
'XML_ID',
64 while ($row =
$res->fetch())
66 $items[$row[
'APP_CODE'] .
'@' . $row[
'XML_ID']] = $row[
'ID'];
70 if (isset(
$items[$appCode .
'@' . $xmlId]))
72 return $items[$appCode .
'@' . $xmlId];
93 foreach (
$data as $selector => &$nodes)
97 if (!isset($manifest[
'nodes'][$selector]))
102 $manifest[
'nodes'][$selector][
'type'] !==
Node\Type::IMAGE
103 && $manifest[
'nodes'][$selector][
'type'] !==
Node\Type::STYLE_IMAGE
109 foreach ($nodes as &$node)
111 foreach ([
'',
'2x'] as $x)
113 if (isset($node[
'id' . $x]))
115 $unpackedFile = $structure->getUnpackFile($node[
'id' . $x]);
125 $node[
'id' . $x] = $newFileId;
126 $node[
'src' . $x] = $newFilePath;
148 if (isset($block[
'cards']) && is_array($block[
'cards']))
155 if (isset($block[
'style']) && is_array($block[
'style']))
157 foreach ($block[
'style'] as $selector => $styleData)
159 if ($selector ===
'#wrapper')
161 $selector =
'#' . $blockInstance->
getAnchor($blockInstance->
getId());
165 if (!isset($styleData[
'classList']) && !isset($styleData[
'style']))
167 foreach ((
array)$styleData as $clPos => $clVal)
170 $selectorUpd = $selector .
'@' . $clPos;
171 $styleToSet[$selectorUpd][
'classList'] = (
array)$clVal;
176 if (isset($styleData[
'classList']))
178 foreach ($styleData[
'classList'] as $clPos => $class)
182 $selectorUpd = $selector .
'@' . $clPos;
183 $styleToSet[$selectorUpd][
'classList'] = explode(
' ', $class);
187 if (isset($styleData[
'style']))
189 foreach ($styleData[
'style'] as $stPos => $styles)
193 $selectorUpd = $selector .
'@' . $stPos;
194 $styleToSet[$selectorUpd][
'style'] = $styles;
199 if (!empty($styleToSet))
206 if (isset($block[
'nodes']) && is_array($block[
'nodes']))
211 if (isset($block[
'menu']) && !empty($block[
'menu']))
216 if (isset($block[
'attrs']) && !empty($block[
'attrs']))
218 if (isset($block[
'attrs'][
'#wrapper']))
220 $attrCode =
'#' . $blockInstance->
getAnchor($blockInstance->
getId());
221 $block[
'attrs'][$attrCode] = $block[
'attrs'][
'#wrapper'];
222 unset($block[
'attrs'][
'#wrapper']);
227 if (isset($block[
'dynamic']) && is_array($block[
'dynamic']))
244 static $appChecked = [];
250 isset($block[
'repo_block'][
'app_code']) &&
251 isset($block[
'repo_block'][
'xml_id']) &&
252 is_string($block[
'repo_block'][
'app_code']) &&
253 is_string($block[
'repo_block'][
'xml_id'])
256 unset($block[
'code']);
258 $repoId = self::getRepoId(
259 $block[
'repo_block'][
'app_code'],
260 $block[
'repo_block'][
'xml_id']
264 $block[
'code'] =
'repo_' . $repoId;
269 !isset($block[
'code']) &&
270 !empty($block[
'repo_info']) &&
271 self::$forceAppendRestBlocks
274 $appCode = $block[
'repo_block'][
'app_code'];
275 if (!array_key_exists($appCode, $appChecked))
280 if ($appChecked[$appCode])
282 $repoInfo = $block[
'repo_info'];
284 'APP_CODE' => $block[
'repo_block'][
'app_code'],
285 'XML_ID' => $block[
'repo_block'][
'xml_id'],
286 'NAME' => $repoInfo[
'NAME'] ??
null,
287 'DESCRIPTION' => $repoInfo[
'DESCRIPTION'] ??
null,
288 'SECTIONS' => $repoInfo[
'SECTIONS'] ??
null,
289 'PREVIEW' => $repoInfo[
'PREVIEW'] ??
null,
290 'MANIFEST' => serialize(unserialize($repoInfo[
'MANIFEST'] ??
'', [
'allowed_classes' =>
false])),
291 'CONTENT' => $repoInfo[
'CONTENT'] ??
null,
293 if (
$res->isSuccess())
295 $block[
'code'] =
'repo_' .
$res->getId();
300 if (!isset($block[
'code']))
303 $blockId = $landing->addBlock(
308 'ANCHOR' => $block[
'anchor'] ??
'',
309 'INITIATOR_APP_CODE' => $block[
'repo_block'][
'app_code'] ??
null,
315 $blockInstance = $landing->getBlockById($blockId);
318 if (isset($block[
'nodes']) && is_array($block[
'nodes']))
320 $block[
'nodes'] = self::addFilesToBlock(
327 $blockInstance->updateNodes([
329 'BLOCK_ID' => $blockId,
330 'DATA' => base64_encode(serialize($block)),
333 $blockInstance->save();
340 if (!isset($block[
'code']))
349 'ANCHOR' => $block[
'anchor'] ??
'',
350 'INITIATOR_APP_CODE' => $block[
'repo_block'][
'app_code'] ??
null,
352 if ($block[
'full_content'] ??
null)
354 $blockFields[
'CONTENT'] = str_replace(
357 $block[
'full_content']
360 if ($block[
'designed'] ??
null)
362 $blockFields[
'DESIGNED'] =
'Y';
364 $blockId = $landing->addBlock(
371 $blockInstance = $landing->getBlockById($blockId);
372 if (isset($block[
'nodes']) && is_array($block[
'nodes']))
374 $block[
'nodes'] = self::addFilesToBlock(
380 if ($block[
'meta'][
'FAVORITE_META'] ?? [])
382 $favoriteMeta = $block[
'meta'][
'FAVORITE_META'];
383 if ($block[
'repo_block'][
'app_code'] ??
null)
385 $favoriteMeta[
'tpl_code'] = $block[
'repo_block'][
'app_code'];
387 if (intval($favoriteMeta[
'preview'] ?? 0) > 0)
389 $unpackFile = $structure->getUnpackFile($favoriteMeta[
'preview']);
395 if (!$favoriteMeta[
'preview'])
397 unset($favoriteMeta[
'preview']);
400 $blockInstance->changeFavoriteMeta($favoriteMeta);
401 \Bitrix\Landing\Block::clearRepositoryCache();
403 if ($blockFields[
'CONTENT'] ??
null)
405 $blockInstance->saveContent($blockFields[
'CONTENT'], $block[
'designed'] ??
false);
407 self::saveDataToBlock($blockInstance, $block);
408 $blockInstance->save();
410 if (intval($block[
'meta'][
'LID'] ?? -1) === 0)
412 $blockInstance->changeLanding(0);
428 $ratio =
$event->getParameter(
'RATIO');
429 $contextUser =
$event->getParameter(
'CONTEXT_USER');
430 $additional =
$event->getParameter(
'ADDITIONAL_OPTION');
431 $appId =
$event->getParameter(
'APP_ID');
432 $isReplaceSiteLandings = ($ratio[
$code][
'REPLACE_SITE_ID'] ?? 0) > 0;
433 $isMainPage = self::isMainpage(
$event);
435 $structure =
new Configuration\Structure($contextUser);
437 'RATIO' => $ratio[
$code] ?? [],
438 'ERROR_MESSAGES' => [],
446 if (isset($return[
'RATIO'][
'TYPE']))
449 $return[
'RATIO'][
'TYPE']
453 if (!self::isNeedImport(
$event))
459 $oldLid =
$data[
'ID'] ??
null;
466 if (isset($ratio[
$code][
'SITE_ID']) && (
int)$ratio[
$code][
'SITE_ID'] > 0)
470 elseif ($additional && (
int)$additional[
'siteId'] > 0)
472 $siteId = (int)$additional[
'siteId'];
473 $return[
'RATIO'][
'SITE_ID'] = (int)$additional[
'siteId'];
476 if (($additional[
'siteId'] ?? 0) > 0)
478 LandingCore::enableCheckUniqueAddress();
483 if ($isReplaceSiteLandings && $isMainPage)
485 $additionalFieldSite = (
array)($ratio[
$code][
'ADDITIONAL_FIELDS_SITE'] ?? []);
486 $data = self::mergeAdditionalFieldsForReplace(
$data, $additionalFieldSite);
487 $return[
'RATIO'][
'ADDITIONAL_FIELDS_SITE'] =
$data[
'ADDITIONAL_FIELDS'];
489 $return[
'RATIO'][
'ADDITIONAL_FIELDS'][$oldLid] =
$data[
'ADDITIONAL_FIELDS'];
490 $data = self::prepareAdditionalFiles(
$data, $structure);
493 $convertFolderOldFormat =
false;
494 $return[
'RATIO'][
'FOLDERS_REF'] = $return[
'RATIO'][
'FOLDERS_REF'] ?? [];
495 if (
$data[
'FOLDER'] ===
'Y')
497 $convertFolderOldFormat =
true;
498 $data[
'FOLDER'] =
'N';
499 $res = SiteCore::addFolder($ratio[
$code][
'SITE_ID'], [
500 'TITLE' =>
$data[
'TITLE'],
501 'CODE' =>
$data[
'CODE'],
503 if (
$res->isSuccess())
506 $return[
'RATIO'][
'FOLDERS_REF'][$oldLid] =
$data[
'FOLDER_ID'];
509 elseif ($additional && $additional[
'folderId'])
511 $data[
'FOLDER_ID'] = (int)$additional[
'folderId'];
518 $app = AppTable::getById($appId)->fetch();
519 $appCode =
$app[
'CODE'] ??
null;
522 $data[
'XML_ID'] =
$data[
'TITLE'] .
'|' . $appCode;
523 $data[
'PREVIOUS_TPL_CODE'] =
$data[
'TPL_CODE'];
524 $data[
'TPL_CODE'] = $appCode;
529 $data[
'ACTIVE'] =
'N';
530 $data[
'PUBLIC'] =
'N';
531 $data[
'FOLDER_SKIP_CHECK'] =
'Y';
532 $data[
'INITIATOR_APP_CODE'] = $appCode;
533 unset(
$data[
'CODE']);
536 $data = self::prepareAdditionalFields(
$data, $additional, $ratio);
539 if (
$res->isSuccess())
541 if ($convertFolderOldFormat && (
$data[
'FOLDER_ID'] ?? 0))
543 Folder::update(
$data[
'FOLDER_ID'], [
'INDEX_ID' =>
$res->getId()]);
546 if (isset(
$data[
'BLOCKS']) && is_array(
$data[
'BLOCKS']))
551 self::saveAdditionalFilesToLanding(
$data,
$res->getId());
553 $landing = LandingCore::createInstance(
$res->getId());
558 $return[
'RATIO'][
'LANDINGS'][$oldLid] =
$res->getId();
561 if (isset(
$data[
'TPL_ID']) &&
$data[
'TPL_ID'])
563 $return[
'RATIO'][
'TEMPLATE_LINKING'][
$res->getId()] = [
564 'TPL_ID' => (int)
$data[
'TPL_ID'],
565 'TEMPLATE_REF' => (
array)(
$data[
'TEMPLATE_REF'] ?? []),
570 $siteTemplate = (
array)($return[
'RATIO'][
'TEMPLATE_LINKING'][-1 *
$siteId] ?? []);
571 if (!empty($siteTemplate))
573 $return[
'RATIO'][
'TEMPLATE_LINKING'][
$res->getId()] = $siteTemplate;
574 unset($return[
'RATIO'][
'TEMPLATE_LINKING'][-1 *
$siteId]);
578 if (isset(
$data[
'BLOCKS']) && is_array(
$data[
'BLOCKS']))
580 foreach (
$data[
'BLOCKS'] as $oldBlockId => $blockItem)
582 if (is_array($blockItem))
585 $newBlockId = self::importBlock(
591 $return[
'RATIO'][
'BLOCKS'][$oldBlockId] = $newBlockId;
594 $return[
'RATIO'][
'BLOCKS_PENDING'][] = $newBlockId;
602 $return[
'ERROR_MESSAGES'] =
$res->getErrorMessages();
617 $ratio =
$event->getParameter(
'RATIO');
618 $contextUser =
$event->getParameter(
'CONTEXT_USER');
619 $structure =
new Configuration\Structure($contextUser);
627 'RATIO' => $ratio[
$code] ?? [],
628 'ERROR_MESSAGES' => [],
632 !isset($ratio[
$code][
'REPLACE_LID'])
633 || (
int)$ratio[
$code][
'REPLACE_LID'] <= 0
636 $return[
'ERROR_MESSAGES'] =
'Not set landing ID for replace';
640 $replaceLid = (int)$ratio[
$code][
'REPLACE_LID'];
642 if (isset($return[
'RATIO'][
'TYPE']))
646 LandingCore::setEditMode();
647 $landing = LandingCore::createInstance($replaceLid);
648 if (!$landing->exist())
650 $return[
'ERROR_MESSAGES'] =
'Raplaced landing is not exists';
656 $return[
'RATIO'][
'LANDINGS'][$replaceLid] = $replaceLid;
658 if (!self::isNeedImport(
$event))
666 $additionalFieldsBefore = self::getAdditionalFieldsForReplaceByLanding($replaceLid);
667 if (is_array($ratio[
$code][
'ADDITIONAL_FIELDS_SITE']) && !empty($ratio[
$code][
'ADDITIONAL_FIELDS_SITE']))
669 $data = self::mergeAdditionalFieldsForReplace(
$data, $ratio[
$code][
'ADDITIONAL_FIELDS_SITE']);
670 $data = self::prepareAdditionalFiles(
$data, $structure);
671 self::saveAdditionalFieldsToLanding(
$data, $replaceLid);
672 self::saveAdditionalFilesToLanding(
$data, $replaceLid);
675 if (isset(
$data[
'BLOCKS']) && is_array(
$data[
'BLOCKS']))
681 History::deactivate();
682 foreach ($landing->getBlocks() as $block)
684 $blockId = $block->getId();
685 $block->setAccess(Block::ACCESS_X);
686 if ($landing->markDeletedBlock($block->getId(),
true))
688 $blocksBefore[] = $blockId;
692 foreach (
$data[
'BLOCKS'] as $oldBlockId => $block)
694 if (is_array($block) && !empty($block))
697 $newBlockId = self::importBlock(
703 $blocksAfter[] = $newBlockId;
704 $return[
'RATIO'][
'BLOCKS'][$oldBlockId] = $newBlockId;
707 $return[
'RATIO'][
'BLOCKS_PENDING'][] = $newBlockId;
713 $meta = $landing->getMeta();
714 $isCrmFormSite =
null;
715 if ($meta[
'SITE_SPECIAL'] ===
'Y')
720 if ($isCrmFormSite && Loader::includeModule(
'crm'))
723 $res = Crm\WebForm\Internals\LandingTable::getList([
728 '=LANDING_ID' => $replaceLid,
731 $row =
$res->fetch();
732 $formId = $row ? $row[
'FORM_ID'] :
null;
735 foreach ($landing->getBlocks() as $block)
737 $manifest = $block->getManifest();
738 if (($manifest[
'block'][
'subtype'] ??
null) ===
'form')
741 if ($block->getAccess() > Block::ACCESS_W)
743 BlockTable::update($block->getId(), [
744 'ACCESS' => Block::ACCESS_W,
754 $landing->publication();
758 $history =
new History($replaceLid, History::ENTITY_TYPE_LANDING);
759 $history->push(
'REPLACE_LANDING', [
760 'lid' => $replaceLid,
762 'blocksBefore' => $blocksBefore,
763 'blocksAfter' => $blocksAfter,
764 'additionalFieldsBefore' => $additionalFieldsBefore,
765 'additionalFieldsAfter' =>
$data[
'ADDITIONAL_FIELDS'],
781 $ratio =
$event->getParameter(
'RATIO');
783 if (($ratio[
$code][
'REPLACE_SITE_ID'] ?? 0) > 0)
789 $ratio[
$code][
'IS_PAGE_IMPORT']
790 && isset($ratio[
$code][
'SPECIAL_PAGES'][
'LANDING_ID_INDEX'])
791 && (
int)
$content[
'DATA'][
'ID'] !== $ratio[
$code][
'SPECIAL_PAGES'][
'LANDING_ID_INDEX']
809 $ratio =
$event->getParameter(
'RATIO');
812 isset($ratio[
$code][
'SPECIAL_PAGES'][
'LANDING_ID_INDEX'])
813 && (int)
$content[
'DATA'][
'ID'] === $ratio[
$code][
'SPECIAL_PAGES'][
'LANDING_ID_INDEX']
821 'ID',
'VIEWS',
'DATE_CREATE',
'DATE_MODIFY',
822 'DATE_PUBLIC',
'CREATED_BY_ID',
'MODIFIED_BY_ID',
824 foreach ($notAllowedKeys as
$key)
839 $data = self::fixContactDataAndCountdown(
$data);
841 self::enableHiddenBlocksForCreatingPage();
853 $eventManager->addEventHandler(
'landing',
'onBlockRepoSetFilters',
856 $result =
new Entity\EventResult();
858 'DISABLE' =>
Block\BlockRepo::FILTER_SKIP_HIDDEN_BLOCKS,
874 foreach (Hook::HOOKS_CODES_FILES as $hookCode)
877 isset(
$data[
'ADDITIONAL_FIELDS'][$hookCode]) &&
878 $data[
'ADDITIONAL_FIELDS'][$hookCode] > 0
881 $unpackFile = $structure->getUnpackFile(
$data[
'ADDITIONAL_FIELDS'][$hookCode]);
891 unset(
$data[
'ADDITIONAL_FIELDS'][$hookCode]);
907 foreach (Hook::HOOKS_CODES_FILES as $hookCode)
910 isset(
$data[
'ADDITIONAL_FIELDS'][$hookCode]) &&
911 $data[
'ADDITIONAL_FIELDS'][$hookCode] > 0
928 $data[
'ADDITIONAL_FIELDS'][
'THEME_USE'] =
'N';
929 if (isset($additional[
'theme']) || isset($additional[
'theme_use_site']))
931 $color = $additional[
'theme_use_site'] ?? $additional[
'theme'];
932 if ($color[0] !==
'#')
936 $data[
'ADDITIONAL_FIELDS'][
'THEME_COLOR'] = $color;
937 unset(
$data[
'ADDITIONAL_FIELDS'][
'THEME_CODE']);
940 $isSinglePage = !is_array($ratio) || empty($ratio);
941 if ($isSinglePage && !$additional[
'theme_use_site'])
943 $data[
'ADDITIONAL_FIELDS'][
'THEME_USE'] =
'Y';
949 if ($additional[
'title'] && $isMainpage)
951 $data[
'ADDITIONAL_FIELDS'][
'METAOG_TITLE'] = $additional[
'title'];
952 $data[
'ADDITIONAL_FIELDS'][
'METAMAIN_TITLE'] = $additional[
'title'];
955 if ($additional[
'description'] && $isMainpage)
957 $data[
'ADDITIONAL_FIELDS'][
'METAOG_DESCRIPTION'] = $additional[
'description'];
958 $data[
'ADDITIONAL_FIELDS'][
'METAMAIN_DESCRIPTION'] = $additional[
'description'];
963 $buttonKeys = array_keys($buttons);
964 if (!empty($buttonKeys))
966 $data[
'ADDITIONAL_FIELDS'][
'B24BUTTON_CODE'] = $buttonKeys[0];
970 $data[
'ADDITIONAL_FIELDS'][
'B24BUTTON_CODE'] =
'N';
972 $data[
'ADDITIONAL_FIELDS'][
'B24BUTTON_USE'] =
'N';
984 $additionalFields = [];
985 $hooks = Hook::getData($lid, Hook::ENTITY_TYPE_LANDING);
986 foreach ($hooks as $hook =>
$fields)
990 $additionalFields[$hook .
'_' .
$code] = $field;
994 return self::getAdditionalFieldsForReplace($additionalFields);
1004 $additionalFields = [];
1005 $hooks = Hook::getData(
$siteId, Hook::ENTITY_TYPE_SITE);
1006 foreach ($hooks as $hook =>
$fields)
1010 $additionalFields[$hook .
'_' .
$code] = $field;
1014 return self::getAdditionalFieldsForReplace($additionalFields);
1026 $additionalFields =
$data[
'ADDITIONAL_FIELDS'] ?? [];
1027 foreach (self::getAdditionalFieldsForReplace($additionalFieldsSite) as
$code => $field)
1029 if (!isset($additionalFields[
$code]))
1031 $additionalFields[
$code] = $field;
1034 $data[
'ADDITIONAL_FIELDS'] = $additionalFields;
1047 foreach (Hook::HOOKS_CODES_DESIGN as $hookCode)
1049 $result[$hookCode] = $additionalFields[$hookCode] ??
'';
1057 if (is_array(
$data[
'ADDITIONAL_FIELDS']) && !empty(
$data[
'ADDITIONAL_FIELDS']))
1066 $appCode =
$data[
'INITIATOR_APP_CODE'];
1067 $newTplCode =
$data[
'PREVIOUS_TPL_CODE'] ??
$data[
'TPL_CODE'];
1068 $delobotAppCode =
'local.5eea949386cd05.00160385';
1069 $kraytAppCode =
'local.5f11a19f813b13.97126836';
1070 $bitrixAppCode =
'bitrix.';
1072 strpos($newTplCode, $delobotAppCode) !==
false
1073 || strpos($newTplCode, $kraytAppCode) !==
false
1074 || strpos($appCode, $bitrixAppCode) === 0
1077 $wrapperClasses = [];
1078 $http = new \Bitrix\Main\Web\HttpClient;
1089 if ($wrapperClasses)
1092 foreach (
$data[
'BLOCKS'] as &$blockData)
1094 if (isset($wrapperClasses[
$i]) && $wrapperClasses[
$i][
'code'] === $blockData[
'code'])
1096 $blockData[
'style'][
'#wrapper'] = [
'classList' => [$wrapperClasses[
$i][
'classList']]];
1103 unset($delobotAppCode, $kraytAppCode);
1111 $appCode =
$data[
'INITIATOR_APP_CODE'];
1113 $templateDateCreate = strtotime(
$content[
'DATA'][
'DATE_CREATE']);
1114 $lastDate = strtotime(
'17.02.2022 00:00:00');
1115 if ($templateDateCreate < $lastDate)
1117 $kraytCode =
'bitrix.krayt';
1118 $delobotCode =
'bitrix.delobot';
1119 if (strpos($appCode, $kraytCode) !==
false || strpos($appCode, $delobotCode) !==
false)
1121 if (array_slice(
$data[
'BLOCKS'], -1)[0][
'code'] ===
'17.copyright')
1123 array_pop(
$data[
'BLOCKS']);
1126 unset($kraytCode, $delobotCode);
1134 $appCode =
$data[
'INITIATOR_APP_CODE'];
1135 $bitrixAppCode =
'bitrix.';
1137 foreach (
$data[
'BLOCKS'] as &$block)
1140 if (isset($block[
'nodes']) && strpos($appCode, $bitrixAppCode) === 0)
1142 foreach ($block[
'nodes'] as &$node)
1145 foreach ($node as &$nodeItem)
1147 if (isset($nodeItem[
'href']))
1149 $setContactsBlockCode = [
1150 '14.1.contacts_4_cols',
1151 '14.2contacts_3_cols',
1152 '14.3contacts_2_cols',
1154 if (preg_match(
'/^tel:.*$/i', $nodeItem[
'href']))
1156 $nodeItem[
'href'] =
'tel:#crmPhone1';
1157 if (isset($nodeItem[
'text']))
1159 $nodeItem[
'text'] =
'#crmPhoneTitle1';
1162 (isset($block[
'nodes'][
'.landing-block-node-linkcontact-text'])
1163 && in_array($block[
'code'], $setContactsBlockCode,
true))
1166 $block[
'nodes'][
'.landing-block-node-linkcontact-text'][$countNodeItem] =
'#crmPhoneTitle1';
1169 if (preg_match(
'/^mailto:.*$/i', $nodeItem[
'href']))
1171 $nodeItem[
'href'] =
'mailto:#crmEmail1';
1172 if (isset($nodeItem[
'text']))
1174 $nodeItem[
'text'] =
'#crmEmailTitle1';
1177 isset($block[
'nodes'][
'.landing-block-node-linkcontact-text'])
1178 && (in_array($block[
'code'], $setContactsBlockCode,
true))
1181 $block[
'nodes'][
'.landing-block-node-linkcontact-text'][$countNodeItem] =
'#crmEmailTitle1';
1192 if (isset($block[
'attrs']))
1194 foreach ($block[
'attrs'] as &$attr)
1196 foreach ($attr as &$attrItem)
1198 if (array_key_exists(
'data-end-date', $attrItem))
1200 $neededAttr = $attrItem[
'data-end-date'] / 1000;
1201 $currenDate = time();
1202 if ($neededAttr < $currenDate)
1204 $m = date(
'm', $neededAttr);
1205 $d = date(
'd', $neededAttr);
1206 $currenDateY = (int)date(
'Y', $currenDate);
1207 $currenDateM = date(
'm', $currenDate);
1208 $currenDateD = date(
'd', $currenDate);
1209 if ($currenDateM > $m)
1211 $y = $currenDateY + 1;
1213 else if (($currenDateM === $m) && $currenDateD >= $d)
1215 $y = $currenDateY + 1;
1222 $timestamp = strtotime($y .
'-' . $m .
'-' . $d .
' ' .
$time) * 1000;
1223 $attrItem[
'data-end-date'] = (string)$timestamp;
1226 '/data-end-date="\d+"/',
1227 $block[
'full_content'],
1231 $block[
'full_content'] = str_replace(
1233 'data-end-date="' . $attrItem[
'data-end-date'] .
'"',
1234 $block[
'full_content']
updateNodes($data, $additional=array())
saveDynamicParams(array $sourceParams=[], array $params=[])
getManifest(bool $extended=false, bool $missCache=false, array $params=array())
updateCards(array $data=array())
static addToLanding($lid, $fileId)
static addToBlock(int $blockId, $fileId, bool $temp=false)
static getFilePath($fileId)
static saveAdditionalFields(Entity\Event $event)
static isAutoPublicationEnabled()
static getAppByCode($code)
static getSiteSpecialType(string $siteCode)
static setScope($scope, array $params=[])
const PSEUDO_SCOPE_CODE_FORMS
static saveFile(array $file)
const SYSTEM_BLOCK_REST_PENDING
const SYSTEM_COMPONENT_REST_PENDING
static fixContactDataAndCountdown(array $data)
static getAdditionalFieldsForReplaceBySite(int $siteId)
static addFilesToBlock(Block $block, array $data, Configuration\Structure $structure, bool $ignoreManifest=false)
static mergeAdditionalFieldsForReplace(array $data, array $additionalFieldsSite)
static deleteCopyrightBlock(array $data, Event $event)
static fixWrapperClasses(array $data)
static prepareBlocksData(array $data, Event $event)
static setForceAppendRestBlocks(bool $mode)
static $forceAppendRestBlocks
static saveDataToBlock(Block $blockInstance, array $block)
static isNeedImport(Event $event)
static replaceLanding(Event $event)
static importLanding(Event $event)
static saveAdditionalFieldsToLanding(array $data, int $landingId)
static prepareAdditionalFields(array $data, array $additional, array $ratio=null)
static enableHiddenBlocksForCreatingPage()
static getAdditionalFieldsForReplaceByLanding(int $lid)
static saveAdditionalFilesToLanding(array $data, $landingId)
static prepareAdditionalFiles(array $data, Configuration\Structure $structure)
static getRepoId(string $appCode, string $xmlId)
static isMainpage(Event $event)
static importBlock(LandingCore $landing, array $block, Configuration\Structure $structure, bool &$pending=false)
static prepareData(array $data)
static getAdditionalFieldsForReplace(array $additionalFields)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key