function CommentManager::getCountNewComments

Same name and namespace in other branches
  1. 9 core/modules/comment/src/CommentManager.php \Drupal\comment\CommentManager::getCountNewComments()
  2. 8.9.x core/modules/comment/src/CommentManager.php \Drupal\comment\CommentManager::getCountNewComments()
  3. 11.x core/modules/comment/src/CommentManager.php \Drupal\comment\CommentManager::getCountNewComments()

File

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

Class

CommentManager
Comment manager contains common functions to manage comment fields.

Namespace

Drupal\comment

Code

public function getCountNewComments(EntityInterface $entity, $field_name = NULL, $timestamp = 0) {
  // @todo Replace module handler with optional history service injection
  //   after https://www.drupal.org/node/2081585.
  if ($this->currentUser
    ->isAuthenticated() && $this->moduleHandler
    ->moduleExists('history')) {
    // Retrieve the timestamp at which the current user last viewed this entity.
    if (!$timestamp) {
      if ($entity->getEntityTypeId() == 'node') {
        $timestamp = history_read($entity->id());
      }
      else {
        $function = $entity->getEntityTypeId() . '_last_viewed';
        if (function_exists($function)) {
          $timestamp = $function($entity->id());
        }
        else {
          // Default to 30 days ago.
          // @todo Remove this else branch when we have a generic
          //   HistoryRepository service in https://www.drupal.org/node/3267011.
          $timestamp = COMMENT_NEW_LIMIT;
        }
      }
    }
    $timestamp = $timestamp > HISTORY_READ_LIMIT ? $timestamp : HISTORY_READ_LIMIT;
    // Use the timestamp to retrieve the number of new comments.
    $query = $this->entityTypeManager
      ->getStorage('comment')
      ->getQuery()
      ->accessCheck(TRUE)
      ->condition('entity_type', $entity->getEntityTypeId())
      ->condition('entity_id', $entity->id())
      ->condition('created', $timestamp, '>')
      ->condition('status', CommentInterface::PUBLISHED);
    if ($field_name) {
      // Limit to a particular field.
      $query->condition('field_name', $field_name);
    }
    return $query->count()
      ->execute();
  }
  return FALSE;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.