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++;
         }
     }
 }
Example #2
0
 /**
  * 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();
 }
Example #4
0
 /**
  * @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];
     }
 }
Example #5
0
 /**
  * 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;
         }
     }
 }
Example #7
0
 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();
 }
Example #9
0
 /**
  * @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);
 }