Merge pull request #17484 from civicrm/5.26
[civicrm-core.git] / Civi / Token / Event / TokenRegisterEvent.php
1 <?php
2 namespace Civi\Token\Event;
3
4 /**
5 * Class TokenRegisterEvent
6 * @package Civi\Token\Event
7 *
8 * The TokenRegisterEvent is fired when constructing a list of available
9 * tokens. Listeners may register by specifying the entity/field/label for the token.
10 *
11 * ```
12 * $ev->entity('profile')
13 * ->register('viewUrl', ts('Default Profile URL (View Mode)')
14 * ->register('editUrl', ts('Default Profile URL (Edit Mode)');
15 * $ev->register(array(
16 * 'entity' => 'profile',
17 * 'field' => 'viewUrl',
18 * 'label' => ts('Default Profile URL (View Mode)'),
19 * ));
20 * ```
21 *
22 * Event name: 'civi.token.list'
23 */
24 class TokenRegisterEvent extends TokenEvent {
25
26 /**
27 * Default values to put in new registrations.
28 *
29 * @var array
30 */
31 protected $defaults;
32
33 public function __construct($tokenProcessor, $defaults) {
34 parent::__construct($tokenProcessor);
35 $this->defaults = $defaults;
36 }
37
38 /**
39 * Set the default entity name.
40 *
41 * @param string $entity
42 * @return TokenRegisterEvent
43 */
44 public function entity($entity) {
45 $defaults = $this->defaults;
46 $defaults['entity'] = $entity;
47 return new TokenRegisterEvent($this->tokenProcessor, $defaults);
48 }
49
50 /**
51 * Register a new token.
52 *
53 * @param array|string $paramsOrField
54 * @param NULL|string $label
55 * @return TokenRegisterEvent
56 */
57 public function register($paramsOrField, $label = NULL) {
58 if (is_array($paramsOrField)) {
59 $params = $paramsOrField;
60 }
61 else {
62 $params = [
63 'field' => $paramsOrField,
64 'label' => $label,
65 ];
66 }
67 $params = array_merge($this->defaults, $params);
68 $this->tokenProcessor->addToken($params);
69 return $this;
70 }
71
72 }