CommentManager::getCountNewComments

public CommentManager::getCountNewComments(EntityInterface $entity, $field_name = NULL, $timestamp = 0)

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 190

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->queryFactory->get('comment')
      ->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;
}
doc_Drupal
2016-10-29 08:50:54
Comments
Leave a Comment

Please login to continue.