/** * Download products media * * @param Varien_Object|null $item * @return array */ public function downloadProductImages($item = null) { $ioAdapter = new Varien_Io_File(); $tmpDirectory = Mage::getBaseDir('var') . DS . 'api' . DS . uniqid(); $ioAdapter->checkAndCreateFolder($tmpDirectory); $ioAdapter->open(array('path' => $tmpDirectory)); if (!$item) { $items = Mage::getModel('retailops_api/catalog_media_item')->getCollection(); $limit = $this->getHelper()->getConfig('media_processing_products_limit'); if (!is_numeric($limit)) { $limit = self::CRON_DOWNLOAD_LIMIT; } $items->getSelect()->limit($limit); } else { $items = array($item); } $result = array(); /** @var $item RetailOps_Api_Model_Catalog_Media_Item */ foreach ($items as $item) { $productId = $item->getProductId(); $product = Mage::getModel('catalog/product')->load($productId); $product->setStoreId(0); //using default store for images import $gallery = $this->_getGalleryAttribute($product); $data = json_decode($item->getMediaData(), true); $allImages = $this->_getResource()->getProductMedia($productId); $this->_mediaKeys = array(); $this->_fileNames = array(); foreach ($allImages as $image) { $this->_mediaKeys[] = $image['retailops_mediakey']; $this->_fileNames[] = $image['value']; } $sku = $product->getSku(); $result[$sku] = array(); try { $imageResult = array(); $newImages = array(); foreach ($data as $newImage) { if ($this->_imageExists($newImage)) { continue; } try { $url = $newImage['download_url']; if (!$this->_httpFileExists($url)) { Mage::throwException('Image does not exist.'); } $fileName = $this->_getFileName($url, $newImage['mediakey']); $fileName = $tmpDirectory . DS . $fileName; $ioAdapter->cp($url, $fileName); // Adding image to gallery $file = $gallery->getBackend()->addImage($product, $fileName, null, true); // Remove temporary directory $ioAdapter->rmdir($tmpDirectory, true); $newImages[$file] = $newImage['mediakey']; $gallery->getBackend()->updateImage($product, $file, $newImage); if (isset($newImage['types'])) { $gallery->getBackend()->setMediaAttribute($product, $newImage['types'], $file); } } catch (Exception $e) { $imageResult[] = sprintf('Could not save image %s, error message: %s', $newImage['mediakey'], $e->getMessage()); } } if ($imageResult) { $result[$sku]['images'] = $imageResult; } $product->save(); $this->_updateMediaKeys($product->getId(), $newImages); if ($item->getId()) { $item->delete(); } $product->clearInstance(); } catch (Exception $e) { $result[$sku]['general'] = $e->getMessage(); } } return $result; }