%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/ebay/feed/data/sources/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/tradingplatform/ebay/feed/data/sources/product.php |
<?php namespace Bitrix\Sale\TradingPlatform\Ebay\Feed\Data\Sources; use Bitrix\Main\SystemException; use Bitrix\Main\ArgumentNullException; class Product extends DataSource implements \Iterator { protected $productFeeds = array(); protected $currentFeed; protected $ebay; protected $siteId; protected $startPos = 0; protected $startProductFeed = 0; public function __construct($params) { $this->ebay = \Bitrix\Sale\TradingPlatform\Ebay\Ebay::getInstance(); if(!$this->ebay->isActive()) throw new SystemException("Ebay is not active!".__METHOD__); if(!isset($params["SITE_ID"]) || strlen($params["SITE_ID"]) <= 0) throw new ArgumentNullException("SITE_ID"); $this->siteId = $params["SITE_ID"]; if(!\Bitrix\Main\Loader::includeModule('catalog')) throw new SystemException("Can't include module \"Catalog\"! ".__METHOD__); $iBlockIds = $this->getIblockIds(); if(empty($iBlockIds)) throw new SystemException("Can't find iblocks ids! ".__METHOD__); foreach($iBlockIds as $iblockId) { $this->productFeeds[] = \Bitrix\Catalog\ExportOfferCreator::getOfferObject( array( "IBLOCK_ID" => $iblockId, "PRODUCT_GROUPS" => $this->getMappedGroups($iblockId), "XML_DATA" => $this->getXmlData(), "SETUP_SERVER_NAME" => $this->getDomainName(), ) ); } } protected function getIblockIds() { $result = array(); $settings = $this->ebay->getSettings(); if(isset($settings[$this->siteId]["IBLOCK_ID"]) && is_array($settings[$this->siteId]["IBLOCK_ID"])) $result = $settings[$this->siteId]["IBLOCK_ID"]; return $result; } protected function getMappedGroups($iblockId) { $result = array(); $catMapEntId = \Bitrix\Sale\TradingPlatform\Ebay\MapHelper::getCategoryEntityId($iblockId); $catRes = \Bitrix\Sale\TradingPlatform\MapTable::getList(array( 'select' => array('VALUE_INTERNAL'), 'filter' => array('=ENTITY_ID' => $catMapEntId), 'group' => array('VALUE_INTERNAL') )); while($category = $catRes->fetch()) if(intval($category["VALUE_INTERNAL"]) > 0) $result[] = $category["VALUE_INTERNAL"]; return $result; } protected function getXmlData() { return array(); } protected function getDomainName() { $result = ""; $settings = $this->ebay->getSettings(); if(isset($settings[$this->siteId]["DOMAIN_NAME"]) && is_array($settings[$this->siteId]["DOMAIN_NAME"])) $result = $settings[$this->siteId]["DOMAIN_NAME"]; return $result; } public function setStartPosition($startPos = "") { if(strlen($startPos) > 3) // format: iBlockId_RecordNumber { $positions = explode("_", $startPos); if(isset($positions[0]) && isset($positions[1])) { $this->startProductFeed = $positions[0]; $this->startPos = $positions[1]; } } } //Proxy offers iterator methods public function current() { return $this->productFeeds[$this->currentFeed]->current(); } public function key() { return $this->currentFeed."_".$this->productFeeds[$this->currentFeed]->key(); } public function next() { $this->productFeeds[$this->currentFeed]->next(); if(!$this->valid() && $this->currentFeed < count($this->productFeeds)-1) { $this->currentFeed++; $this->next(); } } public function rewind() { $this->currentFeed = $this->startProductFeed; foreach($this->productFeeds as $feed) $feed->rewind(); for($i = 0; $i < $this->startPos; $i++) $this->productFeeds[$this->currentFeed]->next(); } public function valid() { return $this->productFeeds[$this->currentFeed]->valid(); } }