content_moderation_permissions-1.0.0/content_moderation_permissions.module

content_moderation_permissions.module
<?php

/**
 * @file
 * Primary module hooks for Content moderation permissions module.
 */

use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Routing\RouteMatchInterface;

/**
 * Implements hook_help().
 */
function content_moderation_permissions_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    case 'help.page.content_moderation_permissions':
      $text = file_get_contents(dirname(__FILE__) . "/README.md");
      if (!\Drupal::moduleHandler()->moduleExists('markdown')) {
        return '<pre>' . $text . '</pre>';
      }
      else {
        // Use the Markdown filter to render the README.
        $filter_manager = \Drupal::service('plugin.manager.filter');
        $settings       = \Drupal::configFactory()
          ->get('markdown.settings')
          ->getRawData();
        $config         = ['settings' => $settings];
        $filter         = $filter_manager->createInstance('markdown', $config);

        return $filter->process($text, 'en');
      }
  }

  return NULL;
}

/**
 * Implements hook_entity_access().
 *
 * Entities should be viewable if unpublished and the user has the appropriate
 * permission. This permission is therefore effectively mandatory for any user
 * that wants to moderate things.
 */
function content_moderation_permissions_entity_access(EntityInterface $entity, $operation, AccountInterface $account) {
  $access_result = NULL;
  if ($operation === 'update') {
    /** @var \Drupal\content_moderation\ModerationInformationInterface $moderation_info */
    $moderation_info = Drupal::service('content_moderation.moderation_information');
    if ($moderation_info->isModeratedEntity($entity) && $entity->moderation_state) {

      /** @var \Drupal\content_moderation_permissions\StateTransitionValidation $transition_validation */
      $transition_validation = \Drupal::service('content_moderation_permissions.state_transition_validation');

      $valid_transition_targets = $transition_validation->getValidTransitions($entity, $account);
      $access_result = $valid_transition_targets ? AccessResult::neutral() : AccessResult::forbidden('No valid transitions exist for given account.');

      $access_result->addCacheableDependency($entity);
      $workflow = $moderation_info->getWorkflowForEntity($entity);
      $access_result->addCacheableDependency($workflow);
      // The state transition validation service returns a list of transitions
      // based on the user's permission to use them.
      $access_result->cachePerPermissions();
    }
  }

  return $access_result;
}

/**
 * Implements hook_entity_bundle_field_info_alter().
 */
function content_moderation_permissions_entity_bundle_field_info_alter(&$fields, EntityTypeInterface $entity_type, $bundle) {

  if (isset($fields['moderation_state'])) {
    $fields['moderation_state']->setConstraints(['ModerationStatePermissions' => []]);
  }
}

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

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