og_sm-8.x-1.0/og_sm_menu/og_sm_menu.module

og_sm_menu/og_sm_menu.module
<?php

/**
 * @file
 * Site menu module.
 */

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\menu_link_content\MenuLinkContentInterface;
use Drupal\og_menu\OgMenuInstanceInterface;

/**
 * Implements hook_entity_insert().
 */
function og_sm_menu_entity_insert(EntityInterface $entity) {
  // When a site menu is created we should rebuild the menu tree to make sure
  // our site menu items linked to the site show up.
  if ($entity instanceof OgMenuInstanceInterface) {
    \Drupal::service('plugin.manager.menu.link')->rebuild();
  }
}

/**
 * Implements hook_ENTITY_TYPE_access() for menu_link_content entities.
 */
function og_sm_menu_menu_link_content_access(MenuLinkContentInterface $entity, $operation, AccountInterface $account) {
  if (strpos($entity->getMenuName(), 'ogmenu-') !== 0) {
    return AccessResult::neutral();
  }

  $og_menu_instance_id = str_replace('ogmenu-', '', $entity->getMenuName());
  /** @var \Drupal\og_menu\OgMenuInstanceInterface $menu */
  $menu = \Drupal::entityTypeManager()
    ->getStorage('ogmenu_instance')
    ->load($og_menu_instance_id);
  if (!$menu instanceof OgMenuInstanceInterface) {
    return AccessResult::neutral();
  }
  $group = $menu->getGroup();
  /** @var \Drupal\og\OgAccessInterface $og_access */
  $og_access = \Drupal::service('og.access');

  return $og_access->userAccess($group, "administer {$menu->getType()} menu items", $account);
}

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

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