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