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.                 ->addItem('Mail importance''admin_settings', ['type' => 'Mail importance'])
  48.                 ->end();
  49.         }
  50.         if ($this->checkContactColumnPermissions()) {
  51.             $menuBuilder->addColumn('Inbox''fal fa-inbox');
  52.             /** @var ItemInterface $currentItem */
  53.             $currentItem $menuBuilder->getCurrentContext();
  54.             $inboxDto = new MenuItem($currentItem);
  55.             $this->addContactMenu($menuBuilder);
  56.             $this->addLearningTrackMenu($menuBuilder);
  57.             $this->addContactCompanyMenu($menuBuilder);
  58.             $this->addRegionContactMenu($menuBuilder);
  59.             $this->addCallMeBackMenu($menuBuilder);
  60.             $this->addFeedbackMenu($menuBuilder);
  61.             $this->addAppointmentMenu($menuBuilder);
  62.             $menuBuilder->end();
  63.             $inboxDto->close();
  64.         }
  65.         if ($this->checkSharpSpringColumnPermissions()) {
  66.             $menuBuilder
  67.                 ->addColumn('Sharpspring''fal fa-network-wired')
  68.                 ->addItem('Forms''admin_sharp_spring_index')
  69.                 ->end();
  70.         }
  71.         if ($this->checkNewsLetterColumnPermissions()) {
  72.             $menuBuilder->addColumn('Newsletter''fal fa-newspaper');
  73.             /** @var ItemInterface $currentItem */
  74.             $currentItem $menuBuilder->getCurrentContext();
  75.             $newsletterDto = new MenuItem($currentItem);
  76.             if (
  77.                 $this->hasAccess([[UserRolePermission::MASK_VIEWSubscription::class]])
  78.                 && $this->checkFeatures([FeatureFlagListener::FEATURE_NEWSLETTER])
  79.             ) {
  80.                 $menuBuilder->addItem('Newsletters''admin_newsletters');
  81.             }
  82.             if (
  83.                 $this->hasAccess([[UserRolePermission::MASK_VIEWNewsletterEvent::class]])
  84.                 && $this->checkFeatures([FeatureFlagListener::FEATURE_NEWSLETTER_EVENTS])
  85.             ) {
  86.                 $menuBuilder->addItem('Newsletter events''admin_newsletters_events');
  87.             }
  88.             $menuBuilder->end();
  89.             $newsletterDto->close();
  90.         }
  91.         $contactDto->close();
  92.     }
  93.     private function addContactMenu(MenuBuilder $menuBuilder)
  94.     {
  95.         if (
  96.             $this->hasAccess([[UserRolePermission::MASK_VIEWContact::class]])
  97.             && $this->checkFeatures([FeatureFlagListener::FEATURE_CONTACT])
  98.         ) {
  99.             $menuBuilder->addItem('Messages''admin_contact_index');
  100.         }
  101.     }
  102.     private function addLearningTrackMenu(MenuBuilder $menuBuilder)
  103.     {
  104.         if (
  105.             $this->hasAccess([[UserRolePermission::MASK_VIEWLearningTrackContact::class]])
  106.             && $this->checkFeatures([FeatureFlagListener::FEATURE_LEARNING_TRACK_CONTACT])
  107.         ) {
  108.             $menuBuilder->addItem('Learning Track messages''admin_learning_track_contact_index');
  109.         }
  110.     }
  111.     private function addContactCompanyMenu(MenuBuilder $menuBuilder)
  112.     {
  113.         if (
  114.             $this->hasAccess([[UserRolePermission::MASK_VIEWContactCompany::class]])
  115.             && $this->checkFeatures([FeatureFlagListener::FEATURE_CONTACT_COMPANY])
  116.         ) {
  117.             $menuBuilder->addItem('Company contact''admin_contact_company_index');
  118.         }
  119.     }
  120.     private function addRegionContactMenu(MenuBuilder $menuBuilder)
  121.     {
  122.         if (
  123.             $this->hasAccess([[UserRolePermission::MASK_VIEWRegionContact::class]])
  124.             && $this->checkFeatures([FeatureFlagListener::FEATURE_REGION_CONTACT])
  125.         ) {
  126.             $menuBuilder->addItem('Regional contact''admin_region_contact_index');
  127.         }
  128.     }
  129.     private function addCallMeBackMenu(MenuBuilder $menuBuilder)
  130.     {
  131.         if (
  132.             $this->hasAccess([[UserRolePermission::MASK_VIEWCallMeBackRequest::class]])
  133.             && $this->checkFeatures([FeatureFlagListener::FEATURE_CALL_ME_BACK])
  134.         ) {
  135.             $menuBuilder->addItem('Call me back requests''admin_call_me_back_index');
  136.         }
  137.     }
  138.     private function addFeedbackMenu(MenuBuilder $menuBuilder)
  139.     {
  140.         if (
  141.             $this->hasAccess([[UserRolePermission::MASK_VIEWFeedback::class]])
  142.             && $this->checkFeatures([FeatureFlagListener::FEATURE_FEEDBACK_FORM])
  143.         ) {
  144.             $menuBuilder->addItem('Feedback''admin_feedback_index');
  145.         }
  146.     }
  147.     private function addAppointmentMenu(MenuBuilder $menuBuilder)
  148.     {
  149.         if (
  150.             $this->hasAccess([[UserRolePermission::MASK_VIEWAppointment::class]])
  151.             && $this->checkFeatures([FeatureFlagListener::FEATURE_APPOINTMENT])
  152.         ) {
  153.             $menuBuilder->addItem('Appointments''admin_appointment_index');
  154.         }
  155.     }
  156.     private function checkMailPermissions(): bool
  157.     {
  158.         return $this->hasAccess(['ROLE_ADMIN_USER', [UserRolePermission::MASK_VIEWMail::class]])
  159.             && $this->checkFeatures([FeatureFlagListener::FEATURE_MAILS]);
  160.     }
  161.     private function checkContactColumnPermissions(): bool
  162.     {
  163.         return (
  164.             $this->hasAccess([[UserRolePermission::MASK_VIEWContact::class]])
  165.             || $this->hasAccess([[UserRolePermission::MASK_VIEWLearningTrackContact::class]])
  166.             || $this->hasAccess([[UserRolePermission::MASK_VIEWContactCompany::class]])
  167.             || $this->hasAccess([[UserRolePermission::MASK_VIEWRegionContact::class]])
  168.             || $this->hasAccess([[UserRolePermission::MASK_VIEWCallMeBackRequest::class]])
  169.             || $this->hasAccess([[UserRolePermission::MASK_VIEWFeedback::class]])
  170.             || $this->hasAccess([[UserRolePermission::MASK_VIEWAppointment::class]])
  171.             || $this->hasAccess([[UserRolePermission::MASK_VIEWSubscription::class]])
  172.             || $this->hasAccess([[UserRolePermission::MASK_VIEWNewsletterEvent::class]])
  173.         )
  174.             && $this->checkFeatures([
  175.             FeatureFlagListener::FEATURE_CONTACT,
  176.             FeatureFlagListener::FEATURE_LEARNING_TRACK_CONTACT,
  177.             FeatureFlagListener::FEATURE_CONTACT_COMPANY,
  178.             FeatureFlagListener::FEATURE_REGION_CONTACT,
  179.             FeatureFlagListener::FEATURE_CALL_ME_BACK,
  180.             FeatureFlagListener::FEATURE_FEEDBACK_FORM,
  181.             FeatureFlagListener::FEATURE_APPOINTMENT,
  182.             FeatureFlagListener::FEATURE_NEWSLETTER,
  183.             FeatureFlagListener::FEATURE_NEWSLETTER_EVENTS,
  184.         ]);
  185.     }
  186.     private function checkSharpSpringColumnPermissions(): bool
  187.     {
  188.         return $this->hasAccess([[UserRolePermission::MASK_VIEWSharpSpringForm::class]])
  189.             && $this->checkFeatures([FeatureFlagListener::FEATURE_SHARP_SPRING]);
  190.     }
  191.     private function checkNewsLetterColumnPermissions(): bool
  192.     {
  193.         return (
  194.             $this->hasAccess([[UserRolePermission::MASK_VIEWSubscription::class]])
  195.             || $this->hasAccess([[UserRolePermission::MASK_VIEWNewsletterEvent::class]])
  196.         )
  197.             && $this->checkFeatures([
  198.             FeatureFlagListener::FEATURE_NEWSLETTER,
  199.             FeatureFlagListener::FEATURE_NEWSLETTER_EVENTS,
  200.         ]);
  201.     }
  202. }