/** * Import 'images' value * * @param \XLite\Model\Product $model Product * @param array $value Value * @param array $column Column info * * @return void */ protected function importImagesColumn(\XLite\Model\Product $model, array $value, array $column) { if ($value) { foreach ($value as $index => $path) { if ($this->verifyValueAsFile($path)) { $image = $model->getImages() ? $model->getImages()->get($index) : null; $isNew = false; if (!$image) { $isNew = true; $image = new \XLite\Model\Image\Product\Image(); } if (1 < count(parse_url($path))) { $success = $image->loadFromURL($path, true); } else { $dir = \Includes\Utils\FileManager::getRealPath(LC_DIR_VAR . $this->importer->getOptions()->dir); $success = $image->loadFromLocalFile($dir . LC_DS . $path); } if (!$success) { $this->addError('PRODUCT-IMG-LOAD-FAILED', array('column' => $column, 'value' => $path)); } else { $image->setNeedProcess(1); if ($isNew) { $image->setProduct($model); $model->getImages()->add($image); \XLite\Core\Database::getEM()->persist($image); } } } } while (count($model->getImages()) > count($value)) { $image = $model->getImages()->last(); \XLite\Core\Database::getRepo('XLite\\Model\\Image\\Product\\Image')->delete($image, false); $model->getImages()->removeElement($image); } } }
/** * Import images * * @param \XLite\Model\Product $product Product * @param string $data Data * * @return void */ protected function importImages(\XLite\Model\Product $product, $data) { // Save old images ids' list $oldImageIds = array(); foreach ($product->getImages() as $image) { $oldImageIds[] = $image->getId(); } if ($data) { // Load images foreach (explode(';', $data) as $url) { $url = trim($url); $hash = \Includes\Utils\FileManager::getHash($url); $image = null; if ($hash) { foreach ($product->getImages() as $i) { if ($i->getHash() == $hash) { $image = $i; $key = array_search($i->getId(), $oldImageIds); unset($oldImageIds[$key]); break; } } } if (!$image) { $image = new \XLite\Model\Image\Product\Image(); $image->setProduct($product); $result = preg_match('/^(https?|ftp):\\/\\//Ss', $url) ? $image->loadFromURL($url) : $image->loadFromLocalFile($url); if ($result) { $product->addImages($image); \XLite\Core\Database::getEM()->persist($image); } else { $this->logImportWarning(static::t('X image unable to load', array('url' => $url)), $this->importCell['position'], 'images', $url, $product); } } } } // Remove old images foreach ($product->getImages() as $image) { if (in_array($image->getId(), $oldImageIds)) { $product->getImages()->removeElement($image); \XLite\Core\Database::getEM()->remove($image); } } }