You can only add contribution specific fields to templates coming from the contribution search or a contribution action, or via a hook
Code here is an eg. of adding contribution tokens via hook
<?php
function civitoken_civicrm_tokens( &$tokens ) {
$tokens['civitoken'] = array( 'civitoken.contributionTotal', 'civitoken.contributionLast','civitoken.contributionList' );
}
function civitoken_civicrm_tokenValues( &$values, &$contactIDs, $jobID ) {
// we could be given an array of contact IDs or a string
require_once 'api/v2/Contact.php';
require_once 'api/v2/Contribute.php';
if (isset($contactIDs[0])){
$params['contact_id'] = $contactIDs[0];
}else{
$params['contact_id'] = $contactIDs['contact_id'];
}
if ( is_array( $contactIDs ) ) {
foreach ($contactIDs as $contactID){
$value =& $values[$contactID];
$value = get_contribution_details($contactID,$value);
$value = get_contribution_totals($contactID,$value);
}
} else {
$value =& $values;
$value = get_contribution_details($contactIDs,$value);
}
// $value['civitoken.contributionTotal'] = 'total amount from above functions' ;
}
function get_contribution_totals($cid, &$value){
global $db_url;
if ($db_url['civicrm']){
db_set_active('civicrm');
}
$query = "
SELECT sum( total_amount ) as total_amount,
contact_id,
max( receive_date ) as receive_date
FROM civicrm_contribution
WHERE contact_id = ( $cid )
AND is_test = 0
GROUP BY contact_id
";
$dao = CRM_Core_DAO::executeQuery( $query );
//Switch back to the default connection when finished.
db_set_active('default');
while ( $dao->fetch( ) ) {
$value['civitoken.contributionTotal'] = $dao->total_amount;
$value['civitoken.contributionLast' ] = CRM_Utils_Date::customFormat($dao->receive_date, null,array('M','d','Y')) ;
}
return $value;
}
function get_contribution_details($cid, &$value){
require_once 'api/v2/Contribute.php';
$params['sort'] = 'receive_date DESC';
$params['contact_id'] = $cid;
$params['limit'] = 5;
$contributions = civicrm_contribution_search($params);
//get field labels
$i = 0;
$value['civitoken.contributionList'] = "<table><tr><th>Amount</th><th>Date</th><th>Status</th><th>Type</th><th>Worker</th><th>Promo</th><th>Dept</th><th>Staff member</th></tr>";
foreach($contributions as $contribution){
if ($i<5){
$value['civitoken.contributionList'] .= "<tr><td>$" . $contribution['total_amount'] . "</td>";
$value['civitoken.contributionList'] .= "<td>" . CRM_Utils_Date::customFormat($contribution['receive_date'], null,array('M','d','Y')) . "</td>";
$value['civitoken.contributionList'] .= "<td>" .$contribution['contribution_status_id']. "</td>";
$value['civitoken.contributionList'] .= "<td>" .$contribution['contribution_type']. "</td>";
$value['civitoken.contributionList'] .= "<td>" .$contribution['custom_50']. "</td>";
$value['civitoken.contributionList'] .= "<td>" .$contribution['custom_20']. "</td>";
$value['civitoken.contributionList'] .= "<td>" .$contribution['custom_21']. "</td></tr>";
}
$i++;
}
$value['civitoken.contributionList'] .= "</table>";
return $value;
}