b2d85335aacd64964efcf6022ddd94f408bd78bc
[yaffs-website] / web / core / modules / content_moderation / src / Plugin / Action / ModerationOptOutPublishNode.php
1 <?php
2
3 namespace Drupal\content_moderation\Plugin\Action;
4
5 use Drupal\Core\Access\AccessResult;
6 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
7 use Drupal\Core\Session\AccountInterface;
8 use Drupal\node\Plugin\Action\PublishNode;
9 use Drupal\content_moderation\ModerationInformationInterface;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
11
12 /**
13  * Alternate action plugin that can opt-out of modifying moderated entities.
14  *
15  * @see \Drupal\node\Plugin\Action\PublishNode
16  */
17 class ModerationOptOutPublishNode extends PublishNode implements ContainerFactoryPluginInterface {
18
19   /**
20    * Moderation information service.
21    *
22    * @var \Drupal\content_moderation\ModerationInformationInterface
23    */
24   protected $moderationInfo;
25
26   /**
27    * ModerationOptOutPublishNode constructor.
28    *
29    * @param array $configuration
30    *   A configuration array containing information about the plugin instance.
31    * @param string $plugin_id
32    *   The plugin_id for the plugin instance.
33    * @param mixed $plugin_definition
34    *   The plugin implementation definition.
35    * @param \Drupal\content_moderation\ModerationInformationInterface $moderation_info
36    *   The moderation information service.
37    */
38   public function __construct(array $configuration, $plugin_id, $plugin_definition, ModerationInformationInterface $moderation_info) {
39     parent::__construct($configuration, $plugin_id, $plugin_definition);
40     $this->moderationInfo = $moderation_info;
41   }
42
43   /**
44    * {@inheritdoc}
45    */
46   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
47     return new static(
48       $configuration, $plugin_id, $plugin_definition,
49       $container->get('content_moderation.moderation_information')
50     );
51   }
52
53   /**
54    * {@inheritdoc}
55    */
56   public function access($entity, AccountInterface $account = NULL, $return_as_object = FALSE) {
57     /** @var \Drupal\node\NodeInterface $entity */
58     if ($entity && $this->moderationInfo->isModeratedEntity($entity)) {
59       drupal_set_message($this->t("@bundle @label were skipped as they are under moderation and may not be directly published.", ['@bundle' => node_get_type_label($entity), '@label' => $entity->getEntityType()->getPluralLabel()]), 'warning');
60       $result = AccessResult::forbidden();
61       return $return_as_object ? $result : $result->isAllowed();
62     }
63     return parent::access($entity, $account, $return_as_object);
64   }
65
66 }