Browse Source

correctifs et début de mise en place des demandes de parties

garthh 4 weeks ago
parent
commit
402e057049

+ 41 - 0
migrations/Version20250805214838.php

@@ -0,0 +1,41 @@
+<?php
+
+declare(strict_types=1);
+
+namespace DoctrineMigrations;
+
+use Doctrine\DBAL\Schema\Schema;
+use Doctrine\Migrations\AbstractMigration;
+
+/**
+ * Auto-generated Migration: Please modify to your needs!
+ */
+final class Version20250805214838 extends AbstractMigration
+{
+    public function getDescription(): string
+    {
+        return '';
+    }
+
+    public function up(Schema $schema): void
+    {
+        // this up() migration is auto-generated, please modify it to your needs
+        $this->addSql('CREATE TABLE party_request (id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', requester_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', moderator_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', game_choosen_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', gamemaster_choosen_id BINARY(16) DEFAULT NULL COMMENT \'(DC2Type:uuid)\', event_id BINARY(16) NOT NULL COMMENT \'(DC2Type:uuid)\', date_request DATETIME NOT NULL, mod_on_date DATETIME DEFAULT NULL, accepted TINYINT(1) DEFAULT NULL, INDEX IDX_296610B4ED442CF4 (requester_id), INDEX IDX_296610B4D0AFA354 (moderator_id), INDEX IDX_296610B43A95A60F (game_choosen_id), INDEX IDX_296610B44B8771C4 (gamemaster_choosen_id), INDEX IDX_296610B471F7E88B (event_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
+        $this->addSql('ALTER TABLE party_request ADD CONSTRAINT FK_296610B4ED442CF4 FOREIGN KEY (requester_id) REFERENCES user (id)');
+        $this->addSql('ALTER TABLE party_request ADD CONSTRAINT FK_296610B4D0AFA354 FOREIGN KEY (moderator_id) REFERENCES user (id)');
+        $this->addSql('ALTER TABLE party_request ADD CONSTRAINT FK_296610B43A95A60F FOREIGN KEY (game_choosen_id) REFERENCES game (id)');
+        $this->addSql('ALTER TABLE party_request ADD CONSTRAINT FK_296610B44B8771C4 FOREIGN KEY (gamemaster_choosen_id) REFERENCES gamemaster (id)');
+        $this->addSql('ALTER TABLE party_request ADD CONSTRAINT FK_296610B471F7E88B FOREIGN KEY (event_id) REFERENCES event (id)');
+    }
+
+    public function down(Schema $schema): void
+    {
+        // this down() migration is auto-generated, please modify it to your needs
+        $this->addSql('ALTER TABLE party_request DROP FOREIGN KEY FK_296610B4ED442CF4');
+        $this->addSql('ALTER TABLE party_request DROP FOREIGN KEY FK_296610B4D0AFA354');
+        $this->addSql('ALTER TABLE party_request DROP FOREIGN KEY FK_296610B43A95A60F');
+        $this->addSql('ALTER TABLE party_request DROP FOREIGN KEY FK_296610B44B8771C4');
+        $this->addSql('ALTER TABLE party_request DROP FOREIGN KEY FK_296610B471F7E88B');
+        $this->addSql('DROP TABLE party_request');
+    }
+}

+ 37 - 0
src/Entity/Event.php

@@ -89,6 +89,12 @@ class Event
     #[ORM\OneToMany(targetEntity: Party::class, mappedBy: 'event', orphanRemoval: true)]
     private Collection $parties;
 
+    /**
+     * @var Collection<int, PartyRequest>
+     */
+    #[ORM\OneToMany(targetEntity: PartyRequest::class, mappedBy: 'event', orphanRemoval: true)]
+    private Collection $partyRequests;
+
     public function __construct()
     {
         $this->spaces = new ArrayCollection();
@@ -97,6 +103,7 @@ class Event
         $this->gamemastersAssigned = new ArrayCollection();
         $this->gameAssigned = new ArrayCollection();
         $this->parties = new ArrayCollection();
+        $this->partyRequests = new ArrayCollection();
     }
 
     public function getId(): ?Uuid
@@ -403,4 +410,34 @@ class Event
 
         return $this;
     }
+
+    /**
+     * @return Collection<int, PartyRequest>
+     */
+    public function getPartyRequests(): Collection
+    {
+        return $this->partyRequests;
+    }
+
+    public function addPartyRequest(PartyRequest $partyRequest): static
+    {
+        if (!$this->partyRequests->contains($partyRequest)) {
+            $this->partyRequests->add($partyRequest);
+            $partyRequest->setEvent($this);
+        }
+
+        return $this;
+    }
+
+    public function removePartyRequest(PartyRequest $partyRequest): static
+    {
+        if ($this->partyRequests->removeElement($partyRequest)) {
+            // set the owning side to null (unless already changed)
+            if ($partyRequest->getEvent() === $this) {
+                $partyRequest->setEvent(null);
+            }
+        }
+
+        return $this;
+    }
 }

+ 150 - 0
src/Entity/PartyRequest.php

@@ -0,0 +1,150 @@
+<?php
+
+namespace App\Entity;
+
+use App\Repository\PartyRepository;
+use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\Common\Collections\Collection;
+use Doctrine\DBAL\Types\Types;
+use Doctrine\ORM\Mapping as ORM;
+use Symfony\Bridge\Doctrine\Types\UuidType;
+use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
+use Symfony\Component\Uid\Uuid;
+
+#[ORM\Entity(repositoryClass: PartyRequestRepository::class)]
+class PartyRequest
+{
+   #[ORM\Id]
+    #[ORM\Column(type: UuidType::NAME, nullable: true)]
+    #[ORM\GeneratedValue(strategy: 'CUSTOM')]
+    #[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
+    private ?Uuid $id = null;
+
+    #[ORM\ManyToOne(inversedBy: 'partyRequests')]
+    #[ORM\JoinColumn(nullable: false)]
+    private ?User $requester = null;
+
+    #[ORM\Column]
+    private ?\DateTime $dateRequest = null;
+
+    #[ORM\ManyToOne]
+    private ?User $moderator = null;
+
+    #[ORM\Column(nullable: true)]
+    private ?\DateTime $modOnDate = null;
+
+    #[ORM\ManyToOne]
+    #[ORM\JoinColumn(nullable: false)]
+    private ?Game $gameChoosen = null;
+
+    #[ORM\ManyToOne]
+    private ?Gamemaster $gamemasterChoosen = null;
+
+    #[ORM\ManyToOne(inversedBy: 'partyRequests')]
+    #[ORM\JoinColumn(nullable: false)]
+    private ?Event $event = null;
+
+    #[ORM\Column(nullable: true)]
+    private ?bool $accepted = null;
+
+    public function getId(): ?int
+    {
+        return $this->id;
+    }
+
+    public function getRequester(): ?User
+    {
+        return $this->requester;
+    }
+
+    public function setRequester(?User $requester): static
+    {
+        $this->requester = $requester;
+
+        return $this;
+    }
+
+    public function getDateRequest(): ?\DateTime
+    {
+        return $this->dateRequest;
+    }
+
+    public function setDateRequest(\DateTime $dateRequest): static
+    {
+        $this->dateRequest = $dateRequest;
+
+        return $this;
+    }
+
+    public function getModerator(): ?User
+    {
+        return $this->moderator;
+    }
+
+    public function setModerator(?User $moderator): static
+    {
+        $this->moderator = $moderator;
+
+        return $this;
+    }
+
+    public function getModOnDate(): ?\DateTime
+    {
+        return $this->modOnDate;
+    }
+
+    public function setModOnDate(?\DateTime $modOnDate): static
+    {
+        $this->modOnDate = $modOnDate;
+
+        return $this;
+    }
+
+    public function getGameChoosen(): ?Game
+    {
+        return $this->gameChoosen;
+    }
+
+    public function setGameChoosen(?Game $gameChoosen): static
+    {
+        $this->gameChoosen = $gameChoosen;
+
+        return $this;
+    }
+
+    public function getGamemasterChoosen(): ?Gamemaster
+    {
+        return $this->gamemasterChoosen;
+    }
+
+    public function setGamemasterChoosen(?Gamemaster $gamemasterChoosen): static
+    {
+        $this->gamemasterChoosen = $gamemasterChoosen;
+
+        return $this;
+    }
+
+    public function getEvent(): ?Event
+    {
+        return $this->event;
+    }
+
+    public function setEvent(?Event $event): static
+    {
+        $this->event = $event;
+
+        return $this;
+    }
+
+    public function isAccepted(): ?bool
+    {
+        return $this->accepted;
+    }
+
+    public function setAccepted(?bool $accepted): static
+    {
+        $this->accepted = $accepted;
+
+        return $this;
+    }
+}

+ 37 - 0
src/Entity/User.php

@@ -79,11 +79,18 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
     #[ORM\OneToMany(targetEntity: Party::class, mappedBy: 'submitter')]
     private Collection $submittedParties;
 
+    /**
+     * @var Collection<int, PartyRequest>
+     */
+    #[ORM\OneToMany(targetEntity: PartyRequest::class, mappedBy: 'requester', orphanRemoval: true)]
+    private Collection $partyRequests;
+
     public function __construct()
     {
         $this->lastUpdate = new \DateTime('now');
         $this->games = new ArrayCollection();
         $this->submittedParties = new ArrayCollection();
+        $this->partyRequests = new ArrayCollection();
     }
 
     public function getId(): ?Uuid
@@ -377,4 +384,34 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
 
         return $this;
     }
+
+    /**
+     * @return Collection<int, PartyRequest>
+     */
+    public function getPartyRequests(): Collection
+    {
+        return $this->partyRequests;
+    }
+
+    public function addPartyRequest(PartyRequest $partyRequest): static
+    {
+        if (!$this->partyRequests->contains($partyRequest)) {
+            $this->partyRequests->add($partyRequest);
+            $partyRequest->setRequester($this);
+        }
+
+        return $this;
+    }
+
+    public function removePartyRequest(PartyRequest $partyRequest): static
+    {
+        if ($this->partyRequests->removeElement($partyRequest)) {
+            // set the owning side to null (unless already changed)
+            if ($partyRequest->getRequester() === $this) {
+                $partyRequest->setRequester(null);
+            }
+        }
+
+        return $this;
+    }
 }

+ 43 - 0
src/Repository/PartyRequestRepository.php

@@ -0,0 +1,43 @@
+<?php
+
+namespace App\Repository;
+
+use App\Entity\PartyRequest;
+use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
+use Doctrine\Persistence\ManagerRegistry;
+
+/**
+ * @extends ServiceEntityRepository<PartyRequest>
+ */
+class PartyRequestRepository extends ServiceEntityRepository
+{
+    public function __construct(ManagerRegistry $registry)
+    {
+        parent::__construct($registry, PartyRequest::class);
+    }
+
+    //    /**
+    //     * @return PartyRequest[] Returns an array of PartyRequest objects
+    //     */
+    //    public function findByExampleField($value): array
+    //    {
+    //        return $this->createQueryBuilder('p')
+    //            ->andWhere('p.exampleField = :val')
+    //            ->setParameter('val', $value)
+    //            ->orderBy('p.id', 'ASC')
+    //            ->setMaxResults(10)
+    //            ->getQuery()
+    //            ->getResult()
+    //        ;
+    //    }
+
+    //    public function findOneBySomeField($value): ?PartyRequest
+    //    {
+    //        return $this->createQueryBuilder('p')
+    //            ->andWhere('p.exampleField = :val')
+    //            ->setParameter('val', $value)
+    //            ->getQuery()
+    //            ->getOneOrNullResult()
+    //        ;
+    //    }
+}

+ 1 - 1
templates/main/_modal.gamemaster.html.twig

@@ -37,7 +37,7 @@
       </div>
       {% endif %}
       <div class="column has-text-centered">
-        <a class="button is-primary" href="tel:{{ gamemaster.phone }}"><span class="icon-text"><span class="icon mr-3"><twig:ux:icon name="bi:envelope-fill"/></span>Mail</a>
+        <a class="button is-primary" href="mailto:{{ gamemaster.email }}"><span class="icon-text"><span class="icon mr-3"><twig:ux:icon name="bi:envelope-fill"/></span>Mail</a>
       </div>
     </div>
   </div>