You are here

function social_activity_social_user_account_header_items in Open Social 8.9

Same name and namespace in other branches
  1. 8.4 modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()
  2. 8.5 modules/social_features/social_activity/social_activity.module \social_activity_social_user_account_header_items()
  3. 8.6 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 27
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 [];
  }

  // Get the total amount of notifications for the user.
  $num_notifications = social_activity_social_account_notifications_counter($context['user']);
  return [
    'notifications' => [
      '#type' => 'account_header_element',
      '#wrapper_attributes' => [
        'class' => [
          'desktop',
          'notification-bell',
        ],
      ],
      '#title' => new TranslatableMarkup('Notification Centre'),
      '#icon' => $num_notifications > 0 ? 'notifications' : 'notifications_none',
      '#label' => new TranslatableMarkup('Notifications'),
      '#url' => Url::fromRoute('view.activity_stream_notifications.page_1'),
      '#notification_count' => $num_notifications,
      '#weight' => 800,
      'header' => [
        '#wrapper_attributes' => [
          'class' => 'dropdown-header',
        ],
        '#markup' => new TranslatableMarkup('Notification Centre'),
      ],
      'header-divider' => [
        '#wrapper_attributes' => [
          'class' => 'divider',
        ],
        '#markup' => '',
      ],
      // Element to contain the link for ajaxified view for notifications.
      'load_link' => [
        '#title' => '',
        '#type' => 'link',
        '#url' => Url::fromRoute('activity_creator.stream.notifications'),
        '#attributes' => [
          'class' => 'use-ajax',
        ],
      ],
      'notifications' => [
        '#wrapper_attributes' => [
          'class' => 'js-notification-center-wrapper',
        ],
        // @todo: Change ajax throbber to opensocial spinner.
        // @see: https://www.drupal.org/project/social/issues/3074740
        '#markup' => '<div className="spinner">
      <div className="bounce1"></div>
      <div className="bounce2"></div>
      <div className="bounce3"></div>
    </div>',
        '#attached' => [
          'library' => [
            'core/drupal.ajax',
            'activity_creator/activity_creator.notifications',
          ],
        ],
        '#cache' => [
          'max-age' => 0,
        ],
      ],
      '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>',
      ],
    ],
  ];
}