/** * Manage questions. * * @EXT\Route("/manage/{id}", name="cpasimusante_simupoll_question_manage", requirements={"id" = "\d+"}, options={"expose"=true}) * @EXT\ParamConverter("question", class="CPASimUSanteSimupollBundle:Question", options={"id" = "id"}) * @EXT\Template("CPASimUSanteSimupollBundle:Question:manage.html.twig") * * @param Request $request * @param Question $question * * @return array */ public function manageAction(Request $request, Question $question) { $em = $this->getDoctrine()->getManager(); // Create an ArrayCollection of the current Proposition objects in the database $originalPropositions = new ArrayCollection(); foreach ($question->getPropositions() as $proposition) { $originalPropositions->add($proposition); } $form = $this->get('form.factory')->create(new QuestionType(), $question); $form->handleRequest($request); if ($form->isValid()) { // remove the relationship between the Proposition and the Question foreach ($originalPropositions as $proposition) { if (false === $question->getPropositions()->contains($proposition)) { // in a a many-to-one relationship, remove the relationship $proposition->setQuestion(null); $em->persist($proposition); // to delete the Proposition entirely, you can also do that $em->remove($proposition); } } $em->persist($question); $em->flush(); } return array('_resource' => $question, 'form' => $form->createView()); }
/** * Add question. * * @param \CPASimUSante\SimupollBundle\Entity\Question $question * * @return Simupoll */ public function addQuestion(\CPASimUSante\SimupollBundle\Entity\Question $question) { $this->questions[] = $question; $question->setSimupoll($this); return $this; /* $question->setSimupoll($this); $this->questions->add($question); */ }
/** * Copy Simupoll - called by onCopy listener. * * @param $simupoll Simupoll * @param $loggedUser User * * @return $newSimupoll Simupoll */ public function copySimupoll(Simupoll $simupoll, $loggedUser) { $newSimupoll = new Simupoll(); $newSimupoll->setTitle($simupoll->getTitle()); $this->om->persist($newSimupoll); $questions = $simupoll->getQuestions(); $periods = $this->om->getRepository('CPASimUSanteSimupollBundle:Period')->findBySimupoll($simupoll); $categories = $this->om->getRepository('CPASimUSanteSimupollBundle:Category')->findBySimupoll($simupoll); //copy period foreach ($periods as $period) { $newPeriod = new Period(); $newPeriod->setSimupoll($newSimupoll); $newPeriod->setStart($period->getStart()); $newPeriod->setStop($period->getStop()); $newPeriod->setTitle($period->getTitle()); $this->om->persist($newPeriod); } $nc = []; $pc = []; foreach ($categories as $category) { $newCategory = new Category(); $newCategory->setName($category->getName()); $newCategory->setUser($category->getUser()); $newCategory->setSimupoll($newSimupoll); $newCategory->setParent(null); $this->om->persist($newCategory); if (null !== $category->getParent()) { $pc[$category->getId()] = array('nc' => $newCategory, 'pid' => $category->getParent()->getId()); } else { $pc[$category->getId()] = array('nc' => $newCategory, 'pid' => null); } } foreach ($pc as $oldid => $cats) { if (isset($pc[$cats['pid']])) { $cats['nc']->setParent($pc[$cats['pid']]['nc']); } else { $cats['nc']->setParent(null); } $this->om->persist($cats['nc']); } //copy questions foreach ($questions as $question) { $newQuestion = new Question(); $newQuestion->setSimupoll($newSimupoll); $newQuestion->setTitle($question->getTitle()); $newQuestion->setOrderq($question->getOrderq()); $newQuestion->setCategory($question->getCategory()); $this->om->persist($newQuestion); //copy propositions $propositions = $question->getPropositions(); foreach ($propositions as $proposition) { $newProposition = new Proposition(); $newProposition->setQuestion($newQuestion); $newProposition->setChoice($proposition->getChoice()); $newProposition->setMark($proposition->getMark()); $this->om->persist($newProposition); } } return $newSimupoll; }