public function createDecklistFromDeck(Deck $deck, $name = null, $descriptionMd = null) { $lastPack = $deck->getLastPack(); if (!$lastPack->getDateRelease() || $lastPack->getDateRelease() > new \DateTime()) { throw new \Exception("You cannot publish this deck yet, because it has unreleased cards."); } $problem = $this->deckValidationHelper->findProblem($deck); if ($problem) { throw new \Exception('This deck cannot be published because it is invalid: "' . $this->deckValidationHelper->getProblemLabel($problem) . '".'); } // all good for decklist publication // increasing deck version $deck->setMinorVersion(0); $deck->setMajorVersion($deck->getMajorVersion() + 1); if (empty($name)) { $name = $deck->getName(); } $name = substr($name, 0, 60); if (empty($descriptionMd)) { $descriptionMd = $deck->getDescriptionMd(); } $description = $this->texts->markdown($descriptionMd); $new_content = json_encode($deck->getSlots()->getContent()); $new_signature = md5($new_content); $decklist = new Decklist(); $decklist->setName($name); $decklist->setVersion($deck->getVersion()); $decklist->setNameCanonical($this->texts->slugify($name) . '-' . $decklist->getVersion()); $decklist->setDescriptionMd($descriptionMd); $decklist->setDescriptionHtml($description); $decklist->setDateCreation(new \DateTime()); $decklist->setDateUpdate(new \DateTime()); $decklist->setSignature($new_signature); $decklist->setFaction($deck->getFaction()); $decklist->setLastPack($deck->getLastPack()); $decklist->setNbVotes(0); $decklist->setNbfavorites(0); $decklist->setNbcomments(0); $decklist->setUser($deck->getUser()); foreach ($deck->getSlots() as $slot) { $decklistslot = new Decklistslot(); $decklistslot->setQuantity($slot->getQuantity()); $decklistslot->setCard($slot->getCard()); $decklistslot->setDecklist($decklist); $decklist->getSlots()->add($decklistslot); } if (count($deck->getChildren())) { $decklist->setPrecedent($deck->getChildren()[0]); } else { if ($deck->getParent()) { $decklist->setPrecedent($deck->getParent()); } } $decklist->setParent($deck); $deck->setMinorVersion(1); return $decklist; }