Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 10 additions & 34 deletions phpstan-baseline.php
Original file line number Diff line number Diff line change
Expand Up @@ -3025,58 +3025,34 @@
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/RemoveEventAction.php',
];
$ignoreErrors[] = [
'message' => '#^Binary operation "\\." between \'edit_room_\' and mixed results in an error\\.$#',
'identifier' => 'binaryOp.invalid',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/RoomAction.php',
];
$ignoreErrors[] = [
'message' => '#^Cannot call method getId\\(\\) on mixed\\.$#',
'identifier' => 'method.nonObject',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/RoomAction.php',
];
$ignoreErrors[] = [
'message' => '#^Cannot call method getName\\(\\) on mixed\\.$#',
'identifier' => 'method.nonObject',
'count' => 3,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/RoomAction.php',
];
$ignoreErrors[] = [
'message' => '#^Method AppBundle\\\\Controller\\\\Admin\\\\Event\\\\RoomAction\\:\\:getFormsForRooms\\(\\) has parameter \\$rooms with generic interface CCMBenchmark\\\\Ting\\\\Repository\\\\CollectionInterface but does not specify its types\\: T$#',
'identifier' => 'missingType.generics',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/RoomAction.php',
];
$ignoreErrors[] = [
'message' => '#^Method AppBundle\\\\Controller\\\\Admin\\\\Event\\\\RoomAction\\:\\:getFormsForRooms\\(\\) return type with generic interface Symfony\\\\Component\\\\Form\\\\FormInterface does not specify its types\\: TData$#',
'identifier' => 'missingType.generics',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/RoomAction.php',
];
$ignoreErrors[] = [
'message' => '#^Parameter \\#1 \\$entity of method CCMBenchmark\\\\Ting\\\\Repository\\\\Repository\\<AppBundle\\\\Event\\\\Model\\\\Room\\>\\:\\:delete\\(\\) expects AppBundle\\\\Event\\\\Model\\\\Room, mixed given\\.$#',
'identifier' => 'argument.type',
'count' => 1,
'message' => '#^Cannot access property \\$name on mixed\\.$#',
'identifier' => 'property.nonObject',
'count' => 2,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/RoomAction.php',
];
$ignoreErrors[] = [
'message' => '#^Parameter \\#1 \\$entity of method CCMBenchmark\\\\Ting\\\\Repository\\\\Repository\\<AppBundle\\\\Event\\\\Model\\\\Room\\>\\:\\:save\\(\\) expects AppBundle\\\\Event\\\\Model\\\\Room, mixed given\\.$#',
'message' => '#^Parameter \\#1 \\$entity of method AppBundle\\\\Doctrine\\\\EntityRepository\\<AppBundle\\\\Event\\\\Entity\\\\Room\\>\\:\\:delete\\(\\) expects AppBundle\\\\Event\\\\Entity\\\\Room, mixed given\\.$#',
'identifier' => 'argument.type',
'count' => 2,
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/RoomAction.php',
];
$ignoreErrors[] = [
'message' => '#^Parameter \\#1 \\$eventId of method AppBundle\\\\Event\\\\Model\\\\Room\\:\\:setEventId\\(\\) expects int, int\\|null given\\.$#',
'message' => '#^Parameter \\#1 \\$entity of method AppBundle\\\\Doctrine\\\\EntityRepository\\<AppBundle\\\\Event\\\\Entity\\\\Room\\>\\:\\:save\\(\\) expects AppBundle\\\\Event\\\\Entity\\\\Room, mixed given\\.$#',
'identifier' => 'argument.type',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/RoomAction.php',
];
$ignoreErrors[] = [
'message' => '#^Parameter \\#2 \\.\\.\\.\\$values of function sprintf expects bool\\|float\\|int\\|string\\|null, mixed given\\.$#',
'identifier' => 'argument.type',
'count' => 3,
'count' => 2,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/RoomAction.php',
];
$ignoreErrors[] = [
Expand Down Expand Up @@ -3140,7 +3116,7 @@
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/Session/EditAction.php',
];
$ignoreErrors[] = [
'message' => '#^Method AppBundle\\\\Controller\\\\Admin\\\\Event\\\\Session\\\\EditAction\\:\\:roomChoices\\(\\) should return array\\<string, int\\> but returns array\\<int\\|null\\>\\.$#',
'message' => '#^Method AppBundle\\\\Controller\\\\Admin\\\\Event\\\\Session\\\\EditAction\\:\\:roomChoices\\(\\) should return array\\<string, int\\> but returns array\\<string, int\\|null\\>\\.$#',
'identifier' => 'return.type',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/Session/EditAction.php',
Expand Down Expand Up @@ -3170,7 +3146,7 @@
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/Session/EditAction.php',
];
$ignoreErrors[] = [
'message' => '#^Possibly invalid array key type mixed\\.$#',
'message' => '#^Possibly invalid array key type string\\|null\\.$#',
'identifier' => 'offsetAccess.invalidOffset',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/Session/EditAction.php',
Expand All @@ -3188,7 +3164,7 @@
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/Session/IndexAction.php',
];
$ignoreErrors[] = [
'message' => '#^Parameter \\#2 \\$title of class AppBundle\\\\Event\\\\Model\\\\Session\\\\CalendarResource constructor expects string, mixed given\\.$#',
'message' => '#^Parameter \\#2 \\$title of class AppBundle\\\\Event\\\\Model\\\\Session\\\\CalendarResource constructor expects string, string\\|null given\\.$#',
'identifier' => 'argument.type',
'count' => 1,
'path' => __DIR__ . '/sources/AppBundle/Controller/Admin/Event/Session/IndexAction.php',
Expand Down
22 changes: 11 additions & 11 deletions sources/AppBundle/Controller/Admin/Event/RoomAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

use AppBundle\Event\AdminEventSelection;
use Symfony\Component\Form\FormView;
use AppBundle\Event\Entity\Repository\RoomRepository;
use AppBundle\Event\Entity\Room;
use AppBundle\Event\Form\RoomType;
use AppBundle\Event\Model\Repository\RoomRepository;
use AppBundle\Event\Model\Room;
use CCMBenchmark\Ting\Repository\CollectionInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\Form\FormInterface;
Expand All @@ -29,16 +28,16 @@ public function __invoke(Request $request, AdminEventSelection $eventSelection):
$rooms = $this->roomRepository->getByEvent($event);
$editForms = $this->getFormsForRooms($rooms);

foreach ($editForms as $form) {
foreach ($editForms as $i => $form) {
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$room = $form->getData();
if ($request->request->has('delete')) {
$this->roomRepository->delete($room);
$this->addFlash('notice', sprintf('La salle "%s" a été supprimée.', $room->getName()));
$this->addFlash('notice', sprintf('La salle "%s" a été supprimée.', $room->name));
} else {
$this->roomRepository->save($room);
$this->addFlash('notice', sprintf('La salle "%s" a été sauvegardée.', $room->getName()));
$this->addFlash('notice', sprintf('La salle "%s" a été sauvegardée.', $room->name));
}

return $this->redirectToRoute('admin_event_room', [
Expand All @@ -48,15 +47,14 @@ public function __invoke(Request $request, AdminEventSelection $eventSelection):
}

$newRoom = new Room();
$newRoom->setEventId($event->getId());
$newRoom->eventId = $event->getId();

$addForm = $this->createForm(RoomType::class, $newRoom);
$addForm->handleRequest($request);

if ($addForm->isSubmitted() && $addForm->isValid()) {
$newRoom = $addForm->getData();
$this->roomRepository->save($newRoom);
$this->addFlash('notice', sprintf('La salle "%s" a été ajoutée.', $newRoom->getName()));
$this->addFlash('notice', sprintf('La salle "%s" a été ajoutée.', $newRoom->name));

return $this->redirectToRoute('admin_event_room', [
'id' => $event->getId(),
Expand All @@ -74,13 +72,15 @@ public function __invoke(Request $request, AdminEventSelection $eventSelection):
}

/**
* @param array<Room> $rooms
*
* @return FormInterface[]
*/
private function getFormsForRooms(CollectionInterface $rooms): array
private function getFormsForRooms(array $rooms): array
{
$forms = [];
foreach ($rooms as $room) {
$forms[] = $this->formFactory->createNamedBuilder('edit_room_' . $room->getId(), RoomType::class,
$forms[] = $this->formFactory->createNamedBuilder('edit_room_' . $room->id, RoomType::class,
$room)->getForm();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@
namespace AppBundle\Controller\Admin\Event\Session;

use AppBundle\AuditLog\Audit;
use AppBundle\Event\Entity\Repository\RoomRepository;
use AppBundle\Event\Entity\Room;
use AppBundle\Event\Model\Event;
use AppBundle\Event\Model\Planning;
use AppBundle\Event\Model\Repository\EventRepository;
use AppBundle\Event\Model\Repository\PlanningRepository;
use AppBundle\Event\Model\Repository\RoomRepository;
use AppBundle\Event\Model\Repository\TalkRepository;
use AppBundle\Event\Model\Room;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
Expand Down Expand Up @@ -134,7 +134,7 @@ private function roomChoices(Event $event): array
$rooms = $this->roomRepository->getByEvent($event);
/** @var Room $room */
foreach ($rooms as $room) {
$roomChoices[$room->getName()] = $room->getId();
$roomChoices[$room->name] = $room->id;
}

return $roomChoices;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@
namespace AppBundle\Controller\Admin\Event\Session;

use AppBundle\Event\AdminEventSelection;
use AppBundle\Event\Entity\Repository\RoomRepository;
use AppBundle\Event\Entity\Room;
use AppBundle\Event\Model\Event;
use AppBundle\Event\Model\Planning;
use AppBundle\Event\Model\Repository\RoomRepository;
use AppBundle\Event\Model\Repository\TalkRepository;
use AppBundle\Event\Model\Room;
use AppBundle\Event\Model\Session\CalendarEvent;
use AppBundle\Event\Model\Session\CalendarResource;
use AppBundle\Event\Model\TalkAggregate;
Expand Down Expand Up @@ -54,8 +54,8 @@ private function calendarResources(Event $event): array
/** @var Room $room */
foreach ($rooms as $i => $room) {
$resources[] = new CalendarResource(
$room->getId(),
$room->getName(),
$room->id,
$room->name,
$colors[$i % $m],
);
}
Expand Down
29 changes: 29 additions & 0 deletions sources/AppBundle/Event/Entity/Repository/RoomRepository.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<?php

declare(strict_types=1);

namespace AppBundle\Event\Entity\Repository;

use AppBundle\Doctrine\EntityRepository;
use AppBundle\Event\Entity\Room;
use AppBundle\Event\Model\Event;
use Doctrine\Persistence\ManagerRegistry;

/**
* @extends EntityRepository<Room>
*/
final class RoomRepository extends EntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, Room::class);
}

/**
* @return list<Room>
*/
public function getByEvent(Event $event): array
{
return array_values($this->findBy(['eventId' => $event->getId()]));
}
}
27 changes: 27 additions & 0 deletions sources/AppBundle/Event/Entity/Room.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

declare(strict_types=1);

namespace AppBundle\Event\Entity;

use AppBundle\Event\Entity\Repository\RoomRepository;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

#[ORM\Entity(repositoryClass: RoomRepository::class)]
#[ORM\Table(name: 'afup_forum_salle')]
class Room
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'smallint')]
public ?int $id = null;

#[ORM\Column(name: 'nom', length: 255, nullable: true)]
public ?string $name = null;

#[Assert\NotBlank]
#[Assert\GreaterThan(0)]
#[ORM\Column(name: 'id_forum', nullable: true)]
public ?int $eventId = null;
}
2 changes: 1 addition & 1 deletion sources/AppBundle/Event/Form/RoomType.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace AppBundle\Event\Form;

use AppBundle\Event\Model\Room;
use AppBundle\Event\Entity\Room;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?php

declare(strict_types=1);

namespace AppBundle\IntegrationTests\Event\Entity\Repository;

use Afup\Tests\Support\IntegrationTestCase;
use AppBundle\Event\Entity\Repository\RoomRepository;
use AppBundle\Event\Entity\Room;
use AppBundle\Event\Model\Event;

final class RoomRepositoryTest extends IntegrationTestCase
{
public function testSaveGetByEventAndDelete(): void
{
$roomRepository = self::getContainer()->get(RoomRepository::class);
$event = new Event();
$event->setId(4242);

// Deux salles : une pour l'événement testé, l'autre pour un événement voisin
$room = new Room();
$room->name = 'La salle de test';
$room->eventId = 4242;
$roomRepository->save($room);

$autre = new Room();
$autre->name = 'La salle ailleurs';
$autre->eventId = 99;
$roomRepository->save($autre);

// L'auto-incrément remplit l'identifiant à la sauvegarde
self::assertNotNull($room->id);
self::assertGreaterThan(0, $room->id);

$rooms = $roomRepository->getByEvent($event);
self::assertCount(1, $rooms);
self::assertSame('La salle de test', $rooms[0]->name);
self::assertSame($room->id, $rooms[0]->id);

// Mise à jour puis vidage de l'EntityManager pour vérifier la persistance en base
$room->name = 'La salle renommée';
$roomRepository->save($room);
$roomRepository->getEntityManager()->clear();

$reloaded = $roomRepository->find($room->id);
self::assertInstanceOf(Room::class, $reloaded);
self::assertSame('La salle renommée', $reloaded->name);
self::assertSame(4242, $reloaded->eventId);

$roomRepository->delete($reloaded);

self::assertNull($roomRepository->find($room->id));
self::assertCount(0, $roomRepository->getByEvent($event));
}
}
Loading