public function CommentRenderController::buildContent

Overrides Drupal\Core\Entity\EntityRenderController::buildContent().

In addition to modifying the content key on entities, this implementation will also set the node key which all comments carry.

Overrides EntityRenderController::buildContent

File

drupal/core/modules/comment/lib/Drupal/comment/CommentRenderController.php, line 25
Definition of Drupal\comment\CommentRenderController.

Class

CommentRenderController
Render controller for comments.

Namespace

Drupal\comment

Code

public function buildContent(array $entities, array $displays, $view_mode, $langcode = NULL) {
  $return = array();
  if (empty($entities)) {
    return $return;
  }

  // Pre-load associated users into cache to leverage multiple loading.
  $uids = array();
  foreach ($entities as $entity) {
    $uids[] = $entity->uid->target_id;
  }
  user_load_multiple(array_unique($uids));
  parent::buildContent($entities, $displays, $view_mode, $langcode);

  // Load all nodes of all comments at once.
  $nids = array();
  foreach ($entities as $entity) {
    $nids[$entity->nid->target_id] = $entity->nid->target_id;
  }
  $nodes = node_load_multiple($nids);
  foreach ($entities as $entity) {
    if (isset($nodes[$entity->nid->target_id])) {
      $node = $nodes[$entity->nid->target_id];
    }
    else {
      throw new \InvalidArgumentException(t('Invalid node for comment.'));
    }
    $entity->content['#node'] = $node;
    $entity->content['#theme'] = 'comment__node_' . $node
      ->bundle();
    $entity->content['links'] = array(
      '#theme' => 'links__comment',
      '#pre_render' => array(
        'drupal_pre_render_links',
      ),
      '#attributes' => array(
        'class' => array(
          'links',
          'inline',
        ),
      ),
    );
    if (empty($entity->in_preview)) {
      $entity->content['links'][$this->entityType] = array(
        '#theme' => 'links__comment__comment',
        // The "node" property is specified to be present, so no need to check.
        '#links' => comment_links($entity, $node),
        '#attributes' => array(
          'class' => array(
            'links',
            'inline',
          ),
        ),
      );
    }
  }
}