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

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