Difference between revisions of "CiviCRM"

From Freephile Wiki
Jump to navigation Jump to search
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 20:06, 28 January 2016