localgov_alert_banner-1.8.5/localgov_alert_banner.module

localgov_alert_banner.module
<?php

/**
 * @file
 * Contains localgov_alert_banner.module.
 */

declare(strict_types=1);

use Drupal\Core\Cache\Cache;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\user\RoleInterface;

/**
 * Implements hook_help().
 */
function localgov_alert_banner_help($route_name, RouteMatchInterface $route_match): string|\Stringable|array|null {
  switch ($route_name) {
    // Main module help for the localgov_alert_banner module.
    case 'help.page.localgov_alert_banner':
      $output = '';
      $output .= '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('Alert Banner Support module') . '</p>';
      return $output;

    default:
      return NULL;
  }
}

/**
 * Implements hook_preprocess_localgov_alert_banner().
 */
function localgov_alert_banner_preprocess(&$variables): void {

  if (isset($variables['elements']['#localgov_alert_banner'])) {

    // Get token.
    $token = $variables['elements']['#localgov_alert_banner']->getToken();

    // Add a hidden class.
    $variables['attributes']['class'][] = 'hidden';

    // Token as attribute.
    $variables['attributes']['data-dismiss-alert-token'] = $token;

    // Remove the content moderation form if it is present.
    // Do this only on the confirmation form page.
    $route_match = \Drupal::routeMatch();
    $route_name = $route_match->getRouteName();
    if ($route_name == 'entity.localgov_alert_banner.status_form') {
      unset($variables['content']['content_moderation_control']);
    }

    // Set is_front variable.
    try {
      $variables['is_front'] = \Drupal::service('path.matcher')->isFrontPage();
    }
    catch (Exception $e) {
      $variables['is_front'] = FALSE;
    }
  }
}

/**
 * Implements hook_theme().
 */
function localgov_alert_banner_theme(): array {
  $theme = [];
  $theme['localgov_alert_banner'] = [
    'render element' => 'elements',
    'file' => 'localgov_alert_banner.page.inc',
    'template' => 'localgov-alert-banner',
  ];
  $theme['localgov_alert_banner_content_add_list'] = [
    'render element' => 'content',
    'variables' => ['content' => NULL],
    'file' => 'localgov_alert_banner.page.inc',
  ];
  return $theme;
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function localgov_alert_banner_theme_suggestions_localgov_alert_banner(array $variables): array {
  $suggestions = [];
  $entity = $variables['elements']['#localgov_alert_banner'];
  $sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_');

  $suggestions[] = 'localgov_alert_banner__' . $sanitized_view_mode;
  $suggestions[] = 'localgov_alert_banner__' . $entity->bundle();
  $suggestions[] = 'localgov_alert_banner__' . $entity->bundle() . '__' . $sanitized_view_mode;
  $suggestions[] = 'localgov_alert_banner__' . $entity->id();
  $suggestions[] = 'localgov_alert_banner__' . $entity->id() . '__' . $sanitized_view_mode;
  return $suggestions;
}

/**
 * Implements hook_modules_installed().
 */
function localgov_alert_banner_modules_installed($modules, $is_syncing): void {

  // Configure scheduled transitions if it's being installed.
  if (in_array('scheduled_transitions', $modules, TRUE)) {
    localgov_alert_banner_configure_scheduled_transitions();
  }
}

/**
 * Configure scheduled transitions.
 */
function localgov_alert_banner_configure_scheduled_transitions(): void {

  // Configure scheduled transitions for alert banners.
  $scheduled_transitions_config = \Drupal::service('config.factory')->getEditable('scheduled_transitions.settings');
  $alert_banner_bundles = \Drupal::service('entity_type.bundle.info')->getBundleInfo('localgov_alert_banner');
  $bundles = $scheduled_transitions_config->get('bundles');
  foreach ($alert_banner_bundles as $bundle => $info) {
    $bundles[] = [
      'entity_type' => 'localgov_alert_banner',
      'bundle' => $bundle,
    ];
  }
  $scheduled_transitions_config->set('bundles', $bundles);
  $scheduled_transitions_config->save();
  Cache::invalidateTags([
    'scheduled_transition_settings',
    'config:scheduled_transitions.settings',
  ]);

  // Add scheduling permissions to the emergency publisher user.
  $permissions = [];
  foreach ($alert_banner_bundles as $bundle => $info) {
    $permissions = array_merge($permissions, [
      'add scheduled transitions localgov_alert_banner ' . $bundle,
      'reschedule scheduled transitions localgov_alert_banner ' . $bundle,
      'view scheduled transitions localgov_alert_banner ' . $bundle,
    ]);
  }
  user_role_grant_permissions('emergency_publisher', $permissions);
}

/**
 * Setup deafault permissions.
 *
 * @todo consider using hook_localgov_roles().
 */
function localgov_alert_banner_set_default_permissions(): void {

  // Default grant permissions to view all alert banners.
  user_role_grant_permissions(RoleInterface::ANONYMOUS_ID, ['view all localgov alert banner entities']);
  user_role_grant_permissions(RoleInterface::AUTHENTICATED_ID, ['view all localgov alert banner entities']);

  // Set up emergency publisher access to toolbar if certian modules exist.
  $perms = [];
  $module_handler = \Drupal::service('module_handler');
  if ($module_handler->moduleExists('node')) {
    $perms[] = 'access content overview';
  }
  if ($module_handler->moduleExists('toolbar')) {
    $perms[] = 'access toolbar';
  }
  user_role_grant_permissions('emergency_publisher', $perms);
}

/**
 * Implements hook_preprocess_field().
 */
function localgov_alert_banner_preprocess_field(&$variables): void {
  if ($variables['element']['#field_name'] == 'link' && $variables['element']['#bundle'] == 'localgov_alert_banner') {
    foreach ($variables['element']['#items'] as $item) {
      if (empty($item->getValue()['title'])) {
        $default_text = t('More information');
        $variables['items'][0]['content']['#title'] = $default_text;
      }
    }
  }
}

/**
 * Implements hook_gin_content_form_routes().
 */
function localgov_alert_banner_gin_content_form_routes(): array {
  return [
    // Alert banner add form.
    'entity.localgov_alert_banner.add_form',

    // Alert banner add form edit form.
    'entity.localgov_alert_banner.edit_form',
  ];
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc