Mage_Catalog_Model_Product_Type_Abstract Class Reference

Inheritance diagram for Mage_Catalog_Model_Product_Type_Abstract:

Mage_Bundle_Model_Product_Type Mage_Catalog_Model_Product_Type_Configurable Mage_Catalog_Model_Product_Type_Grouped Mage_Catalog_Model_Product_Type_Simple Mage_Catalog_Model_Product_Type_Virtual Mage_Downloadable_Model_Product_Type

List of all members.

Public Member Functions

 setProduct ($product)
 setTypeId ($typeId)
 getProduct ($product=null)
 getRelationInfo ()
 getChildrenIds ($parentId, $required=true)
 getParentIdsByChild ($childId)
 getSetAttributes ($product=null)
 attributesCompare ($attribute1, $attribute2)
 getEditableAttributes ($product=null)
 getAttributeById ($attributeId, $product=null)
 isVirtual ($product=null)
 isSalable ($product=null)
 prepareForCart (Varien_Object $buyRequest, $product=null)
 getSpecifyOptionMessage ()
 checkProductBuyState ($product=null)
 getOrderOptions ($product=null)
 save ($product=null)
 beforeSave ($product=null)
 isComposite ($product=null)
 getSku ($product=null)
 getWeight ($product=null)
 hasOptions ($product=null)
 updateQtyOption ($options, Varien_Object $option, $value, $product=null)
 hasRequiredOptions ($product=null)
 getStoreFilter ($product=null)
 setStoreFilter ($store=null, $product=null)
 getForceChildItemQtyChanges ($product=null)
 prepareQuoteItemQty ($qty, $product=null)
 assignProductToOption ($optionProduct, $option, $product=null)
 setConfig ($config)
 getSearchableData ($product=null)

Public Attributes

const CALCULATE_CHILD = 0
const CALCULATE_PARENT = 1
const SHIPMENT_SEPARATELY = 1
const SHIPMENT_TOGETHER = 0

Protected Member Functions

 _prepareOptionsForCart (Varien_Object $buyRequest, $product=null)

Protected Attributes

 $_product
 $_typeId
 $_setAttributes
 $_editableAttributes
 $_isComposite = false
 $_storeFilter = null


Detailed Description

Definition at line 34 of file Abstract.php.


Member Function Documentation

_prepareOptionsForCart ( Varien_Object buyRequest,
product = null 
) [protected]

Check custom defined options for product

Parameters:
Varien_Object $buyRequest
Mage_Catalog_Model_Product $product
Returns:
array || string

Definition at line 346 of file Abstract.php.

00347     {
00348         $newOptions = array();
00349         foreach ($this->getProduct($product)->getOptions() as $_option) {
00350             /* @var $_option Mage_Catalog_Model_Product_Option */
00351             $group = $_option->groupFactory($_option->getType())
00352                 ->setOption($_option)
00353                 ->setProduct($this->getProduct($product))
00354                 ->setRequest($buyRequest)
00355                 ->validateUserValue($buyRequest->getOptions());
00356 
00357             $preparedValue = $group->prepareForCart();
00358             if ($preparedValue !== null) {
00359                 $newOptions[$_option->getId()] = $preparedValue;
00360             }
00361         }
00362         return $newOptions;
00363     }

assignProductToOption ( optionProduct,
option,
product = null 
)

Implementation of product specify logic of which product needs to be assigned to option. For example if product which was added to option already removed from catalog.

Parameters:
Mage_Catalog_Model_Product $optionProduct
Mage_Sales_Model_Quote_Item_Option $option
Mage_Catalog_Model_Product $product
Returns:
Mage_Catalog_Model_Product_Type_Abstract

Reimplemented in Mage_Catalog_Model_Product_Type_Configurable.

Definition at line 611 of file Abstract.php.

00612     {
00613         if ($optionProduct) {
00614             $option->setProduct($optionProduct);
00615         } else {
00616             $option->setProduct($this->getProduct($product));
00617         }
00618 
00619         return $this;
00620     }

attributesCompare ( attribute1,
attribute2 
)

Compare attribues sorting

Parameters:
Mage_Catalog_Model_Entity_Attribute $attribute1
Mage_Catalog_Model_Entity_Attribute $attribute2
Returns:
int

Definition at line 183 of file Abstract.php.

00184     {
00185         $sort1 =  ($attribute1->getGroupSortPath() * 1000) + ($attribute1->getSortPath() * 0.0001);
00186         $sort2 =  ($attribute2->getGroupSortPath() * 1000) + ($attribute2->getSortPath() * 0.0001);
00187 
00188         if ($sort1 > $sort2) {
00189             return 1;
00190         } elseif ($sort1 < $sort2) {
00191             return -1;
00192         }
00193 
00194         return 0;
00195     }

beforeSave ( product = null  ) 

Before save type related data

Parameters:
Mage_Catalog_Model_Product $product
Returns:
Mage_Catalog_Model_Product_Type_Abstract

Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Downloadable_Model_Product_Type.

Definition at line 455 of file Abstract.php.

00456     {
00457         $this->getProduct($product)->canAffectOptions(true);
00458         return $this;
00459     }

checkProductBuyState ( product = null  ) 

Check if product can be bought

Parameters:
Mage_Catalog_Model_Product $product
Returns:
Mage_Catalog_Model_Product_Type_Abstract
Exceptions:
Mage_Core_Exception 

Definition at line 372 of file Abstract.php.

00373     {
00374         if (!$this->getProduct($product)->getSkipCheckRequiredOption()) {
00375             foreach ($this->getProduct($product)->getOptions() as $option) {
00376                 if ($option->getIsRequire() && (!$this->getProduct($product)->getCustomOption('option_'.$option->getId())
00377                 || strlen($this->getProduct($product)->getCustomOption('option_'.$option->getId())->getValue()) == 0)) {
00378                     Mage::throwException(
00379                         Mage::helper('catalog')->__('Product has required options')
00380                     );
00381                     break;
00382                 }
00383             }
00384         }
00385 
00386         return $this;
00387     }

getAttributeById ( attributeId,
product = null 
)

Retrieve product attribute by identifier

Parameters:
int $attributeId
Returns:
Mage_Eav_Model_Entity_Attribute_Abstract

Definition at line 226 of file Abstract.php.

00227     {
00228         foreach ($this->getSetAttributes($product) as $attribute) {
00229             if ($attribute->getId() == $attributeId) {
00230                 return $attribute;
00231             }
00232         }
00233         return null;
00234     }

getChildrenIds ( parentId,
required = true 
)

Retrieve Required children ids Return grouped array, ex array( group => array(ids) )

Parameters:
int $parentId
bool $required
Returns:
array

Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Grouped.

Definition at line 147 of file Abstract.php.

00148     {
00149         return array();
00150     }

getEditableAttributes ( product = null  ) 

Retrieve product type attributes

Parameters:
Mage_Catalog_Model_Product $product
Returns:
array

Reimplemented in Mage_Catalog_Model_Product_Type_Configurable.

Definition at line 203 of file Abstract.php.

00204     {
00205         $cacheKey = '_cache_editable_attributes';
00206         if (!$this->getProduct($product)->hasData($cacheKey)) {
00207             $editableAttributes = array();
00208             foreach ($this->getSetAttributes($product) as $attributeCode => $attribute) {
00209                 if (!is_array($attribute->getApplyTo())
00210                     || count($attribute->getApplyTo())==0
00211                     || in_array($this->getProduct($product)->getTypeId(), $attribute->getApplyTo())) {
00212                     $editableAttributes[$attributeCode] = $attribute;
00213                 }
00214             }
00215             $this->getProduct($product)->setData($cacheKey, $editableAttributes);
00216         }
00217         return $this->getProduct($product)->getData($cacheKey);
00218     }

getForceChildItemQtyChanges ( product = null  ) 

Allow for updates of chidren qty's (applicable for complicated product types. As default returns false)

Returns:
boolean false

Reimplemented in Mage_Bundle_Model_Product_Type.

Definition at line 586 of file Abstract.php.

00587     {
00588         return false;
00589     }

getOrderOptions ( product = null  ) 

Prepare additional options/information for order item which will be created from this product

Parameters:
Mage_Catalog_Model_Product $product
Returns:
array

Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Downloadable_Model_Product_Type.

Definition at line 396 of file Abstract.php.

00397     {
00398         $optionArr = array();
00399         if ($info = $this->getProduct($product)->getCustomOption('info_buyRequest')) {
00400             $optionArr['info_buyRequest'] = unserialize($info->getValue());
00401         }
00402 
00403         if ($optionIds = $this->getProduct($product)->getCustomOption('option_ids')) {
00404             foreach (explode(',', $optionIds->getValue()) as $optionId) {
00405                 if ($option = $this->getProduct($product)->getOptionById($optionId)) {
00406 
00407                     $quoteItemOption = $this->getProduct($product)->getCustomOption('option_'.$option->getId());
00408 
00409                     $group = $option->groupFactory($option->getType())
00410                         ->setOption($option)
00411                         ->setProduct($this->getProduct())
00412                         ->setQuoteItemOption($quoteItemOption);
00413 
00414                     $optionArr['options'][] = array(
00415                         'label' => $option->getTitle(),
00416                         'value' => $group->getFormattedOptionValue($quoteItemOption->getValue()),
00417                         'print_value' => $group->getPrintableOptionValue($quoteItemOption->getValue()),
00418                         'option_id' => $option->getId(),
00419                         'option_type' => $option->getType(),
00420                         'option_value' => $quoteItemOption->getValue(),
00421                         'custom_view' => $group->isCustomizedView()
00422                     );
00423                 }
00424             }
00425         }
00426 
00427         if ($productTypeConfig = $this->getProduct($product)->getCustomOption('product_type')) {
00428             $optionArr['super_product_config'] = array(
00429                 'product_code'  => $productTypeConfig->getCode(),
00430                 'product_type'  => $productTypeConfig->getValue(),
00431                 'product_id'    => $productTypeConfig->getProductId()
00432             );
00433         }
00434 
00435         return $optionArr;
00436     }

getParentIdsByChild ( childId  ) 

Retrieve parent ids array by requered child

Parameters:
int|array $childId
Returns:
array

Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Grouped.

Definition at line 158 of file Abstract.php.

00159     {
00160         return array();
00161     }

getProduct ( product = null  ) 

Retrieve catalog product object

Parameters:
Mage_Catalog_Model_Product $product
Returns:
Mage_Catalog_Model_Product

Definition at line 119 of file Abstract.php.

00120     {
00121         if (is_object($product)) {
00122             return $product;
00123         }
00124         return $this->_product;
00125     }

getRelationInfo (  ) 

Return relation info about used products for specific type instance

Returns:
Varien_Object Object with information data

Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Grouped.

Definition at line 132 of file Abstract.php.

00133     {
00134         return new Varien_Object();
00135     }

getSearchableData ( product = null  ) 

Retrieve additional searchable data from type instance Using based on product id and store_id data

Parameters:
Mage_Catalog_Model_Product $product
Returns:
array

Reimplemented in Mage_Bundle_Model_Product_Type, and Mage_Downloadable_Model_Product_Type.

Definition at line 643 of file Abstract.php.

00644     {
00645         $product = $this->getProduct($product);
00646 
00647         $searchData = Mage::getSingleton('catalog/product_option')
00648             ->getSearchableData($product->getId(), $product->getStoreId());
00649 
00650         return $searchData;
00651     }

getSetAttributes ( product = null  ) 

Get array of product set attributes

Parameters:
Mage_Catalog_Model_Product $product
Returns:
array

Definition at line 169 of file Abstract.php.

00170     {
00171         return $this->getProduct($product)->getResource()
00172             ->loadAllAttributes($this->getProduct($product))
00173             ->getSortedAttributes($this->getProduct($product)->getAttributeSetId());
00174     }

getSku ( product = null  ) 

Default action to get sku of product

Parameters:
Mage_Catalog_Model_Product $product
Returns:
string

Reimplemented in Mage_Bundle_Model_Product_Type.

Definition at line 478 of file Abstract.php.

00479     {
00480         $skuDelimiter = '-';
00481         $sku = $this->getProduct($product)->getData('sku');
00482         if ($optionIds = $this->getProduct($product)->getCustomOption('option_ids')) {
00483             foreach (explode(',', $optionIds->getValue()) as $optionId) {
00484                 if ($option = $this->getProduct($product)->getOptionById($optionId)) {
00485 
00486                     $quoteItemOption = $this->getProduct($product)->getCustomOption('option_'.$optionId);
00487 
00488                     $group = $option->groupFactory($option->getType())
00489                         ->setOption($option);
00490 
00491                     if ($optionSku = $group->getOptionSku($quoteItemOption->getValue(), $skuDelimiter)) {
00492                         $sku .= $skuDelimiter . $optionSku;
00493                     }
00494                 }
00495             }
00496         }
00497         return $sku;
00498     }

getSpecifyOptionMessage (  ) 

Retrieve message for specify option(s)

Returns:
string

Reimplemented in Mage_Bundle_Model_Product_Type, and Mage_Catalog_Model_Product_Type_Configurable.

Definition at line 334 of file Abstract.php.

00335     {
00336         return Mage::helper('catalog')->__('Please specify the product required option(s)');
00337     }

getStoreFilter ( product = null  ) 

Retrive store filter for associated products

Returns:
int|Mage_Core_Model_Store

Definition at line 561 of file Abstract.php.

00562     {
00563         $cacheKey = '_cache_instance_store_filter';
00564         return $this->getProduct($product)->getData($cacheKey);
00565     }

getWeight ( product = null  ) 

Default action to get weight of product

Parameters:
Mage_Catalog_Model_Product $product
Returns:
decimal

Reimplemented in Mage_Bundle_Model_Product_Type, and Mage_Catalog_Model_Product_Type_Configurable.

Definition at line 506 of file Abstract.php.

00507     {
00508         return $this->getProduct($product)->getData('weight');
00509     }

hasOptions ( product = null  ) 

Return true if product has options

Parameters:
Mage_Catalog_Model_Product $product
Returns:
bool

Reimplemented in Mage_Bundle_Model_Product_Type, and Mage_Downloadable_Model_Product_Type.

Definition at line 517 of file Abstract.php.

00518     {
00519         if ($this->getProduct($product)->getHasOptions()) {
00520             return true;
00521         }
00522         return false;
00523     }

hasRequiredOptions ( product = null  ) 

Check if product has required options

Parameters:
Mage_Catalog_Model_Product $product
Returns:
bool

Reimplemented in Mage_Downloadable_Model_Product_Type.

Definition at line 548 of file Abstract.php.

00549     {
00550         if ($this->getProduct($product)->getRequiredOptions()) {
00551             return true;
00552         }
00553         return false;
00554     }

isComposite ( product = null  ) 

Check if product is composite (grouped, configurable, etc)

Parameters:
Mage_Catalog_Model_Product $product
Returns:
bool

Definition at line 467 of file Abstract.php.

00468     {
00469         return $this->_isComposite;
00470     }

isSalable ( product = null  ) 

Check is product available for sale

Parameters:
Mage_Catalog_Model_Product $product
Returns:
bool

Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Grouped.

Definition at line 253 of file Abstract.php.

00254     {
00255         $salable = $this->getProduct($product)->getStatus() == Mage_Catalog_Model_Product_Status::STATUS_ENABLED;
00256         if ($salable && $this->getProduct($product)->hasData('is_salable')) {
00257             $salable = $this->getProduct($product)->getData('is_salable');
00258         }
00259         elseif ($salable && $this->isComposite()) {
00260             $salable = null;
00261         }
00262 
00263         return $salable;
00264     }

isVirtual ( product = null  ) 

Check is virtual product

Parameters:
Mage_Catalog_Model_Product $product
Returns:
bool

Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Virtual.

Definition at line 242 of file Abstract.php.

00243     {
00244         return false;
00245     }

prepareForCart ( Varien_Object buyRequest,
product = null 
)

Initialize product(s) for add to cart process

Parameters:
Varien_Object $buyRequest
Mage_Catalog_Model_Product $product
Returns:
array|string

Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, Mage_Catalog_Model_Product_Type_Grouped, and Mage_Downloadable_Model_Product_Type.

Definition at line 273 of file Abstract.php.

00274     {
00275         $product = $this->getProduct($product);
00276         /* @var Mage_Catalog_Model_Product $product */
00277         // try to add custom options
00278         try {
00279             $options = $this->_prepareOptionsForCart($buyRequest, $product);
00280         } catch (Mage_Core_Exception $e) {
00281             return $e->getMessage();
00282         }
00283 
00284         if (is_string($options)) {
00285             return $options;
00286         }
00287         // try to found super product configuration
00288         // (if product was buying within grouped product)
00289         $superProductConfig = $buyRequest->getSuperProductConfig();
00290         if (!empty($superProductConfig['product_id'])
00291             && !empty($superProductConfig['product_type'])) {
00292             $superProductId = (int) $superProductConfig['product_id'];
00293             if ($superProductId) {
00294                 if (!$superProduct = Mage::registry('used_super_product_'.$superProductId)) {
00295                     $superProduct = Mage::getModel('catalog/product')->load($superProductId);
00296                     Mage::register('used_super_product_'.$superProductId, $superProduct);
00297                 }
00298                 if ($superProduct->getId()) {
00299                     $assocProductIds = $superProduct->getTypeInstance(true)->getAssociatedProductIds($superProduct);
00300                     if (in_array($product->getId(), $assocProductIds)) {
00301                         $productType = $superProductConfig['product_type'];
00302                         $product->addCustomOption('product_type', $productType, $superProduct);
00303 
00304                         $buyRequest->setData('super_product_config', array(
00305                                 'product_type'  => $productType,
00306                                 'product_id'    => $superProduct->getId()
00307                             )
00308                         );
00309                     }
00310                 }
00311             }
00312         }
00313 
00314         $product->addCustomOption('info_buyRequest', serialize($buyRequest->getData()));
00315 
00316         if ($options) {
00317             $optionIds = array_keys($options);
00318             $product->addCustomOption('option_ids', implode(',', $optionIds));
00319             foreach ($options as $optionId => $optionValue) {
00320                 $product->addCustomOption('option_'.$optionId, $optionValue);
00321             }
00322         }
00323         // set quantity in cart
00324         $product->setCartQty($buyRequest->getQty());
00325 
00326         return array($product);
00327     }

prepareQuoteItemQty ( qty,
product = null 
)

Prepare Quote Item Quantity

Parameters:
mixed $qty
Returns:
float

Reimplemented in Mage_Bundle_Model_Product_Type.

Definition at line 597 of file Abstract.php.

00598     {
00599         return floatval($qty);
00600     }

save ( product = null  ) 

setConfig ( config  ) 

Setting specified product type variables

Parameters:
array $config
Returns:
Mage_Catalog_Model_Product_Type_Abstract

Definition at line 628 of file Abstract.php.

00629     {
00630         if (isset($config['composite'])) {
00631             $this->_isComposite = (bool) $config['composite'];
00632         }
00633         return $this;
00634     }

setProduct ( product  ) 

Specify type instance product

Parameters:
Mage_Catalog_Model_Product $product
Returns:
Mage_Catalog_Model_Product_Type_Abstract

Definition at line 95 of file Abstract.php.

00096     {
00097         $this->_product = $product;
00098         return $this;
00099     }

setStoreFilter ( store = null,
product = null 
)

Set store filter for associated products

Parameters:
$store int|Mage_Core_Model_Store
Returns:
Mage_Catalog_Model_Product_Type_Configurable

Definition at line 573 of file Abstract.php.

00574     {
00575         $cacheKey = '_cache_instance_store_filter';
00576         $this->getProduct($product)->setData($cacheKey, $store);
00577         return $this;
00578     }

setTypeId ( typeId  ) 

Specify type identifier

Parameters:
string $typeId
Returns:
Mage_Catalog_Model_Product_Type_Abstract

Definition at line 107 of file Abstract.php.

00108     {
00109         $this->_typeId = $typeId;
00110         return $this;
00111     }

updateQtyOption ( options,
Varien_Object option,
value,
product = null 
)

Method is needed for specific actions to change given quote options values according current product type logic Example: the cataloginventory validation of decimal qty can change qty to int, so need to change quote item qty option value too.

Parameters:
array $options
Varien_Object $option
mixed $value
Returns:
object Mage_Catalog_Model_Product_Type_Abstract

Reimplemented in Mage_Bundle_Model_Product_Type.

Definition at line 537 of file Abstract.php.

00538     {
00539         return $this;
00540     }


Member Data Documentation

$_editableAttributes [protected]

Definition at line 63 of file Abstract.php.

$_isComposite = false [protected]

$_product [protected]

Definition at line 42 of file Abstract.php.

$_setAttributes [protected]

Definition at line 56 of file Abstract.php.

$_storeFilter = null [protected]

Definition at line 77 of file Abstract.php.

$_typeId [protected]

Definition at line 49 of file Abstract.php.

const CALCULATE_CHILD = 0

Definition at line 79 of file Abstract.php.

const CALCULATE_PARENT = 1

Definition at line 80 of file Abstract.php.

values for shipment type (invoice etc)

Definition at line 86 of file Abstract.php.

const SHIPMENT_TOGETHER = 0

Definition at line 87 of file Abstract.php.


The documentation for this class was generated from the following file:

Generated on Sat Jul 4 17:23:42 2009 for Magento by  doxygen 1.5.8