vendor/bluue/sites-bundle/src/EventSubscriber/ProjectViewLinksSubscriber.php line 79

Open in your IDE?
  1. <?php
  2. /**
  3.  * @author Thomas HERISSON (contact@scaledev.fr)
  4.  * @copyright 2021 - ScaleDEV SAS, 12 RUE CHARLES MORET, 10120 ST ANDRE LES VERGERS
  5.  * @license commercial
  6.  */
  7. declare(strict_types=1);
  8. namespace Bluue\SitesBundle\EventSubscriber;
  9. use ReflectionClass;
  10. use App\Services\CheckBundleInstall;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Symfony\Component\Security\Core\Security;
  13. use Symfony\Component\Routing\RouterInterface;
  14. use Symfony\Contracts\Translation\TranslatorInterface;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. class ProjectViewLinksSubscriber implements EventSubscriberInterface
  17. {
  18.     /**
  19.      * @var TranslatorInterface
  20.      */
  21.     private TranslatorInterface $tr;
  22.     /**
  23.      * @var Security
  24.      */
  25.     protected Security $security;
  26.     /**
  27.      * @var RouterInterface
  28.      */
  29.     protected RouterInterface $router;
  30.     /**
  31.      * @var EntityManagerInterface
  32.      */
  33.     protected EntityManagerInterface $em;
  34.     /**
  35.      * @param TranslatorInterface $tr
  36.      * @param Security $security
  37.      * @param RouterInterface $router
  38.      * @param EntityManagerInterface $em
  39.      */
  40.     public function __construct(
  41.         TranslatorInterface $tr,
  42.         Security $security,
  43.         RouterInterface $router,
  44.         EntityManagerInterface $em
  45.     ) {
  46.         $this->tr $tr;
  47.         $this->security $security;
  48.         $this->router $router;
  49.         $this->em $em;
  50.     }
  51.     /**
  52.      * @return array
  53.      */
  54.     public static function getSubscribedEvents(): array
  55.     {
  56.         if (CheckBundleInstall::exist('projects-bundle')) {
  57.             $reflectionClass = new ReflectionClass('Bluue\ProjectsBundle\Event\ProjectViewLinksEvent');
  58.             return [
  59.                 $reflectionClass->getConstant('LINKS') => 'links'
  60.             ];
  61.         }
  62.         return [];
  63.     }
  64.     /**
  65.      * @param object $event
  66.      * @return void
  67.      */
  68.     public function links(object $event): void
  69.     {
  70.         if (!$this->security->isGranted('ROLE__SITES__READ_ONLY')) {
  71.             return;
  72.         }
  73.         $project $this->em->getRepository('ProjectsBundle:Project')->find($event->getId());
  74.         $site $project->getSite();
  75.         if (!$site) {
  76.             return;
  77.         }
  78.         $href $this->router->generate('sites_bundle__site_view', ['id' => $site->getId()]);
  79.         $link '<a href="' $href '" class="btn btn-sm btn-primary"><i class="fas fa-link"></i> ';
  80.         $link .= $this->tr->trans('Site:', [], 'SitesBundle') . ' ' $site->getName() . '</a>';
  81.         $newLinks = [$link];
  82.         $event->setLinks(array_merge($event->getLinks(), $newLinks));
  83.     }
  84. }