Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Option_Value Class Reference

Inheritance diagram for Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Option_Value:

Mage_Core_Model_Mysql4_Abstract Mage_Core_Model_Resource_Abstract

List of all members.

Public Member Functions

 deleteValue ($option_id)
 deleteValues ($option_type_id)
 duplicate (Mage_Catalog_Model_Product_Option_Value $object, $oldOptionId, $newOptionId)

Protected Member Functions

 _construct ()
 _afterSave (Mage_Core_Model_Abstract $object)


Detailed Description

Definition at line 35 of file Value.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 Value.php.

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

_construct (  )  [protected]

Resource initialization

Reimplemented from Mage_Core_Model_Resource_Abstract.

Definition at line 37 of file Value.php.

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

deleteValue ( option_id  ) 

Definition at line 184 of file Value.php.

00185     {
00186         $condition = $this->_getWriteAdapter()->quoteInto('option_id=?', $option_id);
00187 
00188         $statement = $this->_getReadAdapter()->select()
00189             ->from($this->getTable('catalog/product_option_type_value'))
00190             ->where($condition);
00191 
00192         foreach ($this->_getReadAdapter()->fetchAll($statement) as $optionType) {
00193             $this->deleteValues($optionType['option_type_id']);
00194         }
00195 
00196         $this->_getWriteAdapter()->delete(
00197             $this->getMainTable(),
00198             $condition
00199         );
00200 
00201         return $this;
00202     }

deleteValues ( option_type_id  ) 

Definition at line 204 of file Value.php.

00205     {
00206         $childCondition = $this->_getWriteAdapter()->quoteInto('option_type_id=?', $option_type_id);
00207         $this->_getWriteAdapter()->delete(
00208             $this->getTable('catalog/product_option_type_price'),
00209             $childCondition
00210         );
00211         $this->_getWriteAdapter()->delete(
00212             $this->getTable('catalog/product_option_type_title'),
00213             $childCondition
00214         );
00215     }

duplicate ( Mage_Catalog_Model_Product_Option_Value object,
oldOptionId,
newOptionId 
)

Duplicate product options value

Parameters:
Mage_Catalog_Model_Product_Option_Value $object
int $oldOptionId
int $newOptionId
Returns:
Mage_Catalog_Model_Product_Option_Value

Definition at line 225 of file Value.php.

00226     {
00227         $select = $this->_getReadAdapter()->select()
00228             ->from($this->getMainTable())
00229             ->where('option_id=?', $oldOptionId);
00230         $valueData = $this->_getReadAdapter()->fetchAll($select);
00231 
00232         $valueCond = array();
00233 
00234         foreach ($valueData as $data) {
00235             $optionTypeId = $data[$this->getIdFieldName()];
00236             unset($data[$this->getIdFieldName()]);
00237             $data['option_id'] = $newOptionId;
00238 
00239             $this->_getWriteAdapter()->insert($this->getMainTable(), $data);
00240             $valueCond[$optionTypeId] = $this->_getWriteAdapter()->lastInsertId();
00241         }
00242 
00243         unset($valueData);
00244 
00245         foreach ($valueCond as $oldTypeId => $newTypeId) {
00246             // price
00247             $table = $this->getTable('catalog/product_option_type_price');
00248             $sql = 'REPLACE INTO `' . $table . '` '
00249                 . 'SELECT NULL, ' . $newTypeId . ', `store_id`, `price`, `price_type`'
00250                 . 'FROM `' . $table . '` WHERE `option_type_id`=' . $oldTypeId;
00251             $this->_getWriteAdapter()->query($sql);
00252 
00253             // title
00254             $table = $this->getTable('catalog/product_option_type_title');
00255             $sql = 'REPLACE INTO `' . $table . '` '
00256                 . 'SELECT NULL, ' . $newTypeId . ', `store_id`, `title`'
00257                 . 'FROM `' . $table . '` WHERE `option_type_id`=' . $oldTypeId;
00258             $this->_getWriteAdapter()->query($sql);
00259         }
00260 
00261         return $object;
00262     }


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