Commit | Line | Data |
---|---|---|
1d1fee72 | 1 | <?php |
2 | /* | |
3 | +--------------------------------------------------------------------+ | |
4 | | CiviCRM version 4.7 | | |
5 | +--------------------------------------------------------------------+ | |
fa938177 | 6 | | Copyright CiviCRM LLC (c) 2004-2016 | |
1d1fee72 | 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 useful, 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 | |
fa938177 | 31 | * @copyright CiviCRM LLC (c) 2004-2016 |
1d1fee72 | 32 | */ |
33 | class CRM_Core_Payment_Manual extends CRM_Core_Payment { | |
34 | ||
35 | protected $result; | |
36 | ||
37 | /** | |
38 | * This function checks to see if we have the right config values. | |
1d1fee72 | 39 | */ |
f48e6cf7 | 40 | public function checkConfig() {} |
1d1fee72 | 41 | |
42 | /** | |
43 | * Get billing fields required for this processor. | |
44 | * | |
45 | * We apply the existing default of returning fields only for payment processor type 1. Processors can override to | |
46 | * alter. | |
47 | * | |
48 | * @param int $billingLocationID | |
49 | * | |
50 | * @return array | |
51 | */ | |
52 | public function getBillingAddressFields($billingLocationID = NULL) { | |
53 | if (!$billingLocationID) { | |
54 | // Note that although the billing id is passed around the forms the idea that it would be anything other than | |
55 | // the result of the function below doesn't seem to have eventuated. | |
56 | // So taking this as a param is possibly something to be removed in favour of the standard default. | |
57 | $billingLocationID = CRM_Core_BAO_LocationType::getBilling(); | |
58 | } | |
59 | ||
60 | // Only handle pseudo-profile billing for now. | |
61 | if ($this->billingProfile == 'billing') { | |
62 | // @todo - use profile api to retrieve this - either as pseudo-profile or (better) set up billing | |
63 | // as a reserved profile in the DB and (even better) allow the profile to be selected | |
64 | // on the form instead of just 'billing for pay=later bool' | |
65 | return array( | |
66 | 'first_name' => 'billing_first_name', | |
67 | 'middle_name' => 'billing_middle_name', | |
68 | 'last_name' => 'billing_last_name', | |
69 | 'street_address' => "billing_street_address-{$billingLocationID}", | |
70 | 'city' => "billing_city-{$billingLocationID}", | |
71 | 'country' => "billing_country_id-{$billingLocationID}", | |
72 | 'state_province' => "billing_state_province_id-{$billingLocationID}", | |
73 | 'postal_code' => "billing_postal_code-{$billingLocationID}", | |
74 | ); | |
75 | } | |
76 | else { | |
77 | return array(); | |
78 | } | |
79 | } | |
80 | ||
81 | /** | |
82 | * Get array of fields that should be displayed on the payment form. | |
83 | * | |
84 | * @return array | |
85 | */ | |
86 | public function getPaymentFormFields() { | |
87 | return array(); | |
88 | } | |
89 | /** | |
90 | * Process payment. | |
91 | * | |
92 | * The function ensures an exception is thrown & moves some of this logic out of the form layer and makes the forms | |
93 | * more agnostic. | |
94 | * | |
95 | * @param array $params | |
96 | * | |
97 | * @param string $component | |
98 | * | |
99 | * @return array | |
100 | * Result array | |
101 | * | |
102 | * @throws \Civi\Payment\Exception\PaymentProcessorException | |
103 | */ | |
104 | public function doPayment(&$params, $component = 'contribute') { | |
105 | $params['payment_status_id'] = $this->getResult(); | |
106 | return $params; | |
107 | } | |
108 | ||
109 | /** | |
110 | * Get the result of the payment. | |
111 | * | |
112 | * Usually this will be pending but the calling layer has a chance to set the result. | |
113 | * | |
114 | * This would apply in particular when the form accepts status id. | |
115 | * | |
116 | * Note that currently this payment class is only being used to manage the 'billing block' aspect | |
117 | * of pay later. However, a longer term idea is that by treating 'pay-later' as 'just another processor' | |
118 | * will allow code simplification. | |
119 | * | |
120 | * @return int | |
121 | */ | |
122 | protected function getResult() { | |
123 | if (!$this->result) { | |
124 | $this->setResult(CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'status_id', 'Pending')); | |
125 | } | |
126 | return $this->result; | |
127 | } | |
128 | ||
129 | /** | |
130 | * Set the result to be returned. | |
131 | * | |
132 | * This would be set from outside the function where we want to pass on the status from the form. | |
133 | * | |
134 | * @param int $result | |
135 | */ | |
136 | public function setResult($result) { | |
137 | $this->result = $result; | |
138 | } | |
139 | ||
140 | /** | |
141 | * Get the name of the payment type. | |
142 | * | |
143 | * @return string | |
144 | */ | |
145 | public function getPaymentTypeName() { | |
146 | return 'pay-later'; | |
147 | } | |
148 | ||
149 | /** | |
150 | * Get the name of the payment type. | |
151 | * | |
152 | * @return string | |
153 | */ | |
154 | public function getPaymentTypeLabel() { | |
155 | return ''; | |
156 | } | |
f48e6cf7 | 157 | |
ecb7ec32 | 158 | /** |
159 | * Declare that more than one payment can be processed at once. | |
160 | * | |
161 | * @return bool | |
162 | */ | |
163 | protected function supportsMultipleConcurrentPayments() { | |
164 | return TRUE; | |
165 | } | |
166 | ||
95974e8e DG |
167 | /** |
168 | * Checks if backoffice recurring edit is allowed | |
169 | * | |
170 | * @return bool | |
171 | */ | |
172 | public function supportsEditRecurringContribution() { | |
173 | return TRUE; | |
174 | } | |
175 | ||
176 | /** | |
3e473c0b | 177 | * Submit a manual payment. |
95974e8e DG |
178 | * |
179 | * @param array $params | |
180 | * Assoc array of input parameters for this transaction. | |
3e473c0b | 181 | * |
182 | * @return array | |
95974e8e DG |
183 | */ |
184 | public function doDirectPayment(&$params) { | |
185 | $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id'); | |
186 | if ($params['is_pay_later']) { | |
187 | $result['payment_status_id'] = array_search('Pending', $statuses); | |
188 | } | |
189 | else { | |
190 | $result['payment_status_id'] = array_search('Completed', $statuses); | |
191 | } | |
3e473c0b | 192 | return $result; |
95974e8e DG |
193 | } |
194 | ||
cd3bc162 | 195 | /** |
196 | * Should a receipt be sent out for a pending payment. | |
197 | * | |
198 | * e.g for traditional pay later & ones with a delayed settlement a pending receipt makes sense. | |
199 | */ | |
200 | public function isSendReceiptForPending() { | |
201 | return TRUE; | |
202 | } | |
203 | ||
1d1fee72 | 204 | } |