Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
60 / 60
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
ContactMethod
100.00% covered (success)
100.00%
60 / 60
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 baseFieldDefinitions
100.00% covered (success)
100.00%
60 / 60
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\crm\Entity;
6
7use Drupal\Core\Entity\Attribute\ContentEntityType;
8use Drupal\Core\Entity\ContentEntityDeleteForm;
9use Drupal\Core\Entity\ContentEntityForm;
10use Drupal\Core\Entity\EntityChangedTrait;
11use Drupal\Core\Entity\EntityTypeInterface;
12use Drupal\Core\Entity\RevisionableContentEntityBase;
13use Drupal\Core\Entity\RevisionLogEntityTrait;
14use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider;
15use Drupal\Core\Field\BaseFieldDefinition;
16use Drupal\Core\StringTranslation\TranslatableMarkup;
17use Drupal\crm\Access\ContactMethodAccessControlHandler;
18use Drupal\crm\ListBuilder\ContactMethodListBuilder;
19use Drupal\views\EntityViewsData;
20
21/**
22 * CRM contact method.
23 *
24 * A contact can have many methods: email, address, phone number, etc.
25 */
26#[ContentEntityType(
27  id: 'crm_contact_method',
28  label: new TranslatableMarkup('Contact Method'),
29  label_collection: new TranslatableMarkup('Contact Methods'),
30  label_singular: new TranslatableMarkup('contact method'),
31  label_plural: new TranslatableMarkup('contact methods'),
32  label_count: [
33    'singular' => '@count contact method',
34    'plural' => '@count contact methods',
35  ],
36  bundle_label: new TranslatableMarkup('Contact Method type'),
37  handlers: [
38    'access' => ContactMethodAccessControlHandler::class,
39    'list_builder' => ContactMethodListBuilder::class,
40    'views_data' => EntityViewsData::class,
41    'form' => [
42      'default' => ContentEntityForm::class,
43      'delete' => ContentEntityDeleteForm::class,
44    ],
45    'route_provider' => [
46      'html' => AdminHtmlRouteProvider::class,
47    ],
48  ],
49    base_table: 'crm_contact_method',
50    revision_table: 'crm_contact_method_revision',
51    show_revision_ui: TRUE,
52    admin_permission: 'administer crm',
53    entity_keys: [
54      'id' => 'id',
55      'revision' => 'revision_id',
56      'bundle' => 'bundle',
57      'label' => 'id',
58      'uuid' => 'uuid',
59      'status' => 'status',
60    ],
61    revision_metadata_keys: [
62      'revision_user' => 'revision_uid',
63      'revision_created' => 'revision_timestamp',
64      'revision_log_message' => 'revision_log',
65    ],
66    bundle_entity_type: 'crm_contact_method_type',
67    field_ui_base_route: 'entity.crm_contact_method_type.edit_form',
68    translatable: FALSE,
69    links: [
70      'collection' => '/admin/content/crm/method',
71    ],
72)]
73class ContactMethod extends RevisionableContentEntityBase implements ContactMethodInterface {
74
75  use EntityChangedTrait;
76  use RevisionLogEntityTrait;
77
78  /**
79   * {@inheritdoc}
80   */
81  public static function baseFieldDefinitions(EntityTypeInterface $entity_type): array {
82
83    $fields = parent::baseFieldDefinitions($entity_type);
84
85    $fields['type'] = BaseFieldDefinition::create('entity_reference')
86      ->setRevisionable(TRUE)
87      ->setLabel(t('Type'))
88      ->setSetting('target_type', 'crm_method_detail_type')
89      ->setDisplayOptions('form', [
90        'type' => 'options_select',
91        'weight' => -10,
92      ])
93      ->setDisplayConfigurable('form', TRUE)
94      ->setDisplayOptions('view', [
95        'label' => 'above',
96        'type' => 'entity_reference_label',
97        'weight' => 10,
98      ])
99      ->setDisplayConfigurable('view', TRUE);
100
101    $fields['status'] = BaseFieldDefinition::create('boolean')
102      ->setRevisionable(TRUE)
103      ->setLabel(t('Status'))
104      ->setDefaultValue(TRUE)
105      ->setSetting('on_label', 'Enabled')
106      ->setDisplayOptions('form', [
107        'type' => 'boolean_checkbox',
108        'settings' => [
109          'display_label' => FALSE,
110        ],
111        'weight' => 0,
112      ])
113      ->setDisplayConfigurable('form', TRUE)
114      ->setDisplayOptions('view', [
115        'type' => 'boolean',
116        'label' => 'above',
117        'weight' => 0,
118        'settings' => [
119          'format' => 'enabled-disabled',
120        ],
121      ])
122      ->setDisplayConfigurable('view', TRUE);
123
124    $fields['crm_contact'] = BaseFieldDefinition::create('entity_reference')
125      ->setLabel(t('CRM Contact'))
126      ->setDescription(t('The CRM Contact that this method belongs to.'))
127      ->setSetting('target_type', 'crm_contact');
128
129    $fields['created'] = BaseFieldDefinition::create('created')
130      ->setLabel(t('Created on'))
131      ->setDescription(t('The time that the crm contact method was created.'))
132      ->setDisplayOptions('view', [
133        'label' => 'above',
134        'type' => 'timestamp',
135        'weight' => 20,
136      ])
137      ->setDisplayConfigurable('form', TRUE)
138      ->setDisplayOptions('form', [
139        'type' => 'datetime_timestamp',
140        'weight' => 20,
141      ])
142      ->setDisplayConfigurable('view', TRUE);
143
144    $fields['changed'] = BaseFieldDefinition::create('changed')
145      ->setLabel(t('Changed'))
146      ->setDescription(t('The time that the crm contact method was last edited.'));
147
148    return $fields;
149  }
150
151}