Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 27 |
CRAP | |
0.00% |
0 / 242 |
| Node | |
0.00% |
0 / 1 |
|
0.00% |
0 / 27 |
1806 | |
0.00% |
0 / 242 |
| preSave | |
0.00% |
0 / 1 |
20 | |
0.00% |
0 / 11 |
|||
| preSaveRevision | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 5 |
|||
| postSave | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 8 |
|||
| preDelete | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 7 |
|||
| postDelete | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| getType | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| access | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 7 |
|||
| getTitle | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setTitle | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| getCreatedTime | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setCreatedTime | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| isPromoted | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setPromoted | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
| isSticky | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setSticky | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
| isPublished | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setPublished | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
| getOwner | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getOwnerId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setOwnerId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| setOwner | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| getRevisionCreationTime | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setRevisionCreationTime | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| getRevisionAuthor | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| setRevisionAuthorId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
| baseFieldDefinitions | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 152 |
|||
| getCurrentUserId | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\node\Entity\Node. | |
| */ | |
| namespace Drupal\node\Entity; | |
| use Drupal\Core\Entity\ContentEntityBase; | |
| use Drupal\Core\Entity\EntityChangedTrait; | |
| use Drupal\Core\Entity\EntityStorageInterface; | |
| use Drupal\Core\Entity\EntityTypeInterface; | |
| use Drupal\Core\Field\BaseFieldDefinition; | |
| use Drupal\Core\Session\AccountInterface; | |
| use Drupal\node\NodeInterface; | |
| use Drupal\user\UserInterface; | |
| /** | |
| * Defines the node entity class. | |
| * | |
| * @ContentEntityType( | |
| * id = "node", | |
| * label = @Translation("Content"), | |
| * bundle_label = @Translation("Content type"), | |
| * handlers = { | |
| * "storage" = "Drupal\node\NodeStorage", | |
| * "storage_schema" = "Drupal\node\NodeStorageSchema", | |
| * "view_builder" = "Drupal\node\NodeViewBuilder", | |
| * "access" = "Drupal\node\NodeAccessControlHandler", | |
| * "views_data" = "Drupal\node\NodeViewsData", | |
| * "form" = { | |
| * "default" = "Drupal\node\NodeForm", | |
| * "delete" = "Drupal\node\Form\NodeDeleteForm", | |
| * "edit" = "Drupal\node\NodeForm" | |
| * }, | |
| * "route_provider" = { | |
| * "html" = "Drupal\node\Entity\NodeRouteProvider", | |
| * }, | |
| * "list_builder" = "Drupal\node\NodeListBuilder", | |
| * "translation" = "Drupal\node\NodeTranslationHandler" | |
| * }, | |
| * base_table = "node", | |
| * data_table = "node_field_data", | |
| * revision_table = "node_revision", | |
| * revision_data_table = "node_field_revision", | |
| * translatable = TRUE, | |
| * list_cache_contexts = { "user.node_grants:view" }, | |
| * entity_keys = { | |
| * "id" = "nid", | |
| * "revision" = "vid", | |
| * "bundle" = "type", | |
| * "label" = "title", | |
| * "langcode" = "langcode", | |
| * "uuid" = "uuid", | |
| * "status" = "status", | |
| * "uid" = "uid", | |
| * }, | |
| * bundle_entity_type = "node_type", | |
| * field_ui_base_route = "entity.node_type.edit_form", | |
| * common_reference_target = TRUE, | |
| * permission_granularity = "bundle", | |
| * links = { | |
| * "canonical" = "/node/{node}", | |
| * "delete-form" = "/node/{node}/delete", | |
| * "edit-form" = "/node/{node}/edit", | |
| * "version-history" = "/node/{node}/revisions", | |
| * "revision" = "/node/{node}/revisions/{node_revision}/view", | |
| * } | |
| * ) | |
| */ | |
| class Node extends ContentEntityBase implements NodeInterface { | |
| use EntityChangedTrait; | |
| /** | |
| * Whether the node is being previewed or not. | |
| * | |
| * The variable is set to public as it will give a considerable performance | |
| * improvement. See https://www.drupal.org/node/2498919. | |
| * | |
| * @var true|null | |
| * TRUE if the node is being previewed and NULL if it is not. | |
| */ | |
| public $in_preview = NULL; | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function preSave(EntityStorageInterface $storage) { | |
| parent::preSave($storage); | |
| foreach (array_keys($this->getTranslationLanguages()) as $langcode) { | |
| $translation = $this->getTranslation($langcode); | |
| // If no owner has been set explicitly, make the anonymous user the owner. | |
| if (!$translation->getOwner()) { | |
| $translation->setOwnerId(0); | |
| } | |
| } | |
| // If no revision author has been set explicitly, make the node owner the | |
| // revision author. | |
| if (!$this->getRevisionAuthor()) { | |
| $this->setRevisionAuthorId($this->getOwnerId()); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function preSaveRevision(EntityStorageInterface $storage, \stdClass $record) { | |
| parent::preSaveRevision($storage, $record); | |
| if (!$this->isNewRevision() && isset($this->original) && (!isset($record->revision_log) || $record->revision_log === '')) { | |
| // If we are updating an existing node without adding a new revision, we | |
| // need to make sure $entity->revision_log is reset whenever it is empty. | |
| // Therefore, this code allows us to avoid clobbering an existing log | |
| // entry with an empty one. | |
| $record->revision_log = $this->original->revision_log->value; | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function postSave(EntityStorageInterface $storage, $update = TRUE) { | |
| parent::postSave($storage, $update); | |
| // Update the node access table for this node, but only if it is the | |
| // default revision. There's no need to delete existing records if the node | |
| // is new. | |
| if ($this->isDefaultRevision()) { | |
| \Drupal::entityManager()->getAccessControlHandler('node')->writeGrants($this, $update); | |
| } | |
| // Reindex the node when it is updated. The node is automatically indexed | |
| // when it is added, simply by being added to the node table. | |
| if ($update) { | |
| node_reindex_node_search($this->id()); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function preDelete(EntityStorageInterface $storage, array $entities) { | |
| parent::preDelete($storage, $entities); | |
| // Ensure that all nodes deleted are removed from the search index. | |
| if (\Drupal::moduleHandler()->moduleExists('search')) { | |
| foreach ($entities as $entity) { | |
| search_index_clear('node_search', $entity->nid->value); | |
| } | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function postDelete(EntityStorageInterface $storage, array $nodes) { | |
| parent::postDelete($storage, $nodes); | |
| \Drupal::service('node.grant_storage')->deleteNodeRecords(array_keys($nodes)); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getType() { | |
| return $this->bundle(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function access($operation = 'view', AccountInterface $account = NULL, $return_as_object = FALSE) { | |
| if ($operation == 'create') { | |
| return parent::access($operation, $account, $return_as_object); | |
| } | |
| return \Drupal::entityManager() | |
| ->getAccessControlHandler($this->entityTypeId) | |
| ->access($this, $operation, $account, $return_as_object); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getTitle() { | |
| return $this->get('title')->value; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setTitle($title) { | |
| $this->set('title', $title); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getCreatedTime() { | |
| return $this->get('created')->value; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setCreatedTime($timestamp) { | |
| $this->set('created', $timestamp); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function isPromoted() { | |
| return (bool) $this->get('promote')->value; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setPromoted($promoted) { | |
| $this->set('promote', $promoted ? NODE_PROMOTED : NODE_NOT_PROMOTED); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function isSticky() { | |
| return (bool) $this->get('sticky')->value; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setSticky($sticky) { | |
| $this->set('sticky', $sticky ? NODE_STICKY : NODE_NOT_STICKY); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function isPublished() { | |
| return (bool) $this->getEntityKey('status'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setPublished($published) { | |
| $this->set('status', $published ? NODE_PUBLISHED : NODE_NOT_PUBLISHED); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getOwner() { | |
| return $this->get('uid')->entity; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getOwnerId() { | |
| return $this->getEntityKey('uid'); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setOwnerId($uid) { | |
| $this->set('uid', $uid); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setOwner(UserInterface $account) { | |
| $this->set('uid', $account->id()); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getRevisionCreationTime() { | |
| return $this->get('revision_timestamp')->value; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setRevisionCreationTime($timestamp) { | |
| $this->set('revision_timestamp', $timestamp); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getRevisionAuthor() { | |
| return $this->get('revision_uid')->entity; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setRevisionAuthorId($uid) { | |
| $this->set('revision_uid', $uid); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function baseFieldDefinitions(EntityTypeInterface $entity_type) { | |
| $fields['nid'] = BaseFieldDefinition::create('integer') | |
| ->setLabel(t('Node ID')) | |
| ->setDescription(t('The node ID.')) | |
| ->setReadOnly(TRUE) | |
| ->setSetting('unsigned', TRUE); | |
| $fields['uuid'] = BaseFieldDefinition::create('uuid') | |
| ->setLabel(t('UUID')) | |
| ->setDescription(t('The node UUID.')) | |
| ->setReadOnly(TRUE); | |
| $fields['vid'] = BaseFieldDefinition::create('integer') | |
| ->setLabel(t('Revision ID')) | |
| ->setDescription(t('The node revision ID.')) | |
| ->setReadOnly(TRUE) | |
| ->setSetting('unsigned', TRUE); | |
| $fields['type'] = BaseFieldDefinition::create('entity_reference') | |
| ->setLabel(t('Type')) | |
| ->setDescription(t('The node type.')) | |
| ->setSetting('target_type', 'node_type') | |
| ->setReadOnly(TRUE); | |
| $fields['langcode'] = BaseFieldDefinition::create('language') | |
| ->setLabel(t('Language')) | |
| ->setDescription(t('The node language code.')) | |
| ->setTranslatable(TRUE) | |
| ->setRevisionable(TRUE) | |
| ->setDisplayOptions('view', array( | |
| 'type' => 'hidden', | |
| )) | |
| ->setDisplayOptions('form', array( | |
| 'type' => 'language_select', | |
| 'weight' => 2, | |
| )); | |
| $fields['title'] = BaseFieldDefinition::create('string') | |
| ->setLabel(t('Title')) | |
| ->setRequired(TRUE) | |
| ->setTranslatable(TRUE) | |
| ->setRevisionable(TRUE) | |
| ->setSetting('max_length', 255) | |
| ->setDisplayOptions('view', array( | |
| 'label' => 'hidden', | |
| 'type' => 'string', | |
| 'weight' => -5, | |
| )) | |
| ->setDisplayOptions('form', array( | |
| 'type' => 'string_textfield', | |
| 'weight' => -5, | |
| )) | |
| ->setDisplayConfigurable('form', TRUE); | |
| $fields['uid'] = BaseFieldDefinition::create('entity_reference') | |
| ->setLabel(t('Authored by')) | |
| ->setDescription(t('The username of the content author.')) | |
| ->setRevisionable(TRUE) | |
| ->setSetting('target_type', 'user') | |
| ->setDefaultValueCallback('Drupal\node\Entity\Node::getCurrentUserId') | |
| ->setTranslatable(TRUE) | |
| ->setDisplayOptions('view', array( | |
| 'label' => 'hidden', | |
| 'type' => 'author', | |
| 'weight' => 0, | |
| )) | |
| ->setDisplayOptions('form', array( | |
| 'type' => 'entity_reference_autocomplete', | |
| 'weight' => 5, | |
| 'settings' => array( | |
| 'match_operator' => 'CONTAINS', | |
| 'size' => '60', | |
| 'placeholder' => '', | |
| ), | |
| )) | |
| ->setDisplayConfigurable('form', TRUE); | |
| $fields['status'] = BaseFieldDefinition::create('boolean') | |
| ->setLabel(t('Publishing status')) | |
| ->setDescription(t('A boolean indicating whether the node is published.')) | |
| ->setRevisionable(TRUE) | |
| ->setTranslatable(TRUE) | |
| ->setDefaultValue(TRUE); | |
| $fields['created'] = BaseFieldDefinition::create('created') | |
| ->setLabel(t('Authored on')) | |
| ->setDescription(t('The time that the node was created.')) | |
| ->setRevisionable(TRUE) | |
| ->setTranslatable(TRUE) | |
| ->setDisplayOptions('view', array( | |
| 'label' => 'hidden', | |
| 'type' => 'timestamp', | |
| 'weight' => 0, | |
| )) | |
| ->setDisplayOptions('form', array( | |
| 'type' => 'datetime_timestamp', | |
| 'weight' => 10, | |
| )) | |
| ->setDisplayConfigurable('form', TRUE); | |
| $fields['changed'] = BaseFieldDefinition::create('changed') | |
| ->setLabel(t('Changed')) | |
| ->setDescription(t('The time that the node was last edited.')) | |
| ->setRevisionable(TRUE) | |
| ->setTranslatable(TRUE); | |
| $fields['promote'] = BaseFieldDefinition::create('boolean') | |
| ->setLabel(t('Promoted to front page')) | |
| ->setRevisionable(TRUE) | |
| ->setTranslatable(TRUE) | |
| ->setDefaultValue(TRUE) | |
| ->setDisplayOptions('form', array( | |
| 'type' => 'boolean_checkbox', | |
| 'settings' => array( | |
| 'display_label' => TRUE, | |
| ), | |
| 'weight' => 15, | |
| )) | |
| ->setDisplayConfigurable('form', TRUE); | |
| $fields['sticky'] = BaseFieldDefinition::create('boolean') | |
| ->setLabel(t('Sticky at top of lists')) | |
| ->setRevisionable(TRUE) | |
| ->setTranslatable(TRUE) | |
| ->setDefaultValue(FALSE) | |
| ->setDisplayOptions('form', array( | |
| 'type' => 'boolean_checkbox', | |
| 'settings' => array( | |
| 'display_label' => TRUE, | |
| ), | |
| 'weight' => 16, | |
| )) | |
| ->setDisplayConfigurable('form', TRUE); | |
| $fields['revision_timestamp'] = BaseFieldDefinition::create('created') | |
| ->setLabel(t('Revision timestamp')) | |
| ->setDescription(t('The time that the current revision was created.')) | |
| ->setQueryable(FALSE) | |
| ->setRevisionable(TRUE); | |
| $fields['revision_uid'] = BaseFieldDefinition::create('entity_reference') | |
| ->setLabel(t('Revision user ID')) | |
| ->setDescription(t('The user ID of the author of the current revision.')) | |
| ->setSetting('target_type', 'user') | |
| ->setQueryable(FALSE) | |
| ->setRevisionable(TRUE); | |
| $fields['revision_log'] = BaseFieldDefinition::create('string_long') | |
| ->setLabel(t('Revision log message')) | |
| ->setDescription(t('Briefly describe the changes you have made.')) | |
| ->setRevisionable(TRUE) | |
| ->setDefaultValue('') | |
| ->setDisplayOptions('form', array( | |
| 'type' => 'string_textarea', | |
| 'weight' => 25, | |
| 'settings' => array( | |
| 'rows' => 4, | |
| ), | |
| )); | |
| $fields['revision_translation_affected'] = BaseFieldDefinition::create('boolean') | |
| ->setLabel(t('Revision translation affected')) | |
| ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.')) | |
| ->setReadOnly(TRUE) | |
| ->setRevisionable(TRUE) | |
| ->setTranslatable(TRUE); | |
| return $fields; | |
| } | |
| /** | |
| * Default value callback for 'uid' base field definition. | |
| * | |
| * @see ::baseFieldDefinitions() | |
| * | |
| * @return array | |
| * An array of default values. | |
| */ | |
| public static function getCurrentUserId() { | |
| return array(\Drupal::currentUser()->id()); | |
| } | |
| } |