crm_case-1.0.x-dev/src/Entity/CrmCase.php
src/Entity/CrmCase.php
<?php
declare(strict_types=1);
namespace Drupal\crm_case\Entity;
use Drupal\Core\Entity\Attribute\ContentEntityType;
use Drupal\Core\Entity\ContentEntityDeleteForm;
use Drupal\Core\Entity\EntityChangedTrait;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\RevisionableContentEntityBase;
use Drupal\Core\Entity\Routing\AdminHtmlRouteProvider;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\crm_case\CrmCaseAccessControlHandler;
use Drupal\crm_case\CrmCaseInterface;
use Drupal\crm_case\CrmCaseListBuilder;
use Drupal\crm_case\Form\CrmCaseForm;
use Drupal\user\EntityOwnerTrait;
use Drupal\views\EntityViewsData;
/**
* CRM case.
*
* A case is a collection of encounters.
*/
#[ContentEntityType(
id: 'crm_case',
label: new TranslatableMarkup('CRM Case'),
label_collection: new TranslatableMarkup('CRM Cases'),
label_singular: new TranslatableMarkup('crm case'),
label_plural: new TranslatableMarkup('crm cases'),
label_count: [
'singular' => '@count crm case',
'plural' => '@count crm cases',
],
bundle_label: new TranslatableMarkup('CRM Case type'),
handlers: [
'list_builder' => CrmCaseListBuilder::class,
'views_data' => EntityViewsData::class,
'form' => [
'default' => CrmCaseForm::class,
'delete' => ContentEntityDeleteForm::class,
],
'access' => CrmCaseAccessControlHandler::class,
'route_provider' => [
'html' => AdminHtmlRouteProvider::class,
],
],
base_table: 'crm_case',
revision_table: 'crm_case_revision',
show_revision_ui: TRUE,
admin_permission: 'administer crm',
entity_keys: [
'id' => 'id',
'revision' => 'revision_id',
'bundle' => 'bundle',
'label' => 'label',
'uuid' => 'uuid',
'owner' => 'uid',
],
revision_metadata_keys: [
'revision_user' => 'revision_uid',
'revision_created' => 'revision_timestamp',
'revision_log_message' => 'revision_log',
],
bundle_entity_type: 'crm_case_type',
field_ui_base_route: 'entity.crm_case_type.edit_form',
translatable: FALSE,
links: [
'collection' => '/admin/content/crm/case',
'add-form' => '/crm/case/add/{crm_case_type}',
'add-page' => '/crm/case/add',
'canonical' => '/crm/case/{crm_case}',
'edit-form' => '/crm/case/{crm_case}/edit',
'delete-form' => '/crm/case/{crm_case}/delete',
]
)]
class CrmCase extends RevisionableContentEntityBase implements CrmCaseInterface {
use EntityChangedTrait;
use EntityOwnerTrait;
/**
* {@inheritdoc}
*/
public function preSave(EntityStorageInterface $storage) {
parent::preSave($storage);
if (!$this->getOwnerId()) {
// If no owner has been set explicitly, make the anonymous user the owner.
$this->setOwnerId(0);
}
}
/**
* {@inheritdoc}
*/
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
$fields = parent::baseFieldDefinitions($entity_type);
$fields['bundle']->setLabel(t('Type'))
->setDisplayOptions('view', [
'type' => 'text_default',
'label' => 'inline',
'weight' => 10,
])
->setDisplayConfigurable('view', TRUE);
$fields['label'] = BaseFieldDefinition::create('string')
->setRevisionable(TRUE)
->setLabel(t('Label'))
->setRequired(TRUE)
->setSetting('max_length', 255)
->setDisplayOptions('form', [
'type' => 'string_textfield',
'weight' => -5,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayOptions('view', [
'label' => 'hidden',
'type' => 'string',
'weight' => -5,
])
->setDisplayConfigurable('view', TRUE);
$fields['status'] = BaseFieldDefinition::create('boolean')
->setRevisionable(TRUE)
->setLabel(t('Status'))
->setDefaultValue(TRUE)
->setSetting('on_label', 'Enabled')
->setDisplayOptions('form', [
'type' => 'boolean_checkbox',
'settings' => [
'display_label' => FALSE,
],
'weight' => 0,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayOptions('view', [
'type' => 'boolean',
'label' => 'inline',
'weight' => 0,
'settings' => [
'format' => 'enabled-disabled',
],
])
->setDisplayConfigurable('view', TRUE);
$fields['uid'] = BaseFieldDefinition::create('entity_reference')
->setRevisionable(TRUE)
->setLabel(t('Owner'))
->setSetting('target_type', 'user')
->setDefaultValueCallback(static::class . '::getDefaultEntityOwner')
->setDisplayOptions('form', [
'type' => 'entity_reference_autocomplete',
'settings' => [
'match_operator' => 'CONTAINS',
'size' => 60,
'placeholder' => '',
],
'weight' => 15,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'author',
'weight' => 15,
])
->setDisplayConfigurable('view', TRUE);
$fields['contact_id'] = BaseFieldDefinition::create('entity_reference')
->setRevisionable(TRUE)
->setLabel(t('Contact'))
->setSetting('target_type', 'crm_contact')
->setDefaultValueCallback(static::class . '::getDefaultEntityOwner')
->setDisplayOptions('form', [
'type' => 'entity_reference_autocomplete',
'settings' => [
'match_operator' => 'CONTAINS',
'size' => 60,
'placeholder' => '',
],
'weight' => 15,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'author',
'weight' => 15,
])
->setDisplayConfigurable('view', TRUE);
$fields['created'] = BaseFieldDefinition::create('created')
->setLabel(t('Created'))
->setDescription(t('The time that the crm case was created.'))
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'timestamp',
'weight' => 20,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayOptions('form', [
'type' => 'datetime_timestamp',
'weight' => 20,
])
->setDisplayConfigurable('view', TRUE);
$fields['changed'] = BaseFieldDefinition::create('changed')
->setLabel(t('Changed'))
->setDescription(t('The time that the crm case was last edited.'))
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'timestamp',
'weight' => 20,
])
->setDisplayConfigurable('view', TRUE);
return $fields;
}
}
