permanaj

interactive-map-item-entity

May 20th, 2021
1,072
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 10.45 KB | None | 0 0
  1. <?php
  2.  
  3. namespace Drupal\og_sydneymetrod9\Entity;
  4.  
  5. use Drupal\Core\Entity\EntityStorageInterface;
  6. use Drupal\Core\Field\BaseFieldDefinition;
  7. use Drupal\Core\Entity\EditorialContentEntityBase;
  8. use Drupal\Core\Entity\RevisionableInterface;
  9. use Drupal\Core\Entity\EntityChangedTrait;
  10. use Drupal\Core\Entity\EntityPublishedTrait;
  11. use Drupal\Core\Entity\EntityTypeInterface;
  12. use Drupal\user\UserInterface;
  13.  
  14. /**
  15.  * Defines the Interactive Map Item entity.
  16.  *
  17.  * @ingroup og_sydneymetrod9
  18.  *
  19.  * @ContentEntityType(
  20.  *   id = "interactive_map_item",
  21.  *   label = @Translation("Interactive Map Item"),
  22.  *   handlers = {
  23.  *     "storage" = "Drupal\og_sydneymetrod9\InteractiveMapItemEntityStorage",
  24.  *     "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
  25.  *     "list_builder" = "Drupal\og_sydneymetrod9\InteractiveMapItemEntityListBuilder",
  26.  *     "views_data" = "Drupal\og_sydneymetrod9\Entity\InteractiveMapItemEntityViewsData",
  27.  *     "translation" = "Drupal\og_sydneymetrod9\InteractiveMapItemEntityTranslationHandler",
  28.  *
  29.  *     "form" = {
  30.  *       "default" = "Drupal\og_sydneymetrod9\Form\InteractiveMapItemEntityForm",
  31.  *       "add" = "Drupal\og_sydneymetrod9\Form\InteractiveMapItemEntityForm",
  32.  *       "edit" = "Drupal\og_sydneymetrod9\Form\InteractiveMapItemEntityForm",
  33.  *       "delete" = "Drupal\og_sydneymetrod9\Form\InteractiveMapItemEntityDeleteForm",
  34.  *     },
  35.  *     "route_provider" = {
  36.  *       "html" = "Drupal\og_sydneymetrod9\InteractiveMapItemEntityHtmlRouteProvider",
  37.  *     },
  38.  *     "access" = "Drupal\og_sydneymetrod9\InteractiveMapItemEntityAccessControlHandler",
  39.  *   },
  40.  *   base_table = "interactive_map_item",
  41.  *   data_table = "interactive_map_item_field_data",
  42.  *   revision_table = "interactive_map_item_revision",
  43.  *   revision_data_table = "interactive_map_item_field_revision",
  44.  *   translatable = TRUE,
  45.  *   admin_permission = "administer interactive map item entities",
  46.  *   entity_keys = {
  47.  *     "id" = "id",
  48.  *     "revision" = "vid",
  49.  *     "label" = "name",
  50.  *     "uuid" = "uuid",
  51.  *     "uid" = "user_id",
  52.  *     "langcode" = "langcode",
  53.  *     "published" = "status",
  54.  *   },
  55.  *   links = {
  56.  *     "canonical" = "/admin/structure/interactive_map_item/{interactive_map_item}",
  57.  *     "add-form" = "/admin/structure/interactive_map_item/add",
  58.  *     "edit-form" = "/admin/structure/interactive_map_item/{interactive_map_item}/edit",
  59.  *     "delete-form" = "/admin/structure/interactive_map_item/{interactive_map_item}/delete",
  60.  *     "version-history" = "/admin/structure/interactive_map_item/{interactive_map_item}/revisions",
  61.  *     "revision" = "/admin/structure/interactive_map_item/{interactive_map_item}/revisions/{interactive_map_item_revision}/view",
  62.  *     "revision_revert" = "/admin/structure/interactive_map_item/{interactive_map_item}/revisions/{interactive_map_item_revision}/revert",
  63.  *     "revision_delete" = "/admin/structure/interactive_map_item/{interactive_map_item}/revisions/{interactive_map_item_revision}/delete",
  64.  *     "translation_revert" = "/admin/structure/interactive_map_item/{interactive_map_item}/revisions/{interactive_map_item_revision}/revert/{langcode}",
  65.  *     "collection" = "/admin/structure/interactive_map_item",
  66.  *   },
  67.  *   field_ui_base_route = "interactive_map_item.settings",
  68.  *   revision_metadata_keys = {
  69.  *     "revision_user" = "revision_uid",
  70.  *     "revision_created" = "revision_timestamp",
  71.  *     "revision_log_message" = "revision_log"
  72.  *   }
  73.  * )
  74.  */
  75. class InteractiveMapItemEntity extends EditorialContentEntityBase implements InteractiveMapItemEntityInterface {
  76.  
  77.   use EntityChangedTrait;
  78.   use EntityPublishedTrait;
  79.  
  80.   /**
  81.    * {@inheritdoc}
  82.    */
  83.   public static function preCreate(EntityStorageInterface $storage_controller, array &$values) {
  84.     parent::preCreate($storage_controller, $values);
  85.     $values += [
  86.       'user_id' => \Drupal::currentUser()->id(),
  87.     ];
  88.   }
  89.  
  90.   /**
  91.    * {@inheritdoc}
  92.    */
  93.   protected function urlRouteParameters($rel) {
  94.     $uri_route_parameters = parent::urlRouteParameters($rel);
  95.  
  96.     if ($rel === 'revision_revert' && $this instanceof RevisionableInterface) {
  97.       $uri_route_parameters[$this->getEntityTypeId() . '_revision'] = $this->getRevisionId();
  98.     }
  99.     elseif ($rel === 'revision_delete' && $this instanceof RevisionableInterface) {
  100.       $uri_route_parameters[$this->getEntityTypeId() . '_revision'] = $this->getRevisionId();
  101.     }
  102.  
  103.     return $uri_route_parameters;
  104.   }
  105.  
  106.   /**
  107.    * {@inheritdoc}
  108.    */
  109.   public function preSave(EntityStorageInterface $storage) {
  110.     parent::preSave($storage);
  111.  
  112.     foreach (array_keys($this->getTranslationLanguages()) as $langcode) {
  113.       $translation = $this->getTranslation($langcode);
  114.  
  115.       // If no owner has been set explicitly, make the anonymous user the owner.
  116.       if (!$translation->getOwner()) {
  117.         $translation->setOwnerId(0);
  118.       }
  119.     }
  120.  
  121.     // If no revision author has been set explicitly,
  122.     // make the interactive_map_item owner the revision author.
  123.     if (!$this->getRevisionUser()) {
  124.       $this->setRevisionUserId($this->getOwnerId());
  125.     }
  126.   }
  127.  
  128.   /**
  129.    * {@inheritdoc}
  130.    */
  131.   public function getName() {
  132.     return $this->get('name')->value;
  133.   }
  134.  
  135.   /**
  136.    * {@inheritdoc}
  137.    */
  138.   public function setName($name) {
  139.     $this->set('name', $name);
  140.     return $this;
  141.   }
  142.  
  143.   /**
  144.    * {@inheritdoc}
  145.    */
  146.   public function getCreatedTime() {
  147.     return $this->get('created')->value;
  148.   }
  149.  
  150.   /**
  151.    * {@inheritdoc}
  152.    */
  153.   public function setCreatedTime($timestamp) {
  154.     $this->set('created', $timestamp);
  155.     return $this;
  156.   }
  157.  
  158.   /**
  159.    * {@inheritdoc}
  160.    */
  161.   public function getOwner() {
  162.     return $this->get('user_id')->entity;
  163.   }
  164.  
  165.   /**
  166.    * {@inheritdoc}
  167.    */
  168.   public function getOwnerId() {
  169.     return $this->get('user_id')->target_id;
  170.   }
  171.  
  172.   /**
  173.    * {@inheritdoc}
  174.    */
  175.   public function setOwnerId($uid) {
  176.     $this->set('user_id', $uid);
  177.     return $this;
  178.   }
  179.  
  180.   /**
  181.    * {@inheritdoc}
  182.    */
  183.   public function setOwner(UserInterface $account) {
  184.     $this->set('user_id', $account->id());
  185.     return $this;
  186.   }
  187.  
  188.   /**
  189.    * {@inheritdoc}
  190.    */
  191.   public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
  192.     $fields = parent::baseFieldDefinitions($entity_type);
  193.  
  194.     // Add the published field.
  195.     $fields += static::publishedBaseFieldDefinitions($entity_type);
  196.  
  197.     $fields['user_id'] = BaseFieldDefinition::create('entity_reference')
  198.       ->setLabel(t('Authored by'))
  199.       ->setDescription(t('The user ID of author of the Interactive Map Item entity.'))
  200.       ->setRevisionable(TRUE)
  201.       ->setSetting('target_type', 'user')
  202.       ->setSetting('handler', 'default')
  203.       ->setTranslatable(TRUE)
  204.       ->setDisplayOptions('view', [
  205.         'label' => 'hidden',
  206.         'type' => 'author',
  207.         'weight' => 0,
  208.       ])
  209.       ->setDisplayOptions('form', [
  210.         'type' => 'entity_reference_autocomplete',
  211.         'weight' => 5,
  212.         'settings' => [
  213.           'match_operator' => 'CONTAINS',
  214.           'size' => '60',
  215.           'autocomplete_type' => 'tags',
  216.           'placeholder' => '',
  217.         ],
  218.       ])
  219.       ->setDisplayConfigurable('form', TRUE)
  220.       ->setDisplayConfigurable('view', TRUE);
  221.  
  222.     $fields['name'] = BaseFieldDefinition::create('string')
  223.       ->setLabel(t('Title'))
  224.       ->setDescription(t('The name of the Interactive Map Item entity.'))
  225.       ->setRevisionable(TRUE)
  226.       ->setSettings([
  227.         'max_length' => 50,
  228.         'text_processing' => 0,
  229.       ])
  230.       ->setDefaultValue('')
  231.       ->setDisplayOptions('view', [
  232.         'label' => 'above',
  233.         'type' => 'string',
  234.         'weight' => -4,
  235.       ])
  236.       ->setDisplayOptions('form', [
  237.         'type' => 'string_textfield',
  238.         'weight' => -4,
  239.       ])
  240.       ->setDisplayConfigurable('form', TRUE)
  241.       ->setDisplayConfigurable('view', TRUE)
  242.       ->setRequired(TRUE);
  243.  
  244.     $fields['status']->setDescription(t('A boolean indicating whether the Interactive Map Item is published.'))
  245.       ->setDisplayOptions('form', [
  246.         'type' => 'boolean_checkbox',
  247.         'weight' => 1,
  248.       ]);
  249.  
  250.     $fields['created'] = BaseFieldDefinition::create('created')
  251.       ->setLabel(t('Created'))
  252.       ->setDescription(t('The time that the entity was created.'));
  253.  
  254.     $fields['changed'] = BaseFieldDefinition::create('changed')
  255.       ->setLabel(t('Changed'))
  256.       ->setDescription(t('The time that the entity was last edited.'));
  257.  
  258.     $fields['revision_translation_affected'] = BaseFieldDefinition::create('boolean')
  259.       ->setLabel(t('Revision translation affected'))
  260.       ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
  261.       ->setReadOnly(TRUE)
  262.       ->setRevisionable(TRUE)
  263.       ->setTranslatable(TRUE);
  264.  
  265.     $fields['map'] = BaseFieldDefinition::create('entity_reference')
  266.       ->setLabel(t('Interactive Map'))
  267.       ->setDescription(t('Where this item should be placed.'))
  268.       ->setRequired(TRUE)
  269.       ->setSetting('target_type', 'interactive_map')
  270.       ->setDisplayConfigurable('form', TRUE)
  271.       ->setDisplayConfigurable('view', TRUE);
  272.  
  273.     $fields['item_category'] = BaseFieldDefinition::create('list_string')
  274.       ->setLabel(t('Map item category'))
  275. //      ->setSetting('allowed_values_function','og_sydneymetrod9_allowed_values_item_category' )
  276.       ->setDisplayConfigurable('form', TRUE)
  277.       ->setDisplayConfigurable('view', TRUE);;
  278.  
  279.     $item_type_desc = '<ul>';
  280.     $item_type_desc .= '<li>' . t('POI will render marker on the location.') . '</li>';
  281.     $item_type_desc .= '<li>' . t('KML  allow editor to upload KML file, it will render instructions defined in KML.') . '</li>';
  282.     $item_type_desc .= '<li>' . t('Use Polyline to create line from several lat/long coordinates.') . '</li>';
  283.     $item_type_desc .= '</ul>';
  284.  
  285.     $fields['item_type'] = BaseFieldDefinition::create('list_string')
  286.       ->setLabel(t('Map item type'))
  287.       ->setDescription($item_type_desc)
  288.       ->setRequired(TRUE)
  289.       ->setSetting('allowed_values', [
  290.         'poi' => t('POI'),
  291.         'kml' => t('KML'),
  292.         'polyline' => t('Polyline'),
  293.       ])
  294.       ->setDefaultValue('poi')
  295.       ->setDisplayOptions('form', [
  296.         'type' => 'options_select',
  297.         'weight' => -2,
  298.       ])
  299.       ->setDisplayConfigurable('form', TRUE)
  300.       ->setDisplayConfigurable('view', TRUE);;
  301.  
  302.  
  303.     return $fields;
  304.   }
  305.  
  306.   public function getItemCategoryData() {
  307.     return [];
  308.   }
  309.  
  310. }
  311.  
Advertisement
Add Comment
Please, Sign In to add comment