Mage_Catalog_Model_Product_Type_Grouped Class Reference

Inheritance diagram for Mage_Catalog_Model_Product_Type_Grouped:

Mage_Catalog_Model_Product_Type_Abstract

List of all members.

Public Member Functions

 getRelationInfo ()
 getChildrenIds ($parentId, $required=true)
 getParentIdsByChild ($childId)
 getAssociatedProducts ($product=null)
 addStatusFilter ($status, $product=null)
 setSaleableStatus ($product=null)
 getStatusFilters ($product=null)
 getAssociatedProductIds ($product=null)
 getAssociatedProductCollection ($product=null)
 isSalable ($product=null)
 save ($product=null)
 prepareForCart (Varien_Object $buyRequest, $product=null)

Public Attributes

const TYPE_CODE = 'grouped'

Protected Attributes

 $_keyAssociatedProducts = '_cache_instance_associated_products'
 $_keyAssociatedProductIds = '_cache_instance_associated_product_ids'
 $_keyStatusFilters = '_cache_instance_status_filters'
 $_isComposite = true


Detailed Description

Definition at line 34 of file Grouped.php.


Member Function Documentation

addStatusFilter ( status,
product = null 
)

Add status filter to collection

Parameters:
int $status
Mage_Catalog_Model_Product $product
Returns:
Mage_Catalog_Model_Product_Type_Grouped

Definition at line 149 of file Grouped.php.

00150     {
00151         $statusFilters = $this->getProduct($product)->getData($this->_keyStatusFilters);
00152         if (!is_array($statusFilters)) {
00153             $statusFilters = array();
00154         }
00155 
00156         $statusFilters[] = $status;
00157         $this->getProduct($product)->setData($this->_keyStatusFilters, $statusFilters);
00158 
00159         return $this;
00160     }

getAssociatedProductCollection ( product = null  ) 

Retrieve collection of associated products

Parameters:
Mage_Catalog_Model_Product $product
Returns:
Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Link_Product_Collection

Definition at line 216 of file Grouped.php.

00217     {
00218         $collection = $this->getProduct($product)->getLinkInstance()->useGroupedLinks()
00219             ->getProductCollection()
00220             ->setFlag('require_stock_items', true)
00221             ->setIsStrongMode();
00222         $collection->setProduct($this->getProduct($product));
00223         return $collection;
00224     }

getAssociatedProductIds ( product = null  ) 

Retrieve related products identifiers

Parameters:
Mage_Catalog_Model_Product $product
Returns:
array

Definition at line 198 of file Grouped.php.

00199     {
00200         if (!$this->getProduct($product)->hasData($this->_keyAssociatedProductIds)) {
00201             $associatedProductIds = array();
00202             foreach ($this->getAssociatedProducts($product) as $product) {
00203                 $associatedProductIds[] = $product->getId();
00204             }
00205             $this->getProduct($product)->setData($this->_keyAssociatedProductIds, $associatedProductIds);
00206         }
00207         return $this->getProduct($product)->getData($this->_keyAssociatedProductIds);
00208     }

getAssociatedProducts ( product = null  ) 

Retrieve array of associated products

Parameters:
Mage_Catalog_Model_Product $product
Returns:
array

Definition at line 117 of file Grouped.php.

00118     {
00119         if (!$this->getProduct($product)->hasData($this->_keyAssociatedProducts)) {
00120             $associatedProducts = array();
00121 
00122             if (!Mage::app()->getStore()->isAdmin()) {
00123                 $this->setSaleableStatus($product);
00124             }
00125 
00126             $collection = $this->getAssociatedProductCollection($product)
00127                 ->addAttributeToSelect('*')
00128                 ->addFilterByRequiredOptions()
00129                 ->setPositionOrder()
00130                 ->addStoreFilter($this->getStoreFilter($product))
00131                 ->addAttributeToFilter('status', array('in' => $this->getStatusFilters($product)));
00132 
00133             foreach ($collection as $product) {
00134                 $associatedProducts[] = $product;
00135             }
00136 
00137             $this->getProduct($product)->setData($this->_keyAssociatedProducts, $associatedProducts);
00138         }
00139         return $this->getProduct($product)->getData($this->_keyAssociatedProducts);
00140     }

getChildrenIds ( parentId,
required = true 
)

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

Parameters:
int $parentId
bool $required
Returns:
array

Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.

Definition at line 91 of file Grouped.php.

00092     {
00093         return Mage::getResourceSingleton('catalog/product_link')
00094             ->getChildrenIds($parentId,
00095                 Mage_Catalog_Model_Product_Link::LINK_TYPE_GROUPED);
00096     }

getParentIdsByChild ( childId  ) 

Retrieve parent ids array by requered child

Parameters:
int|array $childId
Returns:
array

Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.

Definition at line 104 of file Grouped.php.

00105     {
00106         return Mage::getResourceSingleton('catalog/product_link')
00107             ->getParentIdsByChild($childId,
00108                 Mage_Catalog_Model_Product_Link::LINK_TYPE_GROUPED);
00109     }

getRelationInfo (  ) 

Return relation info about used products

Returns:
Varien_Object Object with information data

Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.

Definition at line 71 of file Grouped.php.

00072     {
00073         $info = new Varien_Object();
00074         $info->setTable('catalog/product_link')
00075             ->setParentFieldName('product_id')
00076             ->setChildFieldName('linked_product_id')
00077             ->setWhere('link_type_id=' . Mage_Catalog_Model_Product_Link::LINK_TYPE_GROUPED);
00078         return $info;
00079     }

getStatusFilters ( product = null  ) 

Return all assigned status filters

Parameters:
Mage_Catalog_Model_Product $product
Returns:
array

Definition at line 181 of file Grouped.php.

00182     {
00183         if (!$this->getProduct($product)->hasData($this->_keyStatusFilters)) {
00184             return array(
00185                 Mage_Catalog_Model_Product_Status::STATUS_ENABLED,
00186                 Mage_Catalog_Model_Product_Status::STATUS_DISABLED
00187             );
00188         }
00189         return $this->getProduct($product)->getData($this->_keyStatusFilters);
00190     }

isSalable ( product = null  ) 

Check is product available for sale

Parameters:
Mage_Catalog_Model_Product $product
Returns:
bool

Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.

Definition at line 232 of file Grouped.php.

00233     {
00234         $salable = parent::isSalable($product);
00235         if (!is_null($salable)) {
00236             return $salable;
00237         }
00238 
00239         $salable = false;
00240         foreach ($this->getAssociatedProducts($product) as $associatedProduct) {
00241             $salable = $salable || $associatedProduct->isSalable();
00242         }
00243         return $salable;
00244     }

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 || false

Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.

Definition at line 266 of file Grouped.php.

00267     {
00268         $productsInfo = $buyRequest->getSuperGroup();
00269         if (!empty($productsInfo) && is_array($productsInfo)) {
00270             $products = array();
00271             $associatedProducts = $this->getAssociatedProducts($product);
00272             if ($associatedProducts) {
00273                 foreach ($associatedProducts as $subProduct) {
00274                     if(isset($productsInfo[$subProduct->getId()])) {
00275                         $qty = $productsInfo[$subProduct->getId()];
00276                         if (!empty($qty)) {
00277 
00278                             $_result = $subProduct->getTypeInstance(true)
00279                                 ->prepareForCart($buyRequest, $subProduct);
00280                             if (is_string($_result) && !is_array($_result)) {
00281                                 return $_result;
00282                             }
00283 
00284                             if (!isset($_result[0])) {
00285                                 return Mage::helper('checkout')->__('Can not add item to shopping cart');
00286                             }
00287 
00288                             $_result[0]->setCartQty($qty);
00289                             $_result[0]->addCustomOption('product_type', self::TYPE_CODE, $this->getProduct($product));
00290                             $_result[0]->addCustomOption('info_buyRequest',
00291                                 serialize(array(
00292                                     'super_product_config' => array(
00293                                         'product_type'  => self::TYPE_CODE,
00294                                         'product_id'    => $this->getProduct($product)->getId()
00295                                     )
00296                                 ))
00297                             );
00298                             $products[] = $_result[0];
00299                         }
00300                     }
00301                 }
00302             }
00303             if (count($products)) {
00304                 return $products;
00305             }
00306         }
00307         return Mage::helper('catalog')->__('Please specify the product(s) quantity');
00308     }

save ( product = null  ) 

Save type related data

Parameters:
Mage_Catalog_Model_Product $product
Returns:
Mage_Catalog_Model_Product_Type_Grouped

Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.

Definition at line 252 of file Grouped.php.

00253     {
00254         parent::save($product);
00255         $this->getProduct($product)->getLinkInstance()->saveGroupedLinks($this->getProduct($product));
00256         return $this;
00257     }

setSaleableStatus ( product = null  ) 

Set only saleable filter

Parameters:
Mage_Catalog_Model_Product $product
Returns:
Mage_Catalog_Model_Product_Type_Grouped

Definition at line 168 of file Grouped.php.

00169     {
00170         $this->getProduct($product)->setData($this->_keyStatusFilters,
00171             Mage::getSingleton('catalog/product_status')->getSaleableStatusIds());
00172         return $this;
00173     }


Member Data Documentation

$_isComposite = true [protected]

Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.

Definition at line 64 of file Grouped.php.

$_keyAssociatedProductIds = '_cache_instance_associated_product_ids' [protected]

Definition at line 50 of file Grouped.php.

$_keyAssociatedProducts = '_cache_instance_associated_products' [protected]

Definition at line 43 of file Grouped.php.

$_keyStatusFilters = '_cache_instance_status_filters' [protected]

Definition at line 57 of file Grouped.php.

const TYPE_CODE = 'grouped'

Definition at line 36 of file Grouped.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