- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/tradingplatform/vk/feed/data/processors/albumadd.php
- Класс: BitrixSaleTradingPlatformVkFeedDataProcessorsAlbumAdd
- Вызов: AlbumAdd::process
public function process($data = null, Timer $timer = null)
{
$logger = new VkLogger($this->exportId);
if (count($data) > VkVk::MAX_EXECUTION_ITEMS)
{
$data = array_slice($data, 0, VkVk::MAX_ALBUMS);
$logger->addError('TOO_MANY_SECTIONS_TO_EXPORT');
}
// get STARTPOSITION for create next process step
reset($data);
$startPosition = current($data);
$startPosition = $startPosition["SECTION_ID"];
// set STATIC variables for several cycles
if (self::$firstRunning)
{
self::$apiHelper = new VkApiApiHelper($this->exportId);
self::$isAgressive = self::$vk->isAgressiveExport($this->exportId);
self::$firstRunning = false;
}
// CHECK existing albums
$vkExportedData = new VkVkExportedData($this->exportId, 'ALBUMS');
$albumsFromVk = $vkExportedData->getData();
// $albumsFromVk = self::$apiHelper->getALbumsFromVk($this->vkGroupId);
$data = VkMap::checkMappingMatches($data, $albumsFromVk, $this->exportId, 'ALBUMS', self::$isAgressive);
try
{
// UPLOAD photo
// todo: need a photo mapping check before upload
// todo: and maybe we need comments and likes
$logger->addLog("Upload album photo");
$photoUploader = new PhotoUploader($this->exportId, PhotoUploader::TYPE_ALBUM_PHOTO, $timer);
$albumPhotoSaveResults = $photoUploader->upload($data);
// photos UPLOAD may be FAILED on VK side. For albums - do nothing
if(!array_key_exists('errors', $albumPhotoSaveResults))
{
$data = VkApiApiHelper::addResultToData($data, $albumPhotoSaveResults, "SECTION_ID");
}
// ADD or EDIT albums
$logger->addLog("Add or edit albums", $data);
$albumsData = VkApiApiHelper::extractItemsFromArray($data,
array("SECTION_ID", "TITLE", "FLAG_EDIT", "PHOTO_VK_ID", "ALBUM_VK_ID"));
$albumsAddEditResults = $this->executer->executeMarketAlbumAddEdit(array(
"owner_id" => $this->vkGroupId,
"data" => $albumsData,
"count" => count($data),
));
$data = VkApiApiHelper::addResultToData($data, $albumsAddEditResults, "SECTION_ID");
// MAPPING for success results
$dataToMapping = array();
foreach ($albumsAddEditResults as $item)
{
if (isset($item["flag_album_add_result"]) && $item["flag_album_add_result"])
$dataToMapping[] = array(
"value_external" => $item["ALBUM_VK_ID"],
"value_internal" => $item["SECTION_ID"],
);
}
// we don't need use timer in last operation. Timer will be checked in feed cycle.
if (!empty($dataToMapping))
{
VkMap::addAlbumMapping($dataToMapping, $this->exportId);
}
// add saved data to CACHE to accelereate export process. Cache updated every hour (for long exports)
if (!empty($data))
{
$dataToCache = VkApiApiHelper::extractItemsFromArray($data, array('ALBUM_VK_ID'));
$dataToCache = VkApiApiHelper::changeArrayMainKey($dataToCache, 'ALBUM_VK_ID');
$vkExportedData->addData($dataToCache);
}
// check timer before next step, because not-agressive export can be run very long time
if ($timer !== null && !$timer->check())
{
throw new TimeIsOverException();
}
}
catch (TimeIsOverException $e)
{
throw new TimeIsOverException("Timelimit for export is over", $startPosition);
}
return true;
}