vendor/pimcore/pimcore/lib/Workflow/EventSubscriber/ChangePublishedStateSubscriber.php line 38

  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * Pimcore
  5.  *
  6.  * This source file is available under two different licenses:
  7.  * - GNU General Public License version 3 (GPLv3)
  8.  * - Pimcore Commercial License (PCL)
  9.  * Full copyright and license information is available in
  10.  * LICENSE.md which is distributed with this source code.
  11.  *
  12.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  13.  *  @license    http://www.pimcore.org/license     GPLv3 and PCL
  14.  */
  15. namespace Pimcore\Workflow\EventSubscriber;
  16. use Pimcore\Model\DataObject\Concrete;
  17. use Pimcore\Model\Document;
  18. use Pimcore\Workflow\Transition;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use Symfony\Component\Workflow\Event\Event;
  21. /**
  22.  * @internal
  23.  */
  24. class ChangePublishedStateSubscriber implements EventSubscriberInterface
  25. {
  26.     const NO_CHANGE 'no_change';
  27.     const FORCE_PUBLISHED 'force_published';
  28.     const FORCE_UNPUBLISHED 'force_unpublished';
  29.     const SAVE_VERSION 'save_version';
  30.     public function onWorkflowCompleted(Event $event): void
  31.     {
  32.         if (!$this->checkEvent($event)) {
  33.             return;
  34.         }
  35.         /** @var Transition $transition */
  36.         $transition $event->getTransition();
  37.         /** @var Document|Concrete $subject */
  38.         $subject $event->getSubject();
  39.         $changePublishedState $transition->getChangePublishedState();
  40.         if ($changePublishedState === self::FORCE_UNPUBLISHED) {
  41.             $subject->setPublished(false);
  42.         } elseif ($changePublishedState === self::FORCE_PUBLISHED) {
  43.             $subject->setPublished(true);
  44.         }
  45.     }
  46.     /**
  47.      * check's if the event subscriber should be executed
  48.      */
  49.     private function checkEvent(Event $event): bool
  50.     {
  51.         return $event->getTransition() instanceof Transition
  52.             && ($event->getSubject() instanceof Concrete || $event->getSubject() instanceof Document);
  53.     }
  54.     public static function getSubscribedEvents(): array
  55.     {
  56.         return [
  57.             'workflow.completed' => 'onWorkflowCompleted',
  58.         ];
  59.     }
  60. }