diff --git a/src/Controller/AccountController.php b/src/Controller/AccountController.php index c045fd0..d1c9134 100644 --- a/src/Controller/AccountController.php +++ b/src/Controller/AccountController.php @@ -43,9 +43,6 @@ class AccountController extends AbstractController /** @var User $user */ $user = $this->getUser(); $isOrganizer = $this->isGranted('ROLE_ORGANIZER'); - $defaultTab = $isOrganizer ? 'events' : 'tickets'; - $tab = $request->query->getString('tab', $defaultTab); - if ($isOrganizer && $user->getStripeAccountId() && (!$user->isStripeChargesEnabled() || !$user->isStripePayoutsEnabled())) { try { // @codeCoverageIgnoreStart $account = $stripeService->getClient()->accounts->retrieve($user->getStripeAccountId()); @@ -57,6 +54,15 @@ class AccountController extends AbstractController } // @codeCoverageIgnoreEnd } + $stripeReady = $user->isStripeChargesEnabled() && $user->isStripePayoutsEnabled(); + $organizerTabs = ['events', 'subaccounts', 'payouts']; + $defaultTab = ($isOrganizer && $stripeReady) ? 'events' : 'tickets'; + $tab = $request->query->getString('tab', $defaultTab); + + if (\in_array($tab, $organizerTabs, true) && !$stripeReady) { + $tab = $defaultTab; + } + $payouts = []; $subAccounts = []; $events = []; @@ -328,6 +334,9 @@ class AccountController extends AbstractController public function createEvent(Request $request, EntityManagerInterface $em, EventIndexService $eventIndex, AuditService $audit): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -362,6 +371,9 @@ class AccountController extends AbstractController public function editEvent(Event $event, Request $request, EntityManagerInterface $em, EventIndexService $eventIndex, PaginatorInterface $paginator, OrderIndexService $orderIndex, AuditService $audit): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -458,6 +470,9 @@ class AccountController extends AbstractController public function addCategory(Event $event, Request $request, EntityManagerInterface $em, AuditService $audit): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -507,6 +522,9 @@ class AccountController extends AbstractController public function editCategory(Event $event, int $categoryId, Request $request, EntityManagerInterface $em, AuditService $audit): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -563,6 +581,9 @@ class AccountController extends AbstractController public function deleteCategory(Event $event, int $categoryId, EntityManagerInterface $em, AuditService $audit): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -587,6 +608,9 @@ class AccountController extends AbstractController public function reorderCategories(Event $event, Request $request, EntityManagerInterface $em): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -612,6 +636,9 @@ class AccountController extends AbstractController public function addBillet(Event $event, int $categoryId, Request $request, EntityManagerInterface $em, StripeService $stripeService, AuditService $audit): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -658,6 +685,9 @@ class AccountController extends AbstractController public function editBillet(Event $event, int $billetId, Request $request, EntityManagerInterface $em, StripeService $stripeService, AuditService $audit): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -699,6 +729,9 @@ class AccountController extends AbstractController public function deleteBillet(Event $event, int $billetId, EntityManagerInterface $em, StripeService $stripeService, AuditService $audit): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -729,6 +762,9 @@ class AccountController extends AbstractController public function reorderBillets(Event $event, Request $request, EntityManagerInterface $em): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -754,6 +790,9 @@ class AccountController extends AbstractController public function createInvitation(Event $event, Request $request, EntityManagerInterface $em, BilletOrderService $billetOrderService): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -828,6 +867,9 @@ class AccountController extends AbstractController public function resendInvitation(Event $event, int $orderId, EntityManagerInterface $em, BilletOrderService $billetOrderService): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -851,6 +893,9 @@ class AccountController extends AbstractController public function cancelOrder(Event $event, int $orderId, EntityManagerInterface $em, AuditService $audit, BilletOrderService $billetOrderService): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -891,6 +936,9 @@ class AccountController extends AbstractController public function refundOrder(Event $event, int $orderId, EntityManagerInterface $em, StripeService $stripeService, AuditService $audit, BilletOrderService $billetOrderService): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -939,6 +987,9 @@ class AccountController extends AbstractController public function billetPreview(Event $event, Request $request): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -963,6 +1014,9 @@ class AccountController extends AbstractController public function saveBilletDesign(Event $event, Request $request, EntityManagerInterface $em): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -991,6 +1045,9 @@ class AccountController extends AbstractController public function toggleEventOnline(Event $event, EntityManagerInterface $em, EventIndexService $eventIndex): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -1018,6 +1075,9 @@ class AccountController extends AbstractController public function toggleEventSecret(Event $event, EntityManagerInterface $em, EventIndexService $eventIndex): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -1039,6 +1099,9 @@ class AccountController extends AbstractController public function deleteEvent(Event $event, EntityManagerInterface $em, EventIndexService $eventIndex, AuditService $audit): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -1064,6 +1127,9 @@ class AccountController extends AbstractController public function eventQrCode(Event $event, UrlGeneratorInterface $urlGenerator): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -1159,6 +1225,18 @@ class AccountController extends AbstractController ]); } + private function requireStripeReady(): ?Response + { + /** @var User $user */ + $user = $this->getUser(); + + if (!$user->isStripeChargesEnabled() || !$user->isStripePayoutsEnabled()) { + return $this->redirectToRoute('app_account'); + } + + return null; + } + /** * @codeCoverageIgnore Requires live Stripe API */ @@ -1198,6 +1276,9 @@ class AccountController extends AbstractController public function export(int $year, int $month, ExportService $exportService): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); @@ -1216,6 +1297,9 @@ class AccountController extends AbstractController public function exportPdf(int $year, int $month, ExportService $exportService): Response { $this->denyAccessUnlessGranted('ROLE_ORGANIZER'); + if ($redirect = $this->requireStripeReady()) { + return $redirect; + } /** @var User $user */ $user = $this->getUser(); diff --git a/templates/account/index.html.twig b/templates/account/index.html.twig index 248ac53..c000972 100644 --- a/templates/account/index.html.twig +++ b/templates/account/index.html.twig @@ -77,9 +77,11 @@ {% endif %} {% endif %} + {% set stripeReady = app.user.stripeChargesEnabled and app.user.stripePayoutsEnabled %} +