localgov_guides-2.1.15/localgov_guides.module

localgov_guides.module
<?php

/**
 * @file
 * Localgov Guides module hooks.
 */

use Drupal\Core\Entity\Display\EntityFormDisplayInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\localgov_guides\ChildParentRelationship;
use Drupal\localgov_roles\RolesHelper;
use Drupal\node\NodeInterface;

/**
 * Implements hook_theme().
 */
function localgov_guides_theme($existing, $type, $theme, $path) {
  return [
    'guides_contents_block' => [
      'variables' => [
        'links' => [],
        'format' => [],
      ],
    ],
    'guides_prev_next_block' => [
      'variables' => [
        'previous_url' => NULL,
        'previous_title' => NULL,
        'next_url' => NULL,
        'next_title' => NULL,
        'show_title' => NULL,
      ],
    ],
    'node__localgov_guides_overview__full' => [
      'template' => 'node--localgov-guides-overview--full',
      'base hook' => 'node',
    ],
    'node__localgov_guides_page__full' => [
      'template' => 'node--localgov-guides-page--full',
      'base hook' => 'node',
    ],
  ];
}

/**
 * Implements hook_localgov_role_default().
 */
function localgov_guides_localgov_roles_default() {

  // Content editing permissions.
  $perms = [
    RolesHelper::EDITOR_ROLE => [
      'create localgov_guides_overview content',
      'create localgov_guides_page content',
      'delete any localgov_guides_overview content',
      'delete any localgov_guides_page content',
      'delete localgov_guides_overview revisions',
      'delete localgov_guides_page revisions',
      'delete own localgov_guides_overview content',
      'delete own localgov_guides_page content',
      'edit any localgov_guides_overview content',
      'edit any localgov_guides_page content',
      'edit own localgov_guides_overview content',
      'edit own localgov_guides_page content',
      'revert localgov_guides_overview revisions',
      'revert localgov_guides_page revisions',
      'view localgov_guides_overview revisions',
      'view localgov_guides_page revisions',
    ],
    RolesHelper::AUTHOR_ROLE => [
      'create localgov_guides_overview content',
      'create localgov_guides_page content',
      'delete own localgov_guides_overview content',
      'delete own localgov_guides_page content',
      'edit own localgov_guides_overview content',
      'edit own localgov_guides_page content',
      'revert localgov_guides_overview revisions',
      'revert localgov_guides_page revisions',
      'view localgov_guides_overview revisions',
      'view localgov_guides_page revisions',
    ],
    RolesHelper::CONTRIBUTOR_ROLE => [
      'create localgov_guides_overview content',
      'create localgov_guides_page content',
      'delete own localgov_guides_overview content',
      'delete own localgov_guides_page content',
      'edit own localgov_guides_overview content',
      'edit own localgov_guides_page content',
      'view localgov_guides_overview revisions',
      'view localgov_guides_page 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_guides_overview',
      'add scheduled transitions node localgov_guides_page',
      'reschedule scheduled transitions node localgov_guides_overview',
      'reschedule scheduled transitions node localgov_guides_page',
      'view scheduled transitions node localgov_guides_overview',
      'view scheduled transitions node localgov_guides_page',
    ]);
    $perms[RolesHelper::AUTHOR_ROLE] = array_merge($perms[RolesHelper::AUTHOR_ROLE], [
      'add scheduled transitions node localgov_guides_overview',
      'add scheduled transitions node localgov_guides_page',
      'reschedule scheduled transitions node localgov_guides_overview',
      'reschedule scheduled transitions node localgov_guides_page',
      'view scheduled transitions node localgov_guides_overview',
      'view scheduled transitions node localgov_guides_page',
    ]);
    $perms[RolesHelper::CONTRIBUTOR_ROLE] = array_merge($perms[RolesHelper::CONTRIBUTOR_ROLE], [
      'add scheduled transitions node localgov_guides_overview',
      'add scheduled transitions node localgov_guides_page',
      'reschedule scheduled transitions node localgov_guides_overview',
      'reschedule scheduled transitions node localgov_guides_page',
      'view scheduled transitions node localgov_guides_overview',
      'view scheduled transitions node localgov_guides_page',
    ]);
  }

  return $perms;
}

/**
 * Implements hook_ENTITY_TYPE_insert().
 */
function localgov_guides_node_insert(NodeInterface $node) {
  if ($node->bundle() == 'localgov_guides_page') {
    return \Drupal::service('class_resolver')
      ->getInstanceFromDefinition(ChildParentRelationship::class)
      ->pageUpdateOverview($node);
  }
}

/**
 * Implements hook_ENTITY_TYPE_update().
 *
 * Implements reference back on overview to page when pages are created.
 */
function localgov_guides_node_update(NodeInterface $node) {
  if ($node->bundle() == 'localgov_guides_page') {
    return \Drupal::service('class_resolver')
      ->getInstanceFromDefinition(ChildParentRelationship::class)
      ->pageUpdateOverview($node);
  }
}

/**
 * Implements hook_ENTITY_TYPE_prepare_form().
 *
 * Check back-reference fields before editing overview.
 */
function localgov_guides_node_prepare_form(NodeInterface $node, $operation, FormStateInterface $form) {
  if ($node->bundle() == 'localgov_guides_overview') {
    return \Drupal::service('class_resolver')
      ->getInstanceFromDefinition(ChildParentRelationship::class)
      ->overviewPagesCheck($node);
  }
}

/**
 * Implements hook_ENTITY_TYPE_presave().
 *
 * Check back-reference fields before saving.
 * Especially if someone has changed a page since form load!
 */
function localgov_guides_node_presave(NodeInterface $node) {
  if ($node->bundle() == 'localgov_guides_overview') {
    return \Drupal::service('class_resolver')
      ->getInstanceFromDefinition(ChildParentRelationship::class)
      ->overviewPagesCheck($node);
  }
}

/**
 * Implements hook_modules_installed().
 */
function localgov_guides_modules_installed($modules) {
  $services = in_array('localgov_services_navigation', $modules, TRUE);
  $topics = in_array('localgov_topics', $modules, TRUE);
  if ($services) {
    \Drupal::service('config.installer')->installOptionalConfig(NULL, [
      'config' => 'field.storage.node.localgov_services_parent',
    ]);
  }
  if ($topics) {
    \Drupal::service('config.installer')->installOptionalConfig(NULL, [
      'config' => 'field.storage.node.localgov_topic_classified',
    ]);
  }
  if ($services || $topics) {
    localgov_guides_optional_fields_settings($services, $topics);
  }
}

/**
 * Implements hook_preprocess_node().
 *
 * Sets the Guide overview page title.  Adds the guide_overview_title
 * template variable.
 */
function localgov_guides_preprocess_node__localgov_guides_overview__full(&$vars) {

  $guide_overview_node = $vars['node'];
  $guide_overview_default_title = t('Overview');
  $guide_overview_title = '';

  if ($guide_overview_node->hasField('localgov_guides_section_title') && !$guide_overview_node->localgov_guides_section_title->isEmpty()) {
    $guide_overview_title = $guide_overview_node->localgov_guides_section_title->value;
  }

  $vars['guide_overview_title'] = $guide_overview_title ?: $guide_overview_default_title;
}

/**
 * Set form settings for optional services and topic fields on installation.
 *
 * @param bool $services
 *   If localgov_services is (being) installed.
 * @param bool $topics
 *   If localgov_topics is (being) installed.
 */
function localgov_guides_optional_fields_settings($services, $topics) {
  $properties = [
    'targetEntityType' => 'node',
    'bundle' => 'localgov_guides_overview',
  ];
  if ($form_displays = \Drupal::entityTypeManager()->getStorage('entity_form_display')->loadByProperties($properties)) {
    foreach ($form_displays as $form_display) {
      assert($form_display instanceof EntityFormDisplayInterface);
      if ($services && !$form_display->getComponent('localgov_services_parent')) {
        $form_display->setComponent('localgov_services_parent', [
          'type' => 'entity_reference_autocomplete',
          'region' => 'content',
          'settings' => [
            'match_operator' => 'CONTAINS',
            'size' => '60',
            'placeholder' => '',
            'match_limit' => 10,
          ],
          'weight' => -1,
        ])->save();
      }
      if ($topics && !$form_display->getComponent('localgov_topics')) {
        $form_display->setComponent('localgov_topic_classified', [
          'type' => 'entity_reference_autocomplete',
          'region' => 'content',
          'settings' => [
            'match_operator' => 'CONTAINS',
            'size' => '60',
            'placeholder' => '',
            'match_limit' => 10,
          ],
          'weight' => 50,
        ])->save();
      }
    }
  }
}

/**
 * Implements hook_preprocess_HOOK().
 */
function localgov_guides_preprocess_html(&$variables) {

  // Add the guide overview as a subtitle to guide pages.
  $node = \Drupal::routeMatch()->getParameter('node');
  if ($node instanceof NodeInterface && $node->bundle() == 'localgov_guides_page') {
    if ($parent = $node->get('localgov_guides_parent')->entity) {
      $variables['head_title']['title'] .= ' | ' . trim(strip_tags($parent->label()));
    }
  }
}

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

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