You are here

function social_private_message_entity_view_alter in Open Social 8.3

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 modules/social_features/social_private_message/social_private_message.module \social_private_message_entity_view_alter()
  3. 8.2 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 221
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') {

    /* @var \Drupal\private_message\Entity\PrivateMessageThread $thread */
    $thread =& $entity;
    $only_exist_members = $thread
      ->getMembers();

    // View mode inbox.
    if ($build['#view_mode'] === 'inbox') {
      $members_with_deleted = $thread
        ->get('members')
        ->getValue();
      $members_string = [];
      $display_name = '';
      foreach (array_keys($members_with_deleted) as $key) {
        if (isset($only_exist_members[$key])) {

          /** @var \Drupal\user\UserInterface $member */
          $member = $only_exist_members[$key];
          if (\Drupal::currentUser()
            ->id() === $member
            ->id()) {
            unset($members_with_deleted[$key], $only_exist_members[$key]);
          }
          else {
            $members_string[] = $member
              ->getDisplayName();
          }
        }
        else {
          $members_string[] = t('Deleted user');
        }
      }

      // Count the amount of members.
      $member_count = count($members_with_deleted);
      $profile_picture = [];
      if ($member_count === 1) {
        $recipient = end($only_exist_members);
        if ($recipient instanceof UserInterface) {
          $display_name = $recipient
            ->getDisplayName();
        }
        else {
          $display_name = t('Deleted user');
          $recipient = User::load(1);
        }

        // Load compact notification view mode of the attached profile.
        if ($recipient instanceof User) {
          $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'] = '';
      if ($display
        ->getComponent('private_message_form') && count($only_exist_members) == 1) {
        $build['private_message_form'] = NULL;
      }
    }
  }
  elseif ($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') {
      $wrapper_class = NULL;

      /* @var \Drupal\private_message\Entity\PrivateMessage $entity */
      if (\Drupal::currentUser()
        ->id() === $entity
        ->getOwnerId()) {
        $wrapper_class = 'message__by-me';

        // Current user is 'You'.
        $build['owner'][0]['#plain_text'] = t('You');
      }
      elseif (empty($entity
        ->getOwner())) {
        $wrapper_class = 'message__deleted';
      }
      if (!empty($wrapper_class)) {
        $build['#prefix'] = '<div class="' . $wrapper_class . '">' . $build['#prefix'];
        $build['#suffix'] = '</div>' . $build['#suffix'];
      }
    }
  }
}