Merge pull request #7531 from JKingsnorth/CRM-17261
[civicrm-core.git] / CRM / Contribute / Tokens.php
CommitLineData
2045389a
TO
1<?php
2
3/*
4 +--------------------------------------------------------------------+
3435af9a 5 | CiviCRM version 4.7 |
2045389a
TO
6 +--------------------------------------------------------------------+
7 | Copyright CiviCRM LLC (c) 2004-2015 |
8 +--------------------------------------------------------------------+
9 | This file is a part of CiviCRM. |
10 | |
11 | CiviCRM is free software; you can copy, modify, and distribute it |
12 | under the terms of the GNU Affero General Public License |
13 | Version 3, 19 November 2007 and the CiviCRM Licensing Exception. |
14 | |
15 | CiviCRM is distributed in the hope that it will be useful, but |
16 | WITHOUT ANY WARRANTY; without even the implied warranty of |
17 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
18 | See the GNU Affero General Public License for more details. |
19 | |
20 | You should have received a copy of the GNU Affero General Public |
21 | License and the CiviCRM Licensing Exception along |
22 | with this program; if not, contact CiviCRM LLC |
23 | at info[AT]civicrm[DOT]org. If you have questions about the |
24 | GNU Affero General Public License or the licensing of CiviCRM, |
25 | see the CiviCRM license FAQ at http://civicrm.org/licensing |
26 +--------------------------------------------------------------------+
27 */
28
29/**
30 * Class CRM_Contribute_Tokens
31 *
32 * Generate "contribution.*" tokens.
33 *
34 * At time of writing, we don't have any particularly special tokens -- we just
35 * do some basic formatting based on the corresponding DB field.
36 */
37class CRM_Contribute_Tokens extends \Civi\Token\AbstractTokenSubscriber {
38
39 /**
40 * Get a list of tokens whose name and title match the DB fields.
41 * @return array
42 */
43 protected function getPassthruTokens() {
44 return array(
45 'contribution_page_id',
46 'receive_date',
47 'total_amount',
48 'fee_amount',
49 'net_amount',
50 'trxn_id',
51 'invoice_id',
52 'currency',
53 'cancel_date',
54 'receipt_date',
55 'thankyou_date',
56 'tax_amount',
57 );
58 }
59
70599df6 60 /**
61 * Get alias tokens.
62 *
63 * @return array
64 */
2045389a
TO
65 protected function getAliasTokens() {
66 return array(
67 'id' => 'contribution_id',
68 'payment_instrument' => 'payment_instrument_id',
69 'source' => 'contribution_source',
70 'status' => 'contribution_status_id',
71 'type' => 'financial_type_id',
72 );
73 }
74
e8e8f3ad 75 /**
76 * Class constructor.
77 */
2045389a
TO
78 public function __construct() {
79 $tokens = CRM_Utils_Array::subset(
80 CRM_Utils_Array::collect('title', CRM_Contribute_DAO_Contribution::fields()),
81 $this->getPassthruTokens()
82 );
83 $tokens['id'] = ts('Contribution ID');
84 $tokens['payment_instrument'] = ts('Payment Instrument');
85 $tokens['source'] = ts('Contribution Source');
86 $tokens['status'] = ts('Contribution Status');
87 $tokens['type'] = ts('Financial Type');
88 parent::__construct('contribution', $tokens);
89 }
90
91 public function checkActive(\Civi\Token\TokenProcessor $processor) {
92 return
93 !empty($processor->context['actionMapping'])
94 && $processor->context['actionMapping']->getEntity() === 'civicrm_contribution';
95 }
96
97 public function alterActionScheduleQuery(\Civi\ActionSchedule\Event\MailingQueryEvent $e) {
98 if ($e->mapping->getEntity() !== 'civicrm_contribution') {
99 return;
100 }
101
102 $fields = CRM_Contribute_DAO_Contribution::fields();
103 foreach ($this->getPassthruTokens() as $token) {
104 $e->query->select("e." . $fields[$token]['name'] . " AS contrib_{$token}");
105 }
106 foreach ($this->getAliasTokens() as $alias => $orig) {
107 $e->query->select("e." . $fields[$orig]['name'] . " AS contrib_{$alias}");
108 }
109 }
110
111 /**
112 * Evaluate the content of a single token.
113 *
114 * @param \Civi\Token\TokenRow $row
115 * The record for which we want token values.
ad37ac8e 116 * @param string $entity
2045389a
TO
117 * @param string $field
118 * The name of the token field.
119 * @param mixed $prefetch
120 * Any data that was returned by the prefetch().
ad37ac8e 121 *
2045389a 122 * @return mixed
ad37ac8e 123 * @throws \CRM_Core_Exception
2045389a
TO
124 */
125 public function evaluateToken(\Civi\Token\TokenRow $row, $entity, $field, $prefetch = NULL) {
126 $actionSearchResult = $row->context['actionSearchResult'];
127 $fieldValue = isset($actionSearchResult->{"contrib_$field"}) ? $actionSearchResult->{"contrib_$field"} : NULL;
128
129 $aliasTokens = $this->getAliasTokens();
130 if (in_array($field, array('total_amount', 'fee_amount', 'net_amount'))) {
131 return $row->format('text/plain')->tokens($entity, $field,
132 \CRM_Utils_Money::format($fieldValue, $actionSearchResult->contrib_currency));
133 }
134 elseif (isset($aliasTokens[$field])) {
135 $row->dbToken($entity, $field, 'CRM_Contribute_BAO_Contribution', $aliasTokens[$field], $fieldValue);
136 }
137 else {
138 $row->dbToken($entity, $field, 'CRM_Contribute_BAO_Contribution', $field, $fieldValue);
139 }
140 }
141
142}