sitewide_alerts-1.0.0/sitewide_alerts.module

sitewide_alerts.module
<?php

/**
 * @file
 * Contains sitewide_alerts.module.
 */

use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Url;
use Drupal\sitewide_alerts\SiteAlertMaxLengthCallbacks;

/**
 * Implements hook_help().
 */
function sitewide_alerts_help($route_name, RouteMatchInterface $route_match) {
  if ($route_name == 'help.page.sitewide_alerts') {
    $text = file_get_contents(__DIR__ . '/README.md');
    if (!Drupal::moduleHandler()->moduleExists('markdown')) {
      return '<pre>' . $text . '</pre>';
    }
    else {
      /** @var \Drupal\markdown\PluginManager\ParserManagerInterface $parser_manager */
      $parser_manager = \Drupal::service('plugin.manager.markdown.parser');
      $parser = $parser_manager->getDefaultParser([
        'render_strategy' => ['type' => 'none'],
      ]);
      return $parser->parse($text);
    }
  }
  return NULL;
}

/**
 * Implements hook_theme().
 */
function sitewide_alerts_theme($existing, $type, $theme, $path) {
  return [
    'site_alerts' => [
      'file' => 'sitewide_alerts.theme.inc',
      'variables' => [
        'alerts' => NULL,
        'view_mode' => NULL,
      ],
    ],
    'site_alert_types' => [
      'file' => 'sitewide_alerts.theme.inc',
      'variables' => [
        'alert_types' => NULL,
        'view_mode' => NULL,
      ],
    ],
    'site_alert_type' => [
      'file' => 'sitewide_alerts.theme.inc',
      'variables' => [
        'site_alert_type' => NULL,
        'site_alert_type_icon' => NULL,
        'view_mode' => NULL,
      ],
    ],
    'site_alert_close' => [
      'variables' => [
        'site_alert' => NULL,
        'view_mode' => NULL,
      ],
    ],
    'site_alert' => [
      'file' => 'sitewide_alerts.theme.inc',
      'render element' => 'elements',
    ],
    'site_alert__alert_bar' => [
      'file' => 'sitewide_alerts.theme.inc',
      'base hook' => 'site_alert',
    ],
  ];
}

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

  $suggestions[] = 'site_alert__' . $sanitized_view_mode;
  $suggestions[] = 'site_alert__' . $site_alert->id();
  $suggestions[] = 'site_alert__' . $site_alert->id() . '__' . $sanitized_view_mode;

  return $suggestions;
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function sitewide_alerts_theme_suggestions_site_alerts(array $variables) {
  $suggestions = [];
  if (!empty($variables['view_mode'])) {
    $sanitized_view_mode = strtr($variables['view_mode'], '.', '_');
    $suggestions[] = 'site_alerts__' . $sanitized_view_mode;
  }
  return $suggestions;
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function sitewide_alerts_theme_suggestions_site_alert_types(array $variables) {
  $suggestions = [];
  if (!empty($variables['view_mode'])) {
    $sanitized_view_mode = strtr($variables['view_mode'], '.', '_');
    $suggestions[] = 'site_alert_types__' . $sanitized_view_mode;
  }
  return $suggestions;
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function sitewide_alerts_theme_suggestions_site_alert_type(array $variables) {
  $suggestions = [];
  if (!empty($variables['view_mode'])) {
    $sanitized_view_mode = strtr($variables['view_mode'], '.', '_');
    $suggestions[] = 'site_alert_type__' . $sanitized_view_mode;
  }
  return $suggestions;
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function sitewide_alerts_theme_suggestions_site_alert_close(array $variables) {
  $suggestions = [];
  if (!empty($variables['view_mode'])) {
    $sanitized_view_mode = strtr($variables['view_mode'], '.', '_');
    $suggestions[] = 'site_alert_close__' . $sanitized_view_mode;
  }
  return $suggestions;
}

/**
 * Implements hook_page_top().
 */
function sitewide_alerts_page_top(array &$page_top): void {
  /** @var \Drupal\sitewide_alerts\SiteAlertService $site_alert_service */
  $site_alert_service = \Drupal::service('sitewide_alerts.site_alert_service');
  $position = $site_alert_service->getConfig()->get('position');
  if (!empty($position) && $position == 'top') {
    $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
    $page_top['site_alert'] = $site_alert_service->getSiteAlertBar($language);
  }
}

/**
 * Implements hook_page_bottom().
 */
function sitewide_alerts_page_bottom(array &$page_bottom): void {
  /** @var \Drupal\sitewide_alerts\SiteAlertService $site_alert_service */
  $site_alert_service = \Drupal::service('sitewide_alerts.site_alert_service');
  $position = $site_alert_service->getConfig()->get('position');
  if (!empty($position) && $position == 'bottom') {
    $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
    $page_bottom['site_alert'] = $site_alert_service->getSiteAlertBar($language);
  }
}

/**
 * Implements hook_menu_local_tasks_alter().
 */
function sitewide_alerts_menu_local_tasks_alter(&$data, $route_name): void {
  if ($route_name == 'sitewide_alerts.config_form') {
    $language_manager = \Drupal::languageManager();
    $current_language = $language_manager->getCurrentLanguage();
    $languages = $language_manager->getLanguages();
    foreach ($languages as $language) {
      if ($language->getId() != $current_language->getId()) {
        $data['tabs'][0]['sitewide_alerts.translate_' . $language->getId() . '_tab'] = [
          '#theme' => 'menu_local_task',
          '#link' => [
            'title' => t('Translate'),
            'url' => Url::fromRoute('sitewide_alerts.config_form', [], [
              'language' => $language,
            ]),
            'localized_options' => [
              'attributes' => [
                'title' => t('Site alert settings'),
              ],
            ],
          ],
        ];
      }
    }
  }
}

/**
 * Implements hook_entity_operation().
 */
function sitewide_alerts_entity_operation(EntityInterface $entity) {
  $operations = [];

  // Add asset refresh operation.
  if ($entity->getEntityTypeId() == 'site_alert') {

    // Make sure account has permission.
    $account = \Drupal::currentUser();
    if ($account->hasPermission('tweet site alert')) {

      // Tweet site alert operation.
      $operations['tweet-site-alert'] = [
        'title' => t('Tweet site alert'),
        'weight' => 15,
        'url' => Url::fromRoute("entity.site_alert.tweet", [
          'site_alert' => $entity->id(),
        ]),
      ];
    }
  }

  return $operations;
}

/**
 * Implements hook_element_info_alter().
 */
function sitewide_alerts_element_info_alter(&$cache): void {
  // Add prerender functions to textareas and text fields.
  $cache['textfield']['#pre_render'][] = [
    SiteAlertMaxLengthCallbacks::class,
    'maxlengthPreRender',
  ];
  $cache['textarea']['#pre_render'][] = [
    SiteAlertMaxLengthCallbacks::class,
    'maxlengthPreRender',
  ];
  $cache['textarea']['#process'][] = [
    SiteAlertMaxLengthCallbacks::class,
    'processElement',
  ];
  $cache['text_format']['#pre_render'][] = [
    SiteAlertMaxLengthCallbacks::class,
    'maxlengthPreRender',
  ];
  $cache['text_format']['#process'][] = [
    SiteAlertMaxLengthCallbacks::class,
    'processElement',
  ];
}

/**
 * Implements hook_entity_extra_field_info().
 */
function sitewide_alerts_entity_extra_field_info() {
  $extra = [];
  $extra['site_alert']['site_alert']['display']['site_alert_default_link'] = [
    'label' => t('Alert default link'),
    'description' => t('Site alert default link if alert link is not specified.'),
    'visible' => FALSE,
  ];
  return $extra;
}

/**
 * Implements hook_ENTITY_TYPE_view().
 */
function sitewide_alerts_site_alert_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode): void {
  // Alert default link field.
  if ($display->getComponent('site_alert_default_link')) {
    // Make sure site alert link is empty or not filled in.
    if ($entity->hasField('field_site_alert_link') && $entity->get('field_site_alert_link')->isEmpty()) {
      // Make sure we're not hiding the alert link.
      if ($entity->hasField('field_site_alert_hide_link') && !$entity->get('field_site_alert_hide_link')->value) {
        /** @var \Drupal\sitewide_alerts\SiteAlertService $site_alert_service */
        $site_alert_service = \Drupal::service('sitewide_alerts.site_alert_service');
        $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
        $build['site_alert_default_link'] = $site_alert_service->preRenderDefaultLink($language);
      }
    }
  }
  // Alert link field.
  if ($display->getComponent('field_site_alert_link')) {
    // If hiding the link, we need to destroy the render array.
    if ($entity->hasField('field_site_alert_hide_link') && $entity->get('field_site_alert_hide_link')->value) {
      $build['field_site_alert_link'] = [];
    }
  }
}

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

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