Add listTokens() function to return formatted list of tokens for forms
authorAidan Saunders <aidan.saunders@squiffle.uk>
Thu, 26 Apr 2018 15:00:45 +0000 (16:00 +0100)
committerAidan Saunders <aidan.saunders@squiffle.uk>
Fri, 14 Dec 2018 12:11:42 +0000 (12:11 +0000)
Civi/Token/TokenProcessor.php
tests/phpunit/Civi/Token/TokenProcessorTest.php

index bfad77926c101512be72a2f085d2472a1280991b..4cafeb251e5539bc084b07b1b74a6e4b39eced69 100644 (file)
@@ -68,6 +68,13 @@ class TokenProcessor {
    */
   protected $tokens = NULL;
 
+  /**
+   * A list of available tokens formatted for display
+   * @var array
+   *   Array('{' . $dottedName . '}' => 'labelString')
+   */
+  protected $listTokens = NULL;
+
   protected $next = 0;
 
   /**
@@ -220,6 +227,22 @@ class TokenProcessor {
     return $this->tokens;
   }
 
+  /**
+   * Get the list of available tokens, formatted for display
+   *
+   * @return array
+   *   Ex: $tokens[ '{token.name}' ] = "Token label"
+   */
+  public function listTokens() {
+    if ($this->listTokens === NULL) {
+      $this->listTokens = array();
+      foreach ($this->getTokens() as $token => $values) {
+        $this->listTokens['{' . $token . '}'] = $values['label'];
+      }
+    }
+    return $this->listTokens;
+  }
+
   /**
    * Compute and store token values.
    */
index aadb596f4dd5911734e8bbc9b3250bd55cd8225e..38d02d44c153ee85c617fc23a858b96cce094b93 100644 (file)
@@ -113,6 +113,14 @@ class TokenProcessorTest extends \CiviUnitTestCase {
     $this->assertEquals($expected, $p->getMessageTokens());
   }
 
+  public function testListTokens() {
+    $p = new TokenProcessor($this->dispatcher, array(
+      'controller' => __CLASS__,
+    ));
+    $p->addToken(array('entity' => 'MyEntity', 'field' => 'myField', 'label' => 'My Label'));
+    $this->assertEquals(array('{MyEntity.myField}' => 'My Label'), $p->listTokens());
+  }
+
   /**
    * Perform a full mail-merge, substituting multiple tokens for multiple
    * contacts in multiple messages.