Node.php 6.37 KB
Newer Older
1 2 3 4
<?php

/**
 * @file
5
 * Definition of Drupal\node\Entity\Node.
6 7
 */

8
namespace Drupal\node\Entity;
9

10
use Drupal\Core\Entity\EntityNG;
11
use Drupal\Core\Entity\EntityStorageControllerInterface;
12
use Drupal\Core\Entity\Annotation\EntityType;
13
use Drupal\Core\Annotation\Translation;
14
use Drupal\node\NodeInterface;
15 16 17

/**
 * Defines the node entity class.
18
 *
19
 * @EntityType(
20
 *   id = "node",
21
 *   label = @Translation("Content"),
22
 *   bundle_label = @Translation("Content type"),
23
 *   module = "node",
24 25 26 27 28
 *   controllers = {
 *     "storage" = "Drupal\node\NodeStorageController",
 *     "render" = "Drupal\node\NodeRenderController",
 *     "access" = "Drupal\node\NodeAccessController",
 *     "form" = {
29
 *       "default" = "Drupal\node\NodeFormController",
30
 *       "delete" = "Drupal\node\Form\NodeDeleteForm",
31
 *       "edit" = "Drupal\node\NodeFormController"
32 33
 *     },
 *     "translation" = "Drupal\node\NodeTranslationController"
34 35
 *   },
 *   base_table = "node",
36 37
 *   data_table = "node_field_data",
 *   revision_table = "node_field_revision",
38 39
 *   uri_callback = "node_uri",
 *   fieldable = TRUE,
40
 *   translatable = TRUE,
41 42 43 44 45 46 47 48 49
 *   entity_keys = {
 *     "id" = "nid",
 *     "revision" = "vid",
 *     "bundle" = "type",
 *     "label" = "title",
 *     "uuid" = "uuid"
 *   },
 *   bundle_keys = {
 *     "bundle" = "type"
50
 *   },
51
 *   route_base_path = "admin/structure/types/manage/{bundle}",
52 53 54 55 56 57
 *   permission_granularity = "bundle",
 *   links = {
 *     "canonical" = "/node/{node}",
 *     "edit-form" = "/node/{node}/edit",
 *     "version-history" = "/node/{node}/revisions"
 *   }
58
 * )
59
 */
60
class Node extends EntityNG implements NodeInterface {
61 62

  /**
63
   * Implements Drupal\Core\Entity\EntityInterface::id().
64
   */
65 66 67
  public function id() {
    return $this->get('nid')->value;
  }
68

69
  /**
70
   * Overrides Drupal\Core\Entity\Entity::getRevisionId().
71
   */
72 73 74
  public function getRevisionId() {
    return $this->get('vid')->value;
  }
75

76
  /**
77
   * {@inheritdoc}
78
   */
79 80 81 82
  public function preSave(EntityStorageControllerInterface $storage_controller) {
    // Before saving the node, set changed and revision times.
    $this->changed->value = REQUEST_TIME;
  }
83 84

  /**
85
   * {@inheritdoc}
86
   */
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
  public function preSaveRevision(EntityStorageControllerInterface $storage_controller, \stdClass $record) {
    if ($this->newRevision) {
      // When inserting either a new node or a new node revision, $node->log
      // must be set because {node_field_revision}.log is a text column and
      // therefore cannot have a default value. However, it might not be set at
      // this point (for example, if the user submitting a node form does not
      // have permission to create revisions), so we ensure that it is at least
      // an empty string in that case.
      // @todo Make the {node_field_revision}.log column nullable so that we
      //   can remove this check.
      if (!isset($record->log)) {
        $record->log = '';
      }
    }
    elseif (isset($this->original) && (!isset($record->log) || $record->log === '')) {
      // If we are updating an existing node without adding a new revision, we
      // need to make sure $entity->log is reset whenever it is empty.
      // Therefore, this code allows us to avoid clobbering an existing log
      // entry with an empty one.
106
      $record->log = $this->original->log->value;
107 108
    }
  }
109 110

  /**
111
   * {@inheritdoc}
112
   */
113 114 115 116 117
  public function postSave(EntityStorageControllerInterface $storage_controller, $update = TRUE) {
    // 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()) {
118
      \Drupal::entityManager()->getAccessController('node')->writeGrants($this, $update);
119 120
    }
  }
121 122

  /**
123
   * {@inheritdoc}
124
   */
125 126
  public static function preDelete(EntityStorageControllerInterface $storage_controller, array $entities) {
    if (module_exists('search')) {
127
      foreach ($entities as $entity) {
128 129 130 131
        search_reindex($entity->nid->value, 'node');
      }
    }
  }
132

133 134 135 136 137 138 139 140 141 142 143 144 145 146
  /**
   * {@inheritdoc}
   */
  public function getType() {
    return $this->bundle();
  }

  /**
   * {@inheritdoc}
   */
  public function getTitle() {
    return $this->get('title')->value;
  }

147
  /**
148
   * {@inheritdoc}
149
   */
150 151 152 153
  public function setTitle($title) {
    $this->set('title', $title);
    return $this;
  }
154 155

  /**
156
   * {@inheritdoc}
157
   */
158 159 160
  public function getCreatedTime() {
    return $this->get('created')->value;
  }
161 162 163


  /**
164
   * {@inheritdoc}
165
   */
166 167 168 169
  public function setCreatedTime($timestamp) {
    $this->set('created', $timestamp);
    return $this;
  }
170 171

  /**
172
   * {@inheritdoc}
173
   */
174 175 176
  public function getChangedTime() {
    return $this->get('changed')->value;
  }
177 178

  /**
179
   * {@inheritdoc}
180
   */
181 182 183
  public function isPromoted() {
    return (bool) $this->get('promote')->value;
  }
184 185

  /**
186
   * {@inheritdoc}
187
   */
188
  public function setPromoted($promoted) {
189
    $this->set('promote', $promoted ? NODE_PROMOTED : NODE_NOT_PROMOTED);
190 191
    return $this;
  }
192 193

  /**
194
   * {@inheritdoc}
195
   */
196 197 198
  public function isSticky() {
    return (bool) $this->get('sticky')->value;
  }
199 200

  /**
201
   * {@inheritdoc}
202
   */
203 204 205 206
  public function setSticky($sticky) {
    $this->set('sticky', $sticky ? NODE_STICKY : NODE_NOT_STICKY);
    return $this;
  }
207
  /**
208
   * {@inheritdoc}
209
   */
210 211 212
  public function isPublished() {
    return (bool) $this->get('status')->value;
  }
213

214
  /**
215
   * {@inheritdoc}
216
   */
217 218 219
  public function setPublished($published) {
    $this->set('status', $published ? NODE_PUBLISHED : NODE_NOT_PUBLISHED);
    return $this;
220 221 222
  }

  /**
223
   * {@inheritdoc}
224
   */
225
  public function getAuthor() {
226
    return $this->get('uid')->entity;
227
  }
228 229

  /**
230
   * {@inheritdoc}
231
   */
232 233
  public function getAuthorId() {
    return $this->get('uid')->target_id;
234
  }
235

236 237 238
  /**
   * {@inheritdoc}
   */
239 240 241
  public function setAuthorId($uid) {
    $this->set('uid', $uid);
    return $this;
242 243 244 245 246
  }

  /**
   * {@inheritdoc}
   */
247 248
  public function getRevisionCreationTime() {
    return $this->get('revision_timestamp')->value;
249 250 251 252 253
  }

  /**
   * {@inheritdoc}
   */
254 255 256
  public function setRevisionCreationTime($timestamp) {
    $this->set('revision_timestamp', $timestamp);
    return $this;
257 258
  }

259 260 261
  /**
   * {@inheritdoc}
   */
262 263
  public function getRevisionAuthor() {
    return $this->get('revision_uid')->entity;
264 265
  }

266 267 268
  /**
   * {@inheritdoc}
   */
269 270 271
  public function setRevisionAuthorId($uid) {
    $this->set('revision_uid', $uid);
    return $this;
272 273
  }

274
}