1: <?php
2: /**
3: * Magento
4: *
5: * NOTICE OF LICENSE
6: *
7: * This source file is subject to the Open Software License (OSL 3.0)
8: * that is bundled with this package in the file LICENSE.txt.
9: * It is also available through the world-wide-web at this URL:
10: * http://opensource.org/licenses/osl-3.0.php
11: * If you did not receive a copy of the license and are unable to
12: * obtain it through the world-wide-web, please send an email
13: * to license@magentocommerce.com so we can send you a copy immediately.
14: *
15: * DISCLAIMER
16: *
17: * Do not edit or add to this file if you wish to upgrade Magento to newer
18: * versions in the future. If you wish to customize Magento for your
19: * needs please refer to http://www.magentocommerce.com for more information.
20: *
21: * @category Mage
22: * @package Mage_Payment
23: * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24: * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25: */
26:
27: /**
28: * Billing Agreement abstaract class
29: *
30: * @author Magento Core Team <core@magentocommerce.com>
31: */
32: abstract class Mage_Payment_Model_Billing_AgreementAbstract extends Mage_Core_Model_Abstract
33: {
34: /**
35: * Payment method instance
36: *
37: * @var Mage_Payment_Model_Method_Abstract
38: */
39: protected $_paymentMethodInstance = null;
40:
41: /**
42: * Billing Agreement Errors
43: *
44: * @var array
45: */
46: protected $_errors = array();
47:
48: /**
49: * Init billing agreement
50: *
51: */
52: abstract public function initToken();
53:
54: /**
55: * Verify billing agreement details
56: *
57: */
58: abstract public function verifyToken();
59:
60: /**
61: * Create billing agreement
62: *
63: */
64: abstract public function place();
65:
66: /**
67: * Cancel billing agreement
68: *
69: */
70: abstract public function cancel();
71:
72: /**
73: * Retreive payment method instance
74: *
75: * @return Mage_Payment_Model_Method_Abstract
76: */
77: public function getPaymentMethodInstance()
78: {
79: if (is_null($this->_paymentMethodInstance)) {
80: $this->_paymentMethodInstance = Mage::helper('payment')->getMethodInstance($this->getMethodCode());
81: }
82: if ($this->_paymentMethodInstance) {
83: $this->_paymentMethodInstance->setStore($this->getStoreId());
84: }
85: return $this->_paymentMethodInstance;
86: }
87:
88: /**
89: * Validate data before save
90: *
91: * @return bool
92: */
93: public function isValid()
94: {
95: $this->_errors = array();
96: if (is_null($this->getPaymentMethodInstance()) || !$this->getPaymentMethodInstance()->getCode()) {
97: $this->_errors[] = Mage::helper('payment')->__('Payment method code is not set.');
98: }
99: if (!$this->getReferenceId()) {
100: $this->_errors[] = Mage::helper('payment')->__('Reference ID is not set.');
101: }
102: return empty($this->_errors);
103: }
104:
105: /**
106: * Before save, it's overriden just to make data validation on before save event
107: *
108: * @throws Mage_Core_Exception
109: * @return Mage_Core_Model_Abstract
110: */
111: protected function _beforeSave()
112: {
113: if ($this->isValid()) {
114: return parent::_beforeSave();
115: }
116: array_unshift($this->_errors, Mage::helper('payment')->__('Unable to save Billing Agreement:'));
117: throw new Mage_Core_Exception(implode(' ', $this->_errors));
118: }
119: }
120: