diff core/modules/comment/src/CommentFieldItemList.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/modules/comment/src/CommentFieldItemList.php	Thu Jul 05 14:24:15 2018 +0000
@@ -0,0 +1,66 @@
+<?php
+
+namespace Drupal\comment;
+
+use Drupal\Core\Access\AccessResult;
+use Drupal\Core\Field\FieldItemList;
+use Drupal\Core\Session\AccountInterface;
+
+/**
+ * Defines a item list class for comment fields.
+ */
+class CommentFieldItemList extends FieldItemList {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function get($index) {
+    // The Field API only applies the "field default value" to newly created
+    // entities. In the specific case of the "comment status", though, we need
+    // this default value to be also applied for existing entities created
+    // before the comment field was added, which have no value stored for the
+    // field.
+    if ($index == 0 && empty($this->list)) {
+      $field_default_value = $this->getFieldDefinition()->getDefaultValue($this->getEntity());
+      return $this->appendItem($field_default_value[0]);
+    }
+    return parent::get($index);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function offsetExists($offset) {
+    // For consistency with what happens in get(), we force offsetExists() to
+    // be TRUE for delta 0.
+    if ($offset === 0) {
+      return TRUE;
+    }
+    return parent::offsetExists($offset);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function access($operation = 'view', AccountInterface $account = NULL, $return_as_object = FALSE) {
+    if ($operation === 'edit') {
+      // Only users with administer comments permission can edit the comment
+      // status field.
+      $result = AccessResult::allowedIfHasPermission($account ?: \Drupal::currentUser(), 'administer comments');
+      return $return_as_object ? $result : $result->isAllowed();
+    }
+    if ($operation === 'view') {
+      // Only users with either post comments or access comments permisison can
+      // view the field value. The formatter,
+      // Drupal\comment\Plugin\Field\FieldFormatter\CommentDefaultFormatter,
+      // takes care of showing the thread and form based on individual
+      // permissions, so if a user only has ‘post comments’ access, only the
+      // form will be shown and not the comments.
+      $result = AccessResult::allowedIfHasPermission($account ?: \Drupal::currentUser(), 'access comments')
+        ->orIf(AccessResult::allowedIfHasPermission($account ?: \Drupal::currentUser(), 'post comments'));
+      return $return_as_object ? $result : $result->isAllowed();
+    }
+    return parent::access($operation, $account, $return_as_object);
+  }
+
+}