| 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/awebpaca/boutiques/app/code/core/Mage/GoogleBase/Model/ |
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_GoogleBase
* @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)
*/
/**
* Google Base Item Types Model
*
* @category Mage
* @package Mage_GoogleBase
* @author Magento Core Team <core@magentocommerce.com>
*/
class Mage_GoogleBase_Model_Item extends Mage_Core_Model_Abstract
{
const ATTRIBUTES_REGISTRY_KEY = 'gbase_attributes_registry';
const TYPES_REGISTRY_KEY = 'gbase_types_registry';
protected function _construct()
{
parent::_construct();
$this->_init('googlebase/item');
}
/**
* Return Service Item Instance
*
* @return Mage_GoogleBase_Model_Service_Item
*/
public function getServiceItem()
{
return Mage::getModel('googlebase/service_item')->setStoreId($this->getStoreId());
}
/**
* Target Country
*
* @return string Two-letters country ISO code
*/
public function getTargetCountry()
{
return Mage::getSingleton('googlebase/config')->getTargetCountry($this->getStoreId());
}
/**
* Save item to Google Base
*
* @return Mage_GoogleBase_Model_Item
*/
public function insertItem()
{
$this->_checkProduct()
->_prepareProductObject();
$typeModel = $this->_getTypeModel();
$this->getServiceItem()
->setItem($this)
->setObject($this->getProduct())
->setAttributeValues($this->_getAttributeValues())
->setItemType($typeModel->getGbaseItemtype())
->insert();
$this->setTypeId($typeModel->getTypeId());
return $this;
}
/**
* Update Item data
*
* @return Mage_GoogleBase_Model_Item
*/
public function updateItem()
{
$this->_checkProduct()
->_prepareProductObject();
$this->loadByProduct($this->getProduct());
if ($this->getId()) {
$typeModel = $this->_getTypeModel();
$this->getServiceItem()
->setItem($this)
->setObject($this->getProduct())
->setAttributeValues($this->_getAttributeValues())
->setItemType($typeModel->getGbaseItemtype())
->update();
}
return $this;
}
/**
* Delete Item from Google Base
*
* @return Mage_GoogleBase_Model_Item
*/
public function deleteItem()
{
$this->getServiceItem()->setItem($this)->delete();
return $this;
}
/**
* Delete Item from Google Base
*
* @return Mage_GoogleBase_Model_Item
*/
public function hideItem()
{
$this->getServiceItem()->setItem($this)->hide();
$this->setIsHidden(1);
$this->save();
return $this;
}
/**
* Delete Item from Google Base
*
* @return Mage_GoogleBase_Model_Item
*/
public function activateItem()
{
$this->getServiceItem()->setItem($this)->activate();
$this->setIsHidden(0);
$this->save();
return $this;
}
/**
* Load Item Model by Product
*
* @param Mage_Catalog_Model_Product $product
* @return Mage_GoogleBase_Model_Item
*/
public function loadByProduct($product)
{
if (!$this->getProduct()) {
$this->setProduct($product);
}
$this->getResource()->loadByProduct($this);
return $this;
}
/**
* Product Setter
*
* @param Mage_Catalog_Model_Product
* @return Mage_GoogleBase_Model_Item
*/
public function setProduct($product)
{
if (!($product instanceof Mage_Catalog_Model_Product)) {
Mage::throwException(Mage::helper('googlebase')->__('Invalid Product Model for Google Base Item'));
}
$this->setData('product', $product);
$this->setProductId($product->getId());
$this->setStoreId($product->getStoreId());
return $this;
}
/**
* Check product instance
*
* @return Mage_GoogleBase_Model_Item
*/
protected function _checkProduct()
{
if (!($this->getProduct() instanceof Mage_Catalog_Model_Product)) {
Mage::throwException(Mage::helper('googlebase')->__('Invalid Product Model for Google Base Item'));
}
return $this;
}
/**
* Copy Product object and assign additional data to the copy
*
* @return Mage_GoogleBase_Model_Item
*/
protected function _prepareProductObject()
{
$product = clone $this->getProduct();
/* @var $product Mage_Catalog_Model_Product */
$url = $product->getProductUrl(false);
if (!Mage::getStoreConfigFlag('web/url/use_store')) {
$urlInfo = parse_url($url);
$store = $product->getStore()->getCode();
if (isset($urlInfo['query']) && $urlInfo['query'] != '') {
$url .= '&___store=' . $store;
} else {
$url .= '?___store=' . $store;
}
}
$product->setUrl($url)
->setQuantity( $this->getProduct()->getStockItem()->getQty() )
->setImageUrl( Mage::helper('catalog/product')->getImageUrl($product) );
$this->setProduct($product);
return $this;
}
/**
* Return Product attribute values array
*
* @return array Product attribute values
*/
protected function _getAttributeValues()
{
$result = array();
$productAttributes = $this->_getProductAttributes();
foreach ($this->_getAttributesCollection() as $attribute) {
$attributeId = $attribute->getAttributeId();
if (isset($productAttributes[$attributeId])) {
$productAttribute = $productAttributes[$attributeId];
if ($attribute->getGbaseAttribute()) {
$name = $attribute->getGbaseAttribute();
} else {
$name = $this->_getAttributeLabel($productAttribute, $this->getProduct()->getStoreId());
}
$value = $productAttribute->getGbaseValue();
$type = Mage::getSingleton('googlebase/attribute')->getGbaseAttributeType($productAttribute);
if ($name && $value && $type) {
$result[$name] = array(
'value' => $value,
'type' => $type
);
}
}
}
return $result;
}
/**
* Return Product Attribute Store Label
*
* @param Mage_Catalog_Model_Resource_Eav_Attribute $attribute
* @param int $storeId Store View Id
* @return string Attribute Store View Label or Attribute code
*/
protected function _getAttributeLabel($attribute, $storeId)
{
$frontendLabel = $attribute->getFrontend()->getLabel();
if (is_array($frontendLabel)) {
$frontendLabel = array_shift($frontendLabel);
}
if (!$this->_translations) {
$this->_translations = Mage::getModel('core/translate_string')
->load(Mage_Catalog_Model_Entity_Attribute::MODULE_NAME.Mage_Core_Model_Translate::SCOPE_SEPARATOR.$frontendLabel)
->getStoreTranslations();
}
if (isset($this->_translations[$storeId])) {
return $this->_translations[$storeId];
} else {
return $attribute->getAttributeCode();
}
}
/**
* Return Google Base Item Type Model for current Product Attribute Set
*
* @return Mage_GoogleBase_Model_Type
*/
protected function _getTypeModel()
{
$registry = Mage::registry(self::TYPES_REGISTRY_KEY);
$attributeSetId = $this->getProduct()->getAttributeSetId();
if (is_array($registry) && isset($registry[$attributeSetId])) {
return $registry[$attributeSetId];
}
$model = Mage::getModel('googlebase/type')->loadByAttributeSetId($attributeSetId, $this->getTargetCountry());
$registry[$attributeSetId] = $model;
Mage::unregister(self::TYPES_REGISTRY_KEY);
Mage::register(self::TYPES_REGISTRY_KEY, $registry);
return $model;
}
/**
* Return Product attributes array
*
* @return array Product attributes
*/
protected function _getProductAttributes()
{
$product = $this->getProduct();
$attributes = $product->getAttributes();
$result = array();
foreach ($attributes as $attribute) {
$value = $attribute->getFrontend()->getValue($product);
if (is_string($value) && strlen($value) && $product->hasData($attribute->getAttributeCode())) {
$attribute->setGbaseValue($value);
$result[$attribute->getAttributeId()] = $attribute;
}
}
return $result;
}
/**
* Get Product Media files info
*
* @return array Media files info
*/
protected function _getProductImages()
{
$product = $this->getProduct();
$galleryData = $product->getData('media_gallery');
if (!isset($galleryData['images']) || !is_array($galleryData['images'])) {
return array();
}
$result = array();
foreach ($galleryData['images'] as $image) {
$image['url'] = Mage::getSingleton('catalog/product_media_config')
->getMediaUrl($image['file']);
$result[] = $image;
}
return $result;
}
/**
* Return attribute collection for current Product Attribute Set
*
* @return Mage_GoogleBase_Model_Mysql4_Attribute_Collection
*/
protected function _getAttributesCollection()
{
$registry = Mage::registry(self::ATTRIBUTES_REGISTRY_KEY);
$attributeSetId = $this->getProduct()->getAttributeSetId();
if (is_array($registry) && isset($registry[$attributeSetId])) {
return $registry[$attributeSetId];
}
$collection = Mage::getResourceModel('googlebase/attribute_collection')
->addAttributeSetFilter($attributeSetId, $this->getTargetCountry())
->load();
$registry[$attributeSetId] = $collection;
Mage::unregister(self::ATTRIBUTES_REGISTRY_KEY);
Mage::register(self::ATTRIBUTES_REGISTRY_KEY, $registry);
return $collection;
}
}