/** * Render a single answer in the PDF * @param \Jazzee\ApplicantPDF $pdf * @param \Jazzee\Entity\Page $page * @param \Jazzee\Entity\Answer $answer */ protected function renderPdfAnswerFromArray(\Jazzee\Entity\Page $page, \Jazzee\ApplicantPDF $pdf, array $answerData) { foreach ($page->getElements() as $element) { $element->getJazzeeElement()->setController($this->_controller); $value = $element->getJazzeeElement()->pdfValueFromArray($answerData, $pdf); if (!empty($value)) { $pdf->addText("{$element->getTitle()}: ", 'b'); $pdf->addText("{$value}\n", 'p'); } } if ($attachment = $answerData['attachment']) { $pdf->addPdf(\Jazzee\Globals::getFileStore()->getFileContents($attachment["attachmentHash"])); } }
/** * 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; }
/** * Format an answer array * @param \array $answer * @param \Jazzee\Entity\Page $page * * @return array */ protected function arrayAnswer(array $answer, \Jazzee\Entity\Page $page) { $elements = $answer['elements']; $answer['elements'] = array(); foreach ($elements as $elementId => $elementAnswers) { $element = $page->getElementById($elementId); $answer['elements'][] = $element->getJazzeeElement()->formatApplicantArray($elementAnswers); } if (!is_null($answer['attachment'])) { $answer['attachment'] = $this->arrayAnswerAttachment($answer['attachment'], $page); } if (count($answer['children'])) { $child = $answer['children'][0]; $childPage = $page->getChildById($child['page_id']); $childElements = $child['elements']; $values = array(); foreach ($childElements as $elementId => $elementAnswers) { $element = $childPage->getElementById($elementId); $arr = $element->getJazzeeElement()->formatApplicantArray($elementAnswers); $values[$element->getFixedId()] = $arr['displayValue']; } $schoolName = $values[\Jazzee\Page\Education::ELEMENT_FID_NAME]; $schoolType = 'New'; $parts = array(); foreach (array(self::ELEMENT_FID_CITY, self::ELEMENT_FID_STATE, self::ELEMENT_FID_COUNTRY, self::ELEMENT_FID_POSTALCODE) as $fid) { if (array_key_exists($fid, $values)) { $parts[] = $values[$fid]; } } $schoolLocation = implode(' ', $parts); } else { $schoolName = $answer['school']['name']; $parts = array($answer['school']['city'], $answer['school']['state'], $answer['school']['country'], $answer['school']['postalCode']); $schoolLocation = implode(' ', $parts); $schoolType = 'Known'; } $answer['elements'][] = array('id' => 'locationSummary', 'title' => 'School Location', 'type' => null, 'name' => null, 'weight' => 0, 'values' => array(array('value' => $schoolLocation, 'name' => null, 'id' => null)), 'displayValue' => $schoolLocation); $answer['elements'][] = array('id' => 'schoolName', 'title' => 'Schoo Namel', 'type' => null, 'name' => null, 'weight' => 0, 'values' => array(array('value' => $schoolName, 'name' => null, 'id' => null)), 'displayValue' => $schoolName); $answer['elements'][] = array('id' => 'schoolType', 'title' => 'School Type', 'type' => null, 'name' => null, 'weight' => 0, 'values' => array(array('value' => $schoolType, 'name' => null, 'id' => null)), 'displayValue' => $schoolType); return $answer; }
/** * Add Child * * @param \Jazzee\Entity\Page $page */ public function addChild(\Jazzee\Entity\Page $page) { $this->children[] = $page; if ($page->getParent() != $this) { $page->setParent($this); } }
/** * Add a new page * * Do this in a deperate funciton so it can call itself * @param \Jazzee\Entity\Page $previousPage * @return \Jazzee\Entity\Page */ protected function addPage(\Jazzee\Entity\Page $previousPage) { if ($previousPage->isGlobal()) { $page = $previousPage; } else { $page = new \Jazzee\Entity\Page(); $page->setType($previousPage->getType()); $page->setTitle($previousPage->getTitle()); $page->setMin($previousPage->getMin()); $page->setMax($previousPage->getMax()); if ($previousPage->isRequired()) { $page->required(); } else { $page->optional(); } if ($previousPage->answerStatusDisplay()) { $page->showAnswerStatus(); } else { $page->hideAnswerStatus(); } $page->setInstructions($previousPage->getInstructions()); $page->setLeadingText($previousPage->getLeadingText()); $page->setTrailingText($previousPage->getTrailingText()); $page->notGlobal(); $this->_em->persist($page); foreach ($previousPage->getElements() as $previousElement) { $element = new \Jazzee\Entity\Element(); $element->setType($previousElement->getType()); $element->setFixedId($previousElement->getFixedId()); $element->setTitle($previousElement->getTitle()); $element->setMin($previousElement->getMin()); $element->setMax($previousElement->getMax()); $element->setName($previousElement->getName()); if ($previousElement->isRequired()) { $element->required(); } else { $element->optional(); } $element->setInstructions($previousElement->getInstructions()); $element->setFormat($previousElement->getFormat()); $element->setWeight($previousElement->getWeight()); $page->addElement($element); foreach ($previousElement->getListItems() as $previousItem) { $listItem = new \Jazzee\Entity\ElementListItem(); $listItem->setValue($previousItem->getValue()); $listItem->setWeight($previousItem->getWeight()); $listItem->setName($previousItem->getName()); if ($previousItem->isActive()) { $listItem->activate(); } else { $listItem->deactivate(); } $element->addItem($listItem); $this->_em->persist($listItem); } $this->_em->persist($element); } foreach ($previousPage->getVariables() as $previousVar) { $var = $page->setVar($previousVar->getName(), $previousVar->getValue()); $this->_em->persist($var); } foreach ($previousPage->getChildren() as $previousChild) { $childPage = $this->addPage($previousChild); $page->addChild($childPage); } } return $page; }
/** * Render standrad LOR pdf section * @param \Jazzee\ApplicantPDF $pdf * @param \Jazzee\Entity\Page $page * @param \Jazzee\Entity\Answer $answer */ public function renderLorPdfAnswer(\Jazzee\ApplicantPDF $pdf, \Jazzee\Entity\Page $page, \Jazzee\Entity\Answer $answer) { $pdf->addText($page->getTitle() . "\n", 'h5'); $this->renderPdfAnswer($pdf, $page, $answer); }
/** * Should a page be displayed * * @param \Jazzee\Entity\Page $page * * @return boolean */ public function displayPage(\Jazzee\Entity\Page $page) { return in_array($page->getId(), $this->_pageIds); }
/** * Create an xml node for a page * * Calls itself recursivly to capture all children * @param DomDocument $xml * @param \Jazzee\Entity\Page $page */ public function pageXml(DOMDocument $dom, $page) { $pxml = $dom->createElement('page'); $pxml->setAttribute('title', htmlentities($page->getTitle(), ENT_COMPAT, 'utf-8')); $pxml->setAttribute('min', $page->getMin()); $pxml->setAttribute('max', $page->getMax()); $pxml->setAttribute('required', $page->isRequired()); $pxml->setAttribute('answerStatusDisplay', $page->answerStatusDisplay()); $pxml->appendChild($this->createCdataElement($dom, 'instructions', $page->getInstructions())); $pxml->appendChild($this->createCdataElement($dom, 'leadingText', $page->getLeadingText())); $pxml->appendChild($this->createCdataElement($dom, 'trailingText', $page->getTrailingText())); if ($page instanceof \Jazzee\Entity\ApplicationPage) { $pxml->setAttribute('weight', $page->getWeight()); $pxml->setAttribute('kind', $page->getKind()); $pxml->setAttribute('name', $page->getName()); $page = $page->getPage(); if ($page->isGlobal()) { $pxml->setAttribute('globalPageUuid', $page->getUuid()); } } $pxml->setAttribute('class', $page->getType()->getClass()); $elements = $pxml->appendChild($dom->createElement('elements')); foreach ($page->getElements() as $element) { $exml = $dom->createElement('element'); $exml->setAttribute('title', $element->getTitle()); $exml->setAttribute('name', $element->getName()); $exml->setAttribute('class', $element->getType()->getClass()); $exml->setAttribute('fixedId', $element->getFixedId()); $exml->setAttribute('weight', $element->getWeight()); $exml->setAttribute('min', $element->getMin()); $exml->setAttribute('max', $element->getMax()); $exml->setAttribute('required', $element->isRequired()); $exml->setAttribute('instructions', htmlentities($element->getInstructions(), ENT_COMPAT, 'utf-8')); $exml->setAttribute('format', htmlentities($element->getFormat(), ENT_COMPAT, 'utf-8')); $exml->setAttribute('defaultValue', $element->getDefaultValue()); $listItems = $exml->appendChild($dom->createElement('listitems')); foreach ($element->getListItems() as $item) { //only export active items if ($item->isActive()) { $ixml = $this->createCdataElement($dom, 'item', $item->getValue()); $ixml->setAttribute('active', (int) $item->isActive()); $ixml->setAttribute('weight', $item->getWeight()); $ixml->setAttribute('name', $item->getName()); $listItems->appendChild($ixml); unset($ixml); } } $elements->appendChild($exml); } $children = $pxml->appendChild($dom->createElement('children')); foreach ($page->getChildren() as $child) { $children->appendChild($this->pageXml($dom, $child)); } $variables = $pxml->appendChild($dom->createElement('variables')); foreach ($page->getVariables() as $var) { $variable = $dom->createElement('variable', (string) $var->getValue()); $variable->setAttribute('name', $var->getName()); $variables->appendChild($variable); } return $pxml; }
/** * Render branching LOR pdf section * @param \Jazzee\ApplicantPDF $pdf * @param \Jazzee\Entity\Page $page * @param \Jazzee\Entity\Answer $answer */ public function renderLorPdfAnswer(\Jazzee\ApplicantPDF $pdf, \Jazzee\Entity\Page $page, \Jazzee\Entity\Answer $answer) { $childAnswer = $answer->getChildren()->first(); $childPage = $childAnswer->getPage(); $pdf->addText($page->getTitle() . "\n", 'h5'); $pdf->addText("{$page->getVar('branchingElementLabel')}: ", 'b'); $pdf->addText("{$childPage->getTitle()}\n", 'p'); $this->renderPdfAnswer($pdf, $childPage, $childAnswer); }
/** * Create a generic page to use in a preview * @param \Jazzee\Entity\Page $page * @param stdClass $data */ protected function genericPage(\Jazzee\Entity\Page $page, \stdClass $data) { $page->tempId(); $page->notGlobal(); $page->setType($this->_em->getRepository('\\Jazzee\\Entity\\PageType')->find($data->typeId)); //create a temporary application page so we can access the JazzeePage and do setup if ($data->status == 'new') { $applicationPage = new \Jazzee\Entity\ApplicationPage(); $applicationPage->setPage($page); $applicationPage->getJazzeePage()->setController($this); $applicationPage->getJazzeePage()->setupNewPage(); unset($applicationPage); //give any created elements a temporary id so they will display in the form foreach ($page->getElements() as $element) { $element->tempId(); foreach ($element->getListItems() as $item) { $item->tempId(); } } } $page->setTitle($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(); } if ($data->answerStatusDisplay) { $page->showAnswerStatus(); } else { $page->hideAnswerStatus(); } $page->setInstructions(empty($data->instructions) ? null : $data->instructions); $page->setLeadingText(empty($data->leadingText) ? null : $data->leadingText); $page->setTrailingText(empty($data->trailingText) ? null : $data->trailingText); foreach ($data->variables as $v) { $page->setVar($v->name, $v->value); } foreach ($data->elements as $obj) { $element = new \Jazzee\Entity\Element(); $this->genericElement($element, $obj); $page->addElement($element); } foreach ($data->children as $obj) { $childPage = new \Jazzee\Entity\Page(); $this->genericPage($childPage, $obj); $page->addChild($childPage); } $this->_em->clear(); }