contacts_events-8.x-1.x-dev/modules/villages/src/Entity/Village.php
modules/villages/src/Entity/Village.php
<?php namespace Drupal\contacts_events_villages\Entity; use Drupal\contacts_events\Entity\EventInterface; use Drupal\Core\Entity\ContentEntityBase; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\StringTranslation\TranslatableMarkup; /** * Defines the Camping village group entity. * * @ingroup contacts_events_villages * * @ContentEntityType( * id = "c_events_village", * label = @Translation("Camping village"), * label_collection = @Translation("Camping villages"), * label_singular = @Translation("camping village"), * label_plural = @Translation("camping villages"), * handlers = { * "list_builder" = "Drupal\contacts_events_villages\VillageListBuilder", * "views_data" = "Drupal\views\EntityViewsData", * "form" = { * "default" = "Drupal\contacts_events_villages\Form\VillageForm", * "add" = "Drupal\contacts_events_villages\Form\VillageForm", * "edit" = "Drupal\contacts_events_villages\Form\VillageForm", * "delete" = "Drupal\Core\Entity\ContentEntityDeleteForm", * }, * "access" = "Drupal\contacts_events_villages\VillageAccessControlHandler", * "route_provider" = { * "html" = "Drupal\contacts_events_villages\VillageHtmlRouteProvider", * }, * }, * base_table = "c_events_village", * admin_permission = "manage c_events_village entities", * entity_keys = { * "id" = "id", * "label" = "name", * "uuid" = "uuid", * "langcode" = "langcode", * }, * links = { * "canonical" = "/event/{contacts_event}/accommodation/villages/{c_events_village}", * "add-form" = "/event/{contacts_event}/accommodation/villages/add", * "edit-form" = "/event/{contacts_event}/accommodation/villages/{c_events_village}/edit", * "delete-form" = "/event/{contacts_event}/accommodation/villages/{c_events_village}/delete", * "collection" = "/event/{contacts_event}/accommodation/villages", * } * ) */ class Village extends ContentEntityBase { /** * Gets the event associated with this village. * * @return \Drupal\contacts_events\Entity\EventInterface * The event. */ public function getEvent() : EventInterface { return $this->get('event')->entity; } /** * Sets the event associated with the village. * * @param \Drupal\contacts_events\Entity\EventInterface $event * The event. */ public function setEvent(EventInterface $event) { $this->set('event', $event); } /** * Gets the ID of the event associated with this village. * * @return int|null * Event ID. */ public function getEventId() { return $this->get('event')->target_id; } /** * Gets the village name. * * @return string * The name of the village. */ public function getName() { return $this->get('name')->value; } /** * {@inheritdoc} */ protected function urlRouteParameters($rel) { $params = parent::urlRouteParameters($rel); $params['contacts_event'] = $this->getEventId(); return $params; } /** * {@inheritdoc} */ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { $fields = parent::baseFieldDefinitions($entity_type); $fields['name'] = BaseFieldDefinition::create('string') ->setLabel(t('Name')) ->setDescription(t('The name of the village.')) ->setSettings([ 'max_length' => 50, 'text_processing' => 0, ]) ->setDefaultValue('') ->setDisplayOptions('view', [ 'label' => 'above', 'type' => 'string', ]) ->setDisplayOptions('form', [ 'type' => 'string_textfield', ]) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE) ->setRequired(TRUE); $fields['event'] = BaseFieldDefinition::create('entity_reference') ->setLabel(t('Event')) ->setDescription(t('The event this village is for.')) ->setRequired(TRUE) ->setRevisionable(TRUE) ->setSetting('target_type', 'contacts_event') ->setSetting('handler', 'default') ->setDisplayOptions('form', ['region' => 'hidden']) ->setDisplayConfigurable('form', FALSE) ->setDisplayConfigurable('view', TRUE); $fields['pitches'] = BaseFieldDefinition::create('integer') ->setLabel(t('No. Available pitches')) ->setDescription(t('The name of the village.')) ->setDisplayOptions('view', [ 'label' => 'above', 'type' => 'default', ]) ->setDisplayOptions('form', [ 'type' => 'number', ]) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); $fields['fill_value'] = BaseFieldDefinition::create('integer') ->setLabel(t('Fill value')) ->setDescription(t('Max percentage this village can be filled')) ->setDisplayOptions('view', [ 'label' => 'above', 'type' => 'default', ]) ->setDisplayOptions('form', [ 'type' => 'number', ]) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); $fields['colour'] = BaseFieldDefinition::create('list_string') ->setLabel(t('Colour')) ->setSetting('allowed_values', [ '#1360A6' => new TranslatableMarkup('Blue'), '#D5198A' => new TranslatableMarkup('Pink'), '#C78912' => new TranslatableMarkup('Gold'), '#E8C020' => new TranslatableMarkup('Yellow'), '#446F42' => new TranslatableMarkup('Green'), '#6C2C8D' => new TranslatableMarkup('Purple'), '#92582A' => new TranslatableMarkup('Brown'), '#CE2F33' => new TranslatableMarkup('Red'), '#F67D22' => new TranslatableMarkup('Orange'), ]) ->setDisplayOptions('form', [ 'type' => 'options_select', 'weight' => 4, ]) ->setDisplayConfigurable('view', TRUE) ->setDisplayConfigurable('form', TRUE); $fields['special_requirements'] = BaseFieldDefinition::create('entity_reference') ->setLabel(t('Special Requirements')) ->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) ->setSetting('target_type', 'taxonomy_term') ->setSetting('handler', 'default') ->setSetting('handler_settings', ['target_bundles' => ['village_requirements']]) ->setDisplayOptions('view', [ 'label' => 'hidden', 'type' => 'author', ]) ->setDisplayOptions('form', [ 'type' => 'options_buttons', 'weight' => 5, ]) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); $fields['notes'] = BaseFieldDefinition::create('string_long') ->setLabel(new TranslatableMarkup('Notes')) ->setRevisionable(TRUE) ->setTranslatable(TRUE) ->setDisplayOptions('view', [ 'type' => 'basic_string', ]) ->setDisplayOptions('form', [ 'type' => 'string_textarea', ]) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); $fields['gate'] = BaseFieldDefinition::create('string') ->setLabel(t('Gate')) ->setDescription(t('The entrance gate for this village')) ->setSettings([ 'max_length' => 50, 'text_processing' => 0, ]) ->setDefaultValue('') ->setDisplayOptions('view', [ 'label' => 'above', 'type' => 'string', ]) ->setDisplayOptions('form', [ 'type' => 'string_textfield', ]) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); $fields['weight'] = BaseFieldDefinition::create('integer') ->setLabel(t('Weight')) ->setDescription(t('Indicates the order of the village.')) ->setDisplayOptions('view', [ 'label' => 'above', 'type' => 'default', ]) ->setDisplayOptions('form', [ 'type' => 'number', ]) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); $fields['village_host_info'] = BaseFieldDefinition::create('text_long') ->setLabel(t('Camp Site Host Info')) ->setRequired(FALSE) ->setDisplayOptions('view', [ 'region' => 'hidden', ]) ->setDisplayOptions('form', [ 'type' => 'text_textarea', ]) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', FALSE); $fields['village_host_files'] = BaseFieldDefinition::create('file') ->setLabel(t('Camp Site Host Files')) ->setSettings([ 'file_extensions' => 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages', 'uri_scheme' => 'private', 'file_directory' => 'village-host/[date:custom:Y]-[date:custom:m]', ]) ->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) ->setRequired(FALSE) ->setDisplayOptions('view', [ 'region' => 'hidden', ]) ->setDisplayOptions('form', [ 'type' => 'default', ]) ->setDisplayConfigurable('view', FALSE) ->setDisplayConfigurable('form', TRUE); return $fields; } }