Explicitly specify params so we can find problems with comparing translated labels
[civicrm-core.git] / CRM / Member / Page / RecurringContributions.php
CommitLineData
bf6b9888 1<?php
2
3/**
4 * Shows list of recurring contributions related to membership.
5 */
6class CRM_Member_Page_RecurringContributions extends CRM_Core_Page {
7
8 /**
9 * ID of the membership for which we need to see related recurring contributions.
10 *
11 * @var int
12 */
13 private $membershipID = NULL;
14
15 /**
16 * ID of the contact owner of the membership.
17 *
18 * @var int
19 */
20 public $contactID = NULL;
21
22 /**
23 * Builds list of recurring contributions associated to membership.
24 *
25 * @return null
26 */
27 public function run() {
28 $this->membershipID = CRM_Utils_Request::retrieve('membershipID', 'Positive', $this);
29 $this->contactID = CRM_Utils_Request::retrieve('cid', 'Positive', $this, TRUE);
30
31 $this->loadRecurringContributions();
32
33 return parent::run();
34 }
35
36 /**
37 * Loads recurring contributions and assigns them to the form, to be used on
38 * the template.
39 */
40 private function loadRecurringContributions() {
41 $recurringContributions = $this->getRecurContributions($this->membershipID);
42
43 if (!empty($recurringContributions)) {
44 $this->assign('recurRows', $recurringContributions);
45 $this->assign('recur', TRUE);
46 }
47 }
48
49 /**
50 * Obtains list of recurring contributions associated to a membership.
51 *
52 * @param int $membershipID
53 *
54 * @return array
55 */
56 private function getRecurContributions($membershipID) {
be2fb01f 57 $result = civicrm_api3('MembershipPayment', 'get', [
bf6b9888 58 'sequential' => 1,
59 'contribution_id.contribution_recur_id.id' => ['IS NOT NULL' => TRUE],
60 'options' => ['limit' => 0],
be2fb01f 61 'return' => [
bf6b9888 62 'contribution_id.contribution_recur_id.id',
63 'contribution_id.contribution_recur_id.contact_id',
64 'contribution_id.contribution_recur_id.start_date',
65 'contribution_id.contribution_recur_id.end_date',
66 'contribution_id.contribution_recur_id.next_sched_contribution_date',
67 'contribution_id.contribution_recur_id.amount',
68 'contribution_id.contribution_recur_id.currency',
69 'contribution_id.contribution_recur_id.frequency_unit',
70 'contribution_id.contribution_recur_id.frequency_interval',
71 'contribution_id.contribution_recur_id.installments',
72 'contribution_id.contribution_recur_id.contribution_status_id',
73 'contribution_id.contribution_recur_id.is_test',
74 'contribution_id.contribution_recur_id.payment_processor_id',
be2fb01f 75 ],
bf6b9888 76 'membership_id' => $membershipID,
be2fb01f
CW
77 ]);
78 $recurringContributions = [];
c3b82060 79 $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'label');
bf6b9888 80
81 foreach ($result['values'] as $payment) {
82 $recurringContributionID = $payment['contribution_id.contribution_recur_id.id'];
83 $alreadyProcessed = isset($recurringContributions[$recurringContributionID]);
84
85 if ($alreadyProcessed) {
86 continue;
87 }
88
89 foreach ($payment as $field => $value) {
be2fb01f 90 $key = strtr($field, ['contribution_id.contribution_recur_id.' => '']);
bf6b9888 91 $recurringContributions[$recurringContributionID][$key] = $value;
92 }
93
94 $contactID = $recurringContributions[$recurringContributionID]['contact_id'];
95 $contributionStatusID = $recurringContributions[$recurringContributionID]['contribution_status_id'];
96
97 $recurringContributions[$recurringContributionID]['id'] = $recurringContributionID;
98 $recurringContributions[$recurringContributionID]['contactId'] = $contactID;
99 $recurringContributions[$recurringContributionID]['contribution_status'] = CRM_Utils_Array::value($contributionStatusID, $contributionStatuses);
100
101 $this->setActionsForRecurringContribution($recurringContributionID, $recurringContributions[$recurringContributionID]);
102 }
103 return $recurringContributions;
104 }
105
106 /**
107 * Calculates and assigns the actions available for given recurring
108 * contribution.
109 *
110 * @param int $recurID
111 * @param array $recurringContribution
112 */
113 private function setActionsForRecurringContribution($recurID, &$recurringContribution) {
3d554b59 114 $action = array_sum(array_keys(CRM_Contribute_Page_Tab::recurLinks($recurID, 'contribution')));
d0421258 115
bf6b9888 116 // no action allowed if it's not active
117 $recurringContribution['is_active'] = ($recurringContribution['contribution_status_id'] != 3);
d0421258 118
bf6b9888 119 if ($recurringContribution['is_active']) {
120 $details = CRM_Contribute_BAO_ContributionRecur::getSubscriptionDetails($recurringContribution['id'], 'recur');
121 $hideUpdate = $details->membership_id & $details->auto_renew;
d0421258
CR
122
123 if ($hideUpdate) {
bf6b9888 124 $action -= CRM_Core_Action::UPDATE;
125 }
d0421258 126
bf6b9888 127 $recurringContribution['action'] = CRM_Core_Action::formLink(
3d554b59 128 CRM_Contribute_Page_Tab::recurLinks($recurID, 'contribution'),
bf6b9888 129 $action,
be2fb01f 130 [
bf6b9888 131 'cid' => $this->contactID,
132 'crid' => $recurID,
133 'cxt' => 'contribution',
be2fb01f 134 ],
bf6b9888 135 ts('more'),
136 FALSE,
137 'contribution.selector.recurring',
138 'Contribution',
139 $recurID
140 );
141 }
142 }
143
bf6b9888 144}