2declare(strict_types=1);
4namespace Bitrix\Landing\Copilot\Generation\Step;
6use Bitrix\Landing\Copilot\Connector;
7use Bitrix\Landing\Copilot\Generation\GenerationException;
8use Bitrix\Landing\Copilot\Generation\Type\GenerationErrors;
9use Bitrix\Landing\Landing;
10use Bitrix\Landing\Manager;
11use Bitrix\Landing\Rights;
12use Bitrix\Landing\Site;
17 private const DEFAULT_PAGE_CODE =
'create-by-copilot';
36 private function createSite(): void
41 $this->siteData->setSiteId(
$siteId);
45 $this->siteData->setLandingId($landingId);
49 $previewSrc = $this->siteData->getPreviewImageSrc();
50 if ($previewSrc ===
null || $previewSrc ===
'')
53 $this->siteData->setPreviewImageSrc($defaultPreview);
54 $previewSrc = $defaultPreview;
58 'METAOG_IMAGE' => $previewSrc,
64 if ($this->generation->getChatId())
67 ->setUserId($this->generation->getAuthorId())
70 $this->generation->getChatId()
84 $colors = $this->siteData->getColors();
85 $additionalFields = [];
87 $this->processColor($colors->theme,
'THEME_COLOR', $additionalFields);
88 $this->processColor($colors->background,
'BACKGROUND_COLOR', $additionalFields);
89 if (isset($additionalFields[
'BACKGROUND_COLOR']))
91 $additionalFields[
'BACKGROUND_USE'] =
'Y';
93 $this->processColor($colors->headersBg,
'THEMEFONTS_COLOR_H', $additionalFields);
94 $this->processColor($colors->textsBg,
'THEMEFONTS_COLOR', $additionalFields);
96 $fonts = $this->siteData->getFonts();
97 $additionalFields[
'THEMEFONTS_CODE_H'] = $fonts->headers;
98 $additionalFields[
'THEMEFONTS_CODE'] = $fonts->texts;
100 $siteTitle = $this->siteData->getSiteTitle();
102 'TITLE' => $siteTitle,
105 'ADDITIONAL_FIELDS' => $additionalFields,
108 $siteAddResult = Site::add($siteFields);
111 return $siteAddResult->isSuccess() ? $siteAddResult->getId() : 0;
134 if (!$landingAddResult->isSuccess())
139 return $landingAddResult->getId();
145 $pageDescription = $this->siteData->getPageDescription();
146 $additionalFields = [
147 'METAOG_DESCRIPTION' => $pageDescription,
148 'METAMAIN_USE' =>
'Y',
150 'METAMAIN_DESCRIPTION' => $pageDescription,
151 'METAMAIN_KEYWORDS' => $this->siteData->getKeywords() ??
'',
154 $landingId = $this->siteData->getLandingId();
170 private function processColor(
string $color,
string $fieldKey,
array &$additionalFields): void
172 $code = $this->convertToLowercase($color);
173 if ($this->isValidHexCode(
$code))
175 $additionalFields[$fieldKey] =
$code;
186 private function convertToLowercase(
string $string): string
188 return strtr($string,
'ABCDEF',
'abcdef');
198 private function isValidHexCode(
string $string): bool
200 return preg_match(
'/^#[0-9a-f]{6}$/', $string) === 1;
215 "change_case" =>
"L",
216 "replace_space" =>
"-",
217 "replace_other" =>
"",
218 "delete_repeat_replace" =>
true,
220 $translitedCode = CUtil::translit(
226 if (LANGUAGE_ID !==
'en' && !preg_match(
$pattern, $translitedCode))
228 $translitedCode = CUtil::translit(
234 if (!preg_match(
$pattern, $translitedCode))
236 $translitedCode = self::DEFAULT_PAGE_CODE;
239 return $translitedCode;
249 $siteId = $this->siteData->getSiteId();
250 $landingId = $this->siteData->getLandingId();
252 if (is_int(
$siteId) && is_int($landingId) &&
$siteId > 0 && $landingId > 0)
257 if (is_int(
$siteId) && is_int($landingId))
259 $exceptionMessage =
"Landing id not correct.";
263 $exceptionMessage =
"Site id not correct.";
267 GenerationErrors::dataValidation,
addAdditionalFieldsToLanding()
static getTranslitedCode(string $code)
static saveAdditionalFields(Entity\Event $event)
static getUrlFromFile($file)
for($fileNumber="";; $fileNumber++) $pageTitle
</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($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']
if(!Loader::includeModule('sale')) $pattern