message_notification-1.0.1-beta1/message_notification.module
message_notification.module
<?php /** * @file * Contains message_notification.module. */ use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Field\BaseFieldDefinition; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\Url; /** * Implements hook_toolbar(). */ function message_notification_toolbar() { $user = \Drupal::currentUser(); $items = []; $items['notifications'] = [ '#cache' => [ 'contexts' => [ 'user', ], ], ]; if ($user->isAuthenticated()) { $items['notifications'] += [ '#type' => 'toolbar_item', 'tab' => [ '#type' => 'link', '#title' => t('Notifications'), '#url' => URL::fromRoute('<none>'), '#attributes' => [ 'title' => t('Notifications'), 'class' => ['toolbar-icon', 'toolbar-icon-notifications'], ], ], 'tray' => [ 'children' => [ '#lazy_builder' => [ 'message_notification.lazy_builders:lazyNotifications', [], ], '#create_placeholder' => TRUE, '#cache' => [ 'tags' => ['message_list'], 'contexts' => ['user'], ], ], ], '#weight' => -5, '#attached' => [ 'library' => [ 'message_notification/notification_list', 'message_notification/notification_counter', 'message_notification/notification_toolbar', ], ], ]; } return $items; } /** * Implements hook_entity_base_field_info(). */ function message_notification_entity_base_field_info(EntityTypeInterface $entity_type) { if ($entity_type->id() === 'message') { $fields['recipients'] = BaseFieldDefinition::create('entity_reference') ->setLabel(t('Recipients list')) ->setDescription(t('List of users that received message.')) ->setSetting('target_type', 'user') ->setSetting('handler', 'default') ->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED) ->setDisplayConfigurable('view', TRUE) ->setDisplayConfigurable('form', TRUE); return $fields; } } /** * Implements hook_preprocess_HOOK(). */ function message_notification_preprocess_toolbar(array &$variables) { if (isset($variables['tabs']['notifications'])) { $variables['tabs']['notifications']['attributes']->addClass('toolbar-tab__notification'); } } /** * Implements template_preprocess_HOOK(). */ function message_notification_preprocess_message__notification(array &$variables) { /** @var \Drupal\message\MessageInterface $message */ $message = $variables['message']; $owner = $message->getOwner(); if (!$owner->get('user_picture')->isEmpty()) { $variables['user_picture'] = $owner ->get('user_picture') ->view('notification'); } else { $variables['user_first_letter'] = mb_substr($owner->getDisplayName(), 0, 1); } $variables['created'] = $variables['message']->getCreatedTime(); } /** * Implements hook_theme_registry_alter(). */ function message_notification_theme_registry_alter(array &$theme_registry) { if (isset($theme_registry['message__notification'])) { $theme_registry['message__notification']['path'] = \Drupal::service('module_handler')->getModule('message_notification')->getPath() . '/templates'; $theme_registry['message__notification']['template'] = 'message--notification'; } }