/** * Try and match a score to an answer * * @param \Jazzee\Entity\Answer */ public function matchScore(\Jazzee\Entity\Answer $answer) { if ($answer->getPageStatus() == self::SKIPPED) { return; } if (!is_null($answer->getGREScore()) and !is_null($answer->getTOEFLScore())) { return; //we already have a match } $testType = $this->_applicationPage->getPage()->getElementByFixedId(self::FID_TEST_TYPE)->getJazzeeElement()->displayValue($answer); $registrationNumber = $this->_applicationPage->getPage()->getElementByFixedId(self::FID_REGISTRATION_NUMBER)->getJazzeeElement()->displayValue($answer); $testDate = $this->_applicationPage->getPage()->getElementByFixedId(self::FID_TEST_DATE)->getJazzeeElement()->formValue($answer); $testMonth = date('m', strtotime($testDate)); $testYear = date('Y', strtotime($testDate)); $parameters = array('registrationNumber' => $registrationNumber, 'testMonth' => $testMonth, 'testYear' => $testYear); switch ($testType) { case 'GRE/GRE Subject': $score = $this->_controller->getEntityManager()->getRepository('\\Jazzee\\Entity\\GREScore')->findOneBy($parameters); if ($score) { $answer->setGreScore($score); } break; case 'TOEFL': $score = $this->_controller->getEntityManager()->getRepository('\\Jazzee\\Entity\\TOEFLScore')->findOneBy($parameters); if ($score) { $answer->setTOEFLScore($score); } break; default: throw new \Jazzee\Exception("Unknown test type: {$testType} when trying to match a score"); } }
/** * Convert an answer to an xml element * @param \DomDocument $dom * @param \Jazzee\Entity\Answer $answer * @param integer $version the XML version to create * @return \DomElement */ protected function xmlAnswer(\DomDocument $dom, \Jazzee\Entity\Answer $answer, $version) { $answerXml = $dom->createElement('answer'); $answerXml->setAttribute('answerId', $answer->getId()); $answerXml->setAttribute('uniqueId', $answer->getUniqueId()); $answerXml->setAttribute('updatedAt', $answer->getUpdatedAt()->format('c')); $answerXml->setAttribute('pageStatus', $answer->getPageStatus()); $answerXml->setAttribute('publicStatus', $answer->getPublicStatus() ? $answer->getPublicStatus()->getName() : ''); $answerXml->setAttribute('privateStatus', $answer->getPrivateStatus() ? $answer->getPrivateStatus()->getName() : ''); foreach ($answer->getPage()->getElements() as $element) { $element->getJazzeeElement()->setController($this->_controller); if ($element->getJazzeeElement() instanceof \Jazzee\Interfaces\XmlElement) { $answerXml->appendChild($element->getJazzeeElement()->getXmlAnswer($dom, $answer, $version)); } } $attachment = $dom->createElement('attachment'); if ($answer->getAttachment()) { $attachment->appendChild($dom->createCDATASection(base64_encode($answer->getAttachment()->getAttachment()))); } $answerXml->appendChild($attachment); $children = $dom->createElement('children'); foreach ($answer->getChildren() as $child) { $children->appendChild($this->xmlAnswer($dom, $child, $version)); } $answerXml->appendChild($children); return $answerXml; }
/** * Convert an answer to an xml element and add school information * Since school data is stored either in the School entity or else in a child answer * we combine these two * @param \DomDocument $dom * @param \Jazzee\Entity\Answer $answer * @param integer $version the XML version to create * @return \DomElement */ protected function xmlAnswer(\DomDocument $dom, \Jazzee\Entity\Answer $answer, $version) { $answerXml = $dom->createElement('answer'); $answerXml->setAttribute('answerId', $answer->getId()); $answerXml->setAttribute('uniqueId', $answer->getUniqueId()); $answerXml->setAttribute('updatedAt', $answer->getUpdatedAt()->format('c')); $answerXml->setAttribute('pageStatus', $answer->getPageStatus()); $answerXml->setAttribute('publicStatus', $answer->getPublicStatus() ? $answer->getPublicStatus()->getName() : ''); $answerXml->setAttribute('privateStatus', $answer->getPrivateStatus() ? $answer->getPrivateStatus()->getName() : ''); foreach ($answer->getPage()->getElements() as $element) { $element->getJazzeeElement()->setController($this->_controller); if ($element->getJazzeeElement() instanceof \Jazzee\Interfaces\XmlElement) { $answerXml->appendChild($element->getJazzeeElement()->getXmlAnswer($dom, $answer, $version)); } } $attachment = $dom->createElement('attachment'); if ($answer->getAttachment()) { $attachment->appendChild($dom->createCDATASection(base64_encode($answer->getAttachment()->getAttachment()))); } $answerXml->appendChild($attachment); $schoolXml = $dom->createElement('school'); if ($school = $answer->getSchool()) { $schoolXml->setAttribute('type', 'known'); $schoolXml->setAttribute('code', htmlentities($school->getCode(), ENT_COMPAT, 'utf-8')); $eXml = $dom->createElement('name'); $eXml->appendChild($dom->createCDATASection($school->getName())); $schoolXml->appendChild($eXml); $eXml = $dom->createElement('city'); $eXml->appendChild($dom->createCDATASection($school->getCity())); $schoolXml->appendChild($eXml); $eXml = $dom->createElement('state'); $eXml->appendChild($dom->createCDATASection($school->getState())); $schoolXml->appendChild($eXml); $eXml = $dom->createElement('country'); $eXml->appendChild($dom->createCDATASection($school->getCountry())); $schoolXml->appendChild($eXml); $eXml = $dom->createElement('postalCode'); $eXml->appendChild($dom->createCDATASection($school->getPostalCode())); $schoolXml->appendChild($eXml); } else { $schoolXml->setAttribute('type', 'new'); $newSchoolElements = array(self::ELEMENT_FID_NAME => 'name', self::ELEMENT_FID_CITY => 'city', self::ELEMENT_FID_STATE => 'state', self::ELEMENT_FID_COUNTRY => 'country', self::ELEMENT_FID_POSTALCODE => 'postalCode'); foreach ($newSchoolElements as $fid => $name) { $element = $this->_applicationPage->getPage()->getChildByFixedId(self::PAGE_FID_NEWSCHOOL)->getElementByFixedId($fid); $element->getJazzeeElement()->setController($this->_controller); if ($element->getJazzeeElement() instanceof \Jazzee\Interfaces\XmlElement) { $eXml = $dom->createElement($name); $eXml->appendChild($dom->createCDATASection($element->getJazzeeElement()->displayValue($answer->getChildren()->first()))); $schoolXml->appendChild($eXml); } } } $answerXml->appendChild($schoolXml); return $answerXml; }