/** * 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); } }
/** * Save a page * @param \Jazzee\Entity\Page $page */ public function savePage($page, $data) { $htmlPurifier = $this->getFilter(); $page->setTitle($htmlPurifier->purify($data->title)); $page->setMin(empty($data->min) ? null : $data->min); $page->setMax(empty($data->max) ? null : $data->max); if ($data->isRequired) { $page->required(); } else { $page->optional(); } $page->hideAnswerStatus(); if ($data->answerStatusDisplay) { if ($page instanceof \Jazzee\Entity\ApplicationPage) { $interfaces = class_implements($page->getPage()->getType()->getClass()); } else { $interfaces = class_implements($page->getType()->getClass()); } if (in_array('Jazzee\\Interfaces\\StatusPage', $interfaces)) { $page->showAnswerStatus(); } } $page->setInstructions(empty($data->instructions) ? null : $htmlPurifier->purify($data->instructions)); $page->setLeadingText(empty($data->leadingText) ? null : $htmlPurifier->purify($data->leadingText)); $page->setTrailingText(empty($data->trailingText) ? null : $htmlPurifier->purify($data->trailingText)); $this->_em->persist($page); if ($page instanceof \Jazzee\Entity\ApplicationPage) { $page->setWeight($data->weight); $page->setName($data->name); //if this is a global page then we are done //programs can't edit any of the remaining properties on a globa page if ($page->getPage()->isGlobal()) { $this->addMessage('success', $page->getTitle() . ' page saved.'); return; } //otherwise continue making changes by swaping the $page varialbe for the correct \Jazzee\Entity\Page class $page = $page->getPage(); } $page->setFixedId(empty($data->fixedId) ? null : $data->fixedId); foreach ($data->variables as $v) { $jazzeePage = $page->getApplicationPageJazzeePage(); $jazzeePage->setController($this); $jazzeePage->setVar($v->name, $v->value); } $this->savePageElements($page, $data->elements); foreach ($data->children as $child) { switch ($child->status) { case 'delete': $childPage = $page->getChildById($child->id); if ($childPage) { $this->log(" ==> about to delete child"); $this->_em->remove($childPage); $page->getChildren()->removeElement($childPage); $this->addMessage('success', $childPage->getTitle() . ' page deleted.'); } else { $this->log("EntityManager is not aware of child page, skipping delete"); } break; case 'import': $childPage = new \Jazzee\Entity\Page(); $childPage->setParent($page); $childPage->notGlobal(); $childPage->setType($this->_em->getRepository('\\Jazzee\\Entity\\PageType')->find($child->typeId)); $childPage->setUuid($child->uuid); $this->savePage($childPage, $child); break; case 'new': case 'copy': $childPage = new \Jazzee\Entity\Page(); $childPage->setParent($page); $childPage->notGlobal(); $childPage->setType($this->_em->getRepository('\\Jazzee\\Entity\\PageType')->find($child->typeId)); $this->savePage($childPage, $child); break; default: $childPage = $page->getChildById($child->id); $this->savePage($childPage, $child); break; } unset($childPage); } $this->addMessage('success', $page->getTitle() . ' page saved.'); }