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);
}
