You are here

function social_private_message_entity_view_alter in Open Social 8

Same name and namespace in other branches
  1. 8.9 modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  2. 8.2 modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  3. 8.3 modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  4. 8.4 modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  5. 8.5 modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  6. 8.6 modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  7. 8.7 modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  8. 8.8 modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  9. 10.3.x modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  10. 10.0.x modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  11. 10.1.x modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  12. 10.2.x modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()

Implements hook_entity_view_alter().

File

modules/social_features/social_private_message/social_private_message.module, line 155
The Social Privagte Message module.

Code

function social_private_message_entity_view_alter(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display) {

  // Threads.
  if ($entity
    ->getEntityTypeId() === 'private_message_thread') {

    // View mode inbox.
    if ($build['#view_mode'] === 'inbox') {

      /* @var \Drupal\private_message\Entity\PrivateMessageThread $thread */
      $thread = $entity;
      $members = $thread
        ->getMembers();
      $members_string = [];
      $display_name = '';

      // Remove myself from the array.

      /* @var Drupal\user\Entity\User $member */
      foreach ($members as $key => $member) {
        if (Drupal::currentUser()
          ->id() === $member
          ->id()) {
          unset($members[$key]);
        }
        else {
          $members_string[] = $member
            ->getDisplayName();
        }
      }

      // Count the amount of members.
      $member_count = count($members);
      $profile_picture = [];
      if ($member_count === 1) {
        $recipient = end($members);

        // Load compact notification view mode of the attached profile.
        if ($recipient instanceof User) {
          $display_name = $recipient
            ->getDisplayName();
          $storage = \Drupal::entityTypeManager()
            ->getStorage('profile');
          if (!empty($storage)) {
            $user_profile = $storage
              ->loadByUser($recipient, 'profile');
            if ($user_profile) {
              $content = \Drupal::entityTypeManager()
                ->getViewBuilder('profile')
                ->view($user_profile, 'compact_notification');

              // Add to a new field, so twig can render it.
              $profile_picture = $content;
            }
          }
        }
      }

      // Add either the profile picture or the group picture.
      if ($member_count > 1) {
        $build['members']['#markup'] = '<div class="avatar-icon avatar-group-icon avatar-group-icon--medium"></div>';

        // Add members names.
        $build['membernames']['#markup'] = implode(', ', $members_string);
        $build['membernames']['#prefix'] = '<strong>';
        $build['membernames']['#suffix'] = '</strong>';
      }
      else {
        $build['members'] = $profile_picture;

        // Add members name.
        $build['membernames']['#markup'] = $display_name;
        $build['membernames']['#prefix'] = '<strong>';
        $build['membernames']['#suffix'] = '</strong>';
      }
    }
    elseif ($build['#view_mode'] === 'full') {
      $socialPrivateMessageService = Drupal::service('social_private_message.service');
      $socialPrivateMessageService
        ->updateLastThreadCheckTime($entity);
      $build['#prefix'] = '';
      $build['#suffix'] = '';
    }
  }

  // Private message entity.
  if ($entity
    ->getEntityTypeId() === 'private_message') {

    // View mode inbox.
    if ($build['#view_mode'] === 'inbox') {

      // Remove prefix and suffix.
      $build['#prefix'] = '';
      $build['#suffix'] = '';
    }
    elseif ($build['#view_mode'] === 'full') {

      /* @var \Drupal\private_message\Entity\PrivateMessage $entity */
      if (Drupal::currentUser()
        ->id() === $entity
        ->getOwnerId()) {
        $build['#prefix'] = '<div class="message__by-me">' . $build['#prefix'];
        $build['#suffix'] = '</div>' . $build['#suffix'];

        // Current user is 'You'.
        $build['owner'][0]['#plain_text'] = t('You');
      }
    }
  }
}