46 $this->result =
array();
49 $this->result = $this->getNotSkuItemData(
$data);
52 $offersDescription =
'';
53 if (isset(
$data[
"OFFERS"]) && is_array(
$data[
"OFFERS"]) && !empty(
$data[
"OFFERS"]))
56 $this->selectOfferProps =
$data[
"SELECT_OFFER_PROPS"];
57 $this->result[
"PHOTOS_OFFERS"] =
array();
58 $this->result[
"PHOTOS_OFFERS_FOR_VK"] =
array();
60 $offersConverted =
array();
61 foreach (
$data[
"OFFERS"] as $offer)
63 $resultOffer = $this->getItemDataOffersOffer($offer);
65 if (!empty($resultOffer[
"PHOTOS"]))
66 $this->result[
"PHOTOS_OFFERS"] += $resultOffer[
"PHOTOS"];
68 if (!empty($resultOffer[
"PHOTOS_FOR_VK"]))
69 $this->result[
"PHOTOS_OFFERS_FOR_VK"] += $resultOffer[
"PHOTOS_FOR_VK"];
71 $offersConverted[] = $resultOffer;
74 $offersDescription = $this->createOffersDescriptionByPrices($offersConverted);
78 if (!$this->result[
"PRICE"])
80 $logger->addError(
'PRODUCT_EMPTY_PRICE',
$data[
"ID"]);
86 if ($offersDescription <>
'')
87 $this->result[
"description"] .=
"\n\n" . Loc::getMessage(
"SALE_VK_PRODUCT_VARIANTS") .
"\n" . $offersDescription;
91 $photosSorted = $this->sortPhotosArray();
95 if (empty($photosChecked))
97 $logger->addError(
"PRODUCT_WRONG_PHOTOS",
$data[
"ID"]);
102 $this->result[
"PHOTO_MAIN_BX_ID"] = $photosChecked[
"PHOTO_MAIN_BX_ID"];
103 $this->result[
"PHOTO_MAIN_URL"] = $photosChecked[
"PHOTO_MAIN_URL"];
104 $this->result[
"PHOTOS"] = $photosChecked[
"PHOTOS"];
107 if ($photosChecked[
'RESIZE_UP'])
108 $logger->addError(
'PRODUCT_PHOTOS_RESIZE_UP',
$data[
"ID"]);
109 if ($photosChecked[
'RESIZE_DOWN'])
110 $logger->addError(
'PRODUCT_PHOTOS_RESIZE_DOWN',
$data[
"ID"]);
114 $this->result[
"description"] = html_entity_decode($this->result[
"description"]);
115 $this->result[
"description"] = preg_replace(
'/\t*/',
'', $this->result[
"description"]);
116 $this->result[
"description"] = strip_tags($this->result[
"description"]);
118 $this->result[
'description'] = $this->validateDescription($this->result[
'description'], $logger);
120 $this->result[
'NAME'] = $this->validateName($this->result[
'NAME'], $logger);
133 private function validateName(
$name,
Vk\
Logger $logger = NULL)
137 if (($length = self::matchLength(
$name)) < self::NAME_LENGHT_MIN)
139 $newName = self::extendString(
$name, $length, self::NAME_LENGHT_MIN);
142 $logger->addError(
'PRODUCT_SHORT_NAME', $this->result[
"BX_ID"]);
146 if (($length = self::matchLength(
$name)) > self::NAME_LENGHT_MAX)
148 $newName = self::reduceString(
$name, $length, self::NAME_LENGHT_MAX);
151 $logger->addError(
'PRODUCT_LONG_NAME', $this->result[
"BX_ID"]);
166 private function validateDescription(
$desc,
Vk\
Logger $logger = NULL)
170 if (mb_strlen(
$desc) < self::DESCRIPTION_LENGHT_MIN)
172 $newDesc = $this->result[
'NAME'] .
': ' .
$desc;
173 if (mb_strlen($newDesc) < self::DESCRIPTION_LENGHT_MIN)
175 $newDesc = self::mb_str_pad($newDesc, self::DESCRIPTION_LENGHT_MIN, self::PAD_STRING);
177 if ($newDesc[mb_strlen($newDesc) - 1] ==
' ')
179 $newDesc .= self::PAD_STRING;
183 $logger->addError(
'PRODUCT_SHORT_DESCRIPTION', $this->result[
"BX_ID"]);
188 if (mb_strlen($newDesc) > self::DESCRIPTION_LENGHT_MAX)
190 $newDesc = mb_substr($newDesc, 0, self::DESCRIPTION_LENGHT_MAX).
'...';
205 private function createOffersDescriptionByPrices($offers)
207 $mainPrice = isset($this->result[
'PRICE']) && $this->result[
'PRICE'] ? $this->result[
'PRICE'] : 0;
208 $needSkuPriceDescription =
false;
211 foreach ($offers as $offer)
217 $mainPrice = $offer[
'PRICE'];
220 if ($offer[
'PRICE'] != $mainPrice)
221 $needSkuPriceDescription =
true;
223 $mainPrice = ($mainPrice != 0) ? min($offer[
'PRICE'], $mainPrice) : $offer[
'PRICE'];
228 $offersDescription =
'';
229 if ($needSkuPriceDescription)
231 foreach ($offers as $offer)
233 $offersDescription .= $offer[
"DESCRIPTION_PROPERTIES"] .
" - " . Loc::getMessage(
"SALE_VK_PRODUCT_PRICE") .
" " . $offer[
'PRICE'] .
" " . Loc::getMessage(
"SALE_VK_PRODUCT_CURRENCY") .
"\n";
239 foreach ($offers as $offer)
241 $offersDescription .= $offer[
"DESCRIPTION_PROPERTIES"] .
"\n";
245 $this->result[
'PRICE'] = $mainPrice;
247 return $offersDescription;
256 private function sortPhotosArray()
258 $newPhotos =
array();
259 if (isset($this->result[
'PHOTOS_FOR_VK']) && !empty($this->result[
'PHOTOS_FOR_VK']))
260 $newPhotos += $this->result[
'PHOTOS_FOR_VK'];
262 if (isset($this->result[
'PHOTOS_OFFERS_FOR_VK']) && !empty($this->result[
'PHOTOS_OFFERS_FOR_VK']))
263 $newPhotos += $this->result[
'PHOTOS_OFFERS_FOR_VK'];
265 if (isset($this->result[
'PHOTO_MAIN']) && !empty($this->result[
'PHOTO_MAIN']))
266 $newPhotos += $this->result[
'PHOTO_MAIN'];
268 if (isset($this->result[
'PHOTOS']) && !empty($this->result[
'PHOTOS']))
269 $newPhotos += $this->result[
'PHOTOS'];
271 if (isset($this->result[
'PHOTOS_OFFERS']) && !empty($this->result[
'PHOTOS_OFFERS']))
272 $newPhotos += $this->result[
'PHOTOS_OFFERS'];
276 $this->result[
'PHOTOS_FOR_VK'],
277 $this->result[
'PHOTOS_OFFERS_FOR_VK'],
278 $this->result[
'PHOTOS'],
279 $this->result[
'PHOTO_MAIN'],
280 $this->result[
'PHOTOS_OFFERS']
295 private function getItemDataOffersOffer(
$data)
297 $result =
array(
"DESCRIPTION" =>
"");
300 $propertyDescriptions =
array();
301 foreach ($this->selectOfferProps as $prop)
303 if ($propValue =
$data[
"PROPERTIES"][$prop][
"VALUE"])
306 if (
$data[
"PROPERTIES"][$prop][
"USER_TYPE"] ==
'directory')
308 if (\CModule::IncludeModule(
'highloadblock'))
311 $resHlBlocks = HighloadBlockTable::getList(
array(
312 'filter' =>
array(
'=TABLE_NAME' =>
$data[
"PROPERTIES"][$prop][
"USER_TYPE_SETTINGS"][
"TABLE_NAME"]),
314 $hlBlockItemId = $resHlBlocks->fetch();
315 $hlBlockItemId = $hlBlockItemId[
'ID'];
321 $hlBlock = HighloadBlockTable::getById($hlBlockItemId)->fetch();
322 $hlEntity = HighloadBlockTable::compileEntity($hlBlock);
323 $strEntityDataClass = $hlEntity->getDataClass();
326 $resData = $strEntityDataClass::getList(
array(
327 'select' =>
array(
'ID',
'UF_NAME'),
328 'filter' =>
array(
'=UF_XML_ID' => $propValue),
330 $propValue = $resData->fetch();
331 $propValue = $propValue[
'UF_NAME'];
335 if(is_array($propValue))
336 $propValue = implode(
', ', $propValue);
338 $propertyDescriptions[] =
$data[
"PROPERTIES"][$prop][
"NAME"] .
": " . $propValue;
341 if (!empty($propertyDescriptions))
342 $result[
"DESCRIPTION_PROPERTIES"] = implode(
"; ", $propertyDescriptions);
350 $result[
'PRICE'] =
$data[
"PRICES"][
"MIN_RUB"];
353 $photoId = (
$data[
"DETAIL_PICTURE"] <>
'') ?
$data[
"DETAIL_PICTURE"] :
$data[
"PREVIEW_PICTURE"];
355 $result[
"PHOTOS"] =
array($photoId =>
array(
"PHOTO_BX_ID" => $photoId));
358 $vkPhotosKey =
'PHOTOS_FOR_VK_' .
$data[
"IBLOCK_ID"];
359 $resOfferProps = new \_CIBElement();
360 $resOfferProps->fields =
array(
"IBLOCK_ID" =>
$data[
"IBLOCK_ID"],
"ID" =>
$data[
"ID"]);
361 $resOfferProps = $resOfferProps->GetProperties(
array(),
array(
"CODE" => $vkPhotosKey));
362 if (!empty($resOfferProps[$vkPhotosKey][
"VALUE"]))
364 foreach ($resOfferProps[$vkPhotosKey][
"VALUE"] as $ph)
366 $result[
"PHOTOS_FOR_VK"][$ph] =
array(
367 "PHOTO_BX_ID" => $ph,
382 private function getNotSkuItemData(
$data)
385 $result[
"BX_ID"] =
$data[
"ID"];
386 $result[
"IBLOCK_ID"] =
$data[
"IBLOCK_ID"];
387 $result[
"NAME"] =
$data[
"~NAME"];
388 $result[
"SECTION_ID"] =
$data[
"IBLOCK_SECTION_ID"];
389 $result[
"CATEGORY_VK"] = $this->sectionsList->getVkCategory(
$data[
"IBLOCK_SECTION_ID"]);
392 $result[
"deleted"] = 0;
393 $result[
"PRICE"] =
$data[
"PRICES"][
"MIN_RUB"];
394 $result[
"description"] =
$data[
"~DETAIL_TEXT"] <>
'' ?
$data[
"~DETAIL_TEXT"] :
$data[
"~PREVIEW_TEXT"];
395 $result[
"description"] = trim(preg_replace(
'/\s{2,}/',
"\n", $result[
"description"]));
397 $photoMainBxId =
$data[
"DETAIL_PICTURE"] <>
'' ?
$data[
"DETAIL_PICTURE"] :
$data[
"PREVIEW_PICTURE"];
398 $photoMainUrl =
$data[
"DETAIL_PICTURE_URL"] <>
'' ?
$data[
"DETAIL_PICTURE_URL"] :
$data[
"PREVIEW_PICTURE_URL"];
399 if ($photoMainBxId && $photoMainUrl)
400 $result[
"PHOTO_MAIN"] =
array(
401 $photoMainBxId =>
array(
402 "PHOTO_BX_ID" => $photoMainBxId,
403 "PHOTO_URL" => $photoMainUrl,
408 if (isset(
$data[
"PROPERTIES"][
"MORE_PHOTO"][
"VALUE"]) &&
409 is_array(
$data[
"PROPERTIES"][
"MORE_PHOTO"][
"VALUE"]) &&
410 !empty(
$data[
"PROPERTIES"][
"MORE_PHOTO"][
"VALUE"])
413 foreach (
$data[
"PROPERTIES"][
"MORE_PHOTO"][
"VALUE"] as $ph)
415 $result[
"PHOTOS"][$ph] =
array(
"PHOTO_BX_ID" => $ph);
420 $vkPhotosKey =
'PHOTOS_FOR_VK_' .
$data[
"IBLOCK_ID"];
421 if (isset(
$data[
"PROPERTIES"][$vkPhotosKey][
"VALUE"]) &&
422 is_array(
$data[
"PROPERTIES"][$vkPhotosKey][
"VALUE"]) &&
423 !empty(
$data[
"PROPERTIES"][$vkPhotosKey][
"VALUE"])
426 foreach (
$data[
"PROPERTIES"][$vkPhotosKey][
"VALUE"] as $ph)
428 $result[
"PHOTOS_FOR_VK"][$ph] =
array(
429 "PHOTO_BX_ID" => $ph,