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