Mage_Rating_Model_Mysql4_Rating Class Reference

Inheritance diagram for Mage_Rating_Model_Mysql4_Rating:

Mage_Core_Model_Mysql4_Abstract Mage_Core_Model_Resource_Abstract

List of all members.

Public Member Functions

 _construct ()
 getEntitySummary ($object, $onlyForCurrentStore=true)
 getReviewSummary ($object, $onlyForCurrentStore=true)

Protected Member Functions

 _initUniqueFields ()
 _getLoadSelect ($field, $value, $object)
 _afterLoad (Mage_Core_Model_Abstract $object)
 _afterSave (Mage_Core_Model_Abstract $object)


Detailed Description

Definition at line 35 of file Rating.php.


Member Function Documentation

_afterLoad ( Mage_Core_Model_Abstract object  )  [protected]

Perform actions after object load

Parameters:
Varien_Object $object

Reimplemented from Mage_Core_Model_Mysql4_Abstract.

Definition at line 69 of file Rating.php.

00069                                                                     {
00070         parent::_afterLoad($object);
00071         $select = $this->_getReadAdapter()->select()
00072             ->from($this->getTable('rating_title'))
00073             ->where('rating_id=?', $object->getId());
00074 
00075         $data = $this->_getReadAdapter()->fetchAll($select);
00076         $storeCodes = array();
00077         foreach ($data as $row) {
00078             $storeCodes[$row['store_id']] = $row['value'];
00079         }
00080         if(sizeof($storeCodes)>0) {
00081             $object->setRatingCodes($storeCodes);
00082         }
00083 
00084         $storesSelect = $this->_getReadAdapter()->select()
00085             ->from($this->getTable('rating_store'))
00086             ->where('rating_id=?', $object->getId());
00087 
00088         $stores = $this->_getReadAdapter()->fetchAll($storesSelect);
00089 
00090         $putStores = array();
00091         foreach ($stores as $store) {
00092             $putStores[] = $store['store_id'];
00093         }
00094 
00095         $object->setStores($putStores);
00096 
00097         return $this;
00098     }

_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 100 of file Rating.php.

00100                                                                     {
00101         parent::_afterSave($object);
00102 
00103         if($object->hasRatingCodes()) {
00104             try {
00105                 $this->_getWriteAdapter()->beginTransaction();
00106                 $condition = $this->_getWriteAdapter()->quoteInto('rating_id = ?', $object->getId());
00107                 $this->_getWriteAdapter()->delete($this->getTable('rating_title'), $condition);
00108                 if ($ratingCodes = $object->getRatingCodes()) {
00109                     foreach ($ratingCodes as $storeId=>$value) {
00110                         if(trim($value)=='') {
00111                             continue;
00112                         }
00113                         $data = new Varien_Object();
00114                         $data->setRatingId($object->getId())
00115                             ->setStoreId($storeId)
00116                             ->setValue($value);
00117                         $this->_getWriteAdapter()->insert($this->getTable('rating_title'), $data->getData());
00118                     }
00119                 }
00120                 $this->_getWriteAdapter()->commit();
00121             }
00122             catch (Exception $e) {
00123                 $this->_getWriteAdapter()->rollBack();
00124             }
00125         }
00126 
00127         if($object->hasStores()) {
00128             try {
00129                 $condition = $this->_getWriteAdapter()->quoteInto('rating_id = ?', $object->getId());
00130                 $this->_getWriteAdapter()->delete($this->getTable('rating_store'), $condition);
00131                 foreach ($object->getStores() as $storeId) {
00132                     $storeInsert = new Varien_Object();
00133                     $storeInsert->setStoreId($storeId);
00134                     $storeInsert->setRatingId($object->getId());
00135                     $this->_getWriteAdapter()->insert($this->getTable('rating_store'), $storeInsert->getData());
00136                 }
00137             }
00138             catch (Exception  $e) {
00139                 $this->_getWriteAdapter()->rollBack();
00140             }
00141         }
00142 
00143         return $this;
00144     }

_construct (  ) 

Resource initialization

Reimplemented from Mage_Core_Model_Resource_Abstract.

Definition at line 37 of file Rating.php.

00038     {
00039         $this->_init('rating/rating', 'rating_id');
00040     }

_getLoadSelect ( field,
value,
object 
) [protected]

Retrieve select object for load object data

Parameters:
string $field
mixed $value
Returns:
Zend_Db_Select

Reimplemented from Mage_Core_Model_Mysql4_Abstract.

Definition at line 56 of file Rating.php.

00057     {
00058         $read = $this->_getReadAdapter();
00059 
00060         $select = $read->select()
00061             ->from(array('main'=>$this->getMainTable()), array('rating_id', 'entity_id', 'position'))
00062             ->joinLeft(array('title'=>$this->getTable('rating_title')),
00063                           'main.rating_id=title.rating_id AND title.store_id = '. (int) Mage::getSingleton('core/store')->getId(),
00064                           array('IF(title.value IS NULL, main.rating_code, title.value) AS rating_code'))
00065             ->where('main.'.$field.'=?', $value);
00066         return $select;
00067     }

_initUniqueFields (  )  [protected]

Initialize unique fields

Returns:
Mage_Core_Model_Mysql4_Abstract

Reimplemented from Mage_Core_Model_Mysql4_Abstract.

Definition at line 47 of file Rating.php.

00048     {
00049         $this->_uniqueFields = array(array(
00050             'field' => 'rating_code',
00051             'title' => /* Mage::helper('rating')->__('Rating with the same title')*/ ''
00052         ));
00053         return $this;
00054     }

getEntitySummary ( object,
onlyForCurrentStore = true 
)

Definition at line 146 of file Rating.php.

00147     {
00148         $read = $this->_getReadAdapter();
00149         $sql = "SELECT
00150                     SUM({$this->getTable('rating_vote')}.percent) as sum,
00151                     COUNT(*) as count,
00152                     {$this->getTable('review/review_store')}.store_id
00153                 FROM
00154                     {$this->getTable('rating_vote')}
00155                 INNER JOIN
00156                     {$this->getTable('review/review')}
00157                     ON {$this->getTable('rating_vote')}.review_id={$this->getTable('review/review')}.review_id
00158                 LEFT JOIN
00159                     {$this->getTable('review/review_store')}
00160                     ON {$this->getTable('rating_vote')}.review_id={$this->getTable('review/review_store')}.review_id
00161                 INNER JOIN
00162                     {$this->getTable('rating/rating_store')} AS rst
00163                     ON rst.rating_id = {$this->getTable('rating_vote')}.rating_id AND rst.store_id = {$this->getTable('review/review_store')}.store_id
00164                 INNER JOIN
00165                     {$this->getTable('review/review_status')} AS review_status
00166                     ON {$this->getTable('review/review')}.status_id = review_status.status_id
00167                 WHERE
00168                     {$read->quoteInto($this->getTable('rating_vote').'.entity_pk_value=?', $object->getEntityPkValue())}
00169                     AND review_status.status_code = 'approved'
00170                 GROUP BY
00171                     {$this->getTable('rating_vote')}.entity_pk_value, {$this->getTable('review/review_store')}.store_id";
00172 
00173         $data = $read->fetchAll($sql);
00174 
00175 
00176         if($onlyForCurrentStore) {
00177             foreach ($data as $row) {
00178                 if($row['store_id']==Mage::app()->getStore()->getId()) {
00179                     $object->addData( $row );
00180                 }
00181             }
00182             return $object;
00183         }
00184 
00185         $result = array();
00186 
00187         //$stores = Mage::app()->getStore()->getResourceCollection()->load();
00188         $stores = Mage::getModel('core/store')->getResourceCollection()->load();
00189 
00190         foreach ($data as $row) {
00191             $clone = clone $object;
00192             $clone->addData( $row );
00193             $result[$clone->getStoreId()] = $clone;
00194         }
00195 
00196         $usedStoresId = array_keys($result);
00197 
00198         foreach ($stores as $store) {
00199                if (!in_array($store->getId(), $usedStoresId)) {
00200                     $clone = clone $object;
00201                     $clone->setCount(0);
00202                     $clone->setSum(0);
00203                     $clone->setStoreId($store->getId());
00204                     $result[$store->getId()] = $clone;
00205                }
00206         }
00207 
00208 
00209 
00210         return array_values($result);
00211     }

getReviewSummary ( object,
onlyForCurrentStore = true 
)

Definition at line 213 of file Rating.php.

00214     {
00215         $read = $this->_getReadAdapter();
00216         $sql = "SELECT
00217                     SUM({$this->getTable('rating_vote')}.percent) as sum,
00218                     COUNT(*) as count,
00219                     {$this->getTable('review/review_store')}.store_id
00220                 FROM
00221                     {$this->getTable('rating_vote')}
00222                 LEFT JOIN
00223                     {$this->getTable('review/review_store')}
00224                     ON {$this->getTable('rating_vote')}.review_id={$this->getTable('review/review_store')}.review_id
00225                 INNER JOIN
00226                     {$this->getTable('rating/rating_store')} AS rst
00227                     ON rst.rating_id = {$this->getTable('rating_vote')}.rating_id AND rst.store_id = {$this->getTable('review/review_store')}.store_id
00228                 WHERE
00229                     {$read->quoteInto($this->getTable('rating_vote').'.review_id=?', $object->getReviewId())}
00230                 GROUP BY
00231                     {$this->getTable('rating_vote')}.review_id, {$this->getTable('review/review_store')}.store_id";
00232 
00233         $data = $read->fetchAll($sql);
00234 
00235         if($onlyForCurrentStore) {
00236             foreach ($data as $row) {
00237                 if($row['store_id']==Mage::app()->getStore()->getId()) {
00238                     $object->addData( $row );
00239                 }
00240             }
00241             return $object;
00242         }
00243 
00244         $result = array();
00245 
00246         $stores = Mage::app()->getStore()->getResourceCollection()->load();
00247 
00248         foreach ($data as $row) {
00249             $clone = clone $object;
00250             $clone->addData( $row );
00251             $result[$clone->getStoreId()] = $clone;
00252         }
00253 
00254         $usedStoresId = array_keys($result);
00255 
00256         foreach ($stores as $store) {
00257                if (!in_array($store->getId(), $usedStoresId)) {
00258                    $clone = clone $object;
00259                 $clone->setCount(0);
00260                 $clone->setSum(0);
00261                 $clone->setStoreId($store->getId());
00262                 $result[$store->getId()] = $clone;
00263 
00264                }
00265         }
00266 
00267         return array_values($result);
00268     }


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

Generated on Sat Jul 4 17:24:35 2009 for Magento by  doxygen 1.5.8