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',
];
}
