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. $menu
  31. ->addChild('finance', ['uri' => '#'])
  32. ->setLabel('Finance')
  33. ->setExtra('position', 51)
  34. ->setExtra('icon', 'receipt')
  35. ;
  36. }
  37. if ($userRole->isGranted('ROLE_SUPPORT')) {
  38. $menu['users_group']
  39. ->addChild('Users', ['route' => 'aqarmap_admin_user'])
  40. ->setLabel($this->translator->trans('layout.admin.users'))
  41. ->setExtra('position', 52)
  42. ->setExtra('icon', 'user');
  43. }
  44. if ($userRole->isGranted('ROLE_MARKETING')) {
  45. $menu['users_group']
  46. ->addChild('push_notifications', ['route' => 'aqarmap_admin_user_push_notification'])
  47. ->setLabel('Push Notifications')
  48. ->setExtra('position', 56)
  49. ->setExtra('icon', 'bullhorn');
  50. }
  51. if ($userRole->isGranted('ROLE_IMPORT_USERS')) {
  52. $menu['users_group']
  53. ->addChild('import_users', ['route' => 'aqarmap_admin_import_users'])
  54. ->setLabel($this->translator->trans('layout.admin.import_users'))
  55. ->setExtra('position', 53)
  56. ->setExtra('icon', 'upload');
  57. }
  58. if ($userRole->isGranted('ROLE_IMPORT_USERS_UGC')) {
  59. $menu['users_group']
  60. ->addChild('import_users_UGC', ['route' => 'aqarmap_admin_import_users_ugc'])
  61. ->setLabel($this->translator->trans('layout.admin.import_users_ugc.label'))
  62. ->setExtra('position', 54)
  63. ->setExtra('icon', 'upload');
  64. $menu['users_group']
  65. ->addChild('import_users_boost_level', ['route' => 'aqarmap_admin_import_users_boost_level'])
  66. ->setLabel($this->translator->trans('layout.admin.import_users_boost_level.label'))
  67. ->setExtra('position', 55)
  68. ->setExtra('icon', 'upload');
  69. }
  70. if ($userRole->isGranted('ROLE_IMPORT_DEVELOPER_USERS')) {
  71. $menu['users_group']
  72. ->addChild('import_developer_users', ['route' => 'aqarmap_admin_import_developer_users'])
  73. ->setLabel($this->translator->trans('layout.admin.import_developer_users'))
  74. ->setExtra('position', 61)
  75. ->setExtra('icon', 'upload');
  76. }
  77. if ($userRole->isGranted('ROLE_USER_MANAGEMENT')) {
  78. // Packages
  79. $menu['users_group']
  80. ->addChild('user_team', ['route' => 'aqarmap_admin_team_index'])
  81. ->setLabel($this->translator->trans('team.admin_label'))
  82. ->setExtra('position', 59)
  83. ->setExtra('icon', 'users');
  84. // Transactions
  85. $menu['finance']
  86. ->addChild('credit_transactions', ['route' => 'aqarmap_admin_credit_transaction'])
  87. ->setLabel($this->translator->trans('layout.admin.credit_transactions.title'))
  88. ->setExtra('position', 56)
  89. ->setExtra('icon', 'bitcoin')
  90. ->setExtra('brand_icon', true);
  91. // Tiers
  92. $menu['finance']
  93. ->addChild('location_tiers', ['route' => 'aqarmap_admin_tiers'])
  94. ->setLabel($this->translator->trans('layout.admin.location_tier'))
  95. ->setExtra('position', 55)
  96. ->setExtra('icon', 'bullhorn');
  97. // Payment
  98. $menu['finance']
  99. ->addChild('payment_transactions', [
  100. 'route' => 'aqarmap_admin_payment_transactions',
  101. 'routeParameters' => [
  102. 'status' => 'approved',
  103. 'order' => 'approval',
  104. ],
  105. ])
  106. ->setLabel($this->translator->trans('layout.admin.payment_transactions'))
  107. ->setExtra('position', 57)
  108. ->setExtra('icon', 'cc-visa')
  109. ->setExtra('brand_icon', true)
  110. ;
  111. $menu['finance']
  112. ->addChild('wallet_payments', [
  113. 'route' => 'aqarmap_admin_payment_transactions',
  114. 'routeParameters' => [
  115. 'gateway' => GatewayTypes::WALLET,
  116. 'status' => 'approved',
  117. 'order' => 'approval',
  118. ],
  119. ])
  120. ->setLabel($this->translator->trans('layout.admin.wallets_payments'))
  121. ->setExtra('position', 58)
  122. ->setExtra('icon', 'funnel-dollar')
  123. ;
  124. $menu['finance']
  125. ->addChild('manual_fawry', [
  126. 'route' => 'aqarmap_admin_payment_transactions',
  127. 'routeParameters' => [
  128. 'gateway' => GatewayTypes::MANUAL_FAWRY,
  129. 'order' => 'approval',
  130. ],
  131. ])
  132. ->setLabel($this->translator->trans('layout.admin.manual_fawry'))
  133. ->setExtra('position', 59)
  134. ->setExtra('icon', 'funnel-dollar')
  135. ;
  136. $menu['finance']
  137. ->addChild('wallets', [
  138. 'route' => 'aqarmap_admin_wallets',
  139. ])
  140. ->setLabel($this->translator->trans('layout.admin.wallets'))
  141. ->setExtra('position', 60)
  142. ->setExtra('icon', 'wallet')
  143. ;
  144. $menu['finance']
  145. ->addChild('wallets_transactions', [
  146. 'route' => 'aqarmap_admin_wallet_transactions',
  147. ])
  148. ->setLabel($this->translator->trans('layout.admin.wallets_transactions'))
  149. ->setExtra('position', 61)
  150. ->setExtra('icon', 'coins')
  151. ;
  152. }
  153. if ($userRole->isGranted('ROLE_CREDIT_PACKAGE')) {
  154. $menu['finance']
  155. ->addChild('credit_package', ['route' => 'aqarmap_admin_package'])
  156. ->setLabel($this->translator->trans('layout.admin.credit_package'))
  157. ->setExtra('position', 54)
  158. ->setExtra('icon', 'bullhorn');
  159. }
  160. }
  161. public function onMainNavbarMenuConfigure(ConfigureMenuEvent $event): void
  162. {
  163. $menu = $event->getMenu();
  164. if ($this->getAuthorizationChecker()->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  165. // Logout
  166. $username = $this->getTokenStorage()->getToken()->getUser()->getUserIdentifier();
  167. $menu
  168. ->addChild('logout', ['route' => 'app_logout'])
  169. ->setLabel($this->translator->trans('layout.logout_username', ['%username%' => $username]))
  170. ->setExtra('position', 1000);
  171. } else {
  172. // Register
  173. $menu
  174. ->addChild('register', ['route' => 'app_register'])
  175. ->setLabel($this->translator->trans('layout.register'))
  176. ->setExtra('position', 900);
  177. // Login
  178. $menu
  179. ->addChild('login', ['route' => 'app_login'])
  180. ->setLabel($this->translator->trans('layout.signin'))
  181. ->setExtra('position', 800);
  182. }
  183. }
  184. /**
  185. * @return TokenStorageInterface
  186. */
  187. private function getTokenStorage()
  188. {
  189. return $this->tokenStorage;
  190. }
  191. /**
  192. * @return AuthorizationCheckerInterface
  193. */
  194. private function getAuthorizationChecker()
  195. {
  196. return $this->authorizationChecker;
  197. }
  198. /**
  199. * @return array<string, mixed>
  200. */
  201. public static function getSubscribedEvents(): array
  202. {
  203. return [ConfigureMenuEvent::ADMIN_SIDEBAR_CONFIGURE => ['onAdminSidebarMenuConfigure', 1001]];
  204. }
  205. }