CommentManager::forbiddenMessage

public CommentManager::forbiddenMessage(EntityInterface $entity, $field_name)

Provides a message if posting comments is forbidden.

If authenticated users can post comments, a message is returned that prompts the anonymous user to log in (or register, if applicable) that redirects to entity comment form. Otherwise, no message is returned.

Parameters

\Drupal\Core\Entity\EntityInterface $entity: The entity to which comments are attached to.

string $field_name: The field name on the entity to which comments are attached to.

Return value

string HTML for a "you can't post comments" notice.

Overrides CommentManagerInterface::forbiddenMessage

File

core/modules/comment/src/CommentManager.php, line 145

Class

CommentManager
Comment manager contains common functions to manage comment fields.

Namespace

Drupal\comment

Code

public function forbiddenMessage(EntityInterface $entity, $field_name) {
  if (!isset($this->authenticatedCanPostComments)) {
    // We only output a link if we are certain that users will get the
    // permission to post comments by logging in.
    $this->authenticatedCanPostComments = $this->entityManager
      ->getStorage('user_role')
      ->load(RoleInterface::AUTHENTICATED_ID)
      ->hasPermission('post comments');
  }

  if ($this->authenticatedCanPostComments) {
    // We cannot use the redirect.destination service here because these links
    // sometimes appear on /node and taxonomy listing pages.
    if ($entity->get($field_name)->getFieldDefinition()->getSetting('form_location') == CommentItemInterface::FORM_SEPARATE_PAGE) {
      $comment_reply_parameters = [
        'entity_type' => $entity->getEntityTypeId(),
        'entity' => $entity->id(),
        'field_name' => $field_name,
      ];
      $destination = array('destination' => $this->url('comment.reply', $comment_reply_parameters, array('fragment' => 'comment-form')));
    }
    else {
      $destination = array('destination' => $entity->url('canonical', array('fragment' => 'comment-form')));
    }

    if ($this->userConfig->get('register') != USER_REGISTER_ADMINISTRATORS_ONLY) {
      // Users can register themselves.
      return $this->t('<a href=":login">Log in</a> or <a href=":register">register</a> to post comments', array(
        ':login' => $this->urlGenerator->generateFromRoute('user.login', array(), array('query' => $destination)),
        ':register' => $this->urlGenerator->generateFromRoute('user.register', array(), array('query' => $destination)),
      ));
    }
    else {
      // Only admins can add new users, no public registration.
      return $this->t('<a href=":login">Log in</a> to post comments', array(
        ':login' => $this->urlGenerator->generateFromRoute('user.login', array(), array('query' => $destination)),
      ));
    }
  }
  return '';
}
doc_Drupal
2016-10-29 08:50:53
Comments
Leave a Comment

Please login to continue.