Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\content_moderation;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Entity\ContentEntityInterface;
|
Chris@0
|
6 use Drupal\Core\Session\AccountInterface;
|
Chris@17
|
7 use Drupal\workflows\StateInterface;
|
Chris@0
|
8 use Drupal\workflows\Transition;
|
Chris@17
|
9 use Drupal\workflows\WorkflowInterface;
|
Chris@0
|
10
|
Chris@0
|
11 /**
|
Chris@0
|
12 * Validates whether a certain state transition is allowed.
|
Chris@0
|
13 */
|
Chris@0
|
14 class StateTransitionValidation implements StateTransitionValidationInterface {
|
Chris@0
|
15
|
Chris@0
|
16 /**
|
Chris@0
|
17 * The moderation information service.
|
Chris@0
|
18 *
|
Chris@0
|
19 * @var \Drupal\content_moderation\ModerationInformationInterface
|
Chris@0
|
20 */
|
Chris@0
|
21 protected $moderationInfo;
|
Chris@0
|
22
|
Chris@0
|
23 /**
|
Chris@0
|
24 * Stores the possible state transitions.
|
Chris@0
|
25 *
|
Chris@0
|
26 * @var array
|
Chris@0
|
27 */
|
Chris@0
|
28 protected $possibleTransitions = [];
|
Chris@0
|
29
|
Chris@0
|
30 /**
|
Chris@0
|
31 * Constructs a new StateTransitionValidation.
|
Chris@0
|
32 *
|
Chris@0
|
33 * @param \Drupal\content_moderation\ModerationInformationInterface $moderation_info
|
Chris@0
|
34 * The moderation information service.
|
Chris@0
|
35 */
|
Chris@0
|
36 public function __construct(ModerationInformationInterface $moderation_info) {
|
Chris@0
|
37 $this->moderationInfo = $moderation_info;
|
Chris@0
|
38 }
|
Chris@0
|
39
|
Chris@0
|
40 /**
|
Chris@0
|
41 * {@inheritdoc}
|
Chris@0
|
42 */
|
Chris@0
|
43 public function getValidTransitions(ContentEntityInterface $entity, AccountInterface $user) {
|
Chris@0
|
44 $workflow = $this->moderationInfo->getWorkflowForEntity($entity);
|
Chris@0
|
45 $current_state = $entity->moderation_state->value ? $workflow->getTypePlugin()->getState($entity->moderation_state->value) : $workflow->getTypePlugin()->getInitialState($entity);
|
Chris@0
|
46
|
Chris@0
|
47 return array_filter($current_state->getTransitions(), function (Transition $transition) use ($workflow, $user) {
|
Chris@0
|
48 return $user->hasPermission('use ' . $workflow->id() . ' transition ' . $transition->id());
|
Chris@0
|
49 });
|
Chris@0
|
50 }
|
Chris@0
|
51
|
Chris@17
|
52 /**
|
Chris@17
|
53 * {@inheritdoc}
|
Chris@17
|
54 */
|
Chris@17
|
55 public function isTransitionValid(WorkflowInterface $workflow, StateInterface $original_state, StateInterface $new_state, AccountInterface $user, ContentEntityInterface $entity = NULL) {
|
Chris@17
|
56 if ($entity === NULL) {
|
Chris@17
|
57 @trigger_error(sprintf('Omitting the $entity parameter from %s is deprecated and will be required in Drupal 9.0.0.', __METHOD__), E_USER_DEPRECATED);
|
Chris@17
|
58 }
|
Chris@17
|
59 $transition = $workflow->getTypePlugin()->getTransitionFromStateToState($original_state->id(), $new_state->id());
|
Chris@17
|
60 return $user->hasPermission('use ' . $workflow->id() . ' transition ' . $transition->id());
|
Chris@17
|
61 }
|
Chris@17
|
62
|
Chris@0
|
63 }
|