Ejemplo n.º 1
0
 private function processInput()
 {
     $this->storeResult = 0;
     // Strip header, if required
     if ($_POST['csv_has_header']) {
         $_POST['key'][0] = '';
         $_POST['mat_no'][0] = '';
         $_POST['data'][0] = '';
     }
     //Inputs
     $keys = $_POST['key'];
     $mat_nos = $_POST['mat_no'];
     $data = $_POST['data'];
     $element_count = max(count($keys), count($mat_nos), count($data));
     $nonempty_elements = $element_count;
     //Check validity of inputs
     $commitData = true;
     $this->db->startTransaction();
     for ($i = 0; $i < $element_count; $i++) {
         if (!$keys[$i] && !$mat_nos[$i] && !$data[$i]) {
             unset($_POST['ignore'][$i]);
             $nonempty_elements--;
             continue;
         }
         $this->remark[$i] = '';
         // check the R-Key
         if (!$keys[$i]) {
             $this->remark[$i] = Messages::getString('EnterDataPage.NoRKey');
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         try {
             $rkey = new RKey(sprintf('%03d-%s', $this->project->getId(), $keys[$i]));
         } catch (Exception $e) {
             $this->remark[$i] = Messages::getString('EnterDataPage.RKeyInvalid');
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         // check the Mat-No
         if (!$mat_nos[$i]) {
             $this->remark[$i] = Messages::getString('EnterDataPage.NoMatNo');
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         $mat_no = $mat_nos[$i];
         if (!ctype_alnum($mat_no)) {
             $this->remark[$i] = Messages::getString('StartPage.MatNoInvalid');
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         // Verify for current data
         $current_data = $this->db->getResultDataByRKey($rkey);
         if (!$current_data) {
             $current_data = $this->db->getResultDataByMatNo($rkey->getProjectId(), $mat_no);
         }
         if (!$current_data) {
             $this->remark[$i] = Messages::getString('EnterDataPage.RKeyNotFound');
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         // mat used with other rkey?
         if ($current_data['member_id']) {
             $alt_data = $this->db->getResultDataByMatNo($rkey->getProjectId(), $mat_no, $current_data['member_id']);
             if ($alt_data) {
                 $this->remark[$i] .= sprintf(Messages::getString('EnterDataPage.MatNoAlreadyUsed'), $mat_no);
                 $commitData = false;
                 //Fatal Error
                 unset($_POST['ignore'][$i]);
                 continue;
             }
         }
         // Now go for warnings:
         // rkey already used? (this test will get obsolete)
         if ($current_data['mat_no'] && $current_data['mat_no'] != $mat_no) {
             $this->remark[$i] .= sprintf(Messages::getString('EnterDataPage.RKeyAlreadyUsedMatNo'), $current_data['mat_no']);
             if (!$this->postValue('ignore', $i, null)) {
                 $commitData = false;
                 //Fatal Error
                 $_POST['ignore'][$i] = false;
                 // might be ignored the next time
             }
         }
         // check the Data
         if (!$data[$i]) {
             $this->remark[$i] .= Messages::getString('EnterDataPage.NoResultProvided');
             if (!$this->postValue('ignore', $i, null)) {
                 $commitData = false;
                 //Fatal Error
                 $_POST['ignore'][$i] = false;
                 // might be ignored the next time
             }
         }
         $date = $data[$i];
         if ($current_data['result']) {
             $this->remark[$i] .= Messages::getString('EnterDataPage.AlreadyResultStored');
             if (!$this->postValue('ignore', $i, null)) {
                 $commitData = false;
                 //Fatal Error
                 $_POST['ignore'][$i] = false;
                 // might be ignored the next time
             }
         }
         if (!$this->remark[$i] || $this->postValue('ignore', $i, null)) {
             // encrypt data:
             $crypt = new CryptProxy($current_data['crypt_module'], $this->project->getId(), $current_data['member_id']);
             $crypted_date = $crypt->encryptResult($date, $current_data['crypt_data']);
             // Save data to database
             try {
                 $this->db->updateResultData($current_data['project_id'], $current_data['member_id'], $mat_no, $crypted_date);
             } catch (Exception $exception) {
                 $this->remark[$i] = $exception;
                 $commitData = false;
                 //Fatal Error
                 unset($_POST['ignore'][$i]);
                 continue;
             }
             $this->storeResult++;
         }
     }
     //Finish transaction
     if ($nonempty_elements == 0) {
         $this->db->rollback();
         $this->storeResult = -1;
     } elseif ($commitData) {
         $this->db->commit();
     } else {
         $this->db->rollback();
         $this->storeResult = 0;
     }
 }
Ejemplo n.º 2
0
 private function processInput()
 {
     $this->storeResult = 0;
     //Inputs
     $keys = $_POST['key'];
     $mat_nos = $_POST['mat_no'];
     $data = $_POST['data'];
     $element_count = max(count($keys), count($mat_nos), count($data));
     //Check validity of inputs
     $commitData = true;
     $this->db->startTransaction();
     for ($i = 0; $i < $element_count; $i++) {
         if (!$keys[$i] && !$mat_nos[$i] && !$data[$i]) {
             unset($_POST['ignore'][$i]);
             continue;
         }
         $this->remark[$i] = '';
         // check the R-Key
         if (!$keys[$i]) {
             $this->remark[$i] = 'No RKey provided.';
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         try {
             $rkey = new RKey(sprintf('%03d-%s', $this->project->getId(), $keys[$i]));
         } catch (Exception $e) {
             $this->remark[$i] = 'RKey invalid.';
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         $current_data = $this->db->getResultDataByRKey($rkey);
         if (!$current_data) {
             $this->remark[$i] = 'RKey not found.';
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         // check the Mat-No
         if (!$mat_nos[$i]) {
             $this->remark[$i] = 'No matriculation number provided.';
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         $mat_no = $mat_nos[$i];
         if (!ctype_alnum($mat_no)) {
             $this->remark[$i] = 'Matriculation number contains non-alphanumerical characters.';
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         // mat used with other rkey?
         $alt_data = $this->db->getResultDataByMatNo($rkey->getProjectId(), $mat_no, $rkey->getMemberId());
         if ($alt_data) {
             $alt_rkey = new RKey($alt_data['project_id'], $alt_data['member_id']);
             $this->remark[$i] .= sprintf('Matriculation number already used for RKey %s. ', $alt_rkey);
             $commitData = false;
             //Fatal Error
             unset($_POST['ignore'][$i]);
             continue;
         }
         // Now go for warnings:
         // mat_no used?
         if ($current_data['mat_no'] && $current_data['mat_no'] != $mat_no) {
             $this->remark[$i] .= sprintf('R-Key already used for matriculation number %s. ', $current_data['mat_no']);
             if (!$this->postValue('ignore', $i, null)) {
                 $commitData = false;
                 //Fatal Error
                 $_POST['ignore'][$i] = false;
                 // might be ignored the next time
             }
         }
         // check the Data
         if (!$data[$i]) {
             $this->remark[$i] .= 'No result provided. ';
             if (!$this->postValue('ignore', $i, null)) {
                 $commitData = false;
                 //Fatal Error
                 $_POST['ignore'][$i] = false;
                 // might be ignored the next time
             }
         }
         $date = $data[$i];
         if ($current_data['result']) {
             $this->remark[$i] .= 'Already a result stored for this R-Key. ';
             if (!$this->postValue('ignore', $i, null)) {
                 $commitData = false;
                 //Fatal Error
                 $_POST['ignore'][$i] = false;
                 // might be ignored the next time
             }
         }
         if (!$this->remark[$i] || $this->postValue('ignore', $i, null)) {
             // encrypt data:
             $crypt = new CryptProxy($current_data['crypt_module']);
             $crypted_date = $crypt->encryptResult($date, $current_data['crypt_data']);
             // Save data to database
             $this->db->updateResultData($rkey, $mat_no, $crypted_date);
             $this->storeResult++;
         }
     }
     //Finish transaction
     if ($commitData) {
         $this->db->commit();
     } else {
         $this->db->rollback();
         $this->storeResult = 0;
     }
 }