| Server IP : 213.186.33.4 / Your IP : 216.73.216.193 Web Server : Apache System : Linux webm006.cluster103.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : awebpaca ( 35430) PHP Version : 8.5.0 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/a/w/e/awebpaca/boutiques/app/code/core/Mage/Catalog/Model/Product/Attribute/Backend/ |
Upload File : |
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magentocommerce.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magentocommerce.com for more information.
*
* @category Mage
* @package Mage_Catalog
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* Catalog product media gallery attribute backend model
*
* @category Mage
* @package Mage_Catalog
* @author Magento Core Team <core@magentocommerce.com>
*/
class Mage_Catalog_Model_Product_Attribute_Backend_Media extends Mage_Eav_Model_Entity_Attribute_Backend_Abstract
{
protected $_renamedImages = array();
/**
* Load attribute data after product loaded
*
* @param Mage_Catalog_Model_Product $object
*/
public function afterLoad($object)
{
$attrCode = $this->getAttribute()->getAttributeCode();
$value = array();
$value['images'] = array();
$value['values'] = array();
$localAttributes = array('label', 'position', 'disabled');
foreach ($this->_getResource()->loadGallery($object, $this) as $image) {
foreach ($localAttributes as $localAttribute) {
if (is_null($image[$localAttribute])) {
$image[$localAttribute] = $this->_getDefaultValue($localAttribute, $image);
}
}
$value['images'][] = $image;
}
$object->setData($attrCode, $value);
}
protected function _getDefaultValue($key, &$image)
{
if (isset($image[$key . '_default'])) {
return $image[$key . '_default'];
}
return '';
}
/**
* Validate media_gallery attribute data
*
* @param Mage_Catalog_Model_Product $object
* @throws Mage_Core_Exception
* @return bool
*/
public function validate($object)
{
if ($this->getAttribute()->getIsRequired()) {
$value = $object->getData($this->getAttribute()->getAttributeCode());
if ($this->getAttribute()->isValueEmpty($value)) {
if ( !(is_array($value) && count($value)>0) ) {
return false;
}
}
}
if ($this->getAttribute()->getIsUnique()) {
if (!$this->getAttribute()->getEntity()->checkAttributeUniqueValue($this->getAttribute(), $object)) {
$label = $this->getAttribute()->getFrontend()->getLabel();
Mage::throwException(Mage::helper('eav')->__('The value of attribute "%s" must be unique.', $label));
}
}
return true;
}
public function beforeSave($object)
{
$attrCode = $this->getAttribute()->getAttributeCode();
$value = $object->getData($attrCode);
if (!is_array($value) || !isset($value['images'])) {
return;
}
if(!is_array($value['images']) && strlen($value['images']) > 0) {
$value['images'] = Mage::helper('core')->jsonDecode($value['images']);
}
if (!is_array($value['images'])) {
$value['images'] = array();
}
$clearImages = array();
$newImages = array();
$existImages = array();
if ($object->getIsDuplicate()!=true) {
foreach ($value['images'] as &$image) {
if(!empty($image['removed'])) {
$clearImages[] = $image['file'];
} else if (!isset($image['value_id'])) {
$newFile = $this->_moveImageFromTmp($image['file']);
$image['new_file'] = $newFile;
$newImages[$image['file']] = $image;
$this->_renamedImages[$image['file']] = $newFile;
$image['file'] = $newFile;
} else {
$existImages[$image['file']] = $image;
}
}
} else {
// For duplicating we need copy original images.
$duplicate = array();
foreach ($value['images'] as &$image) {
if (!isset($image['value_id'])) {
continue;
}
$duplicate[$image['value_id']] = $this->_copyImage($image['file']);
$newImages[$image['file']] = $duplicate[$image['value_id']];
}
$value['duplicate'] = $duplicate;
}
foreach ($object->getMediaAttributes() as $mediaAttribute) {
$mediaAttrCode = $mediaAttribute->getAttributeCode();
$attrData = $object->getData($mediaAttrCode);
if (in_array($attrData, $clearImages)) {
$object->setData($mediaAttrCode, false);
}
if (in_array($attrData, array_keys($newImages))) {
$object->setData($mediaAttrCode, $newImages[$attrData]['new_file']);
$object->setData($mediaAttrCode.'_label', $newImages[$attrData]['label']);
}
if (in_array($attrData, array_keys($existImages))) {
$object->setData($mediaAttrCode.'_label', $existImages[$attrData]['label']);
}
}
$object->setData($attrCode, $value);
return $this;
}
/**
* Retrieve renamed image name
*
* @param string $file
* @return string
*/
public function getRenamedImage($file)
{
if (isset($this->_renamedImages[$file])) {
return $this->_renamedImages[$file];
}
return $file;
}
public function afterSave($object)
{
if ($object->getIsDuplicate() == true) {
$this->duplicate($object);
return;
}
$attrCode = $this->getAttribute()->getAttributeCode();
$value = $object->getData($attrCode);
if (!is_array($value) || !isset($value['images']) || $object->isLockedAttribute($attrCode)) {
return;
}
$toDelete = array();
$filesToValueIds = array();
foreach ($value['images'] as &$image) {
if(!empty($image['removed'])) {
if(isset($image['value_id'])) {
$toDelete[] = $image['value_id'];
}
continue;
}
if(!isset($image['value_id'])) {
$data = array();
$data['entity_id'] = $object->getId();
$data['attribute_id'] = $this->getAttribute()->getId();
$data['value'] = $image['file'];
$image['value_id'] = $this->_getResource()->insertGallery($data);
}
$this->_getResource()->deleteGalleryValueInStore($image['value_id'], $object->getStoreId());
// Add per store labels, position, disabled
$data = array();
$data['value_id'] = $image['value_id'];
$data['label'] = $image['label'];
$data['position'] = (int) $image['position'];
$data['disabled'] = (int) $image['disabled'];
$data['store_id'] = (int) $object->getStoreId();
$this->_getResource()->insertGalleryValueInStore($data);
}
$this->_getResource()->deleteGallery($toDelete);
}
/**
* Add image to media gallery and return new filename
*
* @param Mage_Catalog_Model_Product $product
* @param string $file file path of image in file system
* @param string|array $mediaAttribute code of attribute with type 'media_image',
* leave blank if image should be only in gallery
* @param boolean $move if true, it will move source file
* @param boolean $exclude mark image as disabled in product page view
* @return string
*/
public function addImage(Mage_Catalog_Model_Product $product, $file, $mediaAttribute=null, $move=false, $exclude=true)
{
$file = realpath($file);
if (!$file || !file_exists($file)) {
Mage::throwException(Mage::helper('catalog')->__('Image does not exist.'));
}
$pathinfo = pathinfo($file);
if (!isset($pathinfo['extension']) || !in_array(strtolower($pathinfo['extension']), array('jpg','jpeg','gif','png'))) {
Mage::throwException(Mage::helper('catalog')->__('Invalid image file type.'));
}
$fileName = Varien_File_Uploader::getCorrectFileName($pathinfo['basename']);
$dispretionPath = Varien_File_Uploader::getDispretionPath($fileName);
$fileName = $dispretionPath . DS . $fileName;
$fileName = $dispretionPath . DS
. Varien_File_Uploader::getNewFileName($this->_getConfig()->getTmpMediaPath($fileName));
$ioAdapter = new Varien_Io_File();
$ioAdapter->setAllowCreateFolders(true);
$distanationDirectory = dirname($this->_getConfig()->getTmpMediaPath($fileName));
try {
$ioAdapter->open(array(
'path'=>$distanationDirectory
));
if ($move) {
$ioAdapter->mv($file, $this->_getConfig()->getTmpMediaPath($fileName));
} else {
$ioAdapter->cp($file, $this->_getConfig()->getTmpMediaPath($fileName));
$ioAdapter->chmod($this->_getConfig()->getTmpMediaPath($fileName), 0777);
}
}
catch (Exception $e) {
Mage::throwException(Mage::helper('catalog')->__('Failed to move file: %s', $e->getMessage()));
}
$fileName = str_replace(DS, '/', $fileName);
$attrCode = $this->getAttribute()->getAttributeCode();
$mediaGalleryData = $product->getData($attrCode);
$position = 0;
if (!is_array($mediaGalleryData)) {
$mediaGalleryData = array(
'images' => array()
);
}
foreach ($mediaGalleryData['images'] as &$image) {
if (isset($image['position']) && $image['position'] > $position) {
$position = $image['position'];
}
}
$position++;
$mediaGalleryData['images'][] = array(
'file' => $fileName,
'position' => $position,
'label' => '',
'disabled' => (int) $exclude
);
$product->setData($attrCode, $mediaGalleryData);
if (!is_null($mediaAttribute)) {
$this->setMediaAttribute($product, $mediaAttribute, $fileName);
}
return $fileName;
}
/**
* Update image in gallery
*
* @param Mage_Catalog_Model_Product $product
* @param sting $file
* @param array $data
* @return Mage_Catalog_Model_Product_Attribute_Backend_Media
*/
public function updateImage(Mage_Catalog_Model_Product $product, $file, $data)
{
$fieldsMap = array(
'label' => 'label',
'position' => 'position',
'disabled' => 'disabled',
'exclude' => 'disabled'
);
$attrCode = $this->getAttribute()->getAttributeCode();
$mediaGalleryData = $product->getData($attrCode);
if (!isset($mediaGalleryData['images']) || !is_array($mediaGalleryData['images'])) {
return $this;
}
foreach ($mediaGalleryData['images'] as &$image) {
if ($image['file'] == $file) {
foreach ($fieldsMap as $mappedField=>$realField) {
if (isset($data[$mappedField])) {
$image[$realField] = $data[$mappedField];
}
}
}
}
$product->setData($attrCode, $mediaGalleryData);
return $this;
}
/**
* Remove image from gallery
*
* @param Mage_Catalog_Model_Product $product
* @param string $file
* @return Mage_Catalog_Model_Product_Attribute_Backend_Media
*/
public function removeImage(Mage_Catalog_Model_Product $product, $file)
{
$attrCode = $this->getAttribute()->getAttributeCode();
$mediaGalleryData = $product->getData($attrCode);
if (!isset($mediaGalleryData['images']) || !is_array($mediaGalleryData['images'])) {
return $this;
}
foreach ($mediaGalleryData['images'] as &$image) {
if ($image['file'] == $file) {
$image['removed'] = 1;
}
}
$product->setData($attrCode, $mediaGalleryData);
return $this;
}
/**
* Retrive image from gallery
*
* @param Mage_Catalog_Model_Product $product
* @param string $file
* @return array|boolean
*/
public function getImage(Mage_Catalog_Model_Product $product, $file)
{
$attrCode = $this->getAttribute()->getAttributeCode();
$mediaGalleryData = $product->getData($attrCode);
if (!isset($mediaGalleryData['images']) || !is_array($mediaGalleryData['images'])) {
return false;
}
foreach ($mediaGalleryData['images'] as $image) {
if ($image['file'] == $file) {
return $image;
}
}
return false;
}
/**
* Clear media attribute value
*
* @param Mage_Catalog_Model_Product $product
* @param string|array $mediaAttribute
* @return Mage_Catalog_Model_Product_Attribute_Backend_Media
*/
public function clearMediaAttribute(Mage_Catalog_Model_Product $product, $mediaAttribute)
{
$mediaAttributeCodes = array_keys($product->getMediaAttributes());
if (is_array($mediaAttribute)) {
foreach ($mediaAttribute as $atttribute) {
if (in_array($atttribute, $mediaAttributeCodes)) {
$product->setData($atttribute, null);
}
}
} elseif (in_array($mediaAttribute, $mediaAttributeCodes)) {
$product->setData($mediaAttribute, null);
}
return $this;
}
/**
* Set media attribute value
*
* @param Mage_Catalog_Model_Product $product
* @param string|array $mediaAttribute
* @param string $value
* @return Mage_Catalog_Model_Product_Attribute_Backend_Media
*/
public function setMediaAttribute(Mage_Catalog_Model_Product $product, $mediaAttribute, $value)
{
$mediaAttributeCodes = array_keys($product->getMediaAttributes());
if (is_array($mediaAttribute)) {
foreach ($mediaAttribute as $atttribute) {
if (in_array($atttribute, $mediaAttributeCodes)) {
$product->setData($atttribute, $value);
}
}
} elseif (in_array($mediaAttribute, $mediaAttributeCodes)) {
$product->setData($mediaAttribute, $value);
}
return $this;
}
/**
* Retrieve resource model
*
* @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Attribute_Backend_Media
*/
protected function _getResource()
{
return Mage::getResourceSingleton('catalog/product_attribute_backend_media');
}
/**
* Retrive media config
*
* @return Mage_Catalog_Model_Product_Media_Config
*/
protected function _getConfig()
{
return Mage::getSingleton('catalog/product_media_config');
}
/**
* Move image from temporary directory to normal
*
* @param string $file
* @return string
*/
protected function _moveImageFromTmp($file)
{
$ioObject = new Varien_Io_File();
$destDirectory = dirname($this->_getConfig()->getMediaPath($file));
try {
$ioObject->open(array('path'=>$destDirectory));
} catch (Exception $e) {
$ioObject->mkdir($destDirectory, 0777, true);
$ioObject->open(array('path'=>$destDirectory));
}
if (strrpos($file, '.tmp') == strlen($file)-4) {
$file = substr($file, 0, strlen($file)-4);
}
$destFile = dirname($file) . $ioObject->dirsep()
. Varien_File_Uploader::getNewFileName($this->_getConfig()->getMediaPath($file));
$ioObject->mv(
$this->_getConfig()->getTmpMediaPath($file),
$this->_getConfig()->getMediaPath($destFile)
);
return str_replace($ioObject->dirsep(), '/', $destFile);
}
/**
* Copy image and return new filename.
*
* @param string $file
* @return string
*/
protected function _copyImage($file)
{
try {
$ioObject = new Varien_Io_File();
$destDirectory = dirname($this->_getConfig()->getMediaPath($file));
$ioObject->open(array('path'=>$destDirectory));
$destFile = dirname($file) . $ioObject->dirsep()
. Varien_File_Uploader::getNewFileName($this->_getConfig()->getMediaPath($file));
if (!$ioObject->fileExists($this->_getConfig()->getMediaPath($file),true)) {
throw new Exception();
}
$ioObject->cp(
$this->_getConfig()->getMediaPath($file),
$this->_getConfig()->getMediaPath($destFile)
);
} catch (Exception $e) {
Mage::throwException(
Mage::helper('catalog')->__('Failed to copy file %s. Please, delete media with non-existing images and try again.',
$this->_getConfig()->getMediaPath($file))
);
}
return str_replace($ioObject->dirsep(), '/', $destFile);
}
public function duplicate($object)
{
$attrCode = $this->getAttribute()->getAttributeCode();
$mediaGalleryData = $object->getData($attrCode);
if (!isset($mediaGalleryData['images']) || !is_array($mediaGalleryData['images'])) {
return $this;
}
$this->_getResource()->duplicate(
$this,
(isset($mediaGalleryData['duplicate']) ? $mediaGalleryData['duplicate'] : array()),
$object->getOriginalId(),
$object->getId()
);
return $this;
}
} // Class Mage_Catalog_Model_Product_Attribute_Backend_Media End