vendor/thelia/core/lib/Thelia/Action/Profile.php line 74

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Thelia package.
  4.  * http://www.thelia.net
  5.  *
  6.  * (c) OpenStudio <info@thelia.net>
  7.  *
  8.  * For the full copyright and license information, please view the LICENSE
  9.  * file that was distributed with this source code.
  10.  */
  11. namespace Thelia\Action;
  12. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Thelia\Core\Event\Profile\ProfileEvent;
  15. use Thelia\Core\Event\TheliaEvents;
  16. use Thelia\Core\Security\AccessManager;
  17. use Thelia\Model\ModuleQuery;
  18. use Thelia\Model\Profile as ProfileModel;
  19. use Thelia\Model\ProfileModule;
  20. use Thelia\Model\ProfileModuleQuery;
  21. use Thelia\Model\ProfileQuery;
  22. use Thelia\Model\ProfileResource;
  23. use Thelia\Model\ProfileResourceQuery;
  24. use Thelia\Model\ResourceQuery;
  25. class Profile extends BaseAction implements EventSubscriberInterface
  26. {
  27.     /**
  28.      * @param $eventName
  29.      */
  30.     public function create(ProfileEvent $event$eventNameEventDispatcherInterface $dispatcher): void
  31.     {
  32.         $profile = new ProfileModel();
  33.         $profile
  34.             ->setCode($event->getCode())
  35.             ->setLocale($event->getLocale())
  36.             ->setTitle($event->getTitle())
  37.             ->setChapo($event->getChapo())
  38.             ->setDescription($event->getDescription())
  39.             ->setPostscriptum($event->getPostscriptum())
  40.         ;
  41.         $profile->save();
  42.         $event->setProfile($profile);
  43.     }
  44.     /**
  45.      * @param $eventName
  46.      */
  47.     public function update(ProfileEvent $event$eventNameEventDispatcherInterface $dispatcher): void
  48.     {
  49.         if (null !== $profile ProfileQuery::create()->findPk($event->getId())) {
  50.             $profile
  51.                 ->setLocale($event->getLocale())
  52.                 ->setTitle($event->getTitle())
  53.                 ->setChapo($event->getChapo())
  54.                 ->setDescription($event->getDescription())
  55.                 ->setPostscriptum($event->getPostscriptum())
  56.             ;
  57.             $profile->save();
  58.             $event->setProfile($profile);
  59.         }
  60.     }
  61.     public function updateResourceAccess(ProfileEvent $event): void
  62.     {
  63.         if (null !== $profile ProfileQuery::create()->findPk($event->getId())) {
  64.             ProfileResourceQuery::create()->filterByProfileId($event->getId())->delete();
  65.             foreach ($event->getResourceAccess() as $resourceCode => $accesses) {
  66.                 $manager = new AccessManager(0);
  67.                 $manager->build($accesses);
  68.                 $profileResource = new ProfileResource();
  69.                 $profileResource->setProfileId($event->getId())
  70.                     ->setResource(ResourceQuery::create()->findOneByCode($resourceCode))
  71.                     ->setAccess($manager->getAccessValue());
  72.                 $profileResource->save();
  73.             }
  74.             $event->setProfile($profile);
  75.         }
  76.     }
  77.     public function updateModuleAccess(ProfileEvent $event): void
  78.     {
  79.         if (null !== $profile ProfileQuery::create()->findPk($event->getId())) {
  80.             ProfileModuleQuery::create()->filterByProfileId($event->getId())->delete();
  81.             foreach ($event->getModuleAccess() as $moduleCode => $accesses) {
  82.                 $manager = new AccessManager(0);
  83.                 $manager->build($accesses);
  84.                 $profileModule = new ProfileModule();
  85.                 $profileModule->setProfileId($event->getId())
  86.                     ->setModule(ModuleQuery::create()->findOneByCode($moduleCode))
  87.                     ->setAccess($manager->getAccessValue());
  88.                 $profileModule->save();
  89.             }
  90.             $event->setProfile($profile);
  91.         }
  92.     }
  93.     public function delete(ProfileEvent $event): void
  94.     {
  95.         if (null !== $profile ProfileQuery::create()->findPk($event->getId())) {
  96.             $profile
  97.                 ->delete()
  98.             ;
  99.             $event->setProfile($profile);
  100.         }
  101.     }
  102.     /**
  103.      * {@inheritDoc}
  104.      */
  105.     public static function getSubscribedEvents()
  106.     {
  107.         return [
  108.             TheliaEvents::PROFILE_CREATE => ['create'128],
  109.             TheliaEvents::PROFILE_UPDATE => ['update'128],
  110.             TheliaEvents::PROFILE_DELETE => ['delete'128],
  111.             TheliaEvents::PROFILE_RESOURCE_ACCESS_UPDATE => ['updateResourceAccess'128],
  112.             TheliaEvents::PROFILE_MODULE_ACCESS_UPDATE => ['updateModuleAccess'128],
  113.         ];
  114.     }
  115. }