Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 201
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
CrmCase
0.00% covered (danger)
0.00%
0 / 150
0.00% covered (danger)
0.00%
0 / 2
12
0.00% covered (danger)
0.00%
0 / 1
 preSave
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 baseFieldDefinitions
0.00% covered (danger)
0.00%
0 / 147
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\crm_case\Entity;
6
7use Drupal\Core\Entity\Attribute\ContentEntityType;
8use Drupal\Core\Entity\ContentEntityDeleteForm;
9use Drupal\Core\Entity\EntityChangedTrait;
10use Drupal\Core\Entity\EntityStorageInterface;
11use Drupal\Core\Entity\EntityTypeInterface;
12use Drupal\Core\Entity\RevisionableContentEntityBase;
13use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider;
14use Drupal\Core\Field\BaseFieldDefinition;
15use Drupal\Core\StringTranslation\TranslatableMarkup;
16use Drupal\crm_case\CrmCaseAccessControlHandler;
17use Drupal\crm_case\CrmCaseInterface;
18use Drupal\crm_case\CrmCaseListBuilder;
19use Drupal\crm_case\Form\CrmCaseForm;
20use Drupal\user\EntityOwnerTrait;
21use Drupal\views\EntityViewsData;
22
23/**
24 * CRM case.
25 *
26 * A case is a collection of encounters.
27 */
28#[ContentEntityType(
29  id: 'crm_case',
30  label: new TranslatableMarkup('CRM Case'),
31  label_collection: new TranslatableMarkup('CRM Cases'),
32  label_singular: new TranslatableMarkup('crm case'),
33  label_plural: new TranslatableMarkup('crm cases'),
34  label_count: [
35    'singular' => '@count crm case',
36    'plural' => '@count crm cases',
37  ],
38  bundle_label: new TranslatableMarkup('CRM Case type'),
39  handlers: [
40    'list_builder' => CrmCaseListBuilder::class,
41    'views_data' => EntityViewsData::class,
42    'form' => [
43      'default' => CrmCaseForm::class,
44      'delete' => ContentEntityDeleteForm::class,
45    ],
46    'access' => CrmCaseAccessControlHandler::class,
47    'route_provider' => [
48      'html' => AdminHtmlRouteProvider::class,
49    ],
50    'base_table' => 'crm_case',
51    'revision_table' => 'crm_case_revision',
52    'show_revision_ui' => TRUE,
53    'admin_permission' => 'administer crm',
54    'entity_keys' => [
55      'id' => 'id',
56      'revision' => 'revision_id',
57      'bundle' => 'bundle',
58      'label' => 'label',
59      'uuid' => 'uuid',
60      'owner' => 'uid',
61    ],
62    'revision_metadata_keys' => [
63      'revision_user' => 'revision_uid',
64      'revision_created' => 'revision_timestamp',
65      'revision_log_message' => 'revision_log',
66    ],
67    'bundle_entity_type' => 'crm_case_type',
68    'field_ui_base_route' => 'entity.crm_case_type.edit_form',
69    'translatable' => FALSE,
70    'links' => [
71      'collection' => '/admin/content/crm/case',
72      'add-form' => '/crm/case/add/{crm_case_type}',
73      'add-page' => '/crm/case/add',
74      'canonical' => '/crm/case/{crm_case}',
75      'edit-form' => '/crm/case/{crm_case}/edit',
76      'delete-form' => '/crm/case/{crm_case}/delete',
77    ],
78  ],
79)]
80class CrmCase extends RevisionableContentEntityBase implements CrmCaseInterface {
81
82  use EntityChangedTrait;
83  use EntityOwnerTrait;
84
85  /**
86   * {@inheritdoc}
87   */
88  public function preSave(EntityStorageInterface $storage) {
89    parent::preSave($storage);
90    if (!$this->getOwnerId()) {
91      // If no owner has been set explicitly, make the anonymous user the owner.
92      $this->setOwnerId(0);
93    }
94  }
95
96  /**
97   * {@inheritdoc}
98   */
99  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
100
101    $fields = parent::baseFieldDefinitions($entity_type);
102    $fields['bundle']->setLabel(t('Type'))
103      ->setDisplayOptions('view', [
104        'type' => 'text_default',
105        'label' => 'inline',
106        'weight' => 10,
107      ])
108      ->setDisplayConfigurable('view', TRUE);
109
110    $fields['label'] = BaseFieldDefinition::create('string')
111      ->setRevisionable(TRUE)
112      ->setLabel(t('Label'))
113      ->setRequired(TRUE)
114      ->setSetting('max_length', 255)
115      ->setDisplayOptions('form', [
116        'type' => 'string_textfield',
117        'weight' => -5,
118      ])
119      ->setDisplayConfigurable('form', TRUE)
120      ->setDisplayOptions('view', [
121        'label' => 'hidden',
122        'type' => 'string',
123        'weight' => -5,
124      ])
125      ->setDisplayConfigurable('view', TRUE);
126
127    $fields['status'] = BaseFieldDefinition::create('boolean')
128      ->setRevisionable(TRUE)
129      ->setLabel(t('Status'))
130      ->setDefaultValue(TRUE)
131      ->setSetting('on_label', 'Enabled')
132      ->setDisplayOptions('form', [
133        'type' => 'boolean_checkbox',
134        'settings' => [
135          'display_label' => FALSE,
136        ],
137        'weight' => 0,
138      ])
139      ->setDisplayConfigurable('form', TRUE)
140      ->setDisplayOptions('view', [
141        'type' => 'boolean',
142        'label' => 'inline',
143        'weight' => 0,
144        'settings' => [
145          'format' => 'enabled-disabled',
146        ],
147      ])
148      ->setDisplayConfigurable('view', TRUE);
149
150    $fields['description'] = BaseFieldDefinition::create('text_long')
151      ->setRevisionable(TRUE)
152      ->setLabel(t('Description'))
153      ->setDisplayOptions('form', [
154        'type' => 'text_textarea',
155        'weight' => 10,
156      ])
157      ->setDisplayConfigurable('form', TRUE)
158      ->setDisplayOptions('view', [
159        'type' => 'text_default',
160        'label' => 'above',
161        'weight' => 10,
162      ])
163      ->setDisplayConfigurable('view', TRUE);
164
165    $fields['uid'] = BaseFieldDefinition::create('entity_reference')
166      ->setRevisionable(TRUE)
167      ->setLabel(t('Owner'))
168      ->setSetting('target_type', 'user')
169      ->setDefaultValueCallback(static::class . '::getDefaultEntityOwner')
170      ->setDisplayOptions('form', [
171        'type' => 'entity_reference_autocomplete',
172        'settings' => [
173          'match_operator' => 'CONTAINS',
174          'size' => 60,
175          'placeholder' => '',
176        ],
177        'weight' => 15,
178      ])
179      ->setDisplayConfigurable('form', TRUE)
180      ->setDisplayOptions('view', [
181        'label' => 'inline',
182        'type' => 'author',
183        'weight' => 15,
184      ])
185      ->setDisplayConfigurable('view', TRUE);
186
187    $fields['contact_id'] = BaseFieldDefinition::create('entity_reference')
188      ->setRevisionable(TRUE)
189      ->setLabel(t('Contact'))
190      ->setSetting('target_type', 'crm_contact')
191      ->setDefaultValueCallback(static::class . '::getDefaultEntityOwner')
192      ->setDisplayOptions('form', [
193        'type' => 'entity_reference_autocomplete',
194        'settings' => [
195          'match_operator' => 'CONTAINS',
196          'size' => 60,
197          'placeholder' => '',
198        ],
199        'weight' => 15,
200      ])
201      ->setDisplayConfigurable('form', TRUE)
202      ->setDisplayOptions('view', [
203        'label' => 'inline',
204        'type' => 'author',
205        'weight' => 15,
206      ])
207      ->setDisplayConfigurable('view', TRUE);
208
209    $fields['encounter'] = BaseFieldDefinition::create('entity_reference')
210      ->setRevisionable(TRUE)
211      ->setLabel(t('Encounter'))
212      ->setSetting('target_type', 'crm_case_encounter')
213      ->setDefaultValueCallback(static::class . '::getDefaultEntityOwner')
214      ->setDisplayOptions('form', [
215        'type' => 'entity_reference_autocomplete',
216        'settings' => [
217          'match_operator' => 'CONTAINS',
218          'size' => 60,
219          'placeholder' => '',
220        ],
221        'weight' => 15,
222      ])
223      ->setDisplayConfigurable('form', TRUE)
224      ->setDisplayOptions('view', [
225        'label' => 'inline',
226        'type' => 'author',
227        'weight' => 15,
228      ])
229      ->setDisplayConfigurable('view', TRUE);
230
231    $fields['created'] = BaseFieldDefinition::create('created')
232      ->setLabel(t('Created'))
233      ->setDescription(t('The time that the crm case was created.'))
234      ->setDisplayOptions('view', [
235        'label' => 'inline',
236        'type' => 'timestamp',
237        'weight' => 20,
238      ])
239      ->setDisplayConfigurable('form', TRUE)
240      ->setDisplayOptions('form', [
241        'type' => 'datetime_timestamp',
242        'weight' => 20,
243      ])
244      ->setDisplayConfigurable('view', TRUE);
245
246    $fields['changed'] = BaseFieldDefinition::create('changed')
247      ->setLabel(t('Changed'))
248      ->setDescription(t('The time that the crm case was last edited.'))
249      ->setDisplayOptions('view', [
250        'label' => 'inline',
251        'type' => 'timestamp',
252        'weight' => 20,
253      ])
254      ->setDisplayConfigurable('view', TRUE);
255
256    return $fields;
257  }
258
259}