*/ class Mage_Checkout_Model_Api_Resource extends Mage_Api_Model_Resource_Abstract { /** * Attributes map array per entity type * * @var array */ protected $_attributesMap = array( 'global' => array(), ); /** * Default ignored attribute codes per entity type * * @var array */ protected $_ignoredAttributeCodes = array( 'global' => array('entity_id', 'attribute_set_id', 'entity_type_id') ); /** * Field name in session for saving store id * @var string */ protected $_storeIdSessionField = 'store_id'; /** * Check if quote already exist with provided quoteId for creating * * @param int $quoteId * @return bool */ protected function _isQuoteExist($quoteId) { if (empty($quoteId)) { return false; } try { $quote = $this->_getQuote($quoteId); } catch (Mage_Api_Exception $e) { return false; } if (!is_null($quote->getId())) { $this->_fault('quote_already_exist'); } return false; } /** * Retrieves store id from store code, if no store id specified, * it use set session or admin store * * @param string|int $store * @return int */ protected function _getStoreId($store = null) { if (is_null($store)) { $store = ($this->_getSession()->hasData($this->_storeIdSessionField) ? $this->_getSession()->getData($this->_storeIdSessionField) : 0); } try { $storeId = Mage::app()->getStore($store)->getId(); } catch (Mage_Core_Model_Store_Exception $e) { $this->_fault('store_not_exists'); } return $storeId; } /** * Retrieves quote by quote identifier and store code or by quote identifier * * @param int $quoteId * @param string|int $store * @return Mage_Sales_Model_Quote */ protected function _getQuote($quoteId, $store = null) { /** @var $quote Mage_Sales_Model_Quote */ $quote = Mage::getModel("sales/quote"); if (!(is_string($store) || is_integer($store))) { $quote->loadByIdWithoutStore($quoteId); } else { $storeId = $this->_getStoreId($store); $quote->setStoreId($storeId) ->load($quoteId); } if (is_null($quote->getId())) { $this->_fault('quote_not_exists'); } return $quote; } /** * Get store identifier by quote identifier * * @param int $quoteId * @return int */ protected function _getStoreIdFromQuote($quoteId) { /** @var $quote Mage_Sales_Model_Quote */ $quote = Mage::getModel('sales/quote') ->loadByIdWithoutStore($quoteId); return $quote->getStoreId(); } /** * Update attributes for entity * * @param array $data * @param Mage_Core_Model_Abstract $object * @param string $type * @param array|null $attributes * @return Mage_Checkout_Model_Api_Resource */ protected function _updateAttributes($data, $object, $type, array $attributes = null) { foreach ($data as $attribute=>$value) { if ($this->_isAllowedAttribute($attribute, $type, $attributes)) { $object->setData($attribute, $value); } } return $this; } /** * Retrieve entity attributes values * * @param Mage_Core_Model_Abstract $object * @param string $type * @param array $attributes * @return Mage_Checkout_Model_Api_Resource */ protected function _getAttributes($object, $type, array $attributes = null) { $result = array(); if (!is_object($object)) { return $result; } foreach ($object->getData() as $attribute=>$value) { if (is_object($value)) { continue; } if ($this->_isAllowedAttribute($attribute, $type, $attributes)) { $result[$attribute] = $value; } } foreach ($this->_attributesMap['global'] as $alias=>$attributeCode) { $result[$alias] = $object->getData($attributeCode); } if (isset($this->_attributesMap[$type])) { foreach ($this->_attributesMap[$type] as $alias=>$attributeCode) { $result[$alias] = $object->getData($attributeCode); } } return $result; } /** * Check is attribute allowed to usage * * @param Mage_Eav_Model_Entity_Attribute_Abstract $attribute * @param string $type * @param array $attributes * @return bool */ protected function _isAllowedAttribute($attributeCode, $type, array $attributes = null) { if (!empty($attributes) && !(in_array($attributeCode, $attributes))) { return false; } if (in_array($attributeCode, $this->_ignoredAttributeCodes['global'])) { return false; } if (isset($this->_ignoredAttributeCodes[$type]) && in_array($attributeCode, $this->_ignoredAttributeCodes[$type])) { return false; } return true; } }