*/ class Mage_Catalog_Model_Product_Status extends Mage_Core_Model_Abstract { const STATUS_ENABLED = 1; const STATUS_DISABLED = 2; /** * Reference to the attribute instance * * @var Mage_Catalog_Model_Resource_Eav_Attribute */ protected $_attribute; /** * Initialize resource model * */ protected function _construct() { $this->_init('catalog/product_status'); } /** * Retrieve resource model wrapper * * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Status */ protected function _getResource() { return parent::_getResource(); } /** * Retrieve Product Attribute by code * * @param string $attributeCode * @return Mage_Eav_Model_Entity_Attribute_Abstract */ public function getProductAttribute($attributeCode) { return $this->_getResource()->getProductAttribute($attributeCode); } /** * Add visible filter to Product Collection * * @deprecated remove on new builds * @param Mage_Eav_Model_Entity_Collection_Abstract $collection * @return Mage_Catalog_Model_Product_Status */ public function addVisibleFilterToCollection(Mage_Eav_Model_Entity_Collection_Abstract $collection) { //$collection->addAttributeToFilter('status', array('in'=>$this->getVisibleStatusIds())); return $this; } /** * Add saleable filter to Product Collection * * @deprecated remove on new builds * @param Mage_Eav_Model_Entity_Collection_Abstract $collection * @return Mage_Catalog_Model_Product_Status */ public function addSaleableFilterToCollection(Mage_Eav_Model_Entity_Collection_Abstract $collection) { //$collection->addAttributeToFilter('status', array('in'=>$this->getSaleableStatusIds())); return $this; } /** * Retrieve Visible Status Ids * * @return array */ public function getVisibleStatusIds() { return array(self::STATUS_ENABLED); } /** * Retrieve Saleable Status Ids * Default Product Enable status * * @return array */ public function getSaleableStatusIds() { return array(self::STATUS_ENABLED); } /** * Retrieve option array * * @return array */ static public function getOptionArray() { return array( self::STATUS_ENABLED => Mage::helper('catalog')->__('Enabled'), self::STATUS_DISABLED => Mage::helper('catalog')->__('Disabled') ); } /** * Retrieve option array with empty value * * @return array */ static public function getAllOption() { $options = self::getOptionArray(); array_unshift($options, array('value'=>'', 'label'=>'')); return $options; } /** * Retrieve option array with empty value * * @return array */ static public function getAllOptions() { $res = array( array( 'value' => '', 'label' => Mage::helper('catalog')->__('-- Please Select --') ) ); foreach (self::getOptionArray() as $index => $value) { $res[] = array( 'value' => $index, 'label' => $value ); } return $res; } /** * Retrieve option text by option value * * @param string $optionId * @return string */ static public function getOptionText($optionId) { $options = self::getOptionArray(); return isset($options[$optionId]) ? $options[$optionId] : null; } /** * Update status value for product * * @param int $productId * @param int $storeId * @param int $value * @return Mage_Catalog_Model_Product_Status */ public function updateProductStatus($productId, $storeId, $value) { Mage::getSingleton('catalog/product_action') ->updateAttributes(array($productId), array('status' => $value), $storeId); // add back compatibility event $status = $this->_getResource()->getProductAttribute('status'); if ($status->isScopeWebsite()) { $website = Mage::app()->getStore($storeId)->getWebsite(); $stores = $website->getStoreIds(); } else if ($status->isScopeStore()) { $stores = array($storeId); } else { $stores = array_keys(Mage::app()->getStores()); } foreach ($stores as $storeId) { Mage::dispatchEvent('catalog_product_status_update', array( 'product_id' => $productId, 'store_id' => $storeId, 'status' => $value )); } return $this; } /** * Retrieve Product(s) status for store * Return array where key is product, value - status * * @param int|array $productIds * @param int $storeId * @return array */ public function getProductStatus($productIds, $storeId = null) { return $this->getResource()->getProductStatus($productIds, $storeId); } /** * ---------------- Eav Source methods for Flat data ----------------------- */ /** * Retrieve flat column definition * * @return array */ public function getFlatColums() { return array(); } /** * Retrieve Indexes for Flat * * @return array */ public function getFlatIndexes() { return array(); } /** * Retrieve Select For Flat Attribute update * * @param Mage_Eav_Model_Entity_Attribute_Abstract $attribute * @param int $store * @return Varien_Db_Select|null */ public function getFlatUpdateSelect($store) { return null; } /** * Set attribute instance * * @param Mage_Catalog_Model_Resource_Eav_Attribute $attribute * @return Mage_Eav_Model_Entity_Attribute_Frontend_Abstract */ public function setAttribute($attribute) { $this->_attribute = $attribute; return $this; } /** * Get attribute instance * * @return Mage_Catalog_Model_Resource_Eav_Attribute */ public function getAttribute() { return $this->_attribute; } /** * Add Value Sort To Collection Select * * @param Mage_Eav_Model_Entity_Collection_Abstract $collection * @param string $dir direction * @return Mage_Eav_Model_Entity_Attribute_Source_Abstract */ public function addValueSortToCollection($collection, $dir = 'asc') { $attributeCode = $this->getAttribute()->getAttributeCode(); $attributeId = $this->getAttribute()->getId(); $attributeTable = $this->getAttribute()->getBackend()->getTable(); if ($this->getAttribute()->isScopeGlobal()) { $tableName = $attributeCode . '_t'; $collection->getSelect() ->joinLeft( array($tableName => $attributeTable), "e.entity_id={$tableName}.entity_id" . " AND {$tableName}.attribute_id='{$attributeId}'" . " AND {$tableName}.store_id='0'", array()); $valueExpr = $tableName . '.value'; } else { $valueTable1 = $attributeCode . '_t1'; $valueTable2 = $attributeCode . '_t2'; $collection->getSelect() ->joinLeft( array($valueTable1 => $attributeTable), "e.entity_id={$valueTable1}.entity_id" . " AND {$valueTable1}.attribute_id='{$attributeId}'" . " AND {$valueTable1}.store_id='0'", array()) ->joinLeft( array($valueTable2 => $attributeTable), "e.entity_id={$valueTable2}.entity_id" . " AND {$valueTable2}.attribute_id='{$attributeId}'" . " AND {$valueTable2}.store_id='{$collection->getStoreId()}'", array() ); $valueExpr = $collection->getConnection()->getCheckSql( $valueTable2 . '.value_id > 0', $valueTable2 . '.value', $valueTable1 . '.value' ); } $collection->getSelect()->order($valueExpr . ' ' . $dir); return $this; } }