%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/vk/feed/data/processors/ |
Current File : /home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/vk/feed/data/processors/productsdelete.php |
<?php namespace Bitrix\Sale\TradingPlatform\Vk\Feed\Data\Processors; use Bitrix\Sale\TradingPlatform\Vk\Api\ApiHelper; use Bitrix\Sale\TradingPlatform\Vk; use Bitrix\Sale\TradingPlatform\Timer; use Bitrix\Sale\TradingPlatform\TimeIsOverException; /** * Class ProductsDelete - processor for delete from VK only exported products * @package Bitrix\Sale\TradingPlatform\Vk\Feed\Data\Processors */ class ProductsDelete extends DataProcessor { /** * Main export process method. Delete from VK only products, which were adding via export * Have not input params - get values from VK and from mapping and compare them. * * @return bool - return true if OK or if errors it not critical. Expression if timer is over */ public function process($data = NULL, Timer $timer = NULL) { $apiHelper = new ApiHelper($this->exportId); $productsFromVk = $apiHelper->getProductsFromVk($this->vkGroupId); $productsMapped = Vk\Map::getMappedProducts($this->exportId); // remove from mapping products which not exist in VK $productsMappedToRemove = array(); foreach ($productsMapped as $key => $productMapped) { if (!isset($productsFromVk[$productMapped["VK_ID"]])) { $productsMappedToRemove[] = array("VALUE_EXTERNAL" => $productMapped["VK_ID"]); unset($productsMapped[$key]); } } // remove not exists in VK items if (!empty($productsMappedToRemove)) Vk\Map::removeProductMapping($productsMappedToRemove, $this->exportId); // In delete procedure we not need http file upload. // It means that we can not limit max items by settings and using max possible count. $productsMapped = array_chunk($productsMapped, Vk\Vk::MAX_EXECUTION_ITEMS); // max 25 items in execute() foreach ($productsMapped as $chunk) { $resDelete = $this->executer->executeMarketProductDelete(array( "owner_id" => $this->vkGroupId, "data" => $chunk, "count" => count($chunk), )); foreach ($resDelete as $res) { if ($res["flag_product_delete_result"]) $productsMappedToRemove[] = array("VALUE_EXTERNAL" => $res["VK_ID"]); } // remove success deleted items if (!empty($productsMappedToRemove)) Vk\Map::removeProductMapping($productsMappedToRemove, $this->exportId); // abstract start position - only for continue export, not for rewind to position if ($timer !== NULL && !$timer->check()) throw new TimeIsOverException("Timelimit for export is over", '1'); } // remove products from cache $vkExportedData = new Vk\VkExportedData($this->exportId, 'PRODUCTS'); $vkExportedData->removeData(); return true; } }