29 $wishesData = $siteData->
getWishes()->toArray();
30 $siteStructureJson = [];
34 $siteStructureJson[
'siteConfig'] = $wishesData;
38 $siteStructureJson[
'siteConfig'] = $wishesData;
39 $siteStructureJson[
'blocks'] = self::filterNodesByType(
40 self::prepareBlocks($siteData->
getBlocks()),
41 [NodeType::Text->value, NodeType::Link->value, NodeType::Icon->value, NodeType::Img->value],
48 $encodedString =
Web\Json::encode($siteStructureJson, JSON_UNESCAPED_UNICODE);
49 if (!is_string($encodedString))
59 return $encodedString;
71 $siteStructureJson = [];
72 foreach ($blocks as $block)
74 $siteStructureJson[
'blocks'][] = self::getBlockArrayWithContent($block);
79 $encodedString =
Web\Json::encode($siteStructureJson, JSON_UNESCAPED_UNICODE);
80 if (!is_string($encodedString))
90 return $encodedString;
102 $type = $node->getType();
109 'code' => $node->getCode(),
110 'type' =>
$type->value,
111 'numberElements' =>
count($node->getPlaceholders()),
113 if ($node->isAvatarNode())
115 if (
$type === NodeType::Img)
120 $preparedNode[
'isName'] =
true;
122 if (method_exists($node,
'isEditInStyle'))
124 $preparedNode[
'editInStyle'] = $node->isEditInStyle();
126 if (
$type === NodeType::Img)
128 $preparedNode[
'promptTexts'] = $node->getPromptTexts();
131 return $preparedNode;
144 $isCorrectBlocksAmount = Operator::checkBlocksAmount($siteData, $json);
145 if (!$isCorrectBlocksAmount)
150 $blocksFromResponse = $json[
'blocks'];
153 foreach ($blocksData as $blockData)
155 if ($blockData->isSeparator() || $blockData->isMenu())
160 if (isset($blocksFromResponse[
$count]))
162 $blockDataFromResponse = $blocksFromResponse[
$count];
164 if (isset($blockDataFromResponse[
'code']))
166 $codeBlockFromResponse = $blockDataFromResponse[
'code'];
167 $codeBlockForRequest = $blockData->getCode();
168 if ($codeBlockFromResponse === $codeBlockForRequest)
170 if (isset($blockDataFromResponse[
'titleInMenu']))
172 if (isset($previousBlockData))
174 if ($previousBlockData->getSection() !==
'title')
176 $blockData->setMenuTitle($blockDataFromResponse[
'titleInMenu']);
181 $blockData->setMenuTitle($blockDataFromResponse[
'titleInMenu']);
184 self::checkNodes($blockDataFromResponse, $blockData);
190 $previousBlockData = $blockData;
196 self::initSiteBlocks($siteData, $json);
197 self::saveImgNodesDataFromResponse($siteData, $json);
210 $blocksFromResponse = $json[
'blocks'];
213 foreach ($blocksData as $blockData)
215 if (isset($blocksFromResponse[
$count]))
217 $blockDataFromResponse = $blocksFromResponse[
$count];
219 self::checkNodes($blockDataFromResponse, $blockData);
221 if (isset($blockDataFromResponse[
'styles']))
223 $blockData->setStyles($blockDataFromResponse[
'styles']);
249 $blocksFromResponse =
$result[
'blocks'];
251 foreach ($siteData->
getBlocks() as $blockData)
253 if ($blockData->isSeparator() || $blockData->isMenu())
258 $blockId = $blockData->getId();
259 $blockResponse =
null;
260 if ($blockId === 0 && isset($blocksFromResponse[
$count]))
262 $blockResponse = $blocksFromResponse[
$count];
267 foreach ($blocksFromResponse as $blockFromResponse)
269 if ($blockFromResponse[
'id'] === $blockId)
271 $blockResponse = $blockFromResponse;
277 if ($blockResponse ===
null)
282 foreach ($blockData->getNodes() as $nodeData)
284 if ($nodeData->getType() !== NodeType::Img)
289 if (method_exists($nodeData,
'getGenderData') && !empty($nodeData->getGenderData()))
295 foreach ($blockResponse[
'nodes'] as
$code => $nodeResponse)
297 if (
$code !== $nodeData->getCode())
302 $promptTexts = $nodeResponse;
307 && (
count($nodeData->getPlaceholders()) ===
count($promptTexts))
310 if (Operator::isNeedCheckDataFromResponse())
312 $promptTexts = Operator::prepareDataFromResponse($promptTexts);
315 $promptTexts = $promptGenerator->getUpdatedPromptTexts((
array)$promptTexts);
316 $nodeData->addPromptTexts($promptTexts);
334 ".landing-block-node-" =>
".lbn-",
335 ".landing-block-card-" =>
".lbc-",
336 ".landing-block-" =>
".lb-",
337 "-linkcontact-" =>
"-lc-",
340 return str_replace(array_keys($replacements), array_values($replacements), $json);
353 ".lbn-" =>
".landing-block-node-",
354 ".lbc-" =>
".landing-block-card-",
355 ".lb-" =>
".landing-block-",
356 "-lc-" =>
"-linkcontact-",
359 return str_replace(array_keys($replacements), array_values($replacements), $json);
370 "isAllowedRequest" =>
'',
382 "siteTopicEng" =>
"",
384 "imgPromptEng" =>
"",
387 "headers" => [
"name" =>
""],
388 "texts" => [
"name" =>
""],
391 "theme" => [
"hex" =>
"",
"name" =>
""],
392 "background" => [
"hex" =>
"",
"name" =>
""],
393 "headerContrastOnBackground" => [
"hex" =>
"",
"name" =>
""],
394 "textContrastOnBackground" => [
"hex" =>
"",
"name" =>
""],
395 "headerContrastOnTheme" => [
"hex" =>
"",
"name" =>
""],
396 "textContrastOnTheme" => [
"hex" =>
"",
"name" =>
""],
400 $jsonSkeletonForResponse = [
401 'siteData' => $siteData,
406 $encodedJsonSkeletonString =
Web\Json::encode($jsonSkeletonForResponse, JSON_UNESCAPED_UNICODE);
407 if (!is_string($encodedJsonSkeletonString))
409 $encodedJsonSkeletonString =
'';
414 $encodedJsonSkeletonString =
'';
417 return $encodedJsonSkeletonString;
438 $blocksSkeleton = [];
439 $previousBlockSection =
null;
440 foreach ($jsonDataForRequestDecoded[
'blocks'] as $block)
443 $blockSkeleton[
'code'] = $block[
'code'];
444 if ($previousBlockSection !==
'title')
446 $blockSkeleton[
'titleInMenu'] =
'';
448 $blockNodes = $block[
'nodes'];
449 foreach ($blockNodes as $blockNode)
451 $nodeCode = $blockNode[
'code'];
452 $nodeElements = $blockNode[
'numberElements'];
453 if (isset($blockNode[
'isName']) && $blockNode[
'isName'] ===
true)
455 $blockSkeleton[
'nodes'][$nodeCode] = array_fill(0, $nodeElements, [
'name' =>
"",
'gender' =>
""]);
459 $blockSkeleton[
'nodes'][$nodeCode] = array_fill(0, $nodeElements,
"");
462 $previousBlockSection = $block[
'section'];
463 $blocksSkeleton[] = $blockSkeleton;
466 $jsonSkeletonForResponse = [
467 'blocks' => $blocksSkeleton,
472 $encodedJsonSkeletonString =
Web\Json::encode($jsonSkeletonForResponse, JSON_UNESCAPED_UNICODE);
473 if (!is_string($encodedJsonSkeletonString))
475 $encodedJsonSkeletonString =
'';
480 $encodedJsonSkeletonString =
'';
483 return $encodedJsonSkeletonString;
498 $blocksSkeleton = [];
499 foreach ($jsonDataForRequestDecoded[
'blocks'] as $block)
502 $blockSkeleton[
'id'] = $block[
'id'];
503 $blockSkeleton[
'code'] = $block[
'code'];
504 $blockNodes = $block[
'nodes'];
505 foreach ($blockNodes as $blockNode)
507 $nodeCode = $blockNode[
'code'];
508 if ($blockNode[
'type'] ===
'img')
510 $nodeElements = $blockNode[
'numberElements'];
514 $nodeElements =
count($blockNode[
'values']);
516 $blockSkeleton[
'nodes'][$nodeCode] = array_fill(0, $nodeElements,
"");
519 $blockSkeleton[
'styles'] = [
522 'headersColor' =>
'',
523 'textsFontName' =>
'',
524 'headersFontName' =>
'',
526 $blocksSkeleton[] = $blockSkeleton;
529 $jsonSkeletonForResponse = [
530 'blocks' => $blocksSkeleton,
531 "isAllowedRequest" =>
'',
536 $encodedJsonSkeletonString =
Web\Json::encode($jsonSkeletonForResponse, JSON_UNESCAPED_UNICODE);
537 if (!is_string($encodedJsonSkeletonString))
539 $encodedJsonSkeletonString =
'';
544 $encodedJsonSkeletonString =
'';
547 return $encodedJsonSkeletonString;
558 private static function filterNodesByType(
array $blocks,
array $filterTypes):
array
560 $blocksWithFilteredNodes = [];
561 foreach ($blocks as $block)
563 $preparedBlockNodes = [];
564 foreach ($block[
'nodes'] as $node)
566 if (in_array($node[
'type'], $filterTypes,
true))
568 $preparedBlockNodes[] = $node;
571 $block[
'nodes'] = $preparedBlockNodes;
572 $blocksWithFilteredNodes[] = $block;
575 return $blocksWithFilteredNodes;
585 private static function prepareBlocks(
array $blocksDataArray):
array
587 $filteredBlocks = self::filterBlocks($blocksDataArray);
589 return self::processFilteredBlocks($filteredBlocks);
599 private static function filterBlocks(
array $blocksDataArray):
array
601 $filteredBlocks = [];
602 foreach ($blocksDataArray as $blockData)
604 if (!$blockData->isSeparator() && !$blockData->isMenu())
606 $filteredBlocks[] = [
607 'code' => $blockData->getCode(),
608 'section' => $blockData->getSection(),
609 'bgType' => $blockData->getBgType(),
610 'nodes' => $blockData->getNodes(),
611 'id' => $blockData->getId(),
616 return $filteredBlocks;
626 private static function processFilteredBlocks(
array $filteredBlocks):
array
628 $preparedBlocksList = [];
629 foreach ($filteredBlocks as $block)
631 $preparedBlock = self::prepareBlock($block);
632 $preparedBlocksList[] = $preparedBlock;
635 return $preparedBlocksList;
645 private static function prepareBlock(
array $block):
array
648 'id' => $block[
'id'],
649 'code' => $block[
'code'],
650 'section' => $block[
'section'],
653 $preparedBlock[
'nodes'] = [];
654 foreach ($block[
'nodes'] as $node)
656 $preparedNode = self::prepareNode($node);
657 if ($preparedNode !==
null)
659 $preparedBlock[
'nodes'][] = $preparedNode;
663 return $preparedBlock;
674 private static function checkNodes(
array $blockDataFromResponse, Block $blockData): void
676 $avatarImgNodeCode = Collector::getAvatarNodes($blockData->getCode())[
'imgNodeCode'] ??
null;
677 $nodes = $blockData->getNodes();
678 foreach ($nodes as $node)
680 if ($node->getType() === NodeType::Img)
684 $nodeCode = $node->getCode();
685 $nodeDataFromResponse = $blockDataFromResponse[
'nodes'][$nodeCode] ??
null;
687 if (is_array($nodeDataFromResponse) && Operator::isNeedCheckDataFromResponse())
689 $nodeDataFromResponse = Operator::prepareDataFromResponse($nodeDataFromResponse);
693 foreach ($nodeDataFromResponse as $nodeDataFromResponseItem)
695 if (is_string($nodeDataFromResponseItem))
697 $values[] = $nodeDataFromResponseItem;
699 if (is_array($nodeDataFromResponseItem))
701 if (isset($nodeDataFromResponseItem[
'name']))
703 $values[] = $nodeDataFromResponseItem[
'name'];
705 if (isset($nodeDataFromResponseItem[
'gender']))
707 $gendersData[] = $nodeDataFromResponseItem[
'gender'];
711 $node->setData($values);
712 if ($gendersData && method_exists($node,
'setGenderData'))
714 $node->setGenderData($gendersData);
715 if ($avatarImgNodeCode)
717 foreach ($nodes as $nodeData)
720 $nodeData->getCode() === $avatarImgNodeCode
721 && $nodeData->isAvatarNode()
722 && method_exists($nodeData,
'setGenderData')
723 && method_exists($nodeData,
'setSrc')
724 && method_exists($nodeData,
'setDefaultSrc')
727 $nodeData->setGenderData($gendersData);
728 $nodeData->setDefaultSrc(Operator::getDefaultAvatarLinks($gendersData));
729 $nodeData->setSrc(Operator::getAvatarLinks($gendersData));
739 private static function getBlockArrayWithContent($block):
array
742 'id' => $block->getId(),
743 'code' => $block->getCode(),
745 $blockNodes = $block->getNodes();
746 $preparedBlock[
'nodes'] = [];
747 foreach ($blockNodes as $node)
749 $type = $node->getType()->value;
752 'code' => $node->getCode(),
754 if (
$type ===
'text')
756 $nodeData[
'values'] = $node->getValues();
758 if (
$type ===
'icon')
761 $values = $node->getValues();
762 foreach ($values as $value)
764 $classListArray = [];
765 $classList =
$value[
'classList'];
766 if (is_string($classList))
768 $classListArray = explode(
' ', $classList);
769 $classListArray = array_filter($classListArray,
static function($value) {
770 return $value !==
null && str_starts_with($value,
'fa');
772 $classListArray = implode(
' ', $classListArray);
774 $classLists[] = $classListArray;
776 $nodeData[
'values'] = $classLists;
778 if (
$type ===
'link')
781 $values = $node->getValues();
782 foreach ($values as $value)
784 $texts[] =
$value[
'text'];
786 $nodeData[
'values'] = $texts;
790 $nodeData[
'numberElements'] =
count($node->getPlaceholders());
792 $preparedBlock[
'nodes'][] = $nodeData;
795 return $preparedBlock;
806 foreach ($blocksWithImgNodes as
$key => $block)
808 if (isset($block[
'nodes']))
810 $filteredNodes = array_filter($block[
'nodes'],
static function($node) {
811 return empty($node[
'promptTexts']);
813 if (
count($filteredNodes) > 0)
815 foreach ($filteredNodes as $nodeKey => $filteredNode)
817 unset($filteredNode[
'promptTexts']);
818 $filteredNodeWithoutPromptTextKey = $filteredNode;
819 $filteredNodes[$nodeKey] = $filteredNodeWithoutPromptTextKey;
821 $blocksWithImgNodes[
$key][
'nodes'] = $filteredNodes;
825 unset($blocksWithImgNodes[
$key]);
830 return $blocksWithImgNodes;
static encode($data, $options=null)