/** * Manages the after_save observer * @param Varien_Event_Observer $o * @return TBT_Rewards_Model_Review_Observer */ public function afterSaveReview(Varien_Event_Observer $o) { $review = $this->_wrapperModel->wrap($o->getEvent()->getDataObject()); //If the review becomes approved, approve all associated pending tranfser if ($this->oldData['status_id'] == Mage_Review_Model_Review::STATUS_PENDING && $review->isApproved()) { $review->approvePendingTransfers(); } elseif ($this->oldData['status_id'] == Mage_Review_Model_Review::STATUS_PENDING && $review->isNotApproved()) { $review->discardPendingTransfers(); //If the review is new (hence not having an id before) get applicable rules, //and create a pending transfer for each one } elseif ($review->getReview()->getReviewId() && !isset($this->oldData['review_id'])) { $review->ifNewReview(); } return $this; }
/** * Do the points transfer for the review * * @param TBT_Rewards_Model_Review_Wrapper $review * @param int $rule : Special Rule * @return boolean : whether or not the point-transfer succeeded */ public function transferReviewPoints($review, $rule) { $num_points = $rule->getPointsAmount(); $currency_id = $rule->getPointsCurrencyId(); $review_id = $review->getId(); $rule_id = $rule->getId(); $transfer = $this->initTransfer($num_points, $currency_id, $rule_id); if (!$transfer) { return false; } // get the default starting status - usually Pending if (!$transfer->setStatus(null, Mage::helper('rewards/config')->getInitialTransferStatusAfterReview())) { // we tried to use an invalid status... is getInitialTransferStatusAfterReview() improper ?? return false; } $transfer->setReviewId($review_id)->setComments(Mage::getStoreConfig('rewards/transferComments/reviewOrRatingEarned'))->setCustomerId(Mage::getModel('review/review')->load($review_id)->getCustomerId())->save(); return true; }