Add event list with pagination, edit and delete actions in account page
- Display events table sorted by startAt ASC with status (en ligne/hors ligne)
- Add KnpPaginator for events (10 per page)
- Add edit event page (/mon-compte/evenement/{id}/modifier) with all fields + isOnline toggle
- Add delete event route (/mon-compte/evenement/{id}/supprimer) with confirmation
- Add Modifier/Supprimer buttons in events table
- Move Stripe warning outside the card
- Fix test to use fresh EntityManager for event assertion
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -8,6 +8,7 @@ use App\Service\MailerService;
|
||||
use App\Service\PayoutPdfService;
|
||||
use App\Service\StripeService;
|
||||
use Doctrine\ORM\EntityManagerInterface;
|
||||
use Knp\Component\Pager\PaginatorInterface;
|
||||
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
@@ -22,7 +23,7 @@ class AccountController extends AbstractController
|
||||
private const BREADCRUMB_ACCOUNT = ['name' => 'Mon compte', 'url' => '/mon-compte'];
|
||||
|
||||
#[Route('/mon-compte', name: 'app_account')]
|
||||
public function index(Request $request, StripeService $stripeService, EntityManagerInterface $em): Response
|
||||
public function index(Request $request, StripeService $stripeService, EntityManagerInterface $em, PaginatorInterface $paginator): Response
|
||||
{
|
||||
/** @var User $user */
|
||||
$user = $this->getUser();
|
||||
@@ -43,6 +44,7 @@ class AccountController extends AbstractController
|
||||
|
||||
$payouts = [];
|
||||
$subAccounts = [];
|
||||
$events = [];
|
||||
if ($isOrganizer) {
|
||||
$payouts = $em->getRepository(Payout::class)->findBy(
|
||||
['organizer' => $user],
|
||||
@@ -52,6 +54,11 @@ class AccountController extends AbstractController
|
||||
['parentOrganizer' => $user],
|
||||
['createdAt' => 'DESC'],
|
||||
);
|
||||
$eventsQuery = $em->getRepository(\App\Entity\Event::class)->findBy(
|
||||
['account' => $user],
|
||||
['startAt' => 'ASC'],
|
||||
);
|
||||
$events = $paginator->paginate($eventsQuery, $request->query->getInt('page', 1), 10);
|
||||
}
|
||||
|
||||
return $this->render('account/index.html.twig', [
|
||||
@@ -59,6 +66,7 @@ class AccountController extends AbstractController
|
||||
'isOrganizer' => $isOrganizer,
|
||||
'payouts' => $payouts,
|
||||
'subAccounts' => $subAccounts,
|
||||
'events' => $events,
|
||||
'breadcrumbs' => [
|
||||
self::BREADCRUMB_HOME,
|
||||
self::BREADCRUMB_ACCOUNT,
|
||||
@@ -322,6 +330,68 @@ class AccountController extends AbstractController
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/mon-compte/evenement/{id}/modifier', name: 'app_account_edit_event', methods: ['GET', 'POST'])]
|
||||
public function editEvent(\App\Entity\Event $event, Request $request, EntityManagerInterface $em): Response
|
||||
{
|
||||
$this->denyAccessUnlessGranted('ROLE_ORGANIZER');
|
||||
|
||||
/** @var User $user */
|
||||
$user = $this->getUser();
|
||||
if ($event->getAccount()->getId() !== $user->getId()) {
|
||||
throw $this->createAccessDeniedException();
|
||||
}
|
||||
|
||||
if ($request->isMethod('POST')) {
|
||||
$event->setTitle(trim($request->request->getString('title')));
|
||||
$event->setDescription(trim($request->request->getString('description')) ?: null);
|
||||
$event->setStartAt(new \DateTimeImmutable($request->request->getString('start_at')));
|
||||
$event->setEndAt(new \DateTimeImmutable($request->request->getString('end_at')));
|
||||
$event->setAddress(trim($request->request->getString('address')));
|
||||
$event->setZipcode(trim($request->request->getString('zipcode')));
|
||||
$event->setCity(trim($request->request->getString('city')));
|
||||
$event->setIsOnline($request->request->getBoolean('is_online'));
|
||||
|
||||
$pictureFile = $request->files->get('event_main_picture');
|
||||
if ($pictureFile) {
|
||||
$event->setEventMainPictureFile($pictureFile);
|
||||
}
|
||||
|
||||
$em->flush();
|
||||
|
||||
$this->addFlash('success', 'Evenement modifie avec succes.');
|
||||
|
||||
return $this->redirectToRoute('app_account', ['tab' => 'events']);
|
||||
}
|
||||
|
||||
return $this->render('account/edit_event.html.twig', [
|
||||
'event' => $event,
|
||||
'breadcrumbs' => [
|
||||
self::BREADCRUMB_HOME,
|
||||
self::BREADCRUMB_ACCOUNT,
|
||||
['name' => 'Modifier un evenement', 'url' => '/mon-compte/evenement/'.$event->getId().'/modifier'],
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route('/mon-compte/evenement/{id}/supprimer', name: 'app_account_delete_event', methods: ['POST'])]
|
||||
public function deleteEvent(\App\Entity\Event $event, EntityManagerInterface $em): Response
|
||||
{
|
||||
$this->denyAccessUnlessGranted('ROLE_ORGANIZER');
|
||||
|
||||
/** @var User $user */
|
||||
$user = $this->getUser();
|
||||
if ($event->getAccount()->getId() !== $user->getId()) {
|
||||
throw $this->createAccessDeniedException();
|
||||
}
|
||||
|
||||
$em->remove($event);
|
||||
$em->flush();
|
||||
|
||||
$this->addFlash('success', 'Evenement supprime.');
|
||||
|
||||
return $this->redirectToRoute('app_account', ['tab' => 'events']);
|
||||
}
|
||||
|
||||
/** @codeCoverageIgnore Test helper, not used in production */
|
||||
#[Route('/mon-compte/test-payout', name: 'app_account_test_payout', methods: ['POST'])]
|
||||
public function testPayout(EntityManagerInterface $em): Response
|
||||
|
||||
Reference in New Issue
Block a user