public function testEntryShuffler() { $pool = new Pool(); foreach ($pool->getEntries() as $defaultEntry) { $pool->removeEntry($defaultEntry); } $entry1 = new Entry(); $entry1->setName('Entry 1'); $pool->addEntrie($entry1); $entry2 = new Entry(); $entry2->setName('Entry 2'); $pool->addEntrie($entry2); $entry3 = new Entry(); $entry3->setName('Entry 3'); $pool->addEntrie($entry3); $entry4 = new Entry(); $entry4->setName('Entry 4'); $pool->addEntrie($entry4); $entry1->addExcludedEntry($entry2); $entry2->addExcludedEntry($entry3); $entry4->addExcludedEntry($entry1); $entry4->addExcludedEntry($entry2); $entryShuffler = new EntryShuffler(); for ($i = 0; $i < 1000; $i++) { $shuffeledEntries = $entryShuffler->shuffleEntries($pool); $key = 0; foreach ($pool->getEntries() as $entry) { //check if we did not match excluded entry $this->assertNotContains($shuffeledEntries[$key], $entry->getExcludedEntries()); //check if we have an entry matched $this->assertNotNull($shuffeledEntries[$key]); $key++; } } }
/** * Sends out mail for a Entry * * @param Entry $entry */ public function sendSecretSantaMailForEntry(Entry $entry) { $this->translator->setLocale($entry->getPool()->getLocale()); $message = $entry->getPool()->getMessage(); $message = str_replace('(NAME)', $entry->getName(), $message); $message = str_replace('(ADMINISTRATOR)', $entry->getPool()->getOwnerName(), $message); $txtBody = $this->templating->render('IntractoSecretSantaBundle:Emails:secretsanta.txt.twig', array('message' => $message, 'entry' => $entry)); $htmlBody = $this->templating->render('IntractoSecretSantaBundle:Emails:secretsanta.html.twig', array('message' => $message, 'entry' => $entry)); $mail = \Swift_Message::newInstance()->setSubject($this->translator->trans('emails.secretsanta.subject'))->setFrom($this->adminEmail, $entry->getPool()->getOwnerName())->setReplyTo([$entry->getPool()->getOwnerEmail() => $entry->getPool()->getOwnerName()])->setTo($entry->getEmail(), $entry->getName())->setBody($txtBody)->addPart($htmlBody, 'text/html'); $this->mailer->send($mail); }
/** * {@inheritdoc} */ public function handleMailSent(Entry $receiver, EntityManager $em) { $receiver->setUpdateWishlistReminderSentTime(new \DateTime()); $em->persist($receiver); $em->flush(); }
/** * @Route("/entry/{url}", name="entry_view") * @Template() */ public function indexAction(Request $request, $url) { $this->getEntry($url); if ($this->entry->getWishlist() !== null && $this->entry->getWishlist() != '') { $legacyWishlist = true; $form = $this->createForm(WishlistType::class, $this->entry); } else { $legacyWishlist = false; $form = $this->createForm(WishlistNewType::class, $this->entry); } // Log visit on first access if ($this->entry->getViewdate() === null) { $this->entry->setViewdate(new \DateTime()); $this->get('doctrine.orm.entity_manager')->flush($this->entry); } // Log ip address on first access if ($this->entry->getIp() === null) { $ip = $request->getClientIp(); $this->entry->setIp($ip); $this->get('doctrine.orm.entity_manager')->flush($this->entry); } if ('POST' === $request->getMethod()) { // get current items to compare against items later on $currentWishlistItems = new ArrayCollection(); /** @var WishlistItem $item */ foreach ($this->entry->getWishlistItems() as $item) { $currentWishlistItems->add($item); } $form->submit($request); if ($form->isValid()) { // save entries passed and check rank $inOrder = true; $lastRank = 0; $newWishlistItems = $this->entry->getWishlistItems(); foreach ($newWishlistItems as $item) { $item->setEntry($this->entry); $this->get('doctrine.orm.entity_manager')->persist($item); // keep track of rank if ($item->getRank() < $lastRank) { $inOrder = false; } $lastRank = $item->getRank(); } // remove entries not passed foreach ($currentWishlistItems as $item) { if (!$newWishlistItems->contains($item)) { $this->get('doctrine.orm.entity_manager')->remove($item); } } // For now assume that a save of entry means the list has changed $time_now = new \DateTime(); $this->entry->setWishlistUpdated(true); $this->entry->setWishlistUpdatedTime($time_now); $this->get('doctrine.orm.entity_manager')->persist($this->entry); $this->get('doctrine.orm.entity_manager')->flush(); if (!$request->isXmlHttpRequest()) { $this->get('session')->getFlashBag()->add('success', $this->get('translator')->trans('flashes.entry.wishlist_updated')); if (!$inOrder) { // redirect to force refresh of form and entity return $this->redirect($this->generateUrl('entry_view', ['url' => $url])); } if ($legacyWishlist && ($this->entry->getWishlist() === null || $this->entry->getWishlist() === '')) { // started out with legacy, wishlist is empty now, reload page to switch to new wishlist return $this->redirect($this->generateUrl('entry_view', ['url' => $url])); } } if ($request->isXmlHttpRequest()) { $return = ['responseCode' => 200, 'message' => 'Added!']; return new JsonResponse($return); } } } $secret_santa = $this->entry->getEntry(); $eventDate = date_format($this->entry->getPool()->getEventdate(), 'Y-m-d'); $oneWeekFromEventDate = date('Y-m-d', strtotime($eventDate . '- 1 week')); if (!$request->isXmlHttpRequest()) { return ['entry' => $this->entry, 'form' => $form->createView(), 'secret_santa' => $secret_santa, 'oneWeekFromEventDate' => $oneWeekFromEventDate]; } }
/** * Constructor */ public function __construct() { $this->entries = new \Doctrine\Common\Collections\ArrayCollection(); // Create default minimum entries for ($i = 0; $i < 3; $i++) { $entry = new Entry(); if ($i == 0) { $entry->setPoolAdmin(true); } $this->addEntry($entry); } }
public function testEntryShufflerCase6() { $pool = new Pool(); foreach ($pool->getEntries() as $defaultEntry) { $pool->removeEntry($defaultEntry); } $fam0entry0 = new Entry(); $fam0entry0->setName('Fam 0 Entry 0'); $pool->addEntrie($fam0entry0); $fam0entry1 = new Entry(); $fam0entry1->setName('Fam 0 Entry 1'); $pool->addEntrie($fam0entry1); $fam0entry2 = new Entry(); $fam0entry2->setName('Fam 0 Entry 2'); $pool->addEntrie($fam0entry2); $fam0entry3 = new Entry(); $fam0entry3->setName('Fam 0 Entry 3'); $pool->addEntrie($fam0entry3); $fam0entry4 = new Entry(); $fam0entry4->setName('Fam 0 Entry 4'); $pool->addEntrie($fam0entry4); $fam0entry5 = new Entry(); $fam0entry5->setName('Fam 0 Entry 5'); $pool->addEntrie($fam0entry5); $fam0entry6 = new Entry(); $fam0entry6->setName('Fam 0 Entry 6'); $pool->addEntrie($fam0entry6); $fam0entry7 = new Entry(); $fam0entry7->setName('Fam 0 Entry 7'); $pool->addEntrie($fam0entry7); $fam0entry8 = new Entry(); $fam0entry8->setName('Fam 0 Entry 8'); $pool->addEntrie($fam0entry8); $fam0entry9 = new Entry(); $fam0entry9->setName('Fam 0 Entry 9'); $pool->addEntrie($fam0entry9); $fam1entry0 = new Entry(); $fam1entry0->setName('Fam 1 Entry 0'); $pool->addEntrie($fam1entry0); $fam1entry1 = new Entry(); $fam1entry1->setName('Fam 1 Entry 1'); $pool->addEntrie($fam1entry1); $fam1entry2 = new Entry(); $fam1entry2->setName('Fam 1 Entry 2'); $pool->addEntrie($fam1entry2); $fam1entry3 = new Entry(); $fam1entry3->setName('Fam 1 Entry 3'); $pool->addEntrie($fam1entry3); $fam1entry4 = new Entry(); $fam1entry4->setName('Fam 1 Entry 4'); $pool->addEntrie($fam1entry4); $fam1entry5 = new Entry(); $fam1entry5->setName('Fam 1 Entry 5'); $pool->addEntrie($fam1entry5); $fam1entry6 = new Entry(); $fam1entry6->setName('Fam 1 Entry 6'); $pool->addEntrie($fam1entry6); $fam1entry7 = new Entry(); $fam1entry7->setName('Fam 1 Entry 7'); $pool->addEntrie($fam1entry7); $fam1entry8 = new Entry(); $fam1entry8->setName('Fam 1 Entry 8'); $pool->addEntrie($fam1entry8); $fam1entry9 = new Entry(); $fam1entry9->setName('Fam 1 Entry 9'); $pool->addEntrie($fam1entry9); $fam0entry0->addExcludedEntry($fam1entry0); $fam0entry0->addExcludedEntry($fam1entry1); $fam0entry0->addExcludedEntry($fam1entry2); $fam0entry0->addExcludedEntry($fam1entry3); $fam0entry0->addExcludedEntry($fam1entry4); $fam0entry0->addExcludedEntry($fam1entry5); $fam0entry0->addExcludedEntry($fam1entry6); $fam0entry0->addExcludedEntry($fam1entry7); $fam0entry0->addExcludedEntry($fam1entry8); $fam0entry0->addExcludedEntry($fam1entry9); $fam0entry1->addExcludedEntry($fam1entry0); $fam0entry1->addExcludedEntry($fam1entry1); $fam0entry1->addExcludedEntry($fam1entry2); $fam0entry1->addExcludedEntry($fam1entry3); $fam0entry1->addExcludedEntry($fam1entry4); $fam0entry1->addExcludedEntry($fam1entry5); $fam0entry1->addExcludedEntry($fam1entry6); $fam0entry1->addExcludedEntry($fam1entry7); $fam0entry1->addExcludedEntry($fam1entry8); $fam0entry1->addExcludedEntry($fam1entry9); $fam0entry2->addExcludedEntry($fam1entry0); $fam0entry2->addExcludedEntry($fam1entry1); $fam0entry2->addExcludedEntry($fam1entry2); $fam0entry2->addExcludedEntry($fam1entry3); $fam0entry2->addExcludedEntry($fam1entry4); $fam0entry2->addExcludedEntry($fam1entry5); $fam0entry2->addExcludedEntry($fam1entry6); $fam0entry2->addExcludedEntry($fam1entry7); $fam0entry2->addExcludedEntry($fam1entry8); $fam0entry2->addExcludedEntry($fam1entry9); $fam0entry3->addExcludedEntry($fam1entry0); $fam0entry3->addExcludedEntry($fam1entry1); $fam0entry3->addExcludedEntry($fam1entry2); $fam0entry3->addExcludedEntry($fam1entry3); $fam0entry3->addExcludedEntry($fam1entry4); $fam0entry3->addExcludedEntry($fam1entry5); $fam0entry3->addExcludedEntry($fam1entry6); $fam0entry3->addExcludedEntry($fam1entry7); $fam0entry3->addExcludedEntry($fam1entry8); $fam0entry3->addExcludedEntry($fam1entry9); $fam0entry4->addExcludedEntry($fam1entry0); $fam0entry4->addExcludedEntry($fam1entry1); $fam0entry4->addExcludedEntry($fam1entry2); $fam0entry4->addExcludedEntry($fam1entry3); $fam0entry4->addExcludedEntry($fam1entry4); $fam0entry4->addExcludedEntry($fam1entry5); $fam0entry4->addExcludedEntry($fam1entry6); $fam0entry4->addExcludedEntry($fam1entry7); $fam0entry4->addExcludedEntry($fam1entry8); $fam0entry4->addExcludedEntry($fam1entry9); $fam0entry5->addExcludedEntry($fam1entry0); $fam0entry5->addExcludedEntry($fam1entry1); $fam0entry5->addExcludedEntry($fam1entry2); $fam0entry5->addExcludedEntry($fam1entry3); $fam0entry5->addExcludedEntry($fam1entry4); $fam0entry5->addExcludedEntry($fam1entry5); $fam0entry5->addExcludedEntry($fam1entry6); $fam0entry5->addExcludedEntry($fam1entry7); $fam0entry5->addExcludedEntry($fam1entry8); $fam0entry5->addExcludedEntry($fam1entry9); $fam0entry6->addExcludedEntry($fam1entry0); $fam0entry6->addExcludedEntry($fam1entry1); $fam0entry6->addExcludedEntry($fam1entry2); $fam0entry6->addExcludedEntry($fam1entry3); $fam0entry6->addExcludedEntry($fam1entry4); $fam0entry6->addExcludedEntry($fam1entry5); $fam0entry6->addExcludedEntry($fam1entry6); $fam0entry6->addExcludedEntry($fam1entry7); $fam0entry6->addExcludedEntry($fam1entry8); $fam0entry6->addExcludedEntry($fam1entry9); $fam0entry7->addExcludedEntry($fam1entry0); $fam0entry7->addExcludedEntry($fam1entry1); $fam0entry7->addExcludedEntry($fam1entry2); $fam0entry7->addExcludedEntry($fam1entry3); $fam0entry7->addExcludedEntry($fam1entry4); $fam0entry7->addExcludedEntry($fam1entry5); $fam0entry7->addExcludedEntry($fam1entry6); $fam0entry7->addExcludedEntry($fam1entry7); $fam0entry7->addExcludedEntry($fam1entry8); $fam0entry7->addExcludedEntry($fam1entry9); $fam0entry8->addExcludedEntry($fam1entry0); $fam0entry8->addExcludedEntry($fam1entry1); $fam0entry8->addExcludedEntry($fam1entry2); $fam0entry8->addExcludedEntry($fam1entry3); $fam0entry8->addExcludedEntry($fam1entry4); $fam0entry8->addExcludedEntry($fam1entry5); $fam0entry8->addExcludedEntry($fam1entry6); $fam0entry8->addExcludedEntry($fam1entry7); $fam0entry8->addExcludedEntry($fam1entry8); $fam0entry8->addExcludedEntry($fam1entry9); $fam0entry9->addExcludedEntry($fam1entry0); $fam0entry9->addExcludedEntry($fam1entry1); $fam0entry9->addExcludedEntry($fam1entry2); $fam0entry9->addExcludedEntry($fam1entry3); $fam0entry9->addExcludedEntry($fam1entry4); $fam0entry9->addExcludedEntry($fam1entry5); $fam0entry9->addExcludedEntry($fam1entry6); $fam0entry9->addExcludedEntry($fam1entry7); $fam0entry9->addExcludedEntry($fam1entry8); $fam0entry9->addExcludedEntry($fam1entry9); $fam1entry0->addExcludedEntry($fam0entry0); $fam1entry0->addExcludedEntry($fam0entry1); $fam1entry0->addExcludedEntry($fam0entry2); $fam1entry0->addExcludedEntry($fam0entry3); $fam1entry0->addExcludedEntry($fam0entry4); $fam1entry0->addExcludedEntry($fam0entry5); $fam1entry0->addExcludedEntry($fam0entry6); $fam1entry0->addExcludedEntry($fam0entry7); $fam1entry0->addExcludedEntry($fam0entry8); $fam1entry0->addExcludedEntry($fam0entry9); $fam1entry1->addExcludedEntry($fam0entry0); $fam1entry1->addExcludedEntry($fam0entry1); $fam1entry1->addExcludedEntry($fam0entry2); $fam1entry1->addExcludedEntry($fam0entry3); $fam1entry1->addExcludedEntry($fam0entry4); $fam1entry1->addExcludedEntry($fam0entry5); $fam1entry1->addExcludedEntry($fam0entry6); $fam1entry1->addExcludedEntry($fam0entry7); $fam1entry1->addExcludedEntry($fam0entry8); $fam1entry1->addExcludedEntry($fam0entry9); $fam1entry2->addExcludedEntry($fam0entry0); $fam1entry2->addExcludedEntry($fam0entry1); $fam1entry2->addExcludedEntry($fam0entry2); $fam1entry2->addExcludedEntry($fam0entry3); $fam1entry2->addExcludedEntry($fam0entry4); $fam1entry2->addExcludedEntry($fam0entry5); $fam1entry2->addExcludedEntry($fam0entry6); $fam1entry2->addExcludedEntry($fam0entry7); $fam1entry2->addExcludedEntry($fam0entry8); $fam1entry2->addExcludedEntry($fam0entry9); $fam1entry3->addExcludedEntry($fam0entry0); $fam1entry3->addExcludedEntry($fam0entry1); $fam1entry3->addExcludedEntry($fam0entry2); $fam1entry3->addExcludedEntry($fam0entry3); $fam1entry3->addExcludedEntry($fam0entry4); $fam1entry3->addExcludedEntry($fam0entry5); $fam1entry3->addExcludedEntry($fam0entry6); $fam1entry3->addExcludedEntry($fam0entry7); $fam1entry3->addExcludedEntry($fam0entry8); $fam1entry3->addExcludedEntry($fam0entry9); $fam1entry4->addExcludedEntry($fam0entry0); $fam1entry4->addExcludedEntry($fam0entry1); $fam1entry4->addExcludedEntry($fam0entry2); $fam1entry4->addExcludedEntry($fam0entry3); $fam1entry4->addExcludedEntry($fam0entry4); $fam1entry4->addExcludedEntry($fam0entry5); $fam1entry4->addExcludedEntry($fam0entry6); $fam1entry4->addExcludedEntry($fam0entry7); $fam1entry4->addExcludedEntry($fam0entry8); $fam1entry4->addExcludedEntry($fam0entry9); $fam1entry5->addExcludedEntry($fam0entry0); $fam1entry5->addExcludedEntry($fam0entry1); $fam1entry5->addExcludedEntry($fam0entry2); $fam1entry5->addExcludedEntry($fam0entry3); $fam1entry5->addExcludedEntry($fam0entry4); $fam1entry5->addExcludedEntry($fam0entry5); $fam1entry5->addExcludedEntry($fam0entry6); $fam1entry5->addExcludedEntry($fam0entry7); $fam1entry5->addExcludedEntry($fam0entry8); $fam1entry5->addExcludedEntry($fam0entry9); $fam1entry6->addExcludedEntry($fam0entry0); $fam1entry6->addExcludedEntry($fam0entry1); $fam1entry6->addExcludedEntry($fam0entry2); $fam1entry6->addExcludedEntry($fam0entry3); $fam1entry6->addExcludedEntry($fam0entry4); $fam1entry6->addExcludedEntry($fam0entry5); $fam1entry6->addExcludedEntry($fam0entry6); $fam1entry6->addExcludedEntry($fam0entry7); $fam1entry6->addExcludedEntry($fam0entry8); $fam1entry6->addExcludedEntry($fam0entry9); $fam1entry7->addExcludedEntry($fam0entry0); $fam1entry7->addExcludedEntry($fam0entry1); $fam1entry7->addExcludedEntry($fam0entry2); $fam1entry7->addExcludedEntry($fam0entry3); $fam1entry7->addExcludedEntry($fam0entry4); $fam1entry7->addExcludedEntry($fam0entry5); $fam1entry7->addExcludedEntry($fam0entry6); $fam1entry7->addExcludedEntry($fam0entry7); $fam1entry7->addExcludedEntry($fam0entry8); $fam1entry7->addExcludedEntry($fam0entry9); $fam1entry8->addExcludedEntry($fam0entry0); $fam1entry8->addExcludedEntry($fam0entry1); $fam1entry8->addExcludedEntry($fam0entry2); $fam1entry8->addExcludedEntry($fam0entry3); $fam1entry8->addExcludedEntry($fam0entry4); $fam1entry8->addExcludedEntry($fam0entry5); $fam1entry8->addExcludedEntry($fam0entry6); $fam1entry8->addExcludedEntry($fam0entry7); $fam1entry8->addExcludedEntry($fam0entry8); $fam1entry8->addExcludedEntry($fam0entry9); $fam1entry9->addExcludedEntry($fam0entry0); $fam1entry9->addExcludedEntry($fam0entry1); $fam1entry9->addExcludedEntry($fam0entry2); $fam1entry9->addExcludedEntry($fam0entry3); $fam1entry9->addExcludedEntry($fam0entry4); $fam1entry9->addExcludedEntry($fam0entry5); $fam1entry9->addExcludedEntry($fam0entry6); $fam1entry9->addExcludedEntry($fam0entry7); $fam1entry9->addExcludedEntry($fam0entry8); $fam1entry9->addExcludedEntry($fam0entry9); $entryShuffler = new EntryShuffler(); for ($i = 0; $i < 10; ++$i) { $shuffeledEntries = $entryShuffler->shuffleEntries($pool); if (!$shuffeledEntries) { $this->markTestSkipped('Shuffler did not return a result in time, so skip test result'); } $key = 0; foreach ($pool->getEntries() as $entry) { //check if we did not match excluded entry $this->assertNotContains($shuffeledEntries[$key], $entry->getExcludedEntries()); //check if we have an entry matched $this->assertNotNull($shuffeledEntries[$key]); ++$key; } } }
public function sendRemovedSecretSantaMail(Entry $entry) { $this->translator->setLocale($entry->getPool()->getLocale()); $this->mailer->send(\Swift_Message::newInstance()->setSubject($this->translator->trans('emails.removed_secret_santa.subject'))->setFrom($this->adminEmail, $this->translator->trans('emails.sender'))->setTo($entry->getEmail(), $entry->getName())->setBody($this->templating->render('IntractoSecretSantaBundle:Emails:removedsecretsanta.html.twig', ['entry' => $entry]), 'text/html')->addPart($this->templating->render('IntractoSecretSantaBundle:Emails:removedsecretsanta.txt.twig', ['entry' => $entry]), 'text/plain')); }
/** * @param Entry $entry */ public function countWishlistItemsOfParticipant(Entry $entry) { $query = $this->dbal->createQueryBuilder()->select('count(w.id) AS wishlistItemCount')->from('WishlistItem', 'w')->where('w.entry_id = :entryId')->setParameter('entryId', $entry->getId()); return $query->execute()->fetchAll(); }
/** * @Route("/entry/{url}", name="entry_view") * @Template() */ public function indexAction(Request $request, $url) { $em = $this->getDoctrine()->getManager(); $this->getEntry($url); if ($this->entry->getWishlist() !== null && $this->entry->getWishlist() != '') { $legacyWishlist = true; $form = $this->createForm(new WishlistType(), $this->entry); } else { $legacyWishlist = false; $form = $this->createForm(new WishlistNewType(), $this->entry); } // Log visit on first access if ($this->entry->getViewdate() === null) { $this->entry->setViewdate(new \DateTime()); $em->flush($this->entry); } if ('POST' === $request->getMethod()) { // get current items to compare against items later on $currentWishlistItems = new ArrayCollection(); /** @var WishlistItem $item */ foreach ($this->entry->getWishlistItems() as $item) { $currentWishlistItems->add($item); } $form->submit($request); if ($form->isValid()) { // save entries passed and check rank $inOrder = true; $lastRank = 0; $newWishlistItems = $this->entry->getWishlistItems(); foreach ($newWishlistItems as $item) { $item->setEntry($this->entry); $em->persist($item); // keep track of rank if ($item->getRank() < $lastRank) { $inOrder = false; } $lastRank = $item->getRank(); } // remove entries not passed foreach ($currentWishlistItems as $item) { if (!$newWishlistItems->contains($item)) { $em->remove($item); } } // For now assume that a save of entry means the list has changed $this->entry->setWishlistUpdated(true); $em->persist($this->entry); $em->flush(); $translator = $this->get('translator'); $this->get('session')->getFlashBag()->add('success', $translator->trans('flashes.entry.wishlist_updated')); if (!$inOrder) { // redirect to force refresh of form and entity return $this->redirect($this->generateUrl('entry_view', array('url' => $url))); } if ($legacyWishlist && ($this->entry->getWishlist() === null || $this->entry->getWishlist() === '')) { // started out with legacy, wishlist is empty now, reload page to switch to new wishlist return $this->redirect($this->generateUrl('entry_view', array('url' => $url))); } } } $secret_santa = $this->entry->getEntry(); return array('entry' => $this->entry, 'form' => $form->createView(), 'secret_santa' => $secret_santa); }