og-8.x-1.x-dev/tests/modules/og_test/og_test.module
tests/modules/og_test/og_test.module
<?php
/**
* @file
* Main functions and hook implementations of the OG Test module.
*/
declare(strict_types=1);
use Drupal\Core\Access\AccessResultAllowed;
use Drupal\Core\Access\AccessResultInterface;
use Drupal\Core\Cache\CacheableMetadata;
use Drupal\Core\Entity\EntityInterface;
use Drupal\og\Entity\OgRole;
use Drupal\og\Og;
/**
* Implements hook_module_implements_alter().
*/
function og_test_module_implements_alter(array &$implementations, string $hook): void {
if ($hook == 'entity_insert') {
// Move our implementation of hook_entity_insert() to the top of the list so
// that it will run before og_entity_insert().
$implementation = $implementations['og_test'];
unset($implementations['og_test']);
$implementations = ['og_test' => $implementation] + $implementations;
}
}
/**
* Implements hook_entity_insert().
*/
function og_test_entity_insert(EntityInterface $entity): void {
// In order to test if it is possible to use an hook_entity_insert()
// implementation to override the user membership that is automatically
// created in og_entity_insert() we will create our own membership here, if
// the entity's label matches the one created in the test.
// @see \Drupal\Tests\og\Kernel\GroupManagerSubscriptionTest
if ($entity->label() === 'membership is overridden') {
// Create a membership for the group owner that also has been granted the
// custom 'moderator' role.
$membership = Og::createMembership($entity, $entity->getOwner());
$membership->addRole(OgRole::loadByGroupAndName($entity, 'moderator'));
$membership->save();
}
}
/**
* Implements hook_og_user_access_entity_operation_alter().
*/
function og_test_og_user_access_entity_operation_alter(AccessResultInterface &$access_result, CacheableMetadata $cacheable_metadata, array $context): void {
if (\Drupal::state()->get('og_test_group_content_entity_operation_access_alter', FALSE)) {
// Moderators should have access to edit and delete all comments in all
// groups.
/** @var \Drupal\Core\Session\AccountProxyInterface $user */
$user = $context['user'];
$group_content = $context['group_content'];
$is_comment = $group_content->getEntityTypeId() === 'comment';
$user_can_moderate_comments = $user->hasPermission('edit and delete comments in all groups');
if ($is_comment && $user_can_moderate_comments) {
$access_result = new AccessResultAllowed();
}
}
}
