Commit | Line | Data |
---|---|---|
ca809bb6 | 1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
4 | | CiviCRM version 5 | | |
5 | +--------------------------------------------------------------------+ | |
6 | | Copyright CiviCRM LLC (c) 2004-2019 | | |
7 | +--------------------------------------------------------------------+ | |
8 | | This file is a part of CiviCRM. | | |
9 | | | | |
10 | | CiviCRM is free software; you can copy, modify, and distribute it | | |
11 | | under the terms of the GNU Affero General Public License | | |
12 | | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. | | |
13 | | | | |
14 | | CiviCRM is distributed in the hope that it will be usefusul, but | | |
15 | | WITHOUT ANY WARRANTY; without even the implied warranty of | | |
16 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | | |
17 | | See the GNU Affero General Public License for more details. | | |
18 | | | | |
19 | | You should have received a copy of the GNU Affero General Public | | |
20 | | License and the CiviCRM Licensing Exception along | | |
21 | | with this program; if not, contact CiviCRM LLC | | |
22 | | at info[AT]civicrm[DOT]org. If you have questions about the | | |
23 | | GNU Affero General Public License or the licensing of CiviCRM, | | |
24 | | see the CiviCRM license FAQ at http://civicrm.org/licensing | | |
25 | +--------------------------------------------------------------------+ | |
26 | */ | |
27 | ||
28 | /** | |
29 | * | |
30 | * @package CRM | |
31 | * @copyright CiviCRM LLC (c) 2004-2019 | |
32 | */ | |
33 | ||
34 | /** | |
35 | * Shared parent class for recurring contribution forms. | |
36 | */ | |
37 | class CRM_Contribute_Form_ContributionRecur extends CRM_Core_Form { | |
38 | ||
379d6cd7 | 39 | use CRM_Core_Form_EntityFormTrait; |
40 | ||
ca809bb6 | 41 | /** |
5ba7d840 | 42 | * Contribution ID. |
43 | * | |
44 | * @var int | |
ca809bb6 | 45 | */ |
46 | protected $_coid = NULL; | |
47 | ||
48 | /** | |
5ba7d840 | 49 | * Contribution Recur ID. |
50 | * | |
51 | * @var int | |
ca809bb6 | 52 | */ |
53 | protected $_crid = NULL; | |
54 | ||
1f17c8ef | 55 | /** |
56 | * The recurring contribution id, used when editing the recurring contribution. | |
57 | * | |
58 | * For historical reasons this duplicates _crid & since the name is more meaningful | |
59 | * we should probably deprecate $_crid. | |
60 | * | |
61 | * @var int | |
62 | */ | |
63 | protected $contributionRecurID = NULL; | |
64 | ||
65 | /** | |
5ba7d840 | 66 | * Membership ID. |
67 | * | |
68 | * @var int | |
1f17c8ef | 69 | */ |
70 | protected $_mid = NULL; | |
71 | ||
71e680bd | 72 | /** |
73 | * Payment processor object. | |
74 | * | |
75 | * @var \CRM_Core_Payment | |
76 | */ | |
77 | protected $_paymentProcessorObj = NULL; | |
78 | ||
79 | /** | |
5ba7d840 | 80 | * Current payment processor. |
71e680bd | 81 | * |
5ba7d840 | 82 | * This includes a copy of the object in 'object' key for legacy reasons. |
83 | * | |
84 | * @var array | |
71e680bd | 85 | */ |
86 | public $_paymentProcessor = []; | |
87 | ||
379d6cd7 | 88 | /** |
89 | * Fields for the entity to be assigned to the template. | |
90 | * | |
91 | * Fields may have keys | |
92 | * - name (required to show in tpl from the array) | |
93 | * - description (optional, will appear below the field) | |
94 | * - not-auto-addable - this class will not attempt to add the field using addField. | |
95 | * (this will be automatically set if the field does not have html in it's metadata | |
96 | * or is not a core field on the form's entity). | |
97 | * - help (option) add help to the field - e.g ['id' => 'id-source', 'file' => 'CRM/Contact/Form/Contact']] | |
98 | * - template - use a field specific template to render this field | |
99 | * @var array | |
100 | */ | |
101 | protected $entityFields = []; | |
102 | ||
503699d5 | 103 | /** |
104 | * Details of the subscription (recurring contribution) to be altered. | |
105 | * | |
106 | * @var array | |
107 | */ | |
108 | protected $subscriptionDetails = []; | |
109 | ||
6a719e23 | 110 | /** |
d5c59a00 | 111 | * Is the form being accessed by a front end user to update their own recurring. |
6a719e23 SL |
112 | * |
113 | * @var bool | |
114 | */ | |
115 | protected $selfService; | |
116 | ||
ca809bb6 | 117 | /** |
118 | * Explicitly declare the entity api name. | |
119 | */ | |
120 | public function getDefaultEntity() { | |
121 | return 'ContributionRecur'; | |
122 | } | |
123 | ||
124 | /** | |
125 | * Explicitly declare the form context. | |
126 | */ | |
127 | public function getDefaultContext() { | |
128 | return 'create'; | |
129 | } | |
130 | ||
f1105edc | 131 | /** |
132 | * Get the entity id being edited. | |
133 | * | |
134 | * @return int|null | |
135 | */ | |
136 | public function getEntityId() { | |
137 | return $this->contributionRecurID; | |
138 | } | |
139 | ||
1f17c8ef | 140 | /** |
141 | * Set variables up before form is built. | |
503699d5 | 142 | * |
143 | * @throws \CRM_Core_Exception | |
1f17c8ef | 144 | */ |
145 | public function preProcess() { | |
379d6cd7 | 146 | $this->setAction(CRM_Core_Action::UPDATE); |
1f17c8ef | 147 | $this->_mid = CRM_Utils_Request::retrieve('mid', 'Integer', $this, FALSE); |
148 | $this->_crid = CRM_Utils_Request::retrieve('crid', 'Integer', $this, FALSE); | |
149 | $this->contributionRecurID = $this->_crid; | |
150 | $this->_coid = CRM_Utils_Request::retrieve('coid', 'Integer', $this, FALSE); | |
503699d5 | 151 | $this->setSubscriptionDetails(); |
71e680bd | 152 | $this->setPaymentProcessor(); |
503699d5 | 153 | if ($this->getSubscriptionContactID()) { |
154 | $this->set('cid', $this->getSubscriptionContactID()); | |
155 | } | |
71e680bd | 156 | } |
157 | ||
158 | /** | |
159 | * Set the payment processor object up. | |
160 | * | |
161 | * This is a function that needs to be better consolidated between the inheriting forms | |
162 | * but this is good choice of function to call. | |
163 | */ | |
164 | protected function setPaymentProcessor() { | |
165 | if ($this->_crid) { | |
166 | $this->_paymentProcessor = CRM_Contribute_BAO_ContributionRecur::getPaymentProcessor($this->contributionRecurID); | |
167 | if (!$this->_paymentProcessor) { | |
168 | CRM_Core_Error::statusBounce(ts('There is no valid processor for this subscription so it cannot be updated')); | |
169 | } | |
170 | $this->_paymentProcessorObj = $this->_paymentProcessor['object']; | |
171 | } | |
703235f6 | 172 | elseif ($this->_mid) { |
173 | $this->_paymentProcessorObj = CRM_Financial_BAO_PaymentProcessor::getProcessorForEntity($this->_mid, 'membership', 'obj'); | |
174 | $this->_paymentProcessor = $this->_paymentProcessorObj->getPaymentProcessor(); | |
175 | } | |
1f17c8ef | 176 | } |
177 | ||
503699d5 | 178 | /** |
179 | * Set the subscription details on the form. | |
180 | */ | |
181 | protected function setSubscriptionDetails() { | |
182 | if ($this->contributionRecurID) { | |
183 | $this->subscriptionDetails = $this->_subscriptionDetails = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($this->_crid); | |
184 | } | |
185 | elseif ($this->_coid) { | |
186 | $this->subscriptionDetails = $this->_subscriptionDetails = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($this->_coid, 'contribution'); | |
187 | } | |
703235f6 | 188 | elseif ($this->_mid) { |
189 | $this->subscriptionDetails = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($this->_mid, 'membership'); | |
190 | } | |
191 | // This is being set temporarily - we should eventually just use the getter fn. | |
192 | $this->_subscriptionDetails = $this->subscriptionDetails; | |
503699d5 | 193 | } |
194 | ||
195 | /** | |
196 | * Get details for the recurring contribution being altered. | |
197 | * | |
198 | * @return array | |
199 | */ | |
200 | public function getSubscriptionDetails() { | |
201 | return $this->subscriptionDetails; | |
202 | } | |
203 | ||
204 | /** | |
205 | * Get the contact ID for the subscription. | |
206 | * | |
207 | * @return int|false | |
208 | */ | |
209 | protected function getSubscriptionContactID() { | |
210 | $sub = $this->getSubscriptionDetails(); | |
211 | return isset($sub->contact_id) ? $sub->contact_id : FALSE; | |
212 | } | |
213 | ||
6a719e23 SL |
214 | /** |
215 | * Is this being used by a front end user to update their own recurring. | |
216 | * | |
217 | * @return bool | |
218 | */ | |
219 | protected function isSelfService() { | |
220 | if (!is_null($this->selfService)) { | |
221 | return $this->selfService; | |
222 | } | |
223 | $this->selfService = FALSE; | |
224 | if (!CRM_Core_Permission::check('edit contributions')) { | |
225 | if ($this->_subscriptionDetails->contact_id != $this->getContactID()) { | |
226 | CRM_Core_Error::statusBounce(ts('You do not have permission to cancel this recurring contribution.')); | |
227 | } | |
228 | $this->selfService = TRUE; | |
229 | } | |
230 | return $this->selfService; | |
231 | } | |
232 | ||
ca809bb6 | 233 | } |