/** * Save data from editing a page * @param integer $pageId */ public function actionSavePage($pageId) { $data = json_decode($this->post['data']); switch ($data->status) { case 'delete': if ($page = $this->_em->getRepository('\\Jazzee\\Entity\\Page')->findOneBy(array('id' => $pageId, 'isGlobal' => true))) { $applicationPages = $this->_em->getRepository('\\Jazzee\\Entity\\ApplicationPage')->findBy(array('page' => $page->getId())); if ($applicationPages) { $this->setLayoutVar('status', 'error'); $this->addMessage('error', $page->getTitle() . ' could not be deleted becuase it is part of at least one application'); } else { if ($this->_em->getRepository('\\Jazzee\\Entity\\Page')->hasAnswers($page)) { $this->setLayoutVar('status', 'error'); $this->addMessage('error', $page->getTitle() . ' could not be deleted becuase it has applicant information associated with it.'); } else { $this->addMessage('success', $page->getTitle() . ' deleted'); $this->_em->remove($page); } } } break; case 'import': $page = new \Jazzee\Entity\Page(); $page->makeGlobal(); $page->setType($this->_em->getRepository('\\Jazzee\\Entity\\PageType')->find($data->typeId)); $page->setUuid($data->uuid); $this->savePage($page, $data); break; case 'new': case 'copy': $page = new \Jazzee\Entity\Page(); $page->makeGlobal(); $page->setType($this->_em->getRepository('\\Jazzee\\Entity\\PageType')->find($data->typeId)); //create a fake application page to work with so we can run setupNewPage $page->getApplicationPageJazzeePage()->setController($this); //only do setup for new pages, copies already have elements if ($data->status == 'new') { $page->getApplicationPageJazzeePage()->setupNewPage(); } $this->addMessage('success', $data->title . ' created.'); $this->savePage($page, $data); break; default: $page = $this->_em->getRepository('\\Jazzee\\Entity\\Page')->findOneBy(array('id' => $pageId, 'isGlobal' => true)); $this->savePage($page, $data); } }
/** * Copy a Page * @param \Doctrine\ORM\EntityManager $em * @param \Jazzee\Entity\Page $page * @return \Jazzee\Entity\Page */ public function copyPage(\Doctrine\ORM\EntityManager $em, \Jazzee\Entity\Page $page) { $newPage = new \Jazzee\Entity\Page(); $newPage->setTitle($page->getTitle()); $newPage->setMax($page->getMax()); $newPage->setInstructions($page->getInstructions()); $newPage->setLeadingText($page->getLeadingText()); $newPage->setTrailingText($page->getTrailingText()); $newPage->setFixedId($page->getFixedId()); $newPage->setType($em->getRepository('\\Jazzee\\Entity\\PageType')->findOneByClass($page->getType()->getClass())); if ($page->isGlobal()) { $newPage->makeGlobal(); } else { $newPage->notGlobal(); } if ($page->isRequired()) { $newPage->required(); } else { $newPage->optional(); } foreach ($page->getChildren() as $child) { $newPage->addChild($this->copyPage($em, $child)); } foreach ($page->getVariables() as $variable) { $newPage->setVar($variable->getName(), $variable->getValue()); } foreach ($newPage->getVariables() as $variable) { $em->persist($variable); } foreach ($page->getElements() as $element) { $newElement = new \Jazzee\Entity\Element(); $newElement->setType($em->getRepository('\\Jazzee\\Entity\\ElementType')->findOneByClass($element->getType()->getClass())); $newElement->setWeight($element->getWeight()); $newElement->setFixedId($element->getFixedId()); $newElement->setTitle($element->getTitle()); $newElement->setMax($element->getMax()); $newElement->setMin($element->getMin()); $newElement->setInstructions($element->getInstructions()); $newElement->setDefaultValue($element->getDefaultValue()); $newElement->setFormat($element->getFormat()); if ($element->isRequired()) { $newElement->required(); } else { $newElement->optional(); } foreach ($element->getListItems() as $item) { $newItem = new \Jazzee\Entity\ElementListItem(); $newItem->setValue($item->getValue()); $newItem->setWeight($item->getWeight()); $newElement->addItem($newItem); $em->persist($newItem); } $em->persist($newElement); $newPage->addElement($newElement); } $em->persist($newPage); return $newPage; }