getRequest()->isDispatched()) { return; } $this->_session = Mage::getSingleton('customer/session'); if (!$this->_session->authenticate($this)) { $this->setFlag('', 'no-dispatch', true); } Mage::register('current_customer', $this->_session->getCustomer()); } /** * Profiles listing */ public function indexAction() { $this->_title($this->__('Recurring Profiles')); $this->loadLayout(); $this->_initLayoutMessages('customer/session'); $this->renderLayout(); } /** * Profile main view */ public function viewAction() { $this->_viewAction(); } /** * Profile history view */ // TODO: implement // public function historyAction() // { // $this->_viewAction(); // } /** * Profile related orders view */ public function ordersAction() { $this->_viewAction(); } /** * Profile payment gateway info view */ // TODO: implement // public function vendorAction() // { // $this->_viewAction(); // } /** * Attempt to set profile state */ public function updateStateAction() { $profile = null; try { $profile = $this->_initProfile(); switch ($this->getRequest()->getParam('action')) { case 'cancel': $profile->cancel(); break; case 'suspend': $profile->suspend(); break; case 'activate': $profile->activate(); break; } $this->_session->addSuccess($this->__('The profile state has been updated.')); } catch (Mage_Core_Exception $e) { $this->_session->addError($e->getMessage()); } catch (Exception $e) { $this->_session->addError($this->__('Failed to update the profile.')); Mage::logException($e); } if ($profile) { $this->_redirect('*/*/view', array('profile' => $profile->getId())); } else { $this->_redirect('*/*/'); } } /** * Fetch an update with profile */ public function updateProfileAction() { $profile = null; try { $profile = $this->_initProfile(); $profile->fetchUpdate(); if ($profile->hasDataChanges()) { $profile->save(); $this->_session->addSuccess($this->__('The profile has been updated.')); } else { $this->_session->addNotice($this->__('The profile has no changes.')); } } catch (Mage_Core_Exception $e) { $this->_session->addError($e->getMessage()); } catch (Exception $e) { $this->_session->addError($this->__('Failed to update the profile.')); Mage::logException($e); } if ($profile) { $this->_redirect('*/*/view', array('profile' => $profile->getId())); } else { $this->_redirect('*/*/'); } } /** * Generic profile view action */ protected function _viewAction() { try { $profile = $this->_initProfile(); $this->_title($this->__('Recurring Profiles'))->_title($this->__('Profile #%s', $profile->getReferenceId())); $this->loadLayout(); $this->_initLayoutMessages('customer/session'); $navigationBlock = $this->getLayout()->getBlock('customer_account_navigation'); if ($navigationBlock) { $navigationBlock->setActive('sales/recurring_profile/'); } $this->renderLayout(); return; } catch (Mage_Core_Exception $e) { $this->_session->addError($e->getMessage()); } catch (Exception $e) { Mage::logException($e); } $this->_redirect('*/*/'); } /** * Instantiate current profile and put it into registry * * @return Mage_Sales_Model_Recurring_Profile * @throws Mage_Core_Exception */ protected function _initProfile() { /** @var Mage_Sales_Model_Recurring_Profile $profile */ $profile = Mage::getModel('sales/recurring_profile')->load($this->getRequest()->getParam('profile')); if (!$profile->getId() || $this->_session->getCustomerId() != $profile->getCustomerId()) { Mage::throwException($this->__('Specified profile does not exist.')); } Mage::register('current_recurring_profile', $profile); return $profile; } }