moderationInfo = $moderation_info; $this->bundleInfo = $bundle_info; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('entity_type.manager'), $container->get('content_moderation.moderation_information'), $container->get('entity_type.bundle.info') ); } /** * {@inheritdoc} */ public function access($entity, AccountInterface $account = NULL, $return_as_object = FALSE) { /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */ if ($entity && $this->moderationInfo->isModeratedEntity($entity)) { $bundle_info = $this->bundleInfo->getBundleInfo($entity->getEntityTypeId()); $bundle_label = $bundle_info[$entity->bundle()]['label']; drupal_set_message($this->t("@bundle @label were skipped as they are under moderation and may not be directly unpublished.", ['@bundle' => $bundle_label, '@label' => $entity->getEntityType()->getPluralLabel()]), 'warning'); $result = AccessResult::forbidden('Cannot directly unpublish moderated entities.'); return $return_as_object ? $result : $result->isAllowed(); } return parent::access($entity, $account, $return_as_object); } }