From ba4b6ae85bf25d06c44efd5b9ae182e8e3917674 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Sun, 2 Jul 2023 13:58:24 -0700 Subject: [PATCH] adds flag to published decks for tracking their wild-west-edition compatibility. --- config/services.yaml | 10 +++-- migrations/Version20230702163723.php | 29 +++++++++++++++ src/Entity/Decklist.php | 23 ++++++++++++ src/EventListener/DecklistListener.php | 51 ++++++++++++++++++++++++++ 4 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 migrations/Version20230702163723.php create mode 100644 src/EventListener/DecklistListener.php diff --git a/config/services.yaml b/config/services.yaml index e57689d..df37da8 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -45,10 +45,12 @@ services: arguments: $formFactory: '@fos_user.registration.form.factory' - - # add more service definitions when explicit configuration is needed - # please note that last definitions always *replace* previous ones - # Commands App\Command\: resource: '../src/Command/*' + + ## Event listeners + App\EventListener\DecklistListener: + tags: + - { name: doctrine.event_listener, event: preUpdate } + - { name: doctrine.event_listener, event: prePersist } diff --git a/migrations/Version20230702163723.php b/migrations/Version20230702163723.php new file mode 100644 index 0000000..2de4274 --- /dev/null +++ b/migrations/Version20230702163723.php @@ -0,0 +1,29 @@ +addSql('ALTER TABLE decklist ADD is_wwe TINYINT(1) DEFAULT \'0\' NOT NULL'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE decklist DROP is_wwe'); + } +} diff --git a/src/Entity/Decklist.php b/src/Entity/Decklist.php index 92c9d3f..bad235b 100755 --- a/src/Entity/Decklist.php +++ b/src/Entity/Decklist.php @@ -225,6 +225,13 @@ class Decklist */ protected $tournament; + + /** + * @var boolean isWwe; + * @ORM\Column(name="is_wwe", type="boolean", nullable=false, options={"default"="0"}) + */ + protected $isWwe; + public function __construct() { $this->slots = new ArrayCollection(); @@ -916,4 +923,20 @@ public function getTournament() { return $this->tournament; } + + /** + * @param bool $isWwe + * @return $this + */ + public function setIsWwe(bool $isWwe) { + $this->isWwe = $isWwe; + return $this; + } + + /** + * @return bool + */ + public function getIsWwe() { + return $this->isWwe; + } } diff --git a/src/EventListener/DecklistListener.php b/src/EventListener/DecklistListener.php new file mode 100644 index 0000000..8ff3126 --- /dev/null +++ b/src/EventListener/DecklistListener.php @@ -0,0 +1,51 @@ +getEntity(); + if ($entity instanceof Decklist) { + $this->setFormat($entity); + } + } + + public function preUpdate(PreUpdateEventArgs $args) + { + $entity = $args->getEntity(); + if ($entity instanceof Decklist) { + $this->setFormat($entity); + } + } + + protected function setFormat(Decklist $decklist) + { + $packs = []; + foreach ($decklist->getSlots() as $slot) { + $packs[] = $slot->getCard()->getPack(); + } + usort($packs, function (Pack $a, Pack $b) { + $rhett = $a->getCycle()->getNumber() <=> $b->getCycle()->getNumber(); + if ($rhett) { + return $rhett; + } + return $a->getNumber() <=> $b->getNumber(); + }); + $earliestPack = $packs[0]; + $isWwe = ( + $earliestPack->getCycle()->getNumber() > Decks::TCAR_CYCLENUMBER + || ($earliestPack->getCycle()->getNumber() === Decks::TCAR_CYCLENUMBER + && $earliestPack->getNumber() >= Decks::TCAR_NUMBER + ) + ); + $decklist->setIsWwe($isWwe); + } +}