farmOS/modules/core/plan/src/Entity/PlanRecord.php

93 lines
2.7 KiB
PHP

<?php
namespace Drupal\plan\Entity;
use Drupal\Core\Entity\ContentEntityBase;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
/**
* Defines the Plan record relationship entity.
*
* This entity type can be used to create relationships between a plan and other
* record(s) along with additional metadata fields to describe the relationship.
*
* @ContentEntityType(
* id = "plan_record",
* label = @Translation("Plan record relationship"),
* bundle_label = @Translation("Plan record relationship type"),
* label_collection = @Translation("Plan record relationships"),
* label_singular = @Translation("plan record relationship"),
* label_plural = @Translation("plan record relationships"),
* label_count = @PluralTranslation(
* singular = "@count plan record relationship",
* plural = "@count plan record relationships",
* ),
* handlers = {
* "access" = "Drupal\plan\Access\PlanRecordAccess",
* "form" = {
* "edit" = "Drupal\Core\Entity\ContentEntityForm",
* },
* "route_provider" = {
* "default" = "Drupal\Core\Entity\Routing\AdminHtmlRouteProvider",
* },
* },
* base_table = "plan_record",
* data_table = "plan_record_data",
* entity_keys = {
* "id" = "id",
* "uuid" = "uuid",
* "label" = "uuid",
* "bundle" = "type",
* },
* bundle_entity_type = "plan_record_type",
* common_reference_target = TRUE,
* links = {
* "edit-form" = "/plan/record/{plan_record}/edit",
* },
* )
*/
class PlanRecord extends ContentEntityBase implements PlanRecordInterface {
/**
* {@inheritdoc}
*/
public function getBundleLabel() {
/** @var \Drupal\plan\Entity\PlanRecordTypeInterface $type */
$type = \Drupal::entityTypeManager()
->getStorage('plan_record_type')
->load($this->bundle());
return $type->label();
}
/**
* {@inheritdoc}
*/
public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
$fields = parent::baseFieldDefinitions($entity_type);
$fields['plan'] = BaseFieldDefinition::create('entity_reference')
->setLabel(t('Plan'))
->setDescription(t('Associate this plan record relationship with a plan entity.'))
->setTranslatable(FALSE)
->setCardinality(1)
->setSetting('target_type', 'plan')
->setDisplayOptions('form', [
'type' => 'entity_reference',
'weight' => 12,
])
->setDisplayConfigurable('form', TRUE)
->setDisplayConfigurable('view', TRUE);
return $fields;
}
/**
* {@inheritdoc}
*/
public function getPlan(): ?PlanInterface {
return $this->get('plan')->first()?->entity;
}
}