public function initbuildAction(Request $request)
 {
     /* @var $em \Doctrine\ORM\EntityManager */
     $em = $this->get('doctrine')->getManager();
     $core_world = $request->request->get('core_world');
     if (!$core_world) {
         $this->get('session')->getFlashBag()->set('error', "A core world is required.");
         return $this->redirect($this->generateUrl('deck_buildform'));
     }
     $world = $em->getRepository('AppBundle:Card')->findOneBy(array("id" => $core_world));
     $tags = [$world->getName()];
     $faction = $em->getRepository('AppBundle:Faction')->findOneBy(array("id" => $world->getFaction()->getId()));
     if (!$faction) {
         $this->get('session')->getFlashBag()->set('error', "A faction is required.");
         return $this->redirect($this->generateUrl('deck_buildform'));
     }
     $tags[] = $faction->getCode();
     $name = sprintf("New deck: %s", $faction->getName());
     $pack = $em->getRepository('AppBundle:Pack')->findOneBy(array("code" => "core"));
     $deck = new Deck();
     $deck->setDescriptionMd("");
     $deck->setFaction($faction);
     $deck->setCoreWorld($world);
     $deck->setLastPack($pack);
     $deck->setName($name);
     $deck->setProblem('deckSize');
     $deck->setTags(join(' ', array_unique($tags)));
     $deck->setUser($this->getUser());
     $em->persist($deck);
     $em->flush();
     return $this->redirect($this->get('router')->generate('deck_edit', ['deck_id' => $deck->getId()]));
 }
Example #2
0
 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;
 }
 public function initbuildAction(Request $request)
 {
     $translator = $this->get('translator');
     /* @var $em \Doctrine\ORM\EntityManager */
     $em = $this->getDoctrine()->getManager();
     $faction_code = $request->request->get('faction');
     $agenda_code = $request->request->get('agenda');
     if (!$faction_code) {
         $this->get('session')->getFlashBag()->set('error', $translator->trans("decks.build.errors.nofaction"));
         return $this->redirect($this->generateUrl('deck_buildform'));
     }
     $faction = $em->getRepository('AppBundle:Faction')->findByCode($faction_code);
     if (!$faction) {
         $this->get('session')->getFlashBag()->set('error', $translator->trans("decks.build.errors.nofaction"));
         return $this->redirect($this->generateUrl('deck_buildform'));
     }
     $tags = [$faction_code];
     if (!$agenda_code) {
         $agenda = NULL;
         $name = $translator->trans("decks.build.newname.noagenda", array("%faction%" => $faction->getName()));
         $pack = $em->getRepository('AppBundle:Pack')->findOneBy(array("code" => "Core"));
     } else {
         $agenda = $em->getRepository('AppBundle:Card')->findByCode($agenda_code);
         $name = $translator->trans("decks.build.newname.noagenda", array("%faction%" => $faction->getName(), "%agenda%" => $agenda->getName()));
         $pack = $agenda->getPack();
         $tags[] = $this->get('agenda_helper')->getMinorFactionCode($agenda);
     }
     $deck = new Deck();
     $deck->setDescriptionMd("");
     $deck->setFaction($faction);
     $deck->setLastPack($pack);
     $deck->setName($name);
     $deck->setProblem('too_few_cards');
     $deck->setTags(join(' ', array_unique($tags)));
     $deck->setUser($this->getUser());
     if ($agenda) {
         $slot = new Deckslot();
         $slot->setCard($agenda);
         $slot->setQuantity(1);
         $slot->setDeck($deck);
         $deck->addSlot($slot);
     }
     $em->persist($deck);
     $em->flush();
     return $this->redirect($this->get('router')->generate('deck_edit', ['deck_id' => $deck->getId()]));
 }
Example #4
0
 public function initbuildAction(Request $request)
 {
     /* @var $em \Doctrine\ORM\EntityManager */
     $em = $this->get('doctrine')->getManager();
     $faction_code = $request->request->get('faction');
     $agenda_code = $request->request->get('agenda');
     if (!$faction_code) {
         $this->get('session')->getFlashBag()->set('error', "A faction is required.");
         return $this->redirect($this->generateUrl('deck_buildform'));
     }
     $faction = $em->getRepository('AppBundle:Faction')->findOneBy(array("code" => $faction_code));
     if (!$faction) {
         $this->get('session')->getFlashBag()->set('error', "A faction is required.");
         return $this->redirect($this->generateUrl('deck_buildform'));
     }
     $tags = [$faction_code];
     if (!$agenda_code) {
         $agenda = NULL;
         $name = sprintf("New deck: %s", $faction->getName());
         $pack = $em->getRepository('AppBundle:Pack')->findOneBy(array("code" => "core"));
     } else {
         $agenda = $em->getRepository('AppBundle:Card')->findOneBy(array("code" => $agenda_code));
         $name = sprintf("New deck: %s, %s", $faction->getName(), $agenda->getName());
         $pack = $agenda->getPack();
         $tags[] = $this->get('agenda_helper')->getMinorFactionCode($agenda);
     }
     $deck = new Deck();
     $deck->setDescriptionMd("");
     $deck->setFaction($faction);
     $deck->setLastPack($pack);
     $deck->setName($name);
     $deck->setProblem('deckSize');
     $deck->setTags(join(' ', array_unique($tags)));
     $deck->setUser($this->getUser());
     if ($agenda) {
         $slot = new Deckslot();
         $slot->setCard($agenda);
         $slot->setQuantity(1);
         $slot->setDeck($deck);
         $deck->addSlot($slot);
     }
     $em->persist($deck);
     $em->flush();
     return $this->redirect($this->get('router')->generate('deck_edit', ['deck_id' => $deck->getId()]));
 }
Example #5
0
 /**
  *
  * @param unknown $user
  * @param Deck $deck
  * @param unknown $decklist_id
  * @param unknown $name
  * @param unknown $faction
  * @param unknown $description
  * @param unknown $tags
  * @param unknown $content
  * @param unknown $source_deck
  */
 public function saveDeck($user, $deck, $decklist_id, $name, $faction, $description, $tags, $content, $source_deck)
 {
     $deck_content = [];
     if ($decklist_id) {
         $decklist = $this->doctrine->getRepository('AppBundle:Decklist')->find($decklist_id);
         if ($decklist) {
             $deck->setParent($decklist);
         }
     }
     $deck->setName($name);
     $deck->setFaction($faction);
     $deck->setDescriptionMd($description);
     $deck->setUser($user);
     $deck->setMinorVersion($deck->getMinorVersion() + 1);
     $cards = [];
     /* @var $latestPack \AppBundle\Entity\Pack */
     $latestPack = null;
     foreach ($content as $card_code => $qty) {
         $card = $this->doctrine->getRepository('AppBundle:Card')->findOneBy(array("code" => $card_code));
         if (!$card) {
             continue;
         }
         $pack = $card->getPack();
         if (!$latestPack) {
             $latestPack = $pack;
         } else {
             if ($latestPack->getCycle()->getPosition() < $pack->getCycle()->getPosition()) {
                 $latestPack = $pack;
             } else {
                 if ($latestPack->getCycle()->getPosition() == $pack->getCycle()->getPosition() && $latestPack->getPosition() < $pack->getPosition()) {
                     $latestPack = $pack;
                 }
             }
         }
         $cards[$card_code] = $card;
     }
     $deck->setLastPack($latestPack);
     if (empty($tags)) {
         // tags can never be empty. if it is we put faction in
         $tags = [$faction->getCode()];
     }
     if (is_string($tags)) {
         $tags = preg_split('/\\s+/', $tags);
     }
     $tags = implode(' ', array_unique(array_values($tags)));
     $deck->setTags($tags);
     $this->doctrine->persist($deck);
     // on the deck content
     if ($source_deck) {
         // compute diff between current content and saved content
         list($listings) = $this->diff->diffContents(array($content, $source_deck->getSlots()->getContent()));
         // remove all change (autosave) since last deck update (changes are sorted)
         $changes = $this->getUnsavedChanges($deck);
         foreach ($changes as $change) {
             $this->doctrine->remove($change);
         }
         $this->doctrine->flush();
         // save new change unless empty
         if (count($listings[0]) || count($listings[1])) {
             $change = new Deckchange();
             $change->setDeck($deck);
             $change->setVariation(json_encode($listings));
             $change->setIsSaved(TRUE);
             $change->setVersion($deck->getVersion());
             $this->doctrine->persist($change);
             $this->doctrine->flush();
         }
         // copy version
         $deck->setMajorVersion($source_deck->getMajorVersion());
         $deck->setMinorVersion($source_deck->getMinorVersion());
     }
     foreach ($deck->getSlots() as $slot) {
         $deck->removeSlot($slot);
         $this->doctrine->remove($slot);
     }
     foreach ($content as $card_code => $qty) {
         $card = $cards[$card_code];
         $slot = new Deckslot();
         $slot->setQuantity($qty);
         $slot->setCard($card);
         $slot->setDeck($deck);
         $deck->addSlot($slot);
         $deck_content[$card_code] = array('card' => $card, 'qty' => $qty);
     }
     $deck->setProblem($this->deck_validation_helper->findProblem($deck));
     return $deck->getId();
 }