Code Coverage  | 
     ||||||||||
Classes and Traits  | 
      Functions and Methods  | 
      Lines  | 
     ||||||||
| Total |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 9  | 
      CRAP |         | 
      0.00%  | 
      0 / 82  | 
     
| Shortcut |         | 
      0.00%  | 
      0 / 1  | 
              | 
      0.00%  | 
      0 / 9  | 
      156 |         | 
      0.00%  | 
      0 / 82  | 
     
| getTitle |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| setTitle |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| getWeight |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| setWeight |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 3  | 
     |||
| getUrl |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| postSave |         | 
      0.00%  | 
      0 / 1  | 
      6 |         | 
      0.00%  | 
      0 / 5  | 
     |||
| baseFieldDefinitions |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 56  | 
     |||
| getCacheTagsToInvalidate |         | 
      0.00%  | 
      0 / 1  | 
      2 |         | 
      0.00%  | 
      0 / 2  | 
     |||
| sort |         | 
      0.00%  | 
      0 / 1  | 
      12 |         | 
      0.00%  | 
      0 / 7  | 
     |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\shortcut\Entity\Shortcut. | |
| */ | |
| namespace Drupal\shortcut\Entity; | |
| use Drupal\Core\Cache\Cache; | |
| use Drupal\Core\Entity\ContentEntityBase; | |
| use Drupal\Core\Entity\EntityStorageInterface; | |
| use Drupal\Core\Entity\EntityTypeInterface; | |
| use Drupal\Core\Field\BaseFieldDefinition; | |
| use Drupal\link\LinkItemInterface; | |
| use Drupal\shortcut\ShortcutInterface; | |
| /** | |
| * Defines the shortcut entity class. | |
| * | |
| * @property \Drupal\link\LinkItemInterface link | |
| * | |
| * @ContentEntityType( | |
| * id = "shortcut", | |
| * label = @Translation("Shortcut link"), | |
| * handlers = { | |
| * "access" = "Drupal\shortcut\ShortcutAccessControlHandler", | |
| * "form" = { | |
| * "default" = "Drupal\shortcut\ShortcutForm", | |
| * "add" = "Drupal\shortcut\ShortcutForm", | |
| * "edit" = "Drupal\shortcut\ShortcutForm", | |
| * "delete" = "Drupal\shortcut\Form\ShortcutDeleteForm" | |
| * }, | |
| * "translation" = "Drupal\content_translation\ContentTranslationHandler" | |
| * }, | |
| * base_table = "shortcut", | |
| * data_table = "shortcut_field_data", | |
| * translatable = TRUE, | |
| * entity_keys = { | |
| * "id" = "id", | |
| * "uuid" = "uuid", | |
| * "bundle" = "shortcut_set", | |
| * "label" = "title", | |
| * "langcode" = "langcode", | |
| * }, | |
| * links = { | |
| * "canonical" = "/admin/config/user-interface/shortcut/link/{shortcut}", | |
| * "delete-form" = "/admin/config/user-interface/shortcut/link/{shortcut}/delete", | |
| * "edit-form" = "/admin/config/user-interface/shortcut/link/{shortcut}", | |
| * }, | |
| * list_cache_tags = { "config:shortcut_set_list" }, | |
| * bundle_entity_type = "shortcut_set" | |
| * ) | |
| */ | |
| class Shortcut extends ContentEntityBase implements ShortcutInterface { | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getTitle() { | |
| return $this->get('title')->value; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setTitle($link_title) { | |
| $this->set('title', $link_title); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getWeight() { | |
| return $this->get('weight')->value; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setWeight($weight) { | |
| $this->set('weight', $weight); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getUrl() { | |
| return $this->link->first()->getUrl(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function postSave(EntityStorageInterface $storage, $update = TRUE) { | |
| parent::postSave($storage, $update); | |
| // Entity::postSave() calls Entity::invalidateTagsOnSave(), which only | |
| // handles the regular cases. The Shortcut entity has one special case: a | |
| // newly created shortcut is *also* added to a shortcut set, so we must | |
| // invalidate the associated shortcut set's cache tag. | |
| if (!$update) { | |
| Cache::invalidateTags($this->getCacheTagsToInvalidate()); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { | |
| $fields['id'] = BaseFieldDefinition::create('integer') | |
| ->setLabel(t('ID')) | |
| ->setDescription(t('The ID of the shortcut.')) | |
| ->setReadOnly(TRUE) | |
| ->setSetting('unsigned', TRUE); | |
| $fields['uuid'] = BaseFieldDefinition::create('uuid') | |
| ->setLabel(t('UUID')) | |
| ->setDescription(t('The UUID of the shortcut.')) | |
| ->setReadOnly(TRUE); | |
| $fields['shortcut_set'] = BaseFieldDefinition::create('entity_reference') | |
| ->setLabel(t('Shortcut set')) | |
| ->setDescription(t('The bundle of the shortcut.')) | |
| ->setSetting('target_type', 'shortcut_set') | |
| ->setRequired(TRUE); | |
| $fields['title'] = BaseFieldDefinition::create('string') | |
| ->setLabel(t('Name')) | |
| ->setDescription(t('The name of the shortcut.')) | |
| ->setRequired(TRUE) | |
| ->setTranslatable(TRUE) | |
| ->setSetting('max_length', 255) | |
| ->setDisplayOptions('form', array( | |
| 'type' => 'string_textfield', | |
| 'weight' => -10, | |
| 'settings' => array( | |
| 'size' => 40, | |
| ), | |
| )); | |
| $fields['weight'] = BaseFieldDefinition::create('integer') | |
| ->setLabel(t('Weight')) | |
| ->setDescription(t('Weight among shortcuts in the same shortcut set.')); | |
| $fields['link'] = BaseFieldDefinition::create('link') | |
| ->setLabel(t('Path')) | |
| ->setDescription(t('The location this shortcut points to.')) | |
| ->setRequired(TRUE) | |
| ->setSettings(array( | |
| 'link_type' => LinkItemInterface::LINK_INTERNAL, | |
| 'title' => DRUPAL_DISABLED, | |
| )) | |
| ->setDisplayOptions('form', array( | |
| 'type' => 'link_default', | |
| 'weight' => 0, | |
| )) | |
| ->setDisplayConfigurable('form', TRUE); | |
| $fields['langcode'] = BaseFieldDefinition::create('language') | |
| ->setLabel(t('Language')) | |
| ->setDescription(t('The language code of the shortcut.')) | |
| ->setTranslatable(TRUE) | |
| ->setDisplayOptions('view', array( | |
| 'type' => 'hidden', | |
| )) | |
| ->setDisplayOptions('form', array( | |
| 'type' => 'language_select', | |
| 'weight' => 2, | |
| )); | |
| return $fields; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getCacheTagsToInvalidate() { | |
| return $this->shortcut_set->entity->getCacheTags(); | |
| } | |
| /** | |
| * Sort shortcut objects. | |
| * | |
| * Callback for uasort(). | |
| * | |
| * @param \Drupal\shortcut\ShortcutInterface $a | |
| * First item for comparison. | |
| * @param \Drupal\shortcut\ShortcutInterface $b | |
| * Second item for comparison. | |
| * | |
| * @return int | |
| * The comparison result for uasort(). | |
| */ | |
| public static function sort(ShortcutInterface $a, ShortcutInterface $b) { | |
| $a_weight = $a->getWeight(); | |
| $b_weight = $b->getWeight(); | |
| if ($a_weight == $b_weight) { | |
| return strnatcasecmp($a->getTitle(), $b->getTitle()); | |
| } | |
| return ($a_weight < $b_weight) ? -1 : 1; | |
| } | |
| } |