You are here

public function CommentManager::getCountNewComments in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/comment/src/CommentManager.php \Drupal\comment\CommentManager::getCountNewComments()

Returns the number of new comments available on a given entity for a user.

Parameters

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

string $field_name: (optional) The field_name to count comments for. Defaults to any field.

int $timestamp: (optional) Time to count from. Defaults to time of last user access the entity.

Return value

int|false The number of new comments or FALSE if the user is not authenticated.

Overrides CommentManagerInterface::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 once https://www.drupal.org/node/1029708 lands.
          $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;
}