Example #1
0
function recoverGroup($db)
{
    if (!isset($_POST['groupCode']) || !isset($_POST['groupPass'])) {
        echo json_encode((object) array("success" => false, "message" => 'Code ou mot de passe manquant'));
        return;
    }
    $stmt = $db->prepare("SELECT `ID`, `bRecovered`, `contestID`, `expectedStartTime`, `name`, `userID`, `gradeDetail`, `grade`, `schoolID`, `nbStudents`, `nbTeamsEffective`, `nbStudentsEffective`, `noticePrinted`, `isPublic`, `participationType`, `password` FROM `group` WHERE `code` = ?");
    $stmt->execute(array($_POST['groupCode']));
    $row = $stmt->fetchObject();
    if (!$row || $row->password != $_POST['groupPass']) {
        echo json_encode((object) array("success" => false, "message" => 'Mot de passe invalide'));
        return;
    }
    if ($row->bRecovered == 1) {
        echo json_encode((object) array("success" => false, "message" => 'L\'opération n\'est possible qu\'une fois par groupe.'));
        return;
    }
    $stmtUpdate = $db->prepare("UPDATE `group` SET `code` = ?, `password` = ?, `bRecovered`=1 WHERE `ID` = ?;");
    $stmtUpdate->execute(array('#' . $_POST['groupCode'], '#' . $row->password, $row->ID));
    $groupID = getRandomID();
    $stmtInsert = $db->prepare("INSERT INTO `group` (`ID`, `startTime`, `bRecovered`, `contestID`, `expectedStartTime`, `name`, `userID`, `gradeDetail`, `grade`, `schoolID`, `nbStudents`, `nbTeamsEffective`, `nbStudentsEffective`, `noticePrinted`, `isPublic`, `participationType`, `password`, `code`) values (:groupID, NOW(), 1, :contestID, NOW(), :name, :userID, :gradeDetail, :grade, :schoolID, :nbStudents, 0, 0, 0, :isPublic, :participationType, :password, :code);");
    $stmtInsert->execute(array('groupID' => $groupID, 'contestID' => $row->contestID, 'name' => $row->name . '-bis', 'userID' => $row->userID, 'gradeDetail' => $row->gradeDetail, 'grade' => $row->grade, 'schoolID' => $row->schoolID, 'nbStudents' => $row->nbStudents, 'isPublic' => $row->isPublic, 'participationType' => $row->participationType, 'password' => $row->password, 'code' => $_POST['groupCode']));
    $_SESSION["groupID"] = $groupID;
    $_SESSION["startTime"] = time();
    // warning: SQL and PHP server must be in sync...
    $_SESSION["closed"] = false;
    $_SESSION["groupClosed"] = false;
    echo json_encode((object) array("success" => true, "startTime" => $_SESSION["startTime"]));
}
Example #2
0
 /**
  * function to import surveys, based on new importsurvey.php 6979 2009-05-30 11:59:03Z c_schmitz $
  *
  * @param unknown_type $iVid
  * @param unknown_type $sVtit
  * @param unknown_type $sVbes
  * @return boolean
  */
 function importSurvey($iVid, $sVtit, $sVbes, $sVwel, $sUbes, $sVtyp)
 {
     global $connect;
     global $dbprefix;
     global $clang;
     include "lsrc.config.php";
     $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
     $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK ");
     // HINT FOR IMPORTERS: go to Line 714 to manipulate the Survey, while it's imported
     $the_full_file_path = $coreDir . $sVtyp . ".csv";
     $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ",the_full_file_path ='{$the_full_file_path}' OK ");
     //$_SERVER['SERVER_NAME'] = "";				// just to avoid notices
     //$_SERVER['SERVER_SOFTWARE'] = "";		// just to avoid notices
     //require_once(dirname(__FILE__).'/../config-defaults.php');
     //require_once(dirname(__FILE__).'/../common.php');
     $handle = fopen($the_full_file_path, "r");
     while (!feof($handle)) {
         //To allow for very long survey lines (up to 64k)
         $buffer = fgets($handle, 56550);
         $bigarray[] = $buffer;
     }
     fclose($handle);
     //		foreach($bigarray as $ba)
     //			$this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", OK ".$ba);
     if (isset($bigarray[0])) {
         $bigarray[0] = $this->removeBOM($bigarray[0]);
     }
     // Now we try to determine the dataformat of the survey file.
     if (isset($bigarray[1]) && isset($bigarray[4]) && substr($bigarray[1], 0, 22) == "# SURVEYOR SURVEY DUMP" && substr($bigarray[4], 0, 29) == "# http://www.phpsurveyor.org/") {
         $importversion = 100;
         // version 1.0 file
     } elseif (isset($bigarray[1]) && isset($bigarray[4]) && substr($bigarray[1], 0, 22) == "# SURVEYOR SURVEY DUMP" && substr($bigarray[4], 0, 37) == "# http://phpsurveyor.sourceforge.net/") {
         $importversion = 99;
         // Version 0.99 file or older - carries a different URL
     } elseif (substr($bigarray[0], 0, 24) == "# LimeSurvey Survey Dump" || substr($bigarray[0], 0, 25) == "# PHPSurveyor Survey Dump") {
         // Wow.. this seems to be a >1.0 version file - these files carry the version information to read in line two
         $importversion = substr($bigarray[1], 12, 3);
     } else {
         if ($importingfrom == "http") {
             //			    $importsurvey .= "<strong><font color='red'>".("Error")."</font></strong>\n";
             //			  	$importsurvey .= ("This file is not a LimeSurvey survey file. Import failed.")."\n";
             //			  	$importsurvey .= "</font></td></tr></table>\n";
             //			  	$importsurvey .= "</body>\n</html>\n";
             //unlink($the_full_file_path);
             return false;
         } else {
             //echo ("This file is not a LimeSurvey survey file. Import failed.")."\n";
             return false;
         }
     }
     // okay.. now lets drop the first 9 lines and get to the data
     // This works for all versions
     for ($i = 0; $i < 9; $i++) {
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //$this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", OK ".print_r($bigarray));
     //SURVEYS
     if (array_search("# GROUPS TABLE\n", $bigarray)) {
         $stoppoint = array_search("# GROUPS TABLE\n", $bigarray);
     } elseif (array_search("# GROUPS TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# GROUPS TABLE\r\n", $bigarray);
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         if ($i < $stoppoint - 2) {
             $surveyarray[] = $bigarray[$i];
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //GROUPS
     if (array_search("# QUESTIONS TABLE\n", $bigarray)) {
         $stoppoint = array_search("# QUESTIONS TABLE\n", $bigarray);
     } elseif (array_search("# QUESTIONS TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# QUESTIONS TABLE\r\n", $bigarray);
     } else {
         $stoppoint = count($bigarray) - 1;
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         if ($i < $stoppoint - 2) {
             $grouparray[] = $bigarray[$i];
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //QUESTIONS
     if (array_search("# ANSWERS TABLE\n", $bigarray)) {
         $stoppoint = array_search("# ANSWERS TABLE\n", $bigarray);
     } elseif (array_search("# ANSWERS TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# ANSWERS TABLE\r\n", $bigarray);
     } else {
         $stoppoint = count($bigarray) - 1;
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         if ($i < $stoppoint - 2) {
             $questionarray[] = $bigarray[$i];
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //ANSWERS
     if (array_search("# CONDITIONS TABLE\n", $bigarray)) {
         $stoppoint = array_search("# CONDITIONS TABLE\n", $bigarray);
     } elseif (array_search("# CONDITIONS TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# CONDITIONS TABLE\r\n", $bigarray);
     } else {
         $stoppoint = count($bigarray) - 1;
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         if ($i < $stoppoint - 2) {
             $answerarray[] = str_replace("`default`", "`default_value`", $bigarray[$i]);
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //CONDITIONS
     if (array_search("# LABELSETS TABLE\n", $bigarray)) {
         $stoppoint = array_search("# LABELSETS TABLE\n", $bigarray);
     } elseif (array_search("# LABELSETS TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# LABELSETS TABLE\r\n", $bigarray);
     } else {
         //There is no labelsets information, so presumably this is a pre-0.98rc3 survey.
         $stoppoint = count($bigarray);
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         if ($i < $stoppoint - 2) {
             $conditionsarray[] = $bigarray[$i];
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //LABELSETS
     if (array_search("# LABELS TABLE\n", $bigarray)) {
         $stoppoint = array_search("# LABELS TABLE\n", $bigarray);
     } elseif (array_search("# LABELS TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# LABELS TABLE\r\n", $bigarray);
     } else {
         $stoppoint = count($bigarray) - 1;
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         if ($i < $stoppoint - 2) {
             $labelsetsarray[] = $bigarray[$i];
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //LABELS
     if (array_search("# QUESTION_ATTRIBUTES TABLE\n", $bigarray)) {
         $stoppoint = array_search("# QUESTION_ATTRIBUTES TABLE\n", $bigarray);
     } elseif (array_search("# QUESTION_ATTRIBUTES TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# QUESTION_ATTRIBUTES TABLE\r\n", $bigarray);
     } else {
         $stoppoint = count($bigarray) - 1;
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         if ($i < $stoppoint - 2) {
             $labelsarray[] = $bigarray[$i];
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //QUESTION_ATTRIBUTES
     if (array_search("# ASSESSMENTS TABLE\n", $bigarray)) {
         $stoppoint = array_search("# ASSESSMENTS TABLE\n", $bigarray);
     } elseif (array_search("# ASSESSMENTS TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# ASSESSMENTS TABLE\r\n", $bigarray);
     } else {
         $stoppoint = count($bigarray) - 1;
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         if ($i < $stoppoint - 2) {
             $question_attributesarray[] = $bigarray[$i];
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //ASSESSMENTS
     if (array_search("# SURVEYS_LANGUAGESETTINGS TABLE\n", $bigarray)) {
         $stoppoint = array_search("# SURVEYS_LANGUAGESETTINGS TABLE\n", $bigarray);
     } elseif (array_search("# SURVEYS_LANGUAGESETTINGS TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# SURVEYS_LANGUAGESETTINGS TABLE\r\n", $bigarray);
     } else {
         $stoppoint = count($bigarray) - 1;
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         //	if ($i<$stoppoint-2 || $i==count($bigarray)-1)
         if ($i < $stoppoint - 2) {
             $assessmentsarray[] = $bigarray[$i];
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //LANGAUGE SETTINGS
     if (array_search("# QUOTA TABLE\n", $bigarray)) {
         $stoppoint = array_search("# QUOTA TABLE\n", $bigarray);
     } elseif (array_search("# QUOTA TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# QUOTA TABLE\r\n", $bigarray);
     } else {
         $stoppoint = count($bigarray) - 1;
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         //	if ($i<$stoppoint-2 || $i==count($bigarray)-1)
         //$bigarray[$i]=        trim($bigarray[$i]);
         if (isset($bigarray[$i]) && trim($bigarray[$i]) != '') {
             if (strpos($bigarray[$i], "#") === 0) {
                 unset($bigarray[$i]);
                 unset($bigarray[$i + 1]);
                 unset($bigarray[$i + 2]);
                 break;
             } else {
                 $surveylsarray[] = $bigarray[$i];
             }
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //QUOTA
     if (array_search("# QUOTA_MEMBERS TABLE\n", $bigarray)) {
         $stoppoint = array_search("# QUOTA_MEMBERS TABLE\n", $bigarray);
     } elseif (array_search("# QUOTA_MEMBERS TABLE\r\n", $bigarray)) {
         $stoppoint = array_search("# QUOTA_MEMBERS TABLE\r\n", $bigarray);
     } else {
         $stoppoint = count($bigarray) - 1;
     }
     for ($i = 0; $i <= $stoppoint + 1; $i++) {
         //	if ($i<$stoppoint-2 || $i==count($bigarray)-1)
         if ($i < $stoppoint - 2) {
             $quotaarray[] = $bigarray[$i];
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     //Survey Language Settings
     $stoppoint = count($bigarray) - 1;
     for ($i = 0; $i < $stoppoint - 1; $i++) {
         if ($i <= $stoppoint) {
             $quotamembersarray[] = $bigarray[$i];
         }
         unset($bigarray[$i]);
     }
     $bigarray = array_values($bigarray);
     if (isset($surveyarray)) {
         $countsurveys = count($surveyarray);
     } else {
         $countsurveys = 0;
     }
     if (isset($surveylsarray)) {
         $countlanguages = count($surveylsarray) - 1;
     } else {
         $countlanguages = 1;
     }
     if (isset($grouparray)) {
         $countgroups = count($grouparray);
     } else {
         $countgroups = 0;
     }
     if (isset($questionarray)) {
         $countquestions = count($questionarray);
     } else {
         $countquestions = 0;
     }
     if (isset($answerarray)) {
         $countanswers = count($answerarray);
     } else {
         $countanswers = 0;
     }
     if (isset($conditionsarray)) {
         $countconditions = count($conditionsarray);
     } else {
         $countconditions = 0;
     }
     if (isset($labelsetsarray)) {
         $countlabelsets = count($labelsetsarray);
     } else {
         $countlabelsets = 0;
     }
     if (isset($question_attributesarray)) {
         $countquestion_attributes = count($question_attributesarray);
     } else {
         $countquestion_attributes = 0;
     }
     if (isset($assessmentsarray)) {
         $countassessments = count($assessmentsarray);
     } else {
         $countassessments = 0;
     }
     if (isset($quotaarray)) {
         $countquota = count($quotaarray);
     } else {
         $countquota = 0;
     }
     // CREATE SURVEY
     if ($countsurveys > 0) {
         $countsurveys--;
     }
     if ($countanswers > 0) {
         $countanswers = ($countanswers - 1) / $countlanguages;
     }
     if ($countgroups > 0) {
         $countgroups = ($countgroups - 1) / $countlanguages;
     }
     if ($countquestions > 0) {
         $countquestions = ($countquestions - 1) / $countlanguages;
     }
     if ($countassessments > 0) {
         $countassessments--;
     }
     if ($countconditions > 0) {
         $countconditions--;
     }
     if ($countlabelsets > 0) {
         $countlabelsets--;
     }
     if ($countquestion_attributes > 0) {
         $countquestion_attributes--;
     }
     if ($countquota > 0) {
         $countquota--;
     }
     $sfieldorders = convertCSVRowToArray($surveyarray[0], ',', '"');
     $sfieldcontents = convertCSVRowToArray($surveyarray[1], ',', '"');
     $surveyrowdata = array_combine($sfieldorders, $sfieldcontents);
     $surveyid = $surveyrowdata["sid"];
     if (!$surveyid) {
         if ($importingfrom == "http") {
             //				$importsurvey .= "<strong><font color='red'>".("Error")."</strong></font>\n";
             //				$importsurvey .= ("Import of this survey file failed")."\n";
             //				$importsurvey .= ("File does not contain LimeSurvey data in the correct format.")."\n"; //Couldn't find the SID - cannot continue
             //				$importsurvey .= "</font></td></tr></table>\n";
             //				$importsurvey .= "</body>\n</html>\n";
             //				unlink($the_full_file_path); //Delete the uploaded file
             return false;
         } else {
             //echo ("Import of this survey file failed")."\n".("File does not contain LimeSurvey data in the correct format.")."\n";
             return false;
         }
     }
     // Use the existing surveyid if it does not already exists
     // This allows the URL links to the survey to keep working because the sid did not change
     $newsid = $iVid;
     //XXX Changed from $surveyid --> $iVid
     $isquery = "SELECT sid FROM {$dbprefix}surveys WHERE sid={$newsid}";
     $isresult = db_execute_assoc($isquery);
     if ($isresult->RecordCount() > 0) {
         // Get new random ids until one is found that is not used
         do {
             $newsid = getRandomID();
             $isquery = "SELECT sid FROM {$dbprefix}surveys WHERE sid={$newsid}";
             $isresult = db_execute_assoc($isquery);
         } while ($isresult->RecordCount() > 0);
     }
     $insert = $surveyarray[0];
     $sfieldorders = convertCSVRowToArray($surveyarray[0], ',', '"');
     $sfieldcontents = convertCSVRowToArray($surveyarray[1], ',', '"');
     $surveyrowdata = array_combine($sfieldorders, $sfieldcontents);
     // Set new owner ID
     $surveyrowdata['owner_id'] = $_SESSION['loginID'];
     // Set new survey ID
     $surveyrowdata['sid'] = $newsid;
     $surveyrowdata['active'] = 'N';
     if ($importversion <= 100) {
         $oldlanguage = $surveyrowdata['language'];
         $newlanguage = 'en';
         //Default
         switch ($oldlanguage) {
             case "bulgarian":
                 $newlanguage = 'bg';
                 break;
             case "chinese-simplified":
                 $newlanguage = 'zh-Hans';
                 break;
             case "chinese-traditional":
                 $newlanguage = 'zh-Hant-HK';
                 break;
             case "croatian":
                 $newlanguage = 'hr';
                 break;
             case "danish":
                 $newlanguage = 'da';
                 break;
             case "dutch":
                 $newlanguage = 'nl';
                 break;
             case "english":
                 $newlanguage = 'en';
                 break;
             case "french":
                 $newlanguage = 'fr';
                 break;
             case "german-informal":
                 $newlanguage = 'de-informal';
                 break;
             case "german":
                 $newlanguage = 'de';
                 break;
             case "greek":
                 $newlanguage = 'el';
                 break;
             case "hungarian":
                 $newlanguage = 'hu';
                 break;
             case "italian":
                 $newlanguage = 'it';
                 break;
             case "japanese":
                 $newlanguage = 'ja';
                 break;
             case "lithuanian":
                 $newlanguage = 'lt';
                 break;
             case "norwegian":
                 $newlanguage = 'nb';
                 break;
             case "portuguese":
                 $newlanguage = 'pt';
                 break;
             case "romanian":
                 $newlanguage = 'ro';
                 break;
             case "russian":
                 $newlanguage = 'ru';
                 break;
             case "slovenian":
                 $newlanguage = 'sl';
                 break;
             case "spanish":
                 $newlanguage = 'es';
                 break;
             case "swedish":
                 $newlanguage = 'sv';
                 break;
         }
         $surveyrowdata['language'] = $newlanguage;
         // copy the survey row data
         // now prepare the languagesettings table and drop according values from the survey array
         $surveylsrowdata = array();
         $surveylsrowdata['surveyls_survey_id'] = $newsid;
         $surveylsrowdata['surveyls_language'] = $newlanguage;
         $surveylsrowdata['surveyls_title'] = $surveyrowdata['short_title'];
         $surveylsrowdata['surveyls_description'] = $surveyrowdata['description'];
         $surveylsrowdata['surveyls_welcometext'] = $surveyrowdata['welcome'];
         $surveylsrowdata['surveyls_urldescription'] = $surveyrowdata['urldescrip'];
         $surveylsrowdata['surveyls_email_invite_subj'] = $surveyrowdata['email_invite_subj'];
         $surveylsrowdata['surveyls_email_invite'] = $surveyrowdata['email_invite'];
         $surveylsrowdata['surveyls_email_remind_subj'] = $surveyrowdata['email_remind_subj'];
         $surveylsrowdata['surveyls_email_remind'] = $surveyrowdata['email_remind'];
         $surveylsrowdata['surveyls_email_register_subj'] = $surveyrowdata['email_register_subj'];
         $surveylsrowdata['surveyls_email_register'] = $surveyrowdata['email_register'];
         $surveylsrowdata['surveyls_email_confirm_subj'] = $surveyrowdata['email_confirm_subj'];
         $surveylsrowdata['surveyls_email_confirm'] = $surveyrowdata['email_confirm'];
         unset($surveyrowdata['short_title']);
         unset($surveyrowdata['description']);
         unset($surveyrowdata['welcome']);
         unset($surveyrowdata['urldescrip']);
         unset($surveyrowdata['email_invite_subj']);
         unset($surveyrowdata['email_invite']);
         unset($surveyrowdata['email_remind_subj']);
         unset($surveyrowdata['email_remind']);
         unset($surveyrowdata['email_register_subj']);
         unset($surveyrowdata['email_register']);
         unset($surveyrowdata['email_confirm_subj']);
         unset($surveyrowdata['email_confirm']);
         // translate internal links
         $surveylsrowdata['surveyls_title'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_title']);
         $surveylsrowdata['surveyls_description'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_description']);
         $surveylsrowdata['surveyls_welcometext'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_welcometext']);
         $surveylsrowdata['surveyls_urldescription'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_urldescription']);
         $surveylsrowdata['surveyls_email_invite'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_email_invite']);
         $surveylsrowdata['surveyls_email_remind'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_email_remind']);
         $surveylsrowdata['surveyls_email_register'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_email_register']);
         $surveylsrowdata['surveyls_email_confirm'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_email_confirm']);
         // import the survey language-specific settings
         $values = array_values($surveylsrowdata);
         $values = array_map(array(&$connect, "qstr"), $values);
         // quote everything accordingly
         $insert = "insert INTO {$dbprefix}surveys_languagesettings (" . implode(',', array_keys($surveylsrowdata)) . ") VALUES (" . implode(',', $values) . ")";
         //handle db prefix
         try {
             $iresult = $connect->Execute($insert) or $this->debugLsrc("" . "Import of this survey file failed" . "\n[{$insert}]{$surveyarray[0]}\n" . $connect->ErrorMsg());
         } catch (exception $e) {
             throw new SoapFault("Server: ", "{$e} : {$connect->ErrorMsg}()");
             exit;
         }
     }
     if (isset($surveyrowdata['datecreated'])) {
         $surveyrowdata['datecreated'] = $connect->BindTimeStamp($surveyrowdata['datecreated']);
     }
     unset($surveyrowdata['expires']);
     unset($surveyrowdata['attribute1']);
     unset($surveyrowdata['attribute2']);
     unset($surveyrowdata['usestartdate']);
     unset($surveyrowdata['useexpiry']);
     unset($surveyrowdata['url']);
     if (isset($surveyrowdata['startdate'])) {
         unset($surveyrowdata['startdate']);
     }
     $surveyrowdata['bounce_email'] = $surveyrowdata['adminemail'];
     if (!isset($surveyrowdata['datecreated']) || $surveyrowdata['datecreated'] == '' || $surveyrowdata['datecreated'] == 'null') {
         $surveyrowdata['datecreated'] = $connect->BindTimeStamp(date_shift(date("Y-m-d H:i:s"), "Y-m-d", $timeadjust));
     }
     $values = array_values($surveyrowdata);
     $values = array_map(array(&$connect, "qstr"), $values);
     // quote everything accordingly
     $insert = "INSERT INTO {$dbprefix}surveys (" . implode(',', array_keys($surveyrowdata)) . ") VALUES (" . implode(',', $values) . ")";
     //handle db prefix
     try {
         $iresult = $connect->Execute($insert) or $this->debugLsrc("" . "Import of this survey file failed on Line: " . __LINE__ . "\n[{$insert}]{$surveyarray[0]}\n" . $connect->ErrorMsg()) and exit;
     } catch (exception $e) {
         throw new SoapFault("Server: ", "{$e} : {$connect->ErrorMsg}()");
         exit;
     }
     $oldsid = $surveyid;
     // Now import the survey language settings
     if ($importversion >= 111) {
         $fieldorders = convertCSVRowToArray($surveylsarray[0], ',', '"');
         unset($surveylsarray[0]);
         foreach ($surveylsarray as $slsrow) {
             $fieldcontents = convertCSVRowToArray($slsrow, ',', '"');
             $surveylsrowdata = array_combine($fieldorders, $fieldcontents);
             // convert back the '\'.'n' cahr from the CSV file to true return char "\n"
             $surveylsrowdata = array_map('convertCsvreturn2return', $surveylsrowdata);
             // Convert the \n return char from welcometext to
             // XXX Change values while Importing here //done by rakete
             $surveylsrowdata['surveyls_title'] = $sVtit;
             $surveylsrowdata['surveyls_description'] = $sVbes;
             $surveylsrowdata['surveyls_welcometext'] = $sVwel;
             $surveylsrowdata['surveyls_urldescription'] = $sUbes;
             // translate internal links
             $surveylsrowdata['surveyls_title'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_title']);
             $surveylsrowdata['surveyls_description'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_description']);
             $surveylsrowdata['surveyls_welcometext'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_welcometext']);
             $surveylsrowdata['surveyls_urldescription'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_urldescription']);
             $surveylsrowdata['surveyls_email_invite'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_email_invite']);
             $surveylsrowdata['surveyls_email_remind'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_email_remind']);
             $surveylsrowdata['surveyls_email_register'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_email_register']);
             $surveylsrowdata['surveyls_email_confirm'] = translink('survey', $surveyid, $newsid, $surveylsrowdata['surveyls_email_confirm']);
             $surveylsrowdata['surveyls_survey_id'] = $newsid;
             $newvalues = array_values($surveylsrowdata);
             $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
             // quote everything accordingly
             $lsainsert = "INSERT INTO {$dbprefix}surveys_languagesettings (" . implode(',', array_keys($surveylsrowdata)) . ") VALUES (" . implode(',', $newvalues) . ")";
             //handle db prefix
             $lsiresult = $connect->Execute($lsainsert) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "") and exit;
         }
     }
     // DO SURVEY_RIGHTS
     $isrquery = "INSERT INTO {$dbprefix}surveys_rights VALUES({$newsid}," . $_SESSION['loginID'] . ",1,1,1,1,1,1)";
     @($isrresult = $connect->Execute($isrquery));
     $deniedcountlabelsets = 0;
     //DO ANY LABELSETS FIRST, SO WE CAN KNOW WHAT THEIR NEW LID IS FOR THE QUESTIONS
     if (isset($labelsetsarray) && $labelsetsarray) {
         $csarray = buildLabelSetCheckSumArray();
         // build checksums over all existing labelsets
         $count = 0;
         foreach ($labelsetsarray as $lsa) {
             $fieldorders = convertCSVRowToArray($labelsetsarray[0], ',', '"');
             $fieldcontents = convertCSVRowToArray($lsa, ',', '"');
             if ($count == 0) {
                 $count++;
                 continue;
             }
             $labelsetrowdata = array_combine($fieldorders, $fieldcontents);
             // Save old labelid
             $oldlid = $labelsetrowdata['lid'];
             // set the new language
             if ($importversion <= 100) {
                 $labelsetrowdata['languages'] = $newlanguage;
             }
             unset($labelsetrowdata['lid']);
             $newvalues = array_values($labelsetrowdata);
             $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
             // quote everything accordingly
             $lsainsert = "insert INTO {$dbprefix}labelsets (" . implode(',', array_keys($labelsetrowdata)) . ") VALUES (" . implode(',', $newvalues) . ")";
             //handle db prefix
             $lsiresult = $connect->Execute($lsainsert);
             // Get the new insert id for the labels inside this labelset
             $newlid = $connect->Insert_ID("{$dbprefix}labelsets", "lid");
             //		$importsurvey .= "OLDLID: $oldlid   NEWLID: $newlid";
             //      For debugging label import
             if ($labelsarray) {
                 $count = 0;
                 foreach ($labelsarray as $la) {
                     if ($importversion >= 111) {
                         $lfieldorders = convertCSVRowToArray($labelsarray[0], ',', '"');
                     }
                     $lfieldcontents = convertCSVRowToArray($la, ',', '"');
                     if ($count == 0) {
                         $count++;
                         continue;
                     }
                     // Combine into one array with keys and values since its easier to handle
                     $labelrowdata = array_combine($lfieldorders, $lfieldcontents);
                     if ($importversion <= 132) {
                         $labelrowdata["assessment_value"] = (int) $labelrowdata["code"];
                     }
                     $labellid = $labelrowdata['lid'];
                     if ($importversion <= 100) {
                         $labelrowdata['language'] = $newlanguage;
                     }
                     if ($labellid == $oldlid) {
                         $labelrowdata['lid'] = $newlid;
                         // translate internal links
                         $labelrowdata['title'] = translink('label', $oldlid, $newlid, $labelrowdata['title']);
                         $newvalues = array_values($labelrowdata);
                         $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
                         // quote everything accordingly
                         $lainsert = "insert INTO {$dbprefix}labels (" . implode(',', array_keys($labelrowdata)) . ") VALUES (" . implode(',', $newvalues) . ")";
                         //handle db prefix
                         $liresult = $connect->Execute($lainsert);
                     }
                 }
             }
             //CHECK FOR DUPLICATE LABELSETS
             $thisset = "";
             $query2 = "SELECT code, title, sortorder, language\r\n\t\t                   FROM {$dbprefix}labels\r\n\t\t                   WHERE lid=" . $newlid . "\r\n\t\t                   ORDER BY language, sortorder, code";
             $result2 = db_execute_num($query2) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
             while ($row2 = $result2->FetchRow()) {
                 $thisset .= implode('.', $row2);
             }
             // while
             $newcs = dechex(crc32($thisset) * 1);
             unset($lsmatch);
             if (isset($csarray)) {
                 foreach ($csarray as $key => $val) {
                     if ($val == $newcs) {
                         $lsmatch = $key;
                     }
                 }
             }
             if (isset($lsmatch) || $_SESSION['USER_RIGHT_MANAGE_LABEL'] != 1) {
                 //There is a matching labelset or the user is not allowed to edit labels -
                 // So, we will delete this one and refer to the matched one.
                 $query = "DELETE FROM {$dbprefix}labels WHERE lid={$newlid}";
                 $result = $connect->Execute($query) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
                 $query = "DELETE FROM {$dbprefix}labelsets WHERE lid={$newlid}";
                 $result = $connect->Execute($query) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
                 if (isset($lsmatch)) {
                     $newlid = $lsmatch;
                 } else {
                     ++$deniedcountlabelsets;
                     --$countlabelsets;
                 }
             } else {
                 //There isn't a matching labelset, add this checksum to the $csarray array
                 $csarray[$newlid] = $newcs;
             }
             //END CHECK FOR DUPLICATES
             $labelreplacements[] = array($oldlid, $newlid);
         }
     }
     $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK ");
     $importwarning = "";
     // used to save the warnings while processing questions
     $qtypes = $this->getqtypelist("", "array");
     foreach ($qtypes as $type) {
         //XXX FIXME
         $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK " . $type);
     }
     // DO GROUPS, QUESTIONS FOR GROUPS, THEN ANSWERS FOR QUESTIONS IN A NESTED FORMAT!
     if (isset($grouparray) && $grouparray) {
         $count = 0;
         $currentgid = '';
         foreach ($grouparray as $ga) {
             $gafieldorders = convertCSVRowToArray($grouparray[0], ',', '"');
             $gacfieldcontents = convertCSVRowToArray($ga, ',', '"');
             if ($count == 0) {
                 $count++;
                 continue;
             }
             $grouprowdata = array_combine($gafieldorders, $gacfieldcontents);
             // remember group id
             if ($currentgid == '' || $currentgid != $grouprowdata['gid']) {
                 $currentgid = $grouprowdata['gid'];
                 $newgroup = true;
             } else {
                 if ($currentgid == $grouprowdata['gid']) {
                     $newgroup = false;
                 }
             }
             $gid = $grouprowdata['gid'];
             $gsid = $grouprowdata['sid'];
             //Now an additional integrity check if there are any groups not belonging into this survey
             if ($gsid != $surveyid) {
                 if ($importingfrom == "http") {
                     //		                $importsurvey .= "\n<font color='red'><strong>".("Error")."</strong></font>"
                     //		                                ."\n".("A group in the CSV/SQL file is not part of the same survey. The import of the survey was stopped.")."\n";
                 } else {
                     //echo ("Error").": A group in the CSV/SQL file is not part of the same Survey. The import of the survey was stopped.\n";
                 }
                 return false;
             }
             $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK ");
             //remove the old group id
             if ($newgroup) {
                 unset($grouprowdata['gid']);
             } else {
                 $grouprowdata['gid'] = $newgid;
             }
             //replace old surveyid by new surveyid
             $grouprowdata['sid'] = $newsid;
             // Version <=100 dont have a language field yet so we set it now
             if ($importversion <= 100) {
                 $grouprowdata['language'] = $newlanguage;
             }
             $oldgid = $gid;
             // save it for later
             $grouprowdata = array_map('convertCsvreturn2return', $grouprowdata);
             // translate internal links
             $grouprowdata['group_name'] = translink('survey', $surveyid, $newsid, $grouprowdata['group_name']);
             $grouprowdata['description'] = translink('survey', $surveyid, $newsid, $grouprowdata['description']);
             $newvalues = array_values($grouprowdata);
             $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
             // quote everything accordingly
             db_switchIDInsert('groups', true);
             $ginsert = 'insert INTO ' . db_table_name('groups') . ' (' . implode(',', array_keys($grouprowdata)) . ') VALUES (' . implode(',', $newvalues) . ')';
             $gres = $connect->Execute($ginsert) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
             db_switchIDInsert('groups', false);
             //GET NEW GID
             if ($newgroup) {
                 $newgid = $connect->Insert_ID("{$dbprefix}groups", "gid");
             }
             //NOW DO NESTED QUESTIONS FOR THIS GID
             //$this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", OK ".var_dump($questionarray));
             if (isset($questionarray) && $questionarray && $newgroup) {
                 $count = 0;
                 $currentqid = '';
                 foreach ($questionarray as $qa) {
                     //$this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", OK ".$qa);
                     $qafieldorders = convertCSVRowToArray($questionarray[0], ',', '"');
                     $qacfieldcontents = convertCSVRowToArray($qa, ',', '"');
                     if ($count == 0) {
                         $count++;
                         continue;
                     }
                     $questionrowdata = array_combine($qafieldorders, $qacfieldcontents);
                     $questionrowdata = array_map('convertCsvreturn2return', $questionrowdata);
                     if ($currentqid == '' || $currentqid != $questionrowdata['qid']) {
                         $currentqid = $questionrowdata['qid'];
                         $newquestion = true;
                     } else {
                         if ($currentqid == $questionrowdata['qid']) {
                             $newquestion = false;
                         }
                     }
                     if (!array_key_exists($questionrowdata["type"], $qtypes)) {
                         $questionrowdata["type"] = strtoupper($questionrowdata["type"]);
                         if (!array_key_exists($questionrowdata["type"], $qtypes)) {
                             //$importwarning .= "<li>" . sprintf(("Question \"%s - %s\" was NOT imported because the question type is unknown."), $questionrowdata["title"], $questionrowdata["question"]) . "</li>";
                             $countquestions--;
                             $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK " . $countquestions);
                             continue;
                         } else {
                             //$importwarning .= "<li>" . sprintf(("Question \"%s - %s\" was imported but the type was set to '%s' because it is the most similiar one."), $questionrowdata["title"], $questionrowdata["question"], $qtypes[$questionrowdata["type"]]) . "</li>";
                         }
                     }
                     $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK ");
                     $thisgid = $questionrowdata['gid'];
                     $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK " . $thisgid . " == " . $gid);
                     if ($thisgid == $gid) {
                         $qid = $questionrowdata['qid'];
                         // Remove qid field
                         if ($newquestion) {
                             unset($questionrowdata['qid']);
                         } else {
                             $questionrowdata['qid'] = $newqid;
                         }
                         $questionrowdata["sid"] = $newsid;
                         $questionrowdata["gid"] = $newgid;
                         // Version <=100 doesn't have a language field yet so we set it now
                         if ($importversion <= 100) {
                             $questionrowdata['language'] = $newlanguage;
                         }
                         $oldqid = $qid;
                         if (!isset($questionrowdata["lid1"])) {
                             $questionrowdata["lid1"] = 0;
                         }
                         // Now we will fix up the label id
                         $type = $questionrowdata["type"];
                         //Get the type
                         if ($type == "F" || $type == "H" || $type == "W" || $type == "Z" || $type == "1" || $type == ":" || $type == ";") {
                             //IF this is a flexible label array, update the lid entry
                             if (isset($labelreplacements)) {
                                 // We only replace once in each question label
                                 // otherwise could lead to double substitution
                                 // if a new lid collides with an older one
                                 $already_replaced_label = false;
                                 $already_replaced_label1 = false;
                                 foreach ($labelreplacements as $lrp) {
                                     if ($lrp[0] == $questionrowdata["lid"]) {
                                         if (!$already_replaced_label) {
                                             $questionrowdata["lid"] = $lrp[1];
                                             $already_replaced_label = true;
                                         }
                                     }
                                     if ($lrp[0] == $questionrowdata["lid1"]) {
                                         if (!$already_replaced_label1) {
                                             $questionrowdata["lid1"] = $lrp[1];
                                             $already_replaced_label1 = true;
                                         }
                                     }
                                 }
                             }
                         }
                         if (!isset($questionrowdata["question_order"]) || $questionrowdata["question_order"] == '') {
                             $questionrowdata["question_order"] = 0;
                         }
                         $other = $questionrowdata["other"];
                         //Get 'other' field value
                         // translate internal links
                         $questionrowdata['title'] = translink('survey', $surveyid, $newsid, $questionrowdata['title']);
                         $questionrowdata['question'] = translink('survey', $surveyid, $newsid, $questionrowdata['question']);
                         $questionrowdata['help'] = translink('survey', $surveyid, $newsid, $questionrowdata['help']);
                         $newvalues = array_values($questionrowdata);
                         db_switchIDInsert('questions', true);
                         //foreach($questionrowdata as $qrd)
                         //$this->debugLsrc("wir sind in ".__FUNCTION__." Line ".__LINE__.", OK ".$qrd);
                         $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
                         // quote everything accordingly
                         $qinsert = "insert INTO {$dbprefix}questions (" . implode(',', array_keys($questionrowdata)) . ") VALUES (" . implode(',', $newvalues) . ")";
                         $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK | " . $qinsert);
                         $qres = $connect->Execute($qinsert) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
                         db_switchIDInsert('questions', false);
                         if ($newquestion) {
                             $newqid = $connect->Insert_ID("{$dbprefix}questions", "qid");
                         }
                         $newrank = 0;
                         $substitutions[] = array($oldsid, $oldgid, $oldqid, $newsid, $newgid, $newqid);
                         //$this->debugLsrc("HALLO?!:");
                         //NOW DO NESTED ANSWERS FOR THIS QID
                         if (isset($answerarray) && $answerarray && $newquestion) {
                             $count = 0;
                             foreach ($answerarray as $aa) {
                                 $aafieldorders = convertCSVRowToArray($answerarray[0], ',', '"');
                                 $aacfieldcontents = convertCSVRowToArray($aa, ',', '"');
                                 if ($count == 0) {
                                     $count++;
                                     continue;
                                 }
                                 $answerrowdata = array_combine($aafieldorders, $aacfieldcontents);
                                 if ($importversion <= 132) {
                                     $answerrowdata["assessment_value"] = (int) $answerrowdata["code"];
                                 }
                                 $code = $answerrowdata["code"];
                                 $thisqid = $answerrowdata["qid"];
                                 if ($thisqid == $qid) {
                                     $answerrowdata["qid"] = $newqid;
                                     // Version <=100 doesn't have a language field yet so we set it now
                                     if ($importversion <= 100) {
                                         $answerrowdata['language'] = $newlanguage;
                                     }
                                     // translate internal links
                                     $answerrowdata['answer'] = translink('survey', $surveyid, $newsid, $answerrowdata['answer']);
                                     $newvalues = array_values($answerrowdata);
                                     $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
                                     // quote everything accordingly
                                     $ainsert = "insert INTO {$dbprefix}answers (" . implode(',', array_keys($answerrowdata)) . ") VALUES (" . implode(',', $newvalues) . ")";
                                     $ares = $connect->Execute($ainsert) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
                                     if ($type == "M" || $type == "P") {
                                         $fieldnames[] = array("oldcfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid, "newcfieldname" => $newsid . "X" . $newgid . "X" . $newqid, "oldfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . $code, "newfieldname" => $newsid . "X" . $newgid . "X" . $newqid . $code);
                                         if ($type == "P") {
                                             $fieldnames[] = array("oldcfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . "comment", "newcfieldname" => $newsid . "X" . $newgid . "X" . $newqid . $code . "comment", "oldfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . $code . "comment", "newfieldname" => $newsid . "X" . $newgid . "X" . $newqid . $code . "comment");
                                         }
                                     } elseif ($type == "A" || $type == "B" || $type == "C" || $type == "F" || $type == "H" || $type == "E" || $type == "Q" || $type == "K" || $type == "1") {
                                         $fieldnames[] = array("oldcfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . $code, "newcfieldname" => $newsid . "X" . $newgid . "X" . $newqid . $code, "oldfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . $code, "newfieldname" => $newsid . "X" . $newgid . "X" . $newqid . $code);
                                     } elseif ($type == ":" || $type == ";") {
                                         // read all label codes from $questionrowdata["lid"]
                                         // for each one (as L) set SGQA_L
                                         $labelq = "SELECT DISTINCT code FROM {$dbprefix}labels WHERE lid=" . $questionrowdata["lid"];
                                         $labelqresult = db_execute_num($labelq) or safe_die("Died querying labelset {$lid}<br />{$query2}<br />" . $connect->ErrorMsg());
                                         while ($labelqrow = $labelqresult->FetchRow()) {
                                             $fieldnames[] = array("oldcfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . $code . "_" . $labelqrow[0], "newcfieldname" => $newsid . "X" . $newgid . "X" . $newqid . $code . "_" . $labelqrow[0], "oldfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . $code . "_" . $labelqrow[0], "newfieldname" => $newsid . "X" . $newgid . "X" . $newqid . $code . "_" . $labelqrow[0]);
                                         }
                                     } elseif ($type == "R") {
                                         $newrank++;
                                     }
                                 }
                             }
                             if (($type == "A" || $type == "B" || $type == "C" || $type == "M" || $type == "P" || $type == "L") && $other == "Y") {
                                 $fieldnames[] = array("oldcfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . "other", "newcfieldname" => $newsid . "X" . $newgid . "X" . $newqid . "other", "oldfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . "other", "newfieldname" => $newsid . "X" . $newgid . "X" . $newqid . "other");
                                 if ($type == "P") {
                                     $fieldnames[] = array("oldcfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . "othercomment", "newcfieldname" => $newsid . "X" . $newgid . "X" . $newqid . "othercomment", "oldfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . "othercomment", "newfieldname" => $newsid . "X" . $newgid . "X" . $newqid . "othercomment");
                                 }
                             }
                             if ($type == "R" && $newrank > 0) {
                                 for ($i = 1; $i <= $newrank; $i++) {
                                     $fieldnames[] = array("oldcfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . $i, "newcfieldname" => $newsid . "X" . $newgid . "X" . $newqid . $i, "oldfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . $i, "newfieldname" => $newsid . "X" . $newgid . "X" . $newqid . $i);
                                 }
                             }
                             if ($type != "A" && $type != "B" && $type != "C" && $type != "R" && $type != "M" && $type != "P") {
                                 $fieldnames[] = array("oldcfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid, "newcfieldname" => $newsid . "X" . $newgid . "X" . $newqid, "oldfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid, "newfieldname" => $newsid . "X" . $newgid . "X" . $newqid);
                                 if ($type == "O") {
                                     $fieldnames[] = array("oldcfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . "comment", "newcfieldname" => $newsid . "X" . $newgid . "X" . $newqid . "comment", "oldfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid . "comment", "newfieldname" => $newsid . "X" . $newgid . "X" . $newqid . "comment");
                                 }
                             }
                         } else {
                             $fieldnames[] = array("oldcfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid, "newcfieldname" => $newsid . "X" . $newgid . "X" . $newqid, "oldfieldname" => $oldsid . "X" . $oldgid . "X" . $oldqid, "newfieldname" => $newsid . "X" . $newgid . "X" . $newqid);
                         }
                     }
                 }
             }
         }
     }
     $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK ");
     // Fix sortorder of the groups  - if users removed groups manually from the csv file there would be gaps
     fixSortOrderGroups($surveyid);
     $baselang = GetBaseLanguageFromSurveyID($iVid);
     $cdresult = db_execute_assoc("SELECT gid FROM " . db_table_name('groups') . " WHERE sid='{$surveyid}' AND language='{$baselang}' ORDER BY group_order, group_name");
     $position = 0;
     while ($cdrow = $cdresult->FetchRow()) {
         $cd2query = "UPDATE " . db_table_name('groups') . " SET group_order='{$position}' WHERE gid='{$cdrow['gid']}' ";
         $cd2result = $connect->Execute($cd2query) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
         //Checked
         $position++;
     }
     $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK ");
     //... and for the questions inside the groups
     // get all group ids and fix questions inside each group
     $gquery = "SELECT gid FROM {$dbprefix}groups where sid={$newsid} group by gid ORDER BY gid";
     //Get last question added (finds new qid)
     $gres = db_execute_assoc($gquery);
     while ($grow = $gres->FetchRow()) {
         //fixsortorderQuestions(0,$grow['gid']); //XXX changed: commented out
         // and fully written out:
         $qid = sanitize_int(0);
         $gid = sanitize_int($grow['gid']);
         $baselang = GetBaseLanguageFromSurveyID($iVid);
         if ($gid == 0) {
             $result = db_execute_assoc("SELECT gid FROM " . db_table_name('questions') . " WHERE qid='{$qid}' and language='{$baselang}'");
             //Checked
             $row = $result->FetchRow();
             $gid = $row['gid'];
         }
         $cdresult = db_execute_assoc("SELECT qid FROM " . db_table_name('questions') . " WHERE gid='{$gid}' and language='{$baselang}' ORDER BY question_order, title ASC");
         //Checked
         $position = 0;
         while ($cdrow = $cdresult->FetchRow()) {
             $cd2query = "UPDATE " . db_table_name('questions') . " SET question_order='{$position}' WHERE qid='{$cdrow['qid']}' ";
             $cd2result = $connect->Execute($cd2query) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
             $position++;
         }
     }
     $this->debugLsrc("wir sind in " . __FUNCTION__ . " Line " . __LINE__ . ", OK ");
     //We've built two arrays along the way - one containing the old SID, GID and QIDs - and their NEW equivalents
     //and one containing the old 'extended fieldname' and its new equivalent.  These are needed to import conditions and question_attributes.
     if (isset($question_attributesarray) && $question_attributesarray) {
         //ONLY DO THIS IF THERE ARE QUESTION_ATTRIBUES
         $count = 0;
         foreach ($question_attributesarray as $qar) {
             $fieldorders = convertCSVRowToArray($question_attributesarray[0], ',', '"');
             $fieldcontents = convertCSVRowToArray($qar, ',', '"');
             if ($count == 0) {
                 $count++;
                 continue;
             }
             $qarowdata = array_combine($fieldorders, $fieldcontents);
             $newqid = "";
             $oldqid = $qarowdata['qid'];
             foreach ($substitutions as $subs) {
                 if ($oldqid == $subs[2]) {
                     $newqid = $subs[5];
                 }
             }
             $qarowdata["qid"] = $newqid;
             unset($qarowdata["qaid"]);
             $newvalues = array_values($qarowdata);
             $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
             // quote everything accordingly
             $qainsert = "insert INTO {$dbprefix}question_attributes (" . implode(',', array_keys($qarowdata)) . ") VALUES (" . implode(',', $newvalues) . ")";
             $result = $connect->Execute($qainsert) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "|  {$qainsert}  |" . $connect->ErrorMsg());
         }
     }
     if (isset($assessmentsarray) && $assessmentsarray) {
         //ONLY DO THIS IF THERE ARE QUESTION_ATTRIBUES
         $count = 0;
         foreach ($assessmentsarray as $qar) {
             $fieldorders = convertCSVRowToArray($assessmentsarray[0], ',', '"');
             $fieldcontents = convertCSVRowToArray($qar, ',', '"');
             if ($count == 0) {
                 $count++;
                 continue;
             }
             $asrowdata = array_combine($fieldorders, $fieldcontents);
             if (isset($asrowdata['link'])) {
                 if (trim($asrowdata['link']) != '') {
                     $asrowdata['message'] = $asrowdata['message'] . '<br /><a href="' . $asrowdata['link'] . '">' . $asrowdata['link'] . '</a>';
                 }
                 unset($asrowdata['link']);
             }
             $oldsid = $asrowdata["sid"];
             $oldgid = $asrowdata["gid"];
             if ($oldgid > 0) {
                 foreach ($substitutions as $subs) {
                     if ($oldsid == $subs[0]) {
                         $newsid = $subs[3];
                     }
                     if ($oldgid == $subs[1]) {
                         $newgid = $subs[4];
                     }
                 }
             } else {
                 $newgid = 0;
             }
             $asrowdata["sid"] = $newsid;
             $asrowdata["gid"] = $newgid;
             unset($asrowdata["id"]);
             $newvalues = array_values($asrowdata);
             $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
             // quote everything accordingly
             $asinsert = "insert INTO {$dbprefix}assessments (" . implode(',', array_keys($asrowdata)) . ") VALUES (" . implode(',', $newvalues) . ")";
             $result = $connect->Execute($asinsert) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
             unset($newgid);
         }
     }
     if (isset($quotaarray) && $quotaarray) {
         //ONLY DO THIS IF THERE ARE QUOTAS
         $count = 0;
         foreach ($quotaarray as $qar) {
             $fieldorders = convertCSVRowToArray($quotaarray[0], ',', '"');
             $fieldcontents = convertCSVRowToArray($qar, ',', '"');
             if ($count == 0) {
                 $count++;
                 continue;
             }
             $asrowdata = array_combine($fieldorders, $fieldcontents);
             $oldsid = $asrowdata["sid"];
             foreach ($substitutions as $subs) {
                 if ($oldsid == $subs[0]) {
                     $newsid = $subs[3];
                 }
             }
             $asrowdata["sid"] = $newsid;
             $oldid = $asrowdata["id"];
             unset($asrowdata["id"]);
             $newvalues = array_values($asrowdata);
             $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
             // quote everything accordingly
             $asinsert = "insert INTO {$dbprefix}quota (" . implode(',', array_keys($asrowdata)) . ") VALUES (" . implode(',', $newvalues) . ")";
             $result = $connect->Execute($asinsert) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
             $quotaids[] = array($oldid, $connect->Insert_ID(db_table_name_nq('quota'), "id"));
         }
     }
     if (isset($quotamembersarray) && $quotamembersarray) {
         //ONLY DO THIS IF THERE ARE QUOTAS
         $count = 0;
         foreach ($quotamembersarray as $qar) {
             $fieldorders = convertCSVRowToArray($quotamembersarray[0], ',', '"');
             $fieldcontents = convertCSVRowToArray($qar, ',', '"');
             if ($count == 0) {
                 $count++;
                 continue;
             }
             $asrowdata = array_combine($fieldorders, $fieldcontents);
             $oldsid = $asrowdata["sid"];
             $newqid = "";
             $newquotaid = "";
             $oldqid = $asrowdata['qid'];
             $oldquotaid = $asrowdata['quota_id'];
             foreach ($substitutions as $subs) {
                 if ($oldsid == $subs[0]) {
                     $newsid = $subs[3];
                 }
                 if ($oldqid == $subs[2]) {
                     $newqid = $subs[5];
                 }
             }
             foreach ($quotaids as $quotaid) {
                 if ($oldquotaid == $quotaid[0]) {
                     $newquotaid = $quotaid[1];
                 }
             }
             $asrowdata["sid"] = $newsid;
             $asrowdata["qid"] = $newqid;
             $asrowdata["quota_id"] = $newquotaid;
             unset($asrowdata["id"]);
             $newvalues = array_values($asrowdata);
             $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
             // quote everything accordingly
             $asinsert = "insert INTO {$dbprefix}quota_members (" . implode(',', array_keys($asrowdata)) . ") VALUES (" . implode(',', $newvalues) . ")";
             $result = $connect->Execute($asinsert) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
         }
     }
     if (isset($conditionsarray) && $conditionsarray) {
         //ONLY DO THIS IF THERE ARE CONDITIONS!
         $count = '0';
         foreach ($conditionsarray as $car) {
             $fieldorders = convertCSVRowToArray($conditionsarray[0], ',', '"');
             $fieldcontents = convertCSVRowToArray($car, ',', '"');
             if ($count == 0) {
                 $count++;
                 continue;
             }
             $conditionrowdata = array_combine($fieldorders, $fieldcontents);
             $oldcid = $conditionrowdata["cid"];
             $oldqid = $conditionrowdata["qid"];
             $oldcfieldname = $conditionrowdata["cfieldname"];
             $oldcqid = $conditionrowdata["cqid"];
             $thisvalue = $conditionrowdata["value"];
             $newvalue = $thisvalue;
             foreach ($substitutions as $subs) {
                 if ($oldqid == $subs[2]) {
                     $newqid = $subs[5];
                 }
                 if ($oldcqid == $subs[2]) {
                     $newcqid = $subs[5];
                 }
             }
             if (ereg('^@([0-9]+)X([0-9]+)X([^@]+)@', $thisvalue, $targetcfieldname)) {
                 foreach ($substitutions as $subs) {
                     if ($targetcfieldname[1] == $subs[0]) {
                         $targetcfieldname[1] = $subs[3];
                     }
                     if ($targetcfieldname[2] == $subs[1]) {
                         $targetcfieldname[2] = $subs[4];
                     }
                     if ($targetcfieldname[3] == $subs[2]) {
                         $targetcfieldname[3] = $subs[5];
                     }
                 }
                 $newvalue = '@' . $targetcfieldname[1] . 'X' . $targetcfieldname[2] . 'X' . $targetcfieldname[3] . '@';
             }
             foreach ($fieldnames as $fns) {
                 //if the $fns['oldcfieldname'] is not the same as $fns['oldfieldname'] then this is a multiple type question
                 if ($fns['oldcfieldname'] == $fns['oldfieldname']) {
                     //The normal method - non multiples
                     if ($oldcfieldname == $fns['oldcfieldname']) {
                         $newcfieldname = $fns['newcfieldname'];
                     }
                 } else {
                     if ($oldcfieldname == $fns['oldcfieldname'] && $oldcfieldname . $thisvalue == $fns['oldfieldname']) {
                         $newcfieldname = $fns['newcfieldname'];
                     }
                 }
             }
             if (!isset($newcfieldname)) {
                 $newcfieldname = "";
             }
             unset($conditionrowdata["cid"]);
             $conditionrowdata["qid"] = $newqid;
             $conditionrowdata["cfieldname"] = $newcfieldname;
             $conditionrowdata["value"] = $newvalue;
             if (isset($newcqid)) {
                 $conditionrowdata["cqid"] = $newcqid;
                 if (!isset($conditionrowdata["method"]) || trim($conditionrowdata["method"]) == '') {
                     $conditionrowdata["method"] = '==';
                 }
                 if (!isset($conditionrowdata["scenario"]) || trim($conditionrowdata["scenario"]) == '') {
                     $conditionrowdata["scenario"] = 1;
                 }
                 $newvalues = array_values($conditionrowdata);
                 $newvalues = array_map(array(&$connect, "qstr"), $newvalues);
                 // quote everything accordingly
                 $conditioninsert = "insert INTO {$dbprefix}conditions (" . implode(',', array_keys($conditionrowdata)) . ") VALUES (" . implode(',', $newvalues) . ")";
                 $result = $connect->Execute($conditioninsert) or $this->debugLsrc("Import of this survey file failed on Line " . __LINE__ . "| " . $connect->ErrorMsg());
             } else {
                 $importsurvey .= "<font size=1>Condition for {$oldqid} skipped ({$oldcqid} does not exist)</font>";
                 //if ($importingfrom != "http") echo "Condition for $oldqid skipped ($oldcqid does not exist)\n";
                 //return; //XXX changed: comment the upper line, returning
             }
             unset($newcqid);
         }
     }
     // Translate INSERTANS codes
     if (isset($fieldnames)) {
         TranslateInsertansTags($newsid, $oldsid, $fieldnames);
     }
     $surveyid = $newsid;
     return true;
 }
Example #3
0
                $usresult = $connect->Execute($usquery) or safe_die("Error updating<br />" . $usquery . "<br /><br /><strong>" . $connect->ErrorMsg());
                // Checked
            }
        }
    }
} elseif ($action == "insertnewsurvey" && $_SESSION['USER_RIGHT_CREATE_SURVEY']) {
    $dateformatdetails = getDateFormatData($_SESSION['dateformat']);
    if ($_POST['url'] == "http://") {
        $_POST['url'] = "";
    }
    if (!$_POST['surveyls_title']) {
        $databaseoutput .= "<script type=\"text/javascript\">\n<!--\n alert(\"" . $clang->gT("Survey could not be created because it did not have a title", "js") . "\")\n //-->\n</script>\n";
    } else {
        // Get random ids until one is found that is not used
        do {
            $surveyid = getRandomID();
            $isquery = "SELECT sid FROM " . db_table_name('surveys') . " WHERE sid={$surveyid}";
            $isresult = db_execute_assoc($isquery);
            // Checked
        } while ($isresult->RecordCount() > 0);
        if (!isset($_POST['template'])) {
            $_POST['template'] = 'default';
        }
        if ($_SESSION['USER_RIGHT_SUPERADMIN'] != 1 && $_SESSION['USER_RIGHT_MANAGE_TEMPLATE'] != 1 && !hasTemplateManageRights($_SESSION['loginID'], $_POST['template'])) {
            $_POST['template'] = "default";
        }
        // insert base language into surveys_language_settings
        if ($filterxsshtml) {
            require_once "../classes/inputfilter/class.inputfilter_clean.php";
            $myFilter = new InputFilter('', '', 1, 1, 1);
            $_POST['surveyls_title'] = $myFilter->process($_POST['surveyls_title']);
Example #4
0
/**
 * Run an arbitrary sequence of semicolon-delimited SQL commands
 *
 * Assumes that the input text (file or string) consists of
 * a number of SQL statements ENDING WITH SEMICOLONS.  The
 * semicolons MUST be the last character in a line.
 * Lines that are blank or that start with "#" or "--" (postgres) are ignored.
 * Only tested with mysql dump files (mysqldump -p -d limesurvey)
 * Function kindly borrowed by Moodle
 * @uses $dbprefix
 * @param string $sqlfile The path where a file with sql commands can be found on the server.
 * @param string $sqlstring If no path is supplied then a string with semicolon delimited sql
 * commands can be supplied in this argument.
 * @return bool Returns true if database was modified successfully.
 */
function modify_database($sqlfile = '', $sqlstring = '')
{
    global $dbprefix;
    global $defaultuser;
    global $defaultpass;
    global $siteadminemail;
    global $siteadminname;
    global $defaultlang;
    global $codeString;
    global $rootdir, $homedir;
    global $connect;
    global $clang;
    global $modifyoutput;
    global $databasetabletype;
    require_once $homedir . "/classes/core/sha256.php";
    $success = true;
    // Let's be optimistic
    $modifyoutput = '';
    if (!empty($sqlfile)) {
        if (!is_readable($sqlfile)) {
            $success = false;
            echo '<p>Tried to modify database, but "' . $sqlfile . '" doesn\'t exist!</p>';
            return $success;
        } else {
            $lines = file($sqlfile);
        }
    } else {
        $sqlstring = trim($sqlstring);
        if ($sqlstring[strlen($sqlstring) - 1] != ";") {
            $sqlstring .= ";";
            // add it in if it's not there.
        }
        $lines[] = $sqlstring;
    }
    $command = '';
    foreach ($lines as $line) {
        $line = rtrim($line);
        $length = strlen($line);
        if ($length and $line[0] != '#' and substr($line, 0, 2) != '--') {
            if (substr($line, $length - 1, 1) == ';') {
                $line = substr($line, 0, $length - 1);
                // strip ;
                $command .= $line;
                $command = str_replace('prefix_', $dbprefix, $command);
                // Table prefixes
                $command = str_replace('$defaultuser', $defaultuser, $command);
                $command = str_replace('$defaultpass', SHA256::hashing($defaultpass), $command);
                $command = str_replace('$siteadminname', $siteadminname, $command);
                $command = str_replace('$siteadminemail', $siteadminemail, $command);
                $command = str_replace('$defaultlang', $defaultlang, $command);
                $command = str_replace('$sessionname', 'ls' . getRandomID() . getRandomID() . getRandomID() . getRandomID(), $command);
                $command = str_replace('$databasetabletype', $databasetabletype, $command);
                if (!db_execute_num($command)) {
                    //Checked
                    $command = htmlspecialchars($command);
                    $modifyoutput .= "<br />" . $clang->gT("Executing") . "....." . $command . "<font color='#FF0000'>..." . $clang->gT("Failed! Reason: ") . $connect->ErrorMsg() . "</font>";
                    $success = false;
                } else {
                    $command = htmlspecialchars($command);
                    $modifyoutput .= ". ";
                }
                $command = '';
            } else {
                $command .= $line;
            }
        }
    }
    return $success;
}
Example #5
0
/** 
 * Taken from admin/database.php in the LimeSurvey package
 * With modifications
 *
 * @param string $title Questionnaire name
 * @param bool $exittoend Whether to exit to the project end, or to the start of the questionnaire
 * @link http://www.limesurvey.org/ LimeSurvey
 */
function create_limesurvey_questionnaire($title, $exittoend = true)
{
    global $db;
    // Get random ids until one is found that is not used
    do {
        $surveyid = getRandomID();
        $isquery = "SELECT sid FROM " . db_table_name('surveys') . " WHERE sid={$surveyid}";
        $isresult = $db->Execute($isquery);
    } while (!empty($isresult) && $isresult->RecordCount() > 0);
    $isquery = "INSERT INTO " . LIME_PREFIX . "surveys\n" . "(sid, owner_id, admin, active, expires, " . "adminemail, private, faxto, format, template, " . "language, datestamp, ipaddr, refurl, usecookie, notification, allowregister, " . "allowsave, autoredirect, allowprev,datecreated,tokenanswerspersistence)\n" . "VALUES ({$surveyid}, 1,\n" . "'', 'N', \n" . "NULL, '', 'N',\n" . "'', 'S', 'quexs',\n" . "'" . DEFAULT_LOCALE . "', 'Y', 'N', 'N',\n" . "'N', '0', 'Y',\n" . "'Y', 'Y', 'Y','" . date("Y-m-d") . "','Y')";
    $isresult = $db->Execute($isquery) or die($isquery . "<br/>" . $db->ErrorMsg());
    // insert base language into surveys_language_settings
    $isquery = "INSERT INTO " . db_table_name('surveys_languagesettings') . "(surveyls_survey_id, surveyls_language, surveyls_title, surveyls_description, surveyls_welcometext, surveyls_urldescription, " . "surveyls_email_invite_subj, surveyls_email_invite, surveyls_email_remind_subj, surveyls_email_remind, " . "surveyls_email_register_subj, surveyls_email_register, surveyls_email_confirm_subj, surveyls_email_confirm,surveyls_url)\n" . "VALUES ({$surveyid}, '" . DEFAULT_LOCALE . "', {$title}, {$title},\n" . "'',\n" . "'', '',\n" . "'', '',\n" . "'', '',\n" . "'', '',\n" . "'', '";
    if ($exittoend) {
        $isquery .= "{ENDINTERVIEWURL}')";
    } else {
        $isquery .= "{STARTINTERVIEWURL}')";
    }
    $isresult = $db->Execute($isquery) or die($isquery . "<br/>" . $db->ErrorMsg());
    // Insert into survey_rights
    $isrquery = "INSERT INTO " . LIME_PREFIX . "surveys_rights VALUES({$surveyid},1,1,1,1,1,1,1)";
    $isrresult = $db->Execute($isrquery) or die($isrquery . "<br />" . $db->ErrorMsg());
    return $surveyid;
}
Example #6
0
/**
* This function returns a new random sid if the existing one is taken,
* otherwise it returns the old one.
* 
* @param mixed $oldsid
*/
function GetNewSurveyID($oldsid)
{
    global $connect, $dbprefix;
    $isresult = $connect->GetOne("SELECT sid FROM {$dbprefix}surveys WHERE sid={$oldsid}");
    if (!is_null($isresult)) {
        // Get new random ids until one is found that is not used
        do {
            $newsid = getRandomID();
            $isresult = $connect->GetOne("SELECT sid FROM {$dbprefix}surveys WHERE sid={$newsid}");
        } while (!is_null($isresult));
        return $newsid;
    } else {
        return $oldsid;
    }
}
Example #7
0
function insertRecord($db, $modelName, $record, $roles)
{
    global $config;
    $request = createRequest($modelName);
    $request["records"][] = array("values" => array());
    if (!checkRequest($db, $request, $record, "insert", $roles)) {
        return;
    }
    fillRequestWithRecords($request, $record);
    $insertedIDs = insertRows($db, $request, $roles);
    //insertRowsDynamoDB($request, $roles, $insertedIDs);
    $insertID = $insertedIDs[0];
    if ($modelName == "school") {
        $querySchoolUser = "******";
        $stmt = $db->prepare($querySchoolUser);
        $stmt->execute(array("ID" => getRandomID(), "insertID" => $insertID, "userID" => $record["userID"]));
    }
    if ($modelName === "user" && $config->email->bSendMailForReal) {
        sendValidationEmails($record);
    }
    echo json_encode(array("success" => true, "recordID" => $insertID));
}