src/Aqarmap/Bundle/UserBundle/EventListener/ConfigureMenuEventSubscriber.php line 35

  1. <?php
  2. namespace Aqarmap\Bundle\UserBundle\EventListener;
  3. use Aqarmap\Bundle\MainBundle\Event\ConfigureMenuEvent;
  4. use Aqarmap\Bundle\PaymentBundle\Constant\GatewayTypes;
  5. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  6. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  7. use Symfony\Contracts\Translation\TranslatorInterface;
  8. class ConfigureMenuEventSubscriber implements \Symfony\Component\EventDispatcher\EventSubscriberInterface
  9. {
  10. public function __construct(protected TranslatorInterface $translator, private readonly TokenStorageInterface $tokenStorage, private readonly AuthorizationCheckerInterface $authorizationChecker)
  11. {
  12. }
  13. public function onAdminSidebarMenuConfigure(ConfigureMenuEvent $event): void
  14. {
  15. $menu = $event->getMenu();
  16. $userRole = $this->authorizationChecker;
  17. if ($userRole->isGranted('ROLE_SUPPORT')
  18. || $userRole->isGranted('ROLE_USER_MANAGEMENT')
  19. || $userRole->isGranted('ROLE_MARKETING')
  20. || $userRole->isGranted('ROLE_IMPORT_USERS')
  21. || $userRole->isGranted('ROLE_IMPORT_USERS_UGC')
  22. || $userRole->isGranted('ROLE_IMPORT_DEVELOPER_USERS')
  23. || $userRole->isGranted('ROLE_CREDIT_PACKAGE')) {
  24. $menu
  25. ->addChild('users_group', ['uri' => '#'])
  26. ->setLabel('Users Management')
  27. ->setExtra('position', 50)
  28. ->setExtra('icon', 'users');
  29. }
  30. if ($userRole->isGranted('ROLE_SUPPORT')) {
  31. $menu['users_group']
  32. ->addChild('Users', ['route' => 'aqarmap_admin_user'])
  33. ->setLabel($this->translator->trans('layout.admin.users'))
  34. ->setExtra('position', 51)
  35. ->setExtra('icon', 'user');
  36. }
  37. if ($userRole->isGranted('ROLE_IMPORT_USERS')) {
  38. $menu['users_group']
  39. ->addChild('import_users', ['route' => 'aqarmap_admin_import_users'])
  40. ->setLabel($this->translator->trans('layout.admin.import_users'))
  41. ->setExtra('position', 52)
  42. ->setExtra('icon', 'upload');
  43. }
  44. if ($userRole->isGranted('ROLE_IMPORT_USERS_UGC')) {
  45. $menu['users_group']
  46. ->addChild('import_users_UGC', ['route' => 'aqarmap_admin_import_users_ugc'])
  47. ->setLabel($this->translator->trans('layout.admin.import_users_ugc.label'))
  48. ->setExtra('position', 53)
  49. ->setExtra('icon', 'upload');
  50. }
  51. if ($userRole->isGranted('ROLE_IMPORT_DEVELOPER_USERS')) {
  52. $menu['users_group']
  53. ->addChild('import_developer_users', ['route' => 'aqarmap_admin_import_developer_users'])
  54. ->setLabel($this->translator->trans('layout.admin.import_developer_users'))
  55. ->setExtra('position', 61)
  56. ->setExtra('icon', 'upload');
  57. }
  58. if ($userRole->isGranted('ROLE_USER_MANAGEMENT')) {
  59. // Packages
  60. $menu['users_group']
  61. ->addChild('user_team', ['route' => 'aqarmap_admin_team_index'])
  62. ->setLabel($this->translator->trans('team.admin_label'))
  63. ->setExtra('position', 58)
  64. ->setExtra('icon', 'users');
  65. // Transactions
  66. $menu['users_group']
  67. ->addChild('credit_transactions', ['route' => 'aqarmap_admin_credit_transaction'])
  68. ->setLabel($this->translator->trans('layout.admin.credit_transactions.title'))
  69. ->setExtra('position', 55)
  70. ->setExtra('icon', 'bitcoin')
  71. ->setExtra('brand_icon', true);
  72. // Payment
  73. $menu['users_group']
  74. ->addChild('payment_transactions', [
  75. 'route' => 'aqarmap_admin_payment_transactions',
  76. 'routeParameters' => [
  77. 'status' => 'approved',
  78. 'order' => 'approval',
  79. ],
  80. ])
  81. ->setLabel($this->translator->trans('layout.admin.payment_transactions'))
  82. ->setExtra('position', 56)
  83. ->setExtra('icon', 'cc-visa')
  84. ->setExtra('brand_icon', true);
  85. $menu['users_group']
  86. ->addChild('manual_fawry', [
  87. 'route' => 'aqarmap_admin_payment_transactions',
  88. 'routeParameters' => [
  89. 'gateway' => GatewayTypes::MANUAL_FAWRY,
  90. 'order' => 'approval',
  91. ],
  92. ])
  93. ->setLabel($this->translator->trans('layout.admin.manual_fawry'))
  94. ->setExtra('position', 62)
  95. ->setExtra('icon', 'cc-visa')
  96. ->setExtra('brand_icon', true);
  97. }
  98. if ($userRole->isGranted('ROLE_CREDIT_PACKAGE')) {
  99. $menu['users_group']
  100. ->addChild('credit_package', ['route' => 'aqarmap_admin_package'])
  101. ->setLabel($this->translator->trans('layout.admin.credit_package'))
  102. ->setExtra('position', 54)
  103. ->setExtra('icon', 'bullhorn');
  104. }
  105. }
  106. public function onMainNavbarMenuConfigure(ConfigureMenuEvent $event): void
  107. {
  108. $menu = $event->getMenu();
  109. if ($this->getAuthorizationChecker()->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  110. // Logout
  111. $username = $this->getTokenStorage()->getToken()->getUser()->getUserIdentifier();
  112. $menu
  113. ->addChild('logout', ['route' => 'app_logout'])
  114. ->setLabel($this->translator->trans('layout.logout_username', ['%username%' => $username]))
  115. ->setExtra('position', 1000);
  116. } else {
  117. // Register
  118. $menu
  119. ->addChild('register', ['route' => 'app_register'])
  120. ->setLabel($this->translator->trans('layout.register'))
  121. ->setExtra('position', 900);
  122. // Login
  123. $menu
  124. ->addChild('login', ['route' => 'app_login'])
  125. ->setLabel($this->translator->trans('layout.signin'))
  126. ->setExtra('position', 800);
  127. }
  128. }
  129. /**
  130. * @return TokenStorageInterface
  131. */
  132. private function getTokenStorage()
  133. {
  134. return $this->tokenStorage;
  135. }
  136. /**
  137. * @return AuthorizationCheckerInterface
  138. */
  139. private function getAuthorizationChecker()
  140. {
  141. return $this->authorizationChecker;
  142. }
  143. /**
  144. * @return array<string, mixed>
  145. */
  146. public static function getSubscribedEvents(): array
  147. {
  148. return ['aqarmap.main.admin_sidebar_menu_configure' => 'onAdminSidebarMenuConfigure'];
  149. }
  150. }