added support for participant and custom data of type participant tokens CRM-12965
authorKurund Jalmi <kurund@civicrm.org>
Tue, 9 Jul 2013 18:54:36 +0000 (00:24 +0530)
committerKurund Jalmi <kurund@civicrm.org>
Tue, 9 Jul 2013 18:54:36 +0000 (00:24 +0530)
CRM/Badge/Form/Layout.php
CRM/Core/SelectValues.php
CRM/Event/Form/Task/Badge.php

index 861e1940579329e5211b25e504bb863f79265f21..240fde3703b1d0ccbe6b3f3dad9abb8625285ea5 100644 (file)
@@ -74,7 +74,9 @@ class CRM_Badge_Form_Layout extends CRM_Admin_Form {
     // get the tokens
     $contactTokens = CRM_Core_SelectValues::contactTokens();
     $eventTokens   = CRM_Core_SelectValues::eventTokens();
-    $tokens = array_merge($contactTokens, $eventTokens);
+    $participantTokens = CRM_Core_SelectValues::participantTokens();
+
+    $tokens = array_merge($contactTokens, $eventTokens, $participantTokens);
     asort($tokens);
 
     $fontSizes = CRM_Core_BAO_LabelFormat::getFontSizes();
@@ -116,12 +118,7 @@ class CRM_Badge_Form_Layout extends CRM_Admin_Form {
    * @return None
    */
   function setDefaultValues() {
-    if (isset($this->_id) && empty($this->_values)) {
-      $this->_values = array();
-      $params = array('id' => $this->_id);
-      CRM_Badge_BAO_Layout::retrieve($params, $this->_values);
-
-
+    if (isset($this->_id)) {
       $defaults = array_merge($this->_values,
         CRM_Badge_BAO_Layout::getDecodedData($this->_values['data']));
     }
index f3672d8234aa3a0366fea65905930d97a138b31b..88739eccfbd4644a3c0afab3700d55f40bbbfc5d 100644 (file)
@@ -657,7 +657,7 @@ class CRM_Core_SelectValues {
         'is_bulkmail', 'group', 'tag', 'contact_sub_type', 'note',
         'is_deceased', 'deceased_date', 'legal_identifier', 'contact_sub_type', 'user_unique_id',
       );
-      $customFields        = array();
+
       $customFields        = CRM_Core_BAO_CustomField::getFields('Individual');
       $customFieldsAddress = CRM_Core_BAO_CustomField::getFields('Address');
       $customFields        = $customFields + $customFieldsAddress;
@@ -697,6 +697,44 @@ class CRM_Core_SelectValues {
     return $tokens;
   }
 
+  /**
+   * different type of Participant Tokens
+   *
+   * @static
+   * return array
+   */
+  static function &participantTokens() {
+    static $tokens = NULL;
+    if (!$tokens) {
+      $exportFields = CRM_Event_BAO_Participant::exportableFields();
+
+      $values = array_merge(array_keys($exportFields));
+      unset($values[0]);
+
+      // skipping some tokens for time being.
+      $skipTokens = array(
+        'event_id', 'participant_is_pay_later', 'participant_is_test', 'participant_contact_id',
+        'participant_fee_currency', 'participant_campaign_id', 'participant_status', 'participant_discount_name',
+      );
+
+      $customFields = CRM_Core_BAO_CustomField::getFields('Participant');
+
+      foreach ($values as $key => $val) {
+        if (in_array($val, $skipTokens)) {
+          continue;
+        }
+        //keys for $tokens should be constant. $token Values are changed for Custom Fields. CRM-3734
+        if ($customFieldId = CRM_Core_BAO_CustomField::getKeyID($val)) {
+          $tokens["{participant.$val}"] = CRM_Utils_Array::value($customFieldId, $customFields) ? $customFields[$customFieldId]['label'] . " :: " . $customFields[$customFieldId]['groupTitle'] : '';
+        }
+        else {
+          $tokens["{participant.$val}"] = $exportFields[$val]['title'];
+        }
+      }
+    }
+    return $tokens;
+  }
+
   /**
    * get qf mappig for all date parts.
    *
index c4a5d1839a93015fce5701bb30ad57dfe55453db..c7e9a559aeaba0a6262acfb37aeafa9c7e4d8843 100644 (file)
@@ -124,13 +124,16 @@ class CRM_Event_Form_Task_Badge extends CRM_Event_Form_Task {
           if (key($token) == 'contact') {
             $element = $token['contact'][0];
           }
-          else {
+          elseif (key($token) == 'event') {
             $element = $token['event'][0];
             //FIX ME - we need to standardize event token names
             if (!strpos($element, 'event_')) {
               $element = 'event_' . $element;
             }
           }
+          elseif (key($token) == 'participant') {
+            $element = $token['participant'][0];
+          }
 
           // build returnproperties for query
           $returnProperties[$element] = 1;