Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Option Class Reference

Inheritance diagram for Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Option:

Mage_Core_Model_Mysql4_Abstract Mage_Core_Model_Resource_Abstract

List of all members.

Public Member Functions

 deletePrices ($option_id)
 deleteTitles ($option_id)
 duplicate (Mage_Catalog_Model_Product_Option $object, $oldProductId, $newProductId)
 getSearchableData ($productId, $storeId)

Protected Member Functions

 _construct ()
 _afterSave (Mage_Core_Model_Abstract $object)


Detailed Description

Definition at line 35 of file Option.php.


Member Function Documentation

_afterSave ( Mage_Core_Model_Abstract object  )  [protected]

Perform actions after object save

Parameters:
Varien_Object $object

Reimplemented from Mage_Core_Model_Mysql4_Abstract.

Definition at line 42 of file Option.php.

00043     {
00044         $priceTable = $this->getTable('catalog/product_option_price');
00045         $titleTable = $this->getTable('catalog/product_option_title');
00046 
00047         //better to check param 'price' and 'price_type' for saving. If there is not price scip saving price
00048         if ($object->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_FIELD
00049             || $object->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_AREA
00050             || $object->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_FILE
00051             || $object->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DATE
00052             || $object->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DATE_TIME
00053             || $object->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_TIME
00054         ) {
00055 
00056             //save for store_id = 0
00057             if (!$object->getData('scope', 'price')) {
00058                 $statement = $this->_getReadAdapter()->select()
00059                     ->from($priceTable)
00060                     ->where('option_id = '.$object->getId().' AND store_id = ?', 0);
00061                 if ($this->_getReadAdapter()->fetchOne($statement)) {
00062                     if ($object->getStoreId() == '0') {
00063                         $this->_getWriteAdapter()->update(
00064                             $priceTable,
00065                             array(
00066                                 'price' => $object->getPrice(),
00067                                 'price_type' => $object->getPriceType()
00068                             ),
00069                             $this->_getWriteAdapter()->quoteInto('option_id = '.$object->getId().' AND store_id = ?', 0)
00070                         );
00071                     }
00072                 } else {
00073                     $this->_getWriteAdapter()->insert(
00074                         $priceTable,
00075                         array(
00076                             'option_id' => $object->getId(),
00077                             'store_id' => 0,
00078                             'price' => $object->getPrice(),
00079                             'price_type' => $object->getPriceType()
00080                         )
00081                     );
00082                 }
00083             }
00084 
00085             $scope = (int) Mage::app()->getStore()->getConfig(Mage_Core_Model_Store::XML_PATH_PRICE_SCOPE);
00086 
00087             if ($object->getStoreId() != '0' && $scope == Mage_Core_Model_Store::PRICE_SCOPE_WEBSITE
00088                 && !$object->getData('scope', 'price')) {
00089 
00090                 $baseCurrency = Mage::app()->getBaseCurrencyCode();
00091 
00092                 $storeIds = $object->getProduct()->getStoreIds();
00093                 if (is_array($storeIds)) {
00094                     foreach ($storeIds as $storeId) {
00095                         if ($object->getPriceType() == 'fixed') {
00096                             $storeCurrency = Mage::app()->getStore($storeId)->getBaseCurrencyCode();
00097                             $rate = Mage::getModel('directory/currency')->load($baseCurrency)->getRate($storeCurrency);
00098                             if (!$rate) {
00099                                 $rate=1;
00100                             }
00101                             $newPrice = $object->getPrice() * $rate;
00102                         } else {
00103                             $newPrice = $object->getPrice();
00104                         }
00105                         $statement = $this->_getReadAdapter()->select()
00106                             ->from($priceTable)
00107                             ->where('option_id = '.$object->getId().' AND store_id = ?', $storeId);
00108 
00109                         if ($this->_getReadAdapter()->fetchOne($statement)) {
00110                             $this->_getWriteAdapter()->update(
00111                                 $priceTable,
00112                                 array(
00113                                     'price' => $newPrice,
00114                                     'price_type' => $object->getPriceType()
00115                                 ),
00116                                 $this->_getWriteAdapter()->quoteInto('option_id = '.$object->getId().' AND store_id = ?', $storeId)
00117                             );
00118                         } else {
00119                             $this->_getWriteAdapter()->insert(
00120                                 $priceTable,
00121                                 array(
00122                                     'option_id' => $object->getId(),
00123                                     'store_id' => $storeId,
00124                                     'price' => $newPrice,
00125                                     'price_type' => $object->getPriceType()
00126                                 )
00127                             );
00128                         }
00129                     }// end foreach()
00130                 }
00131             } elseif ($scope == Mage_Core_Model_Store::PRICE_SCOPE_WEBSITE && $object->getData('scope', 'price')) {
00132                 $this->_getWriteAdapter()->delete(
00133                     $priceTable,
00134                     $this->_getWriteAdapter()->quoteInto('option_id = '.$object->getId().' AND store_id = ?', $object->getStoreId())
00135                 );
00136             }
00137         }
00138 
00139         //title
00140         if (!$object->getData('scope', 'title')) {
00141             $statement = $this->_getReadAdapter()->select()
00142                 ->from($titleTable)
00143                 ->where('option_id = '.$object->getId().' and store_id = ?', 0);
00144 
00145             if ($this->_getReadAdapter()->fetchOne($statement)) {
00146                 if ($object->getStoreId() == '0') {
00147                     $this->_getWriteAdapter()->update(
00148                         $titleTable,
00149                             array('title' => $object->getTitle()),
00150                             $this->_getWriteAdapter()->quoteInto('option_id='.$object->getId().' AND store_id=?', 0)
00151                     );
00152                 }
00153             } else {
00154                 $this->_getWriteAdapter()->insert(
00155                     $titleTable,
00156                         array(
00157                             'option_id' => $object->getId(),
00158                             'store_id' => 0,
00159                             'title' => $object->getTitle()
00160                 ));
00161             }
00162         }
00163 
00164         if ($object->getStoreId() != '0' && !$object->getData('scope', 'title')) {
00165             $statement = $this->_getReadAdapter()->select()
00166                 ->from($titleTable)
00167                 ->where('option_id = '.$object->getId().' and store_id = ?', $object->getStoreId());
00168 
00169             if ($this->_getReadAdapter()->fetchOne($statement)) {
00170                 $this->_getWriteAdapter()->update(
00171                     $titleTable,
00172                         array('title' => $object->getTitle()),
00173                         $this->_getWriteAdapter()
00174                             ->quoteInto('option_id='.$object->getId().' AND store_id=?', $object->getStoreId()));
00175             } else {
00176                 $this->_getWriteAdapter()->insert(
00177                     $titleTable,
00178                         array(
00179                             'option_id' => $object->getId(),
00180                             'store_id' => $object->getStoreId(),
00181                             'title' => $object->getTitle()
00182                 ));
00183             }
00184         } elseif ($object->getData('scope', 'title')) {
00185             $this->_getWriteAdapter()->delete(
00186                 $titleTable,
00187                 $this->_getWriteAdapter()->quoteInto('option_id = '.$object->getId().' AND store_id = ?', $object->getStoreId())
00188             );
00189         }
00190 
00191         return parent::_afterSave($object);
00192     }

_construct (  )  [protected]

Resource initialization

Reimplemented from Mage_Core_Model_Resource_Abstract.

Definition at line 37 of file Option.php.

00038     {
00039         $this->_init('catalog/product_option', 'option_id');
00040     }

deletePrices ( option_id  ) 

Definition at line 194 of file Option.php.

00195     {
00196         $condition = $this->_getWriteAdapter()->quoteInto('option_id=?', $option_id);
00197 
00198         $this->_getWriteAdapter()->delete(
00199             $this->getTable('catalog/product_option_price'),
00200             $condition);
00201 
00202         return $this;
00203     }

deleteTitles ( option_id  ) 

Definition at line 205 of file Option.php.

00206     {
00207         $condition = $this->_getWriteAdapter()->quoteInto('option_id=?', $option_id);
00208 
00209         $this->_getWriteAdapter()->delete(
00210             $this->getTable('catalog/product_option_title'),
00211             $condition);
00212 
00213         return $this;
00214     }

duplicate ( Mage_Catalog_Model_Product_Option object,
oldProductId,
newProductId 
)

Duplicate custom options for product

Parameters:
Mage_Catalog_Model_Product_Option $object
int $oldProductId
int $newProductId
Returns:
Mage_Catalog_Model_Product_Option

Definition at line 224 of file Option.php.

00225     {
00226         $write  = $this->_getWriteAdapter();
00227         $read   = $this->_getReadAdapter();
00228 
00229         $optionsCond = array();
00230         $optionsData = array();
00231 
00232         // read and prepare original product options
00233         $select = $read->select()
00234             ->from($this->getTable('catalog/product_option'))
00235             ->where('product_id=?', $oldProductId);
00236         $query = $read->query($select);
00237         while ($row = $query->fetch()) {
00238             $optionsData[$row['option_id']] = $row;
00239             $optionsData[$row['option_id']]['product_id'] = $newProductId;
00240             unset($optionsData[$row['option_id']]['option_id']);
00241         }
00242 
00243         // insert options to duplicated product
00244         foreach ($optionsData as $oId => $data) {
00245             $write->insert($this->getMainTable(), $data);
00246             $optionsCond[$oId] = $write->lastInsertId();
00247         }
00248 
00249         // copy options prefs
00250         foreach ($optionsCond as $oldOptionId => $newOptionId) {
00251             // title
00252             $table = $this->getTable('catalog/product_option_title');
00253             $sql = 'REPLACE INTO `' . $table . '` '
00254                 . 'SELECT NULL, ' . $newOptionId . ', `store_id`, `title`'
00255                 . 'FROM `' . $table . '` WHERE `option_id`=' . $oldOptionId;
00256             $this->_getWriteAdapter()->query($sql);
00257 
00258             // price
00259             $table = $this->getTable('catalog/product_option_price');
00260             $sql = 'REPLACE INTO `' . $table . '` '
00261                 . 'SELECT NULL, ' . $newOptionId . ', `store_id`, `price`, `price_type`'
00262                 . 'FROM `' . $table . '` WHERE `option_id`=' . $oldOptionId;
00263             $this->_getWriteAdapter()->query($sql);
00264 
00265             $object->getValueInstance()->duplicate($oldOptionId, $newOptionId);
00266         }
00267 
00268         return $object;
00269     }

getSearchableData ( productId,
storeId 
)

Retrieve option searchable data

Parameters:
int $productId
int $storeId
Returns:
array

Definition at line 278 of file Option.php.

00279     {
00280         $searchData = array();
00281         // retrieve options title
00282         $select = $this->_getReadAdapter()->select()
00283             ->from(array('option' => $this->getMainTable()), null)
00284             ->join(
00285                 array('option_title_default' => $this->getTable('catalog/product_option_title')),
00286                 'option_title_default.option_id=option.option_id AND option_title_default.store_id=0',
00287                 array())
00288             ->joinLeft(
00289                 array('option_title_store' => $this->getTable('catalog/product_option_title')),
00290                 'option_title_store.option_id=option.option_id AND option_title_store.store_id=' . intval($storeId),
00291                 array('title' => 'IFNULL(option_title_store.title, option_title_default.title)'))
00292             ->where('option.product_id=?', $productId);
00293         if ($titles = $this->_getReadAdapter()->fetchCol($select)) {
00294             $searchData = array_merge($searchData, $titles);
00295         }
00296 
00297         //select option type titles
00298         $select = $this->_getReadAdapter()->select()
00299             ->from(array('option' => $this->getMainTable()), null)
00300             ->join(
00301                 array('option_type' => $this->getTable('catalog/product_option_type_value')),
00302                 'option_type.option_id=option.option_id',
00303                 array())
00304             ->join(
00305                 array('option_title_default' => $this->getTable('catalog/product_option_type_title')),
00306                 'option_title_default.option_type_id=option_type.option_type_id AND option_title_default.store_id=0',
00307                 array())
00308             ->joinLeft(
00309                 array('option_title_store' => $this->getTable('catalog/product_option_type_title')),
00310                 'option_title_store.option_type_id=option_type.option_type_id AND option_title_store.store_id=' . intval($storeId),
00311                 array('title' => 'IFNULL(option_title_store.title, option_title_default.title)'))
00312             ->where('option.product_id=?', $productId);
00313         if ($titles = $this->_getReadAdapter()->fetchCol($select)) {
00314             $searchData = array_merge($searchData, $titles);
00315         }
00316 
00317         return $searchData;
00318     }


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

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