/** * Handles receiving and storing the data from a form, files are stored on actual upload process * this only handles storing form data and can be used for resubmission too. * * @param type $xmlFile * @return string ResultID or false on failure */ private function processReceivedForm($answerXmlFile) { //Log what we received $log = \Gems_Log::getLogger(); //$log->log(print_r($xmlFile, true), \Zend_Log::ERR); $xml = simplexml_load_file($answerXmlFile); $formId = $xml->attributes()->id; $formVersion = $xml->attributes()->version; //Lookup what form belongs to this formId and then save $model = $this->getModel(); $filter = array('gof_form_id' => $formId, 'gof_form_version' => $formVersion); if ($formData = $model->loadFirst($filter)) { $this->openrosaFormID = $formData['gof_id']; // Safeguard for when the form definition no longer exists try { $form = new OpenRosa_Tracker_Source_OpenRosa_Form($this->formDir . $formData['gof_form_xml']); $answers = $form->saveAnswer($answerXmlFile); return $answers['orf_id']; } catch (\Exception $exc) { return false; } } else { return false; } }
protected function _scanForms() { $messages = array(); $formCnt = 0; $addCnt = 0; $eDir = $this->_checkDir($this->formDir); if ($eDir !== false) { $model = $this->loader->getModels()->getOpenRosaFormModel(); while (false !== ($filename = $eDir->read())) { if (substr($filename, -4) == '.xml') { $formCnt++; $form = new \OpenRosa_Tracker_Source_OpenRosa_Form($this->formDir . $filename); $filter['gof_form_id'] = $form->getFormID(); $filter['gof_form_version'] = $form->getFormVersion(); $forms = $model->load($filter); if (!$forms) { $newValues = array(); $newValues['gof_id'] = null; $newValues['gof_form_id'] = $form->getFormID(); $newValues['gof_form_version'] = $form->getFormVersion(); $newValues['gof_form_title'] = $form->getTitle(); $newValues['gof_form_xml'] = $filename; $newValues = $model->save($newValues); if (\Gems_Tracker::$verbose) { \MUtil_Echo::r($newValues, 'added form'); } $addCnt++; } } } } $cache = GemsEscort::getInstance()->cache; $cache->clean(); $messages[] = sprintf('Checked %s forms and added %s forms', $formCnt, $addCnt); }