src/Component/AdminMenu/EventSubscriber/ContactMenuSubscriber.php line 27

Open in your IDE?
  1. <?php
  2. namespace App\Component\AdminMenu\EventSubscriber;
  3. use App\Component\AdminMenu\Event\AbstractBuildMenuEvent;
  4. use App\Component\AdminMenu\MenuBuilder;
  5. use App\Component\UserRole\Permission\UserRolePermission;
  6. use App\Dto\MenuItem;
  7. use App\Entity\Appointment;
  8. use App\Entity\CallMeBackRequest;
  9. use App\Entity\Contact;
  10. use App\Entity\ContactCompany;
  11. use App\Entity\Feedback;
  12. use App\Entity\LearningTrackContact;
  13. use App\Entity\Mail;
  14. use App\Entity\RegionContact;
  15. use App\Entity\SharpSpringForm;
  16. use App\Entity\Subscription;
  17. use App\Event\NewsletterEvent;
  18. use App\EventListener\FeatureFlagListener;
  19. use Knp\Menu\ItemInterface;
  20. class ContactMenuSubscriber extends AbstractMenuBuildEventSubscriber
  21. {
  22.     protected static int $priority = -20;
  23.     public function buildMenu(AbstractBuildMenuEvent $event)
  24.     {
  25.         if (
  26.             !$this->checkMailPermissions()
  27.             && !$this->checkContactColumnPermissions()
  28.             && !$this->checkSharpSpringColumnPermissions()
  29.             && !$this->checkNewsLetterColumnPermissions()
  30.         ) {
  31.             return;
  32.         }
  33.         $item $event->getMenu();
  34.         $menuBuilder $this->getMenuBuilder($item);
  35.         $menuBuilder->addMainItem('Contact''fal fa-exchange-alt');
  36.         /** @var ItemInterface $contactItem */
  37.         $contactItem $menuBuilder->getCurrentContext();
  38.         $menuBuilder->addOverlay()
  39.             ->addSection('Contact');
  40.         $contactItemContainer $menuBuilder->getCurrentContext();
  41.         $contactDto = new MenuItem($contactItem$contactItemContainer);
  42.         if ($this->checkMailPermissions()) {
  43.             $menuBuilder
  44.                 ->addColumn('Mail''fal fa-envelope')
  45.                 ->addItem('Mails''ats_mails')
  46.                 ->addItem('Mail sets''admin_mail_sets')
  47.                 ->end();
  48.         }
  49.         if ($this->checkContactColumnPermissions()) {
  50.             $menuBuilder->addColumn('Inbox''fal fa-inbox');
  51.             /** @var ItemInterface $currentItem */
  52.             $currentItem $menuBuilder->getCurrentContext();
  53.             $inboxDto = new MenuItem($currentItem);
  54.             $this->addContactMenu($menuBuilder);
  55.             $this->addLearningTrackMenu($menuBuilder);
  56.             $this->addContactCompanyMenu($menuBuilder);
  57.             $this->addRegionContactMenu($menuBuilder);
  58.             $this->addCallMeBackMenu($menuBuilder);
  59.             $this->addFeedbackMenu($menuBuilder);
  60.             $this->addAppointmentMenu($menuBuilder);
  61.             $menuBuilder->end();
  62.             $inboxDto->close();
  63.         }
  64.         if ($this->checkSharpSpringColumnPermissions()) {
  65.             $menuBuilder
  66.                 ->addColumn('Sharpspring''fal fa-network-wired')
  67.                 ->addItem('Forms''admin_sharp_spring_index')
  68.                 ->end();
  69.         }
  70.         if ($this->checkNewsLetterColumnPermissions()) {
  71.             $menuBuilder->addColumn('Newsletter''fal fa-newspaper');
  72.             /** @var ItemInterface $currentItem */
  73.             $currentItem $menuBuilder->getCurrentContext();
  74.             $newsletterDto = new MenuItem($currentItem);
  75.             if (
  76.                 $this->hasAccess([[UserRolePermission::MASK_VIEWSubscription::class]])
  77.                 && $this->checkFeatures([FeatureFlagListener::FEATURE_NEWSLETTER])
  78.             ) {
  79.                 $menuBuilder->addItem('Newsletters''admin_newsletters');
  80.             }
  81.             if (
  82.                 $this->hasAccess([[UserRolePermission::MASK_VIEWNewsletterEvent::class]])
  83.                 && $this->checkFeatures([FeatureFlagListener::FEATURE_NEWSLETTER_EVENTS])
  84.             ) {
  85.                 $menuBuilder->addItem('Newsletter events''admin_newsletters_events');
  86.             }
  87.             $menuBuilder->end();
  88.             $newsletterDto->close();
  89.         }
  90.         $contactDto->close();
  91.     }
  92.     private function addContactMenu(MenuBuilder $menuBuilder)
  93.     {
  94.         if (
  95.             $this->hasAccess([[UserRolePermission::MASK_VIEWContact::class]])
  96.             && $this->checkFeatures([FeatureFlagListener::FEATURE_CONTACT])
  97.         ) {
  98.             $menuBuilder->addItem('Messages''admin_contact_index');
  99.         }
  100.     }
  101.     private function addLearningTrackMenu(MenuBuilder $menuBuilder)
  102.     {
  103.         if (
  104.             $this->hasAccess([[UserRolePermission::MASK_VIEWLearningTrackContact::class]])
  105.             && $this->checkFeatures([FeatureFlagListener::FEATURE_LEARNING_TRACK_CONTACT])
  106.         ) {
  107.             $menuBuilder->addItem('Learning Track messages''admin_learning_track_contact_index');
  108.         }
  109.     }
  110.     private function addContactCompanyMenu(MenuBuilder $menuBuilder)
  111.     {
  112.         if (
  113.             $this->hasAccess([[UserRolePermission::MASK_VIEWContactCompany::class]])
  114.             && $this->checkFeatures([FeatureFlagListener::FEATURE_CONTACT_COMPANY])
  115.         ) {
  116.             $menuBuilder->addItem('Company contact''admin_contact_company_index');
  117.         }
  118.     }
  119.     private function addRegionContactMenu(MenuBuilder $menuBuilder)
  120.     {
  121.         if (
  122.             $this->hasAccess([[UserRolePermission::MASK_VIEWRegionContact::class]])
  123.             && $this->checkFeatures([FeatureFlagListener::FEATURE_REGION_CONTACT])
  124.         ) {
  125.             $menuBuilder->addItem('Regional contact''admin_region_contact_index');
  126.         }
  127.     }
  128.     private function addCallMeBackMenu(MenuBuilder $menuBuilder)
  129.     {
  130.         if (
  131.             $this->hasAccess([[UserRolePermission::MASK_VIEWCallMeBackRequest::class]])
  132.             && $this->checkFeatures([FeatureFlagListener::FEATURE_CALL_ME_BACK])
  133.         ) {
  134.             $menuBuilder->addItem('Call me back requests''admin_call_me_back_index');
  135.         }
  136.     }
  137.     private function addFeedbackMenu(MenuBuilder $menuBuilder)
  138.     {
  139.         if (
  140.             $this->hasAccess([[UserRolePermission::MASK_VIEWFeedback::class]])
  141.             && $this->checkFeatures([FeatureFlagListener::FEATURE_FEEDBACK_FORM])
  142.         ) {
  143.             $menuBuilder->addItem('Feedback''admin_feedback_index');
  144.         }
  145.     }
  146.     private function addAppointmentMenu(MenuBuilder $menuBuilder)
  147.     {
  148.         if (
  149.             $this->hasAccess([[UserRolePermission::MASK_VIEWAppointment::class]])
  150.             && $this->checkFeatures([FeatureFlagListener::FEATURE_APPOINTMENT])
  151.         ) {
  152.             $menuBuilder->addItem('Appointments''admin_appointment_index');
  153.         }
  154.     }
  155.     private function checkMailPermissions(): bool
  156.     {
  157.         return $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWMail::class]])
  158.             && $this->checkFeatures([FeatureFlagListener::FEATURE_MAILS]);
  159.     }
  160.     private function checkContactColumnPermissions(): bool
  161.     {
  162.         return (
  163.             $this->hasAccess([[UserRolePermission::MASK_VIEWContact::class]])
  164.             || $this->hasAccess([[UserRolePermission::MASK_VIEWLearningTrackContact::class]])
  165.             || $this->hasAccess([[UserRolePermission::MASK_VIEWContactCompany::class]])
  166.             || $this->hasAccess([[UserRolePermission::MASK_VIEWRegionContact::class]])
  167.             || $this->hasAccess([[UserRolePermission::MASK_VIEWCallMeBackRequest::class]])
  168.             || $this->hasAccess([[UserRolePermission::MASK_VIEWFeedback::class]])
  169.             || $this->hasAccess([[UserRolePermission::MASK_VIEWAppointment::class]])
  170.             || $this->hasAccess([[UserRolePermission::MASK_VIEWSubscription::class]])
  171.             || $this->hasAccess([[UserRolePermission::MASK_VIEWNewsletterEvent::class]])
  172.         )
  173.             && $this->checkFeatures([
  174.             FeatureFlagListener::FEATURE_CONTACT,
  175.             FeatureFlagListener::FEATURE_LEARNING_TRACK_CONTACT,
  176.             FeatureFlagListener::FEATURE_CONTACT_COMPANY,
  177.             FeatureFlagListener::FEATURE_REGION_CONTACT,
  178.             FeatureFlagListener::FEATURE_CALL_ME_BACK,
  179.             FeatureFlagListener::FEATURE_FEEDBACK_FORM,
  180.             FeatureFlagListener::FEATURE_APPOINTMENT,
  181.             FeatureFlagListener::FEATURE_NEWSLETTER,
  182.             FeatureFlagListener::FEATURE_NEWSLETTER_EVENTS,
  183.         ]);
  184.     }
  185.     private function checkSharpSpringColumnPermissions(): bool
  186.     {
  187.         return $this->hasAccess([[UserRolePermission::MASK_VIEWSharpSpringForm::class]])
  188.             && $this->checkFeatures([FeatureFlagListener::FEATURE_SHARP_SPRING]);
  189.     }
  190.     private function checkNewsLetterColumnPermissions(): bool
  191.     {
  192.         return (
  193.             $this->hasAccess([[UserRolePermission::MASK_VIEWSubscription::class]])
  194.             || $this->hasAccess([[UserRolePermission::MASK_VIEWNewsletterEvent::class]])
  195.         )
  196.             && $this->checkFeatures([
  197.             FeatureFlagListener::FEATURE_NEWSLETTER,
  198.             FeatureFlagListener::FEATURE_NEWSLETTER_EVENTS,
  199.         ]);
  200.     }
  201. }