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.         /** @var Transition $transition */
  31.         $transition $event->getTransition();
  32.         /** @var Document|Concrete $subject */
  33.         $subject $event->getSubject();
  34.         $changePublishedState $transition->getChangePublishedState();
  35.         if ($subject->isPublished() && $changePublishedState == self::FORCE_UNPUBLISHED) {
  36.             $subject->setPublished(false);
  37.         }
  38.         if (!$subject->isPublished() && $changePublishedState == self::FORCE_PUBLISHED) {
  39.             $subject->setPublished(true);
  40.         }
  41.     }
  42.     /**
  43.      * check's if the event subscriber should be executed
  44.      *
  45.      * @param Event $event
  46.      *
  47.      * @return bool
  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()
  55.     {
  56.         return [
  57.             'workflow.completed' => 'onWorkflowCompleted'
  58.         ];
  59.     }
  60. }