/**
  * 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;
     }
 }
Exemplo n.º 2
0
 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);
 }