/** * Write values to database. * @param <type> $updatedValues * @param <boolean> $finished - true if the survey needs to be finalized */ private function _UpdateValuesInDatabase($updatedValues, $finished = false, $setSubmitDate = false) { // Update these values in the database global $connect; // TODO - now that using $this->updatedValues, may be able to remove local copies of it (unless needed by other sub-systems) $updatedValues = $this->updatedValues; if (!$this->surveyOptions['deletenonvalues']) { $nonNullValues = array(); foreach ($updatedValues as $key => $value) { if (!is_null($value)) { if (isset($value['value']) && !is_null($value['value'])) { $nonNullValues[$key] = $value; } } } $updatedValues = $nonNullValues; } $message = ''; if ($this->surveyOptions['datestamp'] == true && $this->surveyOptions['anonymized'] == true) { // On anonymous datestamped surveys, set the datestamp to 1-1-1980 $datestamp = date("Y-m-d H:i:s", mktime(0, 0, 0, 1, 1, 1980)); } else { // Otherwise, use the real date/time, it will only be saved when the table holds a // datestamp field $datestamp = date_shift(date("Y-m-d H:i:s"), "Y-m-d H:i:s", $this->surveyOptions['timeadjust']); } $_SESSION['datestamp'] = $datestamp; if ($this->surveyOptions['active'] && !isset($_SESSION['srid'])) { // Create initial insert row for this record $sdata = array("datestamp" => $datestamp, "ipaddr" => $this->surveyOptions['ipaddr'] ? getIPAddress() : '', "startlanguage" => $this->surveyOptions['startlanguage'], "token" => $this->surveyOptions['token'], "refurl" => $this->surveyOptions['refurl'] ? getenv("HTTP_REFERER") : NULL, "startdate" => $datestamp); //One of the strengths of ADOdb's AutoExecute() is that only valid field names for $table are updated if ($connect->AutoExecute($this->surveyOptions['tablename'], $sdata, 'INSERT')) { $srid = $connect->Insert_ID($this->surveyOptions['tablename'], "id"); $_SESSION['srid'] = $srid; } else { $message .= $this->gT("Unable to insert record into survey table: ") . $connect->ErrorMsg() . "<br/>"; $_SESSION['flashmessage'] = $message; echo $message; } //Insert Row for Timings, if needed if ($this->surveyOptions['savetimings']) { $tdata = array('id' => $srid, 'interviewtime' => 0); if ($connect->AutoExecute($this->surveyOptions['tablename_timings'], $tdata, 'INSERT')) { $trid = $connect->Insert_ID($this->surveyOptions['tablename_timings'], "sid"); } else { $message .= $this->gT("Unable to insert record into timings table ") . $connect->ErrorMsg() . "<br/>"; $_SESSION['flashmessage'] = $message; echo $message; } } } if (count($updatedValues) > 0 || $finished) { $query = 'UPDATE ' . $this->surveyOptions['tablename'] . " SET "; $setter = array(); switch ($this->surveyMode) { case 'question': $thisstep = $this->currentQuestionSeq; break; case 'group': $thisstep = $this->currentGroupSeq; break; case 'survey': $thisstep = 1; break; } $setter[] = db_quote_id('lastpage') . "=" . db_quoteall($thisstep); if ($this->surveyOptions['datestamp'] && isset($_SESSION['datestamp'])) { $setter[] = db_quote_id('datestamp') . "=" . db_quoteall($_SESSION['datestamp']); } if ($this->surveyOptions['ipaddr']) { $setter[] = db_quote_id('ipaddr') . "=" . db_quoteall(getIPAddress()); } foreach ($updatedValues as $key => $value) { if (!empty($key)) { $val = is_null($value) ? NULL : $value['value']; $type = is_null($value) ? NULL : $value['type']; // Clean up the values to cope with database storage requirements switch ($type) { case 'D': //DATE if (trim($val) == '') { $val = NULL; // since some databases can't store blanks in date fields } // otherwise will already be in yyyy-mm-dd format after ProcessCurrentResponses() break; case '|': //File upload // This block can be removed once we require 5.3 or later if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) { $val = addslashes($val); } break; case 'N': //NUMERICAL QUESTION TYPE //NUMERICAL QUESTION TYPE case 'K': //MULTIPLE NUMERICAL QUESTION if (trim($val) == '') { $val = NULL; // since some databases can't store blanks in numerical inputs } break; default: break; } if (is_null($val)) { $setter[] = db_quote_id($key) . "=NULL"; } else { $setter[] = db_quote_id($key) . "=" . db_quoteall($val, true); } } } $query .= implode(', ', $setter); $query .= " WHERE ID="; if (isset($_SESSION['srid']) && $this->surveyOptions['active']) { $query .= $_SESSION['srid']; if (!db_execute_assoc($query)) { echo submitfailed($connect->ErrorMsg()); if (($this->debugLevel & LEM_DEBUG_VALIDATION_SUMMARY) == LEM_DEBUG_VALIDATION_SUMMARY) { $message .= 'Error in SQL update: ' . $connect->ErrorMsg() . '<br/>'; } } // Save Timings if needed if ($this->surveyOptions['savetimings']) { set_answer_time(); } if ($finished) { // Delete the save control record if successfully finalize the submission $query = "DELETE FROM " . db_table_name("saved_control") . " where srid=" . $_SESSION['srid'] . ' and sid=' . $this->sid; $connect->Execute($query); // Checked if (($this->debugLevel & LEM_DEBUG_VALIDATION_SUMMARY) == LEM_DEBUG_VALIDATION_SUMMARY) { $message .= ';<br/>' . $query; } } elseif ($this->surveyOptions['allowsave'] && isset($_SESSION['scid'])) { $connect->Execute("UPDATE " . db_table_name("saved_control") . " SET saved_thisstep=" . db_quoteall($thisstep) . " where scid=" . $_SESSION['scid']); // Checked } // Check quotas whenever results are saved $bQuotaMatched = false; $aQuotas = check_quota('return', $this->sid); if ($aQuotas !== false) { if ($aQuotas != false) { foreach ($aQuotas as $aQuota) { if (isset($aQuota['status']) && $aQuota['status'] == 'matched') { $bQuotaMatched = true; } } } } if ($bQuotaMatched) { check_quota('enforce', $this->sid); // will create a page and quit. } else { if ($finished) { $sQuery = 'UPDATE ' . $this->surveyOptions['tablename'] . " SET " . db_quote_id('submitdate') . "=" . db_quoteall($datestamp) . " WHERE ID=" . $_SESSION['srid']; $connect->Execute($sQuery); // Checked } } } if (($this->debugLevel & LEM_DEBUG_VALIDATION_SUMMARY) == LEM_DEBUG_VALIDATION_SUMMARY) { $message .= $query; } } return $message; }
if ($fieldexists['type']=='D' && isset($_POST[$value])) // convert the date to the right DB Format { $dateformatdatat=getDateFormatData($thissurvey['surveyls_dateformat']); $datetimeobj = new Date_Time_Converter($_SESSION[$value], $dateformatdatat['phpdate']); $_SESSION[$value]=$datetimeobj->convert("Y-m-d"); $_SESSION[$value]=$connect->BindDate($_SESSION[$value]); } } } } if ($thissurvey['savetimings']=="Y" && $thissurvey['active'] == "Y") { set_answer_time(); } } // CREATE SAVED CONTROL RECORD USING SAVE FORM INFORMATION if (isset($_POST['saveprompt'])) //Value submitted when clicking on 'Save Now' button on SAVE FORM { if ($thissurvey['active'] == "Y") // Only save if active { $flashmessage=savedcontrol(); if (isset($errormsg) && $errormsg != "") { showsaveform(); } } else
/** * Write values to database. * @param <type> $updatedValues * @param <boolean> $finished - true if the survey needs to be finalized */ private function _UpdateValuesInDatabase($updatedValues, $finished = false) { // Update these values in the database global $connect; $message = ''; $_SESSION['datestamp'] = date_shift(date("Y-m-d H:i:s"), "Y-m-d H:i:s", $this->surveyOptions['timeadjust']); if ($this->surveyOptions['active'] && !isset($_SESSION['srid'])) { // Create initial insert row for this record $today = date_shift(date("Y-m-d H:i:s"), "Y-m-d H:i:s", $this->surveyOptions['timeadjust']); $sdata = array("datestamp" => $today, "ipaddr" => $this->surveyOptions['ipaddr'] && isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '', "startlanguage" => $this->surveyOptions['startlanguage'], "token" => $this->surveyOptions['token'], "datestamp" => $this->surveyOptions['datestamp'] ? $_SESSION['datestamp'] : NULL, "refurl" => $this->surveyOptions['refurl'] ? getenv("HTTP_REFERER") : NULL, "startdate" => $this->surveyOptions['datestamp'] ? $_SESSION['datestamp'] : date("Y-m-d H:i:s", 0)); //One of the strengths of ADOdb's AutoExecute() is that only valid field names for $table are updated if ($connect->AutoExecute($this->surveyOptions['tablename'], $sdata, 'INSERT')) { $srid = $connect->Insert_ID($this->surveyOptions['tablename'], "id"); $_SESSION['srid'] = $srid; } else { $message .= $this->gT("Unable to insert record into survey table: ") . $connect->ErrorMsg() . "<br/>"; $_SESSION['flashmessage'] = $message; echo $message; } //Insert Row for Timings, if needed if ($this->surveyOptions['savetimings']) { $tdata = array('id' => $srid, 'interviewtime' => 0); if ($connect->AutoExecute($this->surveyOptions['tablename_timings'], $tdata, 'INSERT')) { $trid = $connect->Insert_ID($this->surveyOptions['tablename_timings'], "sid"); } else { $message .= $this->gT("Unable to insert record into timings table ") . $connect->ErrorMsg() . "<br/>"; $_SESSION['flashmessage'] = $message; echo $message; } } } if (count($updatedValues) > 0 || $finished) { $query = 'UPDATE ' . $this->surveyOptions['tablename'] . " SET "; $setter = array(); switch ($this->surveyMode) { case 'question': $thisstep = $this->currentQuestionSeq; break; case 'group': $thisstep = $this->currentGroupSeq; break; case 'survey': $thisstep = 1; break; } $setter[] = db_quote_id('lastpage') . "=" . db_quoteall($thisstep); if ($this->surveyOptions['datestamp'] && isset($_SESSION['datestamp'])) { $setter[] = db_quote_id('datestamp') . "=" . db_quoteall($_SESSION['datestamp']); } if ($this->surveyOptions['ipaddr'] && isset($_SERVER['REMOTE_ADDR'])) { $setter[] = db_quote_id('ipaddr') . "=" . db_quoteall($_SERVER['REMOTE_ADDR']); } if ($finished) { $setter[] = db_quote_id('submitdate') . "=" . db_quoteall($_SESSION['datestamp']); } foreach ($updatedValues as $key => $value) { $val = is_null($value) ? NULL : $value['value']; $type = is_null($value) ? NULL : $value['type']; // Clean up the values to cope with database storage requirements switch ($type) { case 'D': //DATE if (trim($val) == '') { $val = NULL; // since some databases can't store blanks in date fields } // otherwise will already be in yyyy-mm-dd format after ProcessCurrentResponses() break; case 'N': //NUMERICAL QUESTION TYPE //NUMERICAL QUESTION TYPE case 'K': //MULTIPLE NUMERICAL QUESTION if (trim($val) == '') { $val = NULL; // since some databases can't store blanks in numerical inputs } break; default: break; } if (is_null($val)) { $setter[] = db_quote_id($key) . "=NULL"; } else { $setter[] = db_quote_id($key) . "=" . db_quoteall($val); } } $query .= implode(', ', $setter); $query .= " WHERE ID="; if (isset($_SESSION['srid']) && $this->surveyOptions['active']) { $query .= $_SESSION['srid']; if (!db_execute_assoc($query)) { echo submitfailed($connect->ErrorMsg()); if (($this->debugLevel & LEM_DEBUG_VALIDATION_SUMMARY) == LEM_DEBUG_VALIDATION_SUMMARY) { $message .= 'Error in SQL update: ' . $connect->ErrorMsg() . '<br/>'; } } // Save Timings if needed if ($this->surveyOptions['savetimings']) { set_answer_time(); } if ($finished) { // Delete the save control record if successfully finalize the submission $query = "DELETE FROM " . db_table_name("saved_control") . " where srid=" . $_SESSION['srid'] . ' and sid=' . $this->sid; $connect->Execute($query); // Checked if (($this->debugLevel & LEM_DEBUG_VALIDATION_SUMMARY) == LEM_DEBUG_VALIDATION_SUMMARY) { $message .= ';<br/>' . $query; } // Check Quotas $bQuotaMatched = false; $aQuotas = check_quota('return', $this->sid); if ($aQuotas !== false) { if ($aQuotas != false) { foreach ($aQuotas as $aQuota) { if (isset($aQuota['status']) && $aQuota['status'] == 'matched') { $bQuotaMatched = true; } } } } if ($bQuotaMatched) { check_quota('enforce', $this->sid); // will create a page and quit. } } else { if ($this->surveyOptions['allowsave'] && isset($_SESSION['scid'])) { $connect->Execute("UPDATE " . db_table_name("saved_control") . " SET saved_thisstep=" . db_quoteall($thisstep) . " where scid=" . $_SESSION['scid']); // Checked } } } if (($this->debugLevel & LEM_DEBUG_VALIDATION_SUMMARY) == LEM_DEBUG_VALIDATION_SUMMARY) { $message .= $query; } } return $message; }