CiviCRM: Difference between revisions

From Freephile Wiki
m Text replacement - "[https://eQuality-Tech.com eQuality Technology]" to "{{CompanyName}}"
adds hook code
Line 77: Line 77:


You can create your own tokens by implementing <code>hook_civicrm_tokens()</code> and  <code>hook_civicrm_tokenValues()</code>.  See  
You can create your own tokens by implementing <code>hook_civicrm_tokens()</code> and  <code>hook_civicrm_tokenValues()</code>.  See  
 
<source lang="php">
<?php
/**
* A convenience function so that we can map our custom fields and labels
* in one place, and share them between hooks without having to write to the db
* with variable_set()
*/
function getHaystack($stack='general') {
    $genKeys = array (
        "wUrl"      => "custom_40",
        "mainpage"  => "custom_41",
        "base"      => "custom_42",
        "sitename"  => "custom_43",
        "logo"      => "custom_44",
        "generator"  => "custom_45",
        "phpversion" => "custom_46",
    // "phpsapi",
        "dbtype"    => "custom_47",
        "dbversion"  => "custom_48",
    // "externalimages",
    // "langconversion",
    // "titleconversion",
    // "linkprefixcharset",
    // "linkprefix",
    // "linktrail",
    // "legaltitlechars",
    // "git-hash",
    // "git-branch",
    // "case",
    // "lang",
    // "fallback",
    // "fallback8bitEncoding",
        "writeapi"    => "custom_49",
        "timezone"    => "custom_50",
        "timeoffset"  => "custom_51",
        "articlepath" => "custom_52",
        "scriptpath"  => "custom_53",
    // "script",
    // "variantarticlepath",
        "server"      => "custom_54",
        "servername"  => "custom_55",
        "wikiid"      => "custom_56",
        "time"        => "custom_57",
        "maxuploadsize" => "custom_58",
    // "thumblimits",
    // "imagelimits",
        "favicon"    => "custom_59",
    );
    $statKeys = array(
        "wUrl"    => "custom_60",
        "pages"    => "custom_61",
        "articles" => "custom_62",
        "edits"    => "custom_63",
        "images"  => "custom_64",
        "users"    => "custom_65",
        "activeusers" => "custom_66",
        "admins"  => "custom_67",
        "jobs"    => "custom_68",
    );
    switch ($stack) {
        case 'general':
            $haystack = $genKeys;
            $addLabels = array (
                'recorded' => 'custom_69',
            );
            $haystack += $addLabels;
            break;
        case 'stats':
            $haystack = $statKeys;
            $addLabels = array (
                'recorded' => 'custom_70',
            );
            $haystack += $addLabels;
            break;
        default:
            die('no stack by that name');
    }
    return $haystack;
}
/**
* implementation of hook_civicrm_tokens()
* Much appreciation and thanks to Eileen McNaughton who helped me get the logic
* correct on this. cf.https://github.com/eileenmcnaughton/civicrm_views_token/blob/master/civicrm_views_token.module#L16
*
* In the end, we want to populate more $tokens in a format like
* $token['general.generator'] = 'Generator';
* $token['general.sitename'] = 'Sitename';
* where the $token key is the element that needs to be populated
* by hook_civicrm_tokenValues()
* The $token value here is used in the UI as a label for the token.
*/
function eqt_civicrm_tokens(&$tokens) {
   
    $labels = getHaystack('general');
    $tokens['general'] = array();
    foreach ($labels as $k => $v) {
        $tokens['general']["general.$k"] = "$k ($v)";
    }
 
    $labels = getHaystack('stats');
    $tokens['stats'] = array();
    foreach ($labels as $k => $v) {
        $tokens['stats']["stats.$k"] = "$k ($v)";
    }
}
/**
* implementation of hook_civicrm_tokenValues()
*/
function eqt_civicrm_tokenValues(&$values, $cids, $job = null, $tokens = array(), $context = null) {
    // for debugging
    //    watchdog('eqt',"eqt_civicrm_tokenValues($values, $cids, $job, $tokens, $context)<pre>\n$values=" . var_export($values,1) . "\n$cids=" . var_export($cids,1) . "\n$job=" . $job ."\n$tokens=" . var_export($tokens,1) . "\n$context=" . $context . "\n</pre>");
   
    if ( array_key_exists('general', $tokens) ) {
        $haystack = getHaystack('general');
        foreach ($cids as $cid) {
            $params = array(
                'sequential' => 1,
                'entity_id' => $cid,
            );
            $result = civicrm_api3('CustomValue', 'get', $params);
            if (!$result['is_error']) {
                $customdata = ($result['values']);
                foreach ($customdata as $val) {
                    $needle = 'custom_' . $val['id'];
                    $label = array_search($needle, $haystack);
                    if (!$label) {
                        continue;
                    }
                    $label = 'general.' . $label;
                    $values[$cid][$label] = $val['latest'];
                }
            }
        }
    }
   
    if ( array_key_exists('stats', $tokens) ) {
        $haystack = getHaystack('stats');
        foreach ($cids as $cid) {
            $params = array(
                'sequential' => 1,
                'entity_id' => $cid,
            );
            $result = civicrm_api3('CustomValue', 'get', $params);
            if (!$result['is_error']) {
                $customdata = ($result['values']);
                foreach ($customdata as $val) {
                    $needle = 'custom_' . $val['id'];
                    $label = array_search($needle, $haystack);
                    if (!$label) {
                        continue;
                    }
                    $label = 'stats.' . $label;
                    $values[$cid][$label] = $val['latest'];
                }
            }
        }
    }
}
</source>


* [https://civicrm.stackexchange.com/questions/2558/tokens-for-custom-field-set-with-multiple-records?rq=1 Stack Exchange]
* [https://civicrm.stackexchange.com/questions/2558/tokens-for-custom-field-set-with-multiple-records?rq=1 Stack Exchange]

Revision as of 21:06, 28 January 2016