You are here

public function PostViewBuilder::buildComponents in Open Social 8.9

Same name and namespace in other branches
  1. 8 modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  2. 8.2 modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  3. 8.3 modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  4. 8.4 modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  5. 8.5 modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  6. 8.6 modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  7. 8.7 modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  8. 8.8 modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  9. 10.3.x modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  10. 10.0.x modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  11. 10.1.x modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()
  12. 10.2.x modules/social_features/social_post/src/PostViewBuilder.php \Drupal\social_post\PostViewBuilder::buildComponents()

Builds the component fields and properties of a set of entities.

Parameters

&$build: The renderable array representing the entity content.

\Drupal\Core\Entity\EntityInterface[] $entities: The entities whose content is being built.

\Drupal\Core\Entity\Display\EntityViewDisplayInterface[] $displays: The array of entity view displays holding the display options configured for the entity components, keyed by bundle name.

string $view_mode: The view mode in which the entity is being viewed.

Overrides EntityViewBuilder::buildComponents

File

modules/social_features/social_post/src/PostViewBuilder.php, line 65

Class

PostViewBuilder
Render controller for posts.

Namespace

Drupal\social_post

Code

public function buildComponents(array &$build, array $entities, array $displays, $view_mode) {
  if (empty($entities)) {
    return;
  }
  parent::buildComponents($build, $entities, $displays, $view_mode);
  foreach ($entities as $id => $entity) {
    $build[$id]['links'] = [
      '#lazy_builder' => [
        get_called_class() . '::renderLinks',
        [
          $entity
            ->id(),
          $view_mode,
          $entity
            ->language()
            ->getId(),
          !empty($entity->in_preview),
        ],
      ],
    ];
  }
  if ($view_mode != 'full') {
    return;
  }
  $query = \Drupal::database()
    ->select('message_field_data', 'm')
    ->fields('m', [
    'template',
  ]);
  $query
    ->innerJoin('activity__field_activity_message', 't', 'm.mid = t.field_activity_message_target_id');
  $query
    ->innerJoin('activity__field_activity_entity', 'e', 'e.entity_id = t.entity_id');
  $query
    ->fields('e', [
    'field_activity_entity_target_id',
  ]);
  $query
    ->condition('e.field_activity_entity_target_type', $entity
    ->getEntityTypeId());
  $query
    ->condition('e.field_activity_entity_target_id', $entity
    ->id());
  $query
    ->innerJoin('activity__field_activity_destinations', 'd', 'd.entity_id = t.entity_id');
  $query
    ->condition('field_activity_destinations_value', [
    'stream_group',
    'stream_profile',
  ], 'IN');
  $template_ids = $query
    ->execute()
    ->fetchAllKeyed(1, 0);
  $template_types = [
    'create_post_group',
    'create_post_profile_stream',
  ];
  foreach ($entities as $id => $entity) {
    $template_id = $template_ids[$entity
      ->id()];
    if (!(in_array($template_id, $template_ids) && in_array($template_id, $template_types))) {
      continue;
    }
    $account = $entity
      ->getOwner();
    $replacements = [
      '[message:author:url:absolute]' => $account
        ->toLink()
        ->getUrl()
        ->toString(),
      '[message:author:display-name]' => $account
        ->getDisplayName(),
    ];
    if ($template_id == 'create_post_group') {
      $group_id = $this->socialGroupHelperService
        ->getGroupFromEntity([
        'target_type' => $entity
          ->getEntityTypeId(),
        'target_id' => $entity
          ->id(),
      ]);
      if (empty($group_id)) {
        continue;
      }
      $group = Group::load($group_id);
      $replacements['[message:gurl]'] = $group
        ->toLink()
        ->getUrl()
        ->toString();
      $replacements['[message:gtitle]'] = $group
        ->label();
    }
    else {
      $query = \Drupal::database()
        ->select('activity__field_activity_recipient_user', 'r')
        ->fields('r', [
        'field_activity_recipient_user_target_id',
      ]);
      $query
        ->innerJoin('activity__field_activity_entity', 'e', 'e.entity_id = r.entity_id');
      $query
        ->condition('e.field_activity_entity_target_type', $entity
        ->getEntityTypeId());
      $query
        ->condition('e.field_activity_entity_target_id', $entity
        ->id());
      $query
        ->innerJoin('activity__field_activity_destinations', 'd', 'd.entity_id = r.entity_id');
      $query
        ->condition('field_activity_destinations_value', 'stream_profile');
      $account = User::load($query
        ->execute()
        ->fetchField());
      $replacements['[message:recipient-user-url]'] = $account
        ->toLink()
        ->getUrl()
        ->toString();
      $replacements['[activity:field_activity_recipient_user_display_name]'] = $account
        ->getDisplayName();
    }
    $outputs = MessageTemplate::load($template_id)
      ->getText();
    $output = reset($outputs)
      ->__toString();
    $build[$id]['user_id'] = [
      '#markup' => strtr($output, $replacements),
    ];
  }
}