localgov_services-2.1.19/modules/localgov_services_status/localgov_services_status.module

modules/localgov_services_status/localgov_services_status.module
<?php

/**
 * @file
 * LocalGovDrupal service status page module file.
 */

use Drupal\Core\Cache\Cache;
use Drupal\Core\Url;
use Drupal\localgov_roles\RolesHelper;
use Drupal\node\NodeInterface;

/**
 * Implements hook_theme().
 */
function localgov_services_status_theme($existing, $type, $theme, $path) {
  return [
    'node__localgov_services_status__message' => [
      'template' => 'node--localgov-services-status--message',
      'base hook' => 'node',
    ],
    'service_status_block' => [
      'variables' => [
        'items' => [],
        'see_all_link' => NULL,
      ],
    ],
    'service_status_message' => [
      'variables' => [
        'items' => [],
      ],
    ],
    'service_status_page' => [
      'variables' => [
        'items' => [],
      ],
    ],
  ];
}

/**
 * Implements hook_localgov_roles_default().
 */
function localgov_services_status_localgov_roles_default(): array {

  // Content editing permissions.
  $perms = [
    RolesHelper::EDITOR_ROLE => [
      'create localgov_services_status content',
      'delete any localgov_services_status content',
      'delete localgov_services_status revisions',
      'delete own localgov_services_status content',
      'edit any localgov_services_status content',
      'edit own localgov_services_status content',
      'revert localgov_services_status revisions',
      'view localgov_services_status revisions',
    ],
    RolesHelper::AUTHOR_ROLE => [
      'create localgov_services_status content',
      'delete own localgov_services_status content',
      'edit own localgov_services_status content',
      'revert localgov_services_status revisions',
      'view localgov_services_status revisions',
    ],
    RolesHelper::CONTRIBUTOR_ROLE => [
      'create localgov_services_status content',
      'delete own localgov_services_status content',
      'edit own localgov_services_status content',
      'view localgov_services_status revisions',
    ],
  ];

  // Content scheduling permissions required by localgov_workflows.
  if (\Drupal::moduleHandler()->moduleExists('localgov_workflows')) {
    $perms[RolesHelper::EDITOR_ROLE] = array_merge($perms[RolesHelper::EDITOR_ROLE], [
      'add scheduled transitions node localgov_services_status',
      'reschedule scheduled transitions node localgov_services_status',
      'view scheduled transitions node localgov_services_status',
    ]);
    $perms[RolesHelper::AUTHOR_ROLE] = array_merge($perms[RolesHelper::AUTHOR_ROLE], [
      'add scheduled transitions node localgov_services_status',
      'reschedule scheduled transitions node localgov_services_status',
      'view scheduled transitions node localgov_services_status',
    ]);
    $perms[RolesHelper::CONTRIBUTOR_ROLE] = array_merge($perms[RolesHelper::CONTRIBUTOR_ROLE], [
      'add scheduled transitions node localgov_services_status',
      'reschedule scheduled transitions node localgov_services_status',
      'view scheduled transitions node localgov_services_status',
    ]);
  }

  return $perms;
}

/**
 * Implements hook_ENTITY_TYPE_presave().
 */
function localgov_services_status_node_presave(NodeInterface $entity) {
  // Invalidate cache for landing page when saving status page.
  if ($entity->bundle() === 'localgov_services_status') {
    if (!$entity->get('localgov_services_parent')->isEmpty()) {
      $invalidate_node_id = $entity->get('localgov_services_parent')->first()->getValue()['target_id'];
      Cache::invalidateTags(['node:' . $invalidate_node_id]);
    }
  }
}

/**
 * Implements hook_preprocess_HOOK().
 */
function localgov_services_status_preprocess_node(&$variables) {
  /** @var \Drupal\node\NodeInterface $node */
  $node = $variables['node'];

  if ($node->bundle() == 'localgov_services_landing' && $variables['view_mode'] == 'full') {
    $statuses = \Drupal::service('localgov_services_status.service_status')->getStatusForBlock($node);
    if ($statuses) {
      $variables['service_updates'] = [
        '#theme' => 'service_status_block',
        '#items' => $statuses,
        '#see_all_link' => Url::fromRoute('status.landing_list', ['node' => $node->id()]),
      ];
    }
  }
}

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

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