You are here

function social_activity_social_user_account_header_items in Open Social 8.6

Same name and namespace in other branches
  1. 8.9 modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()
  2. 8.4 modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()
  3. 8.5 modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()
  4. 8.7 modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()
  5. 8.8 modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()
  6. 10.3.x modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()
  7. 10.0.x modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()
  8. 10.1.x modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()
  9. 10.2.x modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()

Implements hook_social_user_account_header_items().

Adds the Notification Center to the account header block.

File

modules/social_features/social_activity/social_activity.module, line 17
The Social activity module.

Code

function social_activity_social_user_account_header_items(array $context) {

  // We require a valid user to load the notifications for.
  if (empty($context['user'])) {
    return [];
  }
  $account = $context['user'];
  $notifications_view = views_embed_view('activity_stream_notifications', 'block_1');

  // Mark all notifications as seen.
  $notifications_view['#attached'] = [
    'library' => [
      'activity_creator/activity_creator.notifications',
    ],
  ];

  // Make sure we check if attached is part of the render array.
  if (!isset($notifications_view['#attached'])) {
    $notifications_view['#attached'] = [];
  }
  if (!isset($notifications_view['#attached']['library'])) {
    $notifications_view['#attached']['library'] = [];
  }
  $notifications_view['#attached']['library'][] = 'activity_creator/activity_creator.notifications';
  $account_notifications = \Drupal::service('activity_creator.activity_notifications');
  $num_notifications = count($account_notifications
    ->getNotifications($account, [
    ACTIVITY_STATUS_RECEIVED,
  ]));
  return [
    'notifications' => [
      '#type' => 'account_header_element',
      '#wrapper_attributes' => [
        'class' => [
          'desktop',
          'notification-bell',
        ],
      ],
      '#title' => new TranslatableMarkup('Notification Centre'),
      '#url' => Url::fromRoute('<none>'),
      '#icon' => $num_notifications > 0 ? 'notifications' : 'notifications_none',
      '#label' => new TranslatableMarkup('Notifications'),
      '#notification_count' => $num_notifications,
      '#weight' => 800,
      'header' => [
        '#wrapper_attributes' => [
          'class' => 'dropdown-header',
        ],
        '#markup' => new TranslatableMarkup('Notification Centre'),
      ],
      'header-divider' => [
        '#wrapper_attributes' => [
          'class' => 'divider',
        ],
        '#markup' => '',
      ],
      'notifications' => $notifications_view,
      'footer-divider' => [
        '#wrapper_attributes' => [
          'class' => 'divider',
        ],
        '#markup' => '',
      ],
      'footer' => [
        '#wrapper_attributes' => [
          'class' => 'dropdown-header',
        ],
        '#type' => 'link',
        '#title' => [
          '#type' => 'inline_template',
          '#template' => "{% trans %}All notifications{% endtrans %} <svg class='btn-icon icon-black pull-right'><use xlink:href='#icon-navigate_next'></use></svg>",
          '#allowed_tags' => [
            'use',
            'svg',
          ],
        ],
        '#url' => Url::fromRoute('view.activity_stream_notifications.page_1'),
        '#attributes' => [
          'title' => new TranslatableMarkup('View all notifications'),
          'class' => [
            'block',
            'clearfix',
          ],
        ],
        // The link is wrapped in a container to avoid .dropdown-menu > li > a
        // styling.
        '#prefix' => '<div>',
        '#suffix' => '</div>',
      ],
    ],
  ];
}