Example #1
0
 /**
  * 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;
 }