コード例 #1
0
//CHECK IF SURVEY IS ACTIVATED AND EXISTS
$actquery = "SELECT * FROM " . db_table_name('surveys') . " as a inner join " . db_table_name('surveys_languagesettings') . " as b on (b.surveyls_survey_id=a.sid and b.surveyls_language=a.language) WHERE a.sid={$surveyid}";
$actresult = db_execute_assoc($actquery);
$actcount = $actresult->RecordCount();
if ($actcount > 0) {
    while ($actrow = $actresult->FetchRow()) {
        $surveytable = db_table_name("survey_" . $actrow['sid']);
        $surveytimingstable = db_table_name("survey_" . $actrow['sid'] . "_timings");
        $tokentable = $dbprefix . "tokens_" . $actrow['sid'];
        /*
         * DO NEVER EVER PUT VARIABLES AND FUNCTIONS WHICH GIVE BACK DIFFERENT QUOTES
         * IN DOUBLE QUOTED(' and " and \" is used) JAVASCRIPT/HTML CODE!!! (except for: you know what you are doing)
         *
         * Used for deleting a record, fix quote bugs..
         */
        $surveytableNq = db_table_name_nq("survey_" . $surveyid);
        $surveyname = "{$actrow['surveyls_title']}";
        if ($actrow['active'] == "N") {
            $browseoutput = "\t<div class='messagebox ui-corner-all'><div class='header ui-widget-header'>" . $clang->gT("Browse Responses") . "</div><div class='warningheader'>" . $clang->gT("Error") . "\t</div>\n" . $clang->gT("This survey has not been activated. There are no results to browse.") . "<br />\n" . "<input type='submit' value='" . $clang->gT("Main Admin Screen") . "' onclick=\"window.open('{$scriptname}?sid={$surveyid}', '_top')\" /><br />\n" . "</div>";
            return;
        }
    }
} else {
    $browseoutput = "\t<div class='messagebox ui-corner-all'><div class='header ui-widget-header'>" . $clang->gT("Browse Responses") . "</div><div class='warningheader'>" . $clang->gT("Error") . "\t</div>\n" . $clang->gT("There is no matching survey.") . "<br />\n" . "<input type='submit' value='" . $clang->gT("Main Admin Screen") . "' onclick=\"window.open('{$scriptname}', '_top')\" /><br />\n" . "</div>";
    return;
}
//OK. IF WE GOT THIS FAR, THEN THE SURVEY EXISTS AND IT IS ACTIVE, SO LETS GET TO WORK.
$surveyinfo = getSurveyInfo($surveyid);
require_once dirname(__FILE__) . '/sessioncontrol.php';
// Set language for questions and labels to base language of this survey
if (isset($browselang) && $browselang != '') {
コード例 #2
0
     $qquery = "SELECT sid FROM {$dbprefix}surveys WHERE sid='{$iSurveyID}'";
     $qresult = $connect->Execute($qquery) or safe_die("Couldn't check survey table for sid<br />{$qquery}<br />" . $connect->ErrorMsg());
     $qcount = $qresult->RecordCount();
     if ($qcount == 0) {
         $date = date('YmdHis') . rand(1, 1000);
         $sOldTable = "tokens_{$iSurveyID}";
         $sNewTable = "old_tokens_{$iSurveyID}_{$date}";
         $deactivatequery = db_rename_table(db_table_name_nq($sOldTable), db_table_name_nq($sNewTable));
         if ($databasetype == 'postgres') {
             // If you deactivate a postgres table you have to rename the according sequence too and alter the id field to point to the changed sequence
             $sOldTableJur = db_table_name_nq($sOldTable);
             $deactivatequery = db_rename_table(db_table_name_nq($sOldTable), db_table_name_nq($sNewTable) . '_tid_seq');
             $deactivateresult = $connect->Execute($deactivatequery) or die("oldtable : " . $sOldTable . " / oldtableJur : " . $sOldTableJur . " / " . htmlspecialchars($deactivatequery) . " / Could not rename the old sequence for this token table. The database reported the following error:<br />" . htmlspecialchars($connect->ErrorMsg()) . "<br /><br /><a href='{$scriptname}?sid={$_GET['sid']}'>" . $clang->gT("Main Admin Screen") . "</a>");
             $setsequence = "ALTER TABLE " . db_table_name_nq($sNewTable) . "_tid_seq ALTER COLUMN tid SET DEFAULT nextval('" . db_table_name_nq($sNewTable) . "_tid_seq'::regclass);";
             $deactivateresult = $connect->Execute($setsequence) or die(htmlspecialchars($setsequence) . " Could not alter the field tid to point to the new sequence name for this token table. The database reported the following error:<br />" . htmlspecialchars($connect->ErrorMsg()) . "<br /><br />Survey was not deactivated either.<br /><br /><a href='{$scriptname}?sid={$_GET['sid']}'>" . $clang->gT("Main Admin Screen") . "</a>");
             $setidx = "ALTER INDEX " . db_table_name_nq($sOldTable) . "_idx RENAME TO " . db_table_name_nq($sNewTable) . "_idx;";
             $deactivateresult = $connect->Execute($setidx) or die(htmlspecialchars($setidx) . " Could not alter the index for this token table. The database reported the following error:<br />" . htmlspecialchars($connect->ErrorMsg()) . "<br /><br />Survey was not deactivated either.<br /><br /><a href='{$scriptname}?sid={$_GET['sid']}'>" . $clang->gT("Main Admin Screen") . "</a>");
         } else {
             $deactivateresult = $connect->Execute($deactivatequery) or die("Couldn't deactivate because:<br />\n" . htmlspecialchars($connect->ErrorMsg()) . " - Query: " . htmlspecialchars($deactivatequery) . " <br /><br />\n<a href='{$scriptname}?sid={$surveyid}'>Admin</a>\n");
         }
     }
 }
 /**********************************************************************/
 /*     CHECK CONDITIONS                                               */
 /**********************************************************************/
 $query = "SELECT * FROM {$dbprefix}conditions ORDER BY cid";
 $result = db_execute_assoc($query) or safe_die("Couldn't get list of conditions from database<br />{$query}<br />" . $connect->ErrorMsg());
 while ($row = $result->FetchRow()) {
     $qquery = "SELECT qid FROM {$dbprefix}questions WHERE qid='{$row['qid']}'";
     $qresult = $connect->Execute($qquery) or safe_die("Couldn't check questions table for qids<br />{$qquery}<br />" . $connect->ErrorMsg());
     $qcount = $qresult->RecordCount();
コード例 #3
0
ファイル: database.php プロジェクト: ddrmoscow/queXS
 $isquery = $connect->GetInsertSQL($dbtablename, $insertarray);
 $isresult = $connect->Execute($isquery) or safe_die($isquery . "<br />" . $connect->ErrorMsg());
 // Checked
 // Fix bug with FCKEditor saving strange BR types
 $_POST['surveyls_title'] = fix_FCKeditor_text($_POST['surveyls_title']);
 $_POST['description'] = fix_FCKeditor_text($_POST['description']);
 $_POST['welcome'] = fix_FCKeditor_text($_POST['welcome']);
 $bplang = new limesurvey_lang($_POST['language']);
 $aDefaultTexts = aTemplateDefaultTexts($bplang, 'unescaped');
 $is_html_email = false;
 if (isset($_POST['htmlemail']) && $_POST['htmlemail'] == "Y") {
     $is_html_email = true;
     $aDefaultTexts['admin_detailed_notification'] = $aDefaultTexts['admin_detailed_notification_css'] . conditional_nl2br($aDefaultTexts['admin_detailed_notification'], $is_html_email, 'unescaped');
 }
 $insertarray = array('surveyls_survey_id' => $surveyid, 'surveyls_language' => $_POST['language'], 'surveyls_title' => $_POST['surveyls_title'], 'surveyls_description' => $_POST['description'], 'surveyls_welcometext' => $_POST['welcome'], 'surveyls_urldescription' => $_POST['urldescrip'], 'surveyls_endtext' => $_POST['endtext'], 'surveyls_url' => $_POST['url'], 'surveyls_email_invite_subj' => $aDefaultTexts['invitation_subject'], 'surveyls_email_invite' => conditional_nl2br($aDefaultTexts['invitation'], $is_html_email, 'unescaped'), 'surveyls_email_remind_subj' => $aDefaultTexts['reminder_subject'], 'surveyls_email_remind' => conditional_nl2br($aDefaultTexts['reminder'], $is_html_email, 'unescaped'), 'surveyls_email_confirm_subj' => $aDefaultTexts['confirmation_subject'], 'surveyls_email_confirm' => conditional_nl2br($aDefaultTexts['confirmation'], $is_html_email, 'unescaped'), 'surveyls_email_register_subj' => $aDefaultTexts['registration_subject'], 'surveyls_email_register' => conditional_nl2br($aDefaultTexts['registration'], $is_html_email, 'unescaped'), 'email_admin_notification_subj' => $aDefaultTexts['admin_notification_subject'], 'email_admin_notification' => conditional_nl2br($aDefaultTexts['admin_notification'], $is_html_email, 'unescaped'), 'email_admin_responses_subj' => $aDefaultTexts['admin_detailed_notification_subject'], 'email_admin_responses' => $aDefaultTexts['admin_detailed_notification'], 'surveyls_dateformat' => $_POST['dateformat'], 'surveyls_numberformat' => $numberformatid);
 $dbtablename = db_table_name_nq('surveys_languagesettings');
 $isquery = $connect->GetInsertSQL($dbtablename, $insertarray);
 $isresult = $connect->Execute($isquery) or safe_die($isquery . "<br />" . $connect->ErrorMsg());
 // Checked
 unset($bplang);
 $_SESSION['flashmessage'] = $clang->gT("Survey was successfully added.");
 // Update survey permissions
 GiveAllSurveyPermissions($_SESSION['loginID'], $surveyid);
 LimeExpressionManager::SetSurveyId($surveyid);
 $surveyselect = getsurveylist();
 // Create initial Survey table
 //include("surveytable_functions.php");
 //$creationResult = surveyCreateTable($surveyid);
 // Survey table could not be created
 //if ($creationResult !== true)
 //{
コード例 #4
0
ファイル: quota.php プロジェクト: ddrmoscow/queXS
 }
 if (!isset($subaction)) {
     $subaction = returnglobal('subaction');
 }
 if (!isset($quotasoutput)) {
     $quotasoutput = "";
 }
 //if (!isset($_POST['autoload_url']) || empty($_POST['autoload_url'])) {$_POST['autoload_url']=0;} //queXS Removal
 if ($subaction == "insertquota" && bHasSurveyPermission($surveyid, 'quotas', 'create')) {
     if (!isset($_POST['quota_limit']) || $_POST['quota_limit'] < 0 || empty($_POST['quota_limit']) || !is_numeric($_POST['quota_limit'])) {
         $_POST['quota_limit'] = 0;
     }
     array_walk($_POST, 'db_quote', true);
     $query = "INSERT INTO " . db_table_name('quota') . " (sid,name,qlimit,action,autoload_url)\n            VALUES ('{$surveyid}','{$_POST['quota_name']}','{$_POST['quota_limit']}','1', '1')";
     $connect->Execute($query) or safe_die("Error inserting limit" . $connect->ErrorMsg());
     $quotaid = $connect->Insert_Id(db_table_name_nq('quota'), "id");
     //Get the languages used in this survey
     $langs = GetAdditionalLanguagesFromSurveyID($surveyid);
     $baselang = GetBaseLanguageFromSurveyID($surveyid);
     array_push($langs, $baselang);
     //Iterate through each language, and make sure there is a quota message for it
     $errorstring = '';
     foreach ($langs as $lang) {
         if (!$_POST['quotals_message_' . $lang]) {
             $errorstring .= GetLanguageNameFromCode($lang, false) . "\\n";
         }
     }
     if ($errorstring != '') {
         $databaseoutput .= "<script type=\"text/javascript\">\n<!--\n alert(\"" . $clang->gT("Quota could not be added.\\n\\nIt is missing a quota message for the following languages", "js") . ":\\n" . $errorstring . "\")\n //-->\n</script>\n";
     } else {
         require_once "../classes/inputfilter/class.inputfilter_clean.php";
コード例 #5
0
 // Only import fields not being in the $dontimportfields array
 $aValidFields = array_diff($aValidFields, $dontimportfields);
 $queryOldValues = "SELECT " . implode(", ", array_map("db_quote_id", $aValidFields)) . " FROM {$oldtable} ";
 $resultOldValues = db_execute_assoc($queryOldValues) or safe_die("Error:<br />{$queryOldValues}<br />" . $connect->ErrorMsg());
 $iRecordCount = $resultOldValues->RecordCount();
 $aSRIDConversions = array();
 while ($row = $resultOldValues->FetchRow()) {
     $iOldID = $row['id'];
     unset($row['id']);
     $sInsertSQL = "INSERT into {$activetable} (" . implode(",", array_map("db_quote_id", array_keys($row))) . ") VALUES (" . implode(",", array_map("db_quoteall", array_values($row))) . ")";
     $result = $connect->Execute($sInsertSQL) or safe_die("Error:<br />{$sInsertSQL}<br />" . $connect->ErrorMsg());
     $aSRIDConversions[$iOldID] = $connect->Insert_Id($activetable, "id");
 }
 $_SESSION['flashmessage'] = sprintf($clang->gT("%s old response(s) were successfully imported."), $iRecordCount);
 $sOldTimingsTable = substr($oldtable, 0, strrpos($oldtable, '_')) . '_timings' . substr($oldtable, strrpos($oldtable, '_'));
 $sNewTimingsTable = db_table_name_nq("survey_{$surveyid}_timings");
 if (tableExists(sStripDBPrefix($sOldTimingsTable)) && tableExists(sStripDBPrefix($sNewTimingsTable)) && returnglobal('importtimings') == 'Y') {
     // Import timings
     $aFieldsOldTimingTable = array_values($connect->MetaColumnNames($sOldTimingsTable, true));
     $aFieldsNewTimingTable = array_values($connect->MetaColumnNames($sNewTimingsTable, true));
     $aValidTimingFields = array_intersect($aFieldsOldTimingTable, $aFieldsNewTimingTable);
     $queryOldValues = "SELECT " . implode(", ", $aValidTimingFields) . " FROM {$sOldTimingsTable} ";
     $resultOldValues = db_execute_assoc($queryOldValues) or safe_die("Error:<br />{$queryOldValues}<br />" . $connect->ErrorMsg());
     $iRecordCountT = $resultOldValues->RecordCount();
     $aSRIDConversions = array();
     while ($row = $resultOldValues->FetchRow()) {
         if (isset($aSRIDConversions[$row['id']])) {
             $row['id'] = $aSRIDConversions[$row['id']];
         }
         $sInsertSQL = "INSERT into {$sNewTimingsTable} (" . implode(",", array_map("db_quote_id", array_keys($row))) . ") VALUES (" . implode(",", array_map("db_quoteall", array_values($row))) . ")";
         $result = $connect->Execute($sInsertSQL) or safe_die("Error:<br />{$sInsertSQL}<br />" . $connect->ErrorMsg());
コード例 #6
0
/**
 * get_quotaCompletedCount() returns the number of answers matching the quota
 * @param string $surveyid - Survey identification number
 * @param string $quotaid - quota id for which you want to compute the completed field
 * @return string - number of mathing entries in the result DB or 'N/A'
 */
function get_quotaCompletedCount($surveyid, $quotaid)
{
    $result = "N/A";
    $quota_info = getQuotaInformation($surveyid, GetBaseLanguageFromSurveyID($surveyid), $quotaid);
    $quota = $quota_info[0];
    if (db_tables_exist(db_table_name_nq('survey_' . $surveyid)) && count($quota['members']) > 0) {
        $fields_list = array();
        // Keep a list of fields for easy reference
        unset($querycond);
        foreach ($quota['members'] as $member) {
            $fields_query = array();
            $select_query = " (";
            foreach ($member['fieldnames'] as $fieldname) {
                $fields_list[] = $fieldname;
                $fields_query[] = db_quote_id($fieldname) . " = '{$member['value']}'";
                // Incase of multiple fields for an answer - only needs to match once.
                $select_query .= implode(' OR ', $fields_query) . ' )';
                $querycond[] = $select_query;
                unset($fields_query);
            }
        }
        //FOR MYSQL?
        $querysel = "SELECT count(id) as count FROM " . db_table_name('survey_' . $surveyid) . " WHERE " . implode(' AND ', $querycond) . " " . " AND submitdate !=''";
        //FOR POSTGRES?
        $querysel = "SELECT count(id) as count FROM " . db_table_name('survey_' . $surveyid) . " WHERE " . implode(' AND ', $querycond) . " " . " AND submitdate IS NOT NULL";
        $result = db_execute_assoc($querysel) or safe_die($connect->ErrorMsg());
        //Checked
        $quota_check = $result->FetchRow();
        $result = $quota_check['count'];
    }
    return $result;
}
コード例 #7
0
ファイル: upgrade-all.php プロジェクト: himanshu12k/ce-www
function upgrade_surveypermissions_table145()
{
    global $modifyoutput, $connect;
    $sPermissionQuery = "SELECT * FROM " . db_table_name('surveys_rights');
    $oPermissionResult = db_execute_assoc($sPermissionQuery);
    if (!$oPermissionResult) {
        return "Database Error";
    } else {
        $tablename = db_table_name_nq('survey_permissions');
        while ($aPermissionRow = $oPermissionResult->FetchRow()) {
            $sPermissionInsertQuery = $connect->GetInsertSQL($tablename, array('permission' => 'assessments', 'create_p' => $aPermissionRow['define_questions'], 'read_p' => $aPermissionRow['define_questions'], 'update_p' => $aPermissionRow['define_questions'], 'delete_p' => $aPermissionRow['define_questions'], 'sid' => $aPermissionRow['sid'], 'uid' => $aPermissionRow['uid']));
            modify_database("", $sPermissionInsertQuery);
            echo $modifyoutput;
            flush();
            ob_flush();
            $sPermissionInsertQuery = $connect->GetInsertSQL($tablename, array('permission' => 'quotas', 'create_p' => $aPermissionRow['define_questions'], 'read_p' => $aPermissionRow['define_questions'], 'update_p' => $aPermissionRow['define_questions'], 'delete_p' => $aPermissionRow['define_questions'], 'sid' => $aPermissionRow['sid'], 'uid' => $aPermissionRow['uid']));
            modify_database("", $sPermissionInsertQuery);
            echo $modifyoutput;
            flush();
            ob_flush();
            $sPermissionInsertQuery = $connect->GetInsertSQL($tablename, array('permission' => 'responses', 'create_p' => $aPermissionRow['browse_response'], 'read_p' => $aPermissionRow['browse_response'], 'update_p' => $aPermissionRow['browse_response'], 'delete_p' => $aPermissionRow['delete_survey'], 'export_p' => $aPermissionRow['export'], 'import_p' => $aPermissionRow['browse_response'], 'sid' => $aPermissionRow['sid'], 'uid' => $aPermissionRow['uid']));
            modify_database("", $sPermissionInsertQuery);
            echo $modifyoutput;
            flush();
            ob_flush();
            $sPermissionInsertQuery = $connect->GetInsertSQL($tablename, array('permission' => 'statistics', 'read_p' => $aPermissionRow['browse_response'], 'sid' => $aPermissionRow['sid'], 'uid' => $aPermissionRow['uid']));
            modify_database("", $sPermissionInsertQuery);
            echo $modifyoutput;
            flush();
            ob_flush();
            $sPermissionInsertQuery = $connect->GetInsertSQL($tablename, array('permission' => 'survey', 'read_p' => 1, 'delete_p' => $aPermissionRow['delete_survey'], 'sid' => $aPermissionRow['sid'], 'uid' => $aPermissionRow['uid']));
            modify_database("", $sPermissionInsertQuery);
            echo $modifyoutput;
            flush();
            ob_flush();
            $sPermissionInsertQuery = $connect->GetInsertSQL($tablename, array('permission' => 'surveyactivation', 'update_p' => $aPermissionRow['activate_survey'], 'sid' => $aPermissionRow['sid'], 'uid' => $aPermissionRow['uid']));
            modify_database("", $sPermissionInsertQuery);
            echo $modifyoutput;
            flush();
            ob_flush();
            $sPermissionInsertQuery = $connect->GetInsertSQL($tablename, array('permission' => 'surveycontent', 'create_p' => $aPermissionRow['define_questions'], 'read_p' => $aPermissionRow['define_questions'], 'update_p' => $aPermissionRow['define_questions'], 'delete_p' => $aPermissionRow['define_questions'], 'export_p' => $aPermissionRow['export'], 'import_p' => $aPermissionRow['define_questions'], 'sid' => $aPermissionRow['sid'], 'uid' => $aPermissionRow['uid']));
            modify_database("", $sPermissionInsertQuery);
            echo $modifyoutput;
            flush();
            ob_flush();
            $sPermissionInsertQuery = $connect->GetInsertSQL($tablename, array('permission' => 'surveylocale', 'read_p' => $aPermissionRow['edit_survey_property'], 'update_p' => $aPermissionRow['edit_survey_property'], 'sid' => $aPermissionRow['sid'], 'uid' => $aPermissionRow['uid']));
            modify_database("", $sPermissionInsertQuery);
            echo $modifyoutput;
            flush();
            ob_flush();
            $sPermissionInsertQuery = $connect->GetInsertSQL($tablename, array('permission' => 'surveysettings', 'read_p' => $aPermissionRow['edit_survey_property'], 'update_p' => $aPermissionRow['edit_survey_property'], 'sid' => $aPermissionRow['sid'], 'uid' => $aPermissionRow['uid']));
            modify_database("", $sPermissionInsertQuery);
            echo $modifyoutput;
            flush();
            ob_flush();
            $sPermissionInsertQuery = $connect->GetInsertSQL($tablename, array('permission' => 'tokens', 'create_p' => $aPermissionRow['activate_survey'], 'read_p' => $aPermissionRow['activate_survey'], 'update_p' => $aPermissionRow['activate_survey'], 'delete_p' => $aPermissionRow['activate_survey'], 'export_p' => $aPermissionRow['export'], 'import_p' => $aPermissionRow['activate_survey'], 'sid' => $aPermissionRow['sid'], 'uid' => $aPermissionRow['uid']));
            modify_database("", $sPermissionInsertQuery);
            echo $modifyoutput;
            flush();
            ob_flush();
        }
    }
}
コード例 #8
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;
 }
コード例 #9
0
/**
* This function imports a LimeSurvey .lss survey XML file
*
* @param mixed $sFullFilepath  The full filepath of the uploaded file
*/
function XMLImportSurvey($sFullFilepath,$sXMLdata=NULL,$sNewSurveyName=NULL,$iDesiredSurveyId=NULL, $bTranslateInsertansTags=true)
{
    global $connect, $dbprefix, $clang, $timeadjust;

    $results['error']=false;
    if ($sXMLdata == NULL)
    {
        $xml = simplexml_load_file($sFullFilepath);
    } else
    {
        $xml = simplexml_load_string($sXMLdata);
    }

    if ($xml->LimeSurveyDocType!='Survey')
    {
        $results['error'] = $clang->gT("This is not a valid LimeSurvey survey structure XML file.");
        return $results;
    }
    else
    {
        //$results['error'] = $clang->gT("This is VALID LimeSurvey survey structure XML file.");
        //echo $clang->gT("This is VALID LimeSurvey survey structure XML file.");
        //return $results;
    }
    $dbversion = (int) $xml->DBVersion;
    $aQIDReplacements=array();
    $aQuotaReplacements=array();
    $results['defaultvalues']=0;
    $results['answers']=0;
    $results['surveys']=0;
    $results['questions']=0;
    $results['subquestions']=0;
    $results['question_attributes']=0;
    $results['groups']=0;
    $results['assessments']=0;
    $results['quota']=0;
    $results['quotals']=0;
    $results['quotamembers']=0;
    $results['importwarnings']=array();


    $aLanguagesSupported=array();
    foreach ($xml->languages->language as $language)
    {
        $aLanguagesSupported[]=(string)$language;
    }
    $results['languages']=count($aLanguagesSupported);


    // First get an overview of fieldnames - it's not useful for the moment but might be with newer versions
    /*
    $fieldnames=array();
    foreach ($xml->questions->fields->fieldname as $fieldname )
    {
        $fieldnames[]=(string)$fieldname;
    };*/


    // Import surveys table ===================================================================================

    $tablename=$dbprefix.'surveys';
    foreach ($xml->surveys->rows->row as $row)
    {
        $insertdata=array();
        foreach ($row as $key=>$value)
        {
            $insertdata[(string)$key]=(string)$value;
        }
        $oldsid=$insertdata['sid'];
        if($iDesiredSurveyId!=NULL)
        {
            $newsid=GetNewSurveyID($iDesiredSurveyId);
        }
        else
        {
            $newsid=GetNewSurveyID($oldsid);
        }
        if ($dbversion<=143)
        {
            $insertdata['anonymized']=$insertdata['private'];
            unset($insertdata['private']);
            unset($insertdata['notification']);
        }
        $insertdata['startdate']=NULL;
        //Now insert the new SID and change some values
        $insertdata['sid']=$newsid;
        //Make sure it is not set active
        $insertdata['active']='N';
        //Set current user to be the owner
        $insertdata['owner_id']=$_SESSION['loginID'];
        //Change creation date to import date
        $insertdata['datecreated']=$connect->BindTimeStamp(date_shift(date("Y-m-d H:i:s"), "Y-m-d", $timeadjust));

        db_switchIDInsert('surveys',true);
        $query=$connect->GetInsertSQL($tablename,$insertdata);
        $result = $connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />{$query}<br />\n".$connect->ErrorMsg());
        $results['surveys']++;
        db_switchIDInsert('surveys',false);
    }
    $results['newsid']=$newsid;

    // Import survey languagesettings table ===================================================================================

    $tablename=$dbprefix.'surveys_languagesettings';
    foreach ($xml->surveys_languagesettings->rows->row as $row)
    {
        $insertdata=array();
        foreach ($row as $key=>$value)
        {
            $insertdata[(string)$key]=(string)$value;
        }
        $insertdata['surveyls_survey_id']=$newsid;
        if ($sNewSurveyName == NULL)
        {
            $insertdata['surveyls_title']=translink('survey', $oldsid, $newsid, $insertdata['surveyls_title']);
        } else {
            $insertdata['surveyls_title']=translink('survey', $oldsid, $newsid, $sNewSurveyName);
        }

        $insertdata['surveyls_description']=translink('survey', $oldsid, $newsid, $insertdata['surveyls_description']);
        $insertdata['surveyls_welcometext']=translink('survey', $oldsid, $newsid, $insertdata['surveyls_welcometext']);
        $insertdata['surveyls_urldescription']=translink('survey', $oldsid, $newsid, $insertdata['surveyls_urldescription']);
        $insertdata['surveyls_email_invite']=translink('survey', $oldsid, $newsid, $insertdata['surveyls_email_invite']);
        $insertdata['surveyls_email_remind']=translink('survey', $oldsid, $newsid, $insertdata['surveyls_email_remind']);
        $insertdata['surveyls_email_register']=translink('survey', $oldsid, $newsid, $insertdata['surveyls_email_register']);
        $insertdata['surveyls_email_confirm']=translink('survey', $oldsid, $newsid, $insertdata['surveyls_email_confirm']);

        $query=$connect->GetInsertSQL($tablename,$insertdata);
        $result = $connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />{$query}<br />\n".$connect->ErrorMsg());
    }


    // Import groups table ===================================================================================

    $tablename=$dbprefix.'groups';
    foreach ($xml->groups->rows->row as $row)
    {
       $insertdata=array();
        foreach ($row as $key=>$value)
        {
            $insertdata[(string)$key]=(string)$value;
        }
        $oldsid=$insertdata['sid'];
        $insertdata['sid']=$newsid;
        $oldgid=$insertdata['gid']; unset($insertdata['gid']); // save the old qid

        // now translate any links
        $insertdata['group_name']=translink('survey', $oldsid, $newsid, $insertdata['group_name']);
        $insertdata['description']=translink('survey', $oldsid, $newsid, $insertdata['description']);
        // Insert the new group
        if (isset($aGIDReplacements[$oldgid]))
        {
           db_switchIDInsert('groups',true);
           $insertdata['gid']=$aGIDReplacements[$oldgid];
        }
        $query=$connect->GetInsertSQL($tablename,$insertdata);
        $result = $connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />{$query}<br />\n".$connect->ErrorMsg());
        $results['groups']++;

        if (!isset($aGIDReplacements[$oldgid]))
        {
            $newgid=$connect->Insert_ID($tablename,"gid"); // save this for later
            $aGIDReplacements[$oldgid]=$newgid; // add old and new qid to the mapping array
        }
        else
        {
           db_switchIDInsert('groups',false);
        }
    }


    // Import questions table ===================================================================================

    // We have to run the question table data two times - first to find all main questions
    // then for subquestions (because we need to determine the new qids for the main questions first)
    if(isset($xml->questions))  // there could be surveys without a any questions
    {
        $tablename=$dbprefix.'questions';
        foreach ($xml->questions->rows->row as $row)
        {
           $insertdata=array();
            foreach ($row as $key=>$value)
            {
                $insertdata[(string)$key]=(string)$value;
            }
            $oldsid=$insertdata['sid'];
            $insertdata['sid']=$newsid;
            $insertdata['gid']=$aGIDReplacements[$insertdata['gid']];
            $oldqid=$insertdata['qid']; unset($insertdata['qid']); // save the old qid

            // now translate any links
            $insertdata['title']=translink('survey', $oldsid, $newsid, $insertdata['title']);
            $insertdata['question']=translink('survey', $oldsid, $newsid, $insertdata['question']);
            $insertdata['help']=translink('survey', $oldsid, $newsid, $insertdata['help']);
            // Insert the new question
            if (isset($aQIDReplacements[$oldqid]))
            {
               $insertdata['qid']=$aQIDReplacements[$oldqid];
               db_switchIDInsert('questions',true);

            }
            $query=$connect->GetInsertSQL($tablename,$insertdata);
            $result = $connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />{$query}<br />\n".$connect->ErrorMsg());
            if (!isset($aQIDReplacements[$oldqid]))
            {
                $newqid=$connect->Insert_ID($tablename,"qid"); // save this for later
                $aQIDReplacements[$oldqid]=$newqid; // add old and new qid to the mapping array
                $results['questions']++;
            }
            else
            {
               db_switchIDInsert('questions',false);
            }
        }
    }

    // Import subquestions --------------------------------------------------------------
    if(isset($xml->subquestions))
    {
        $tablename=$dbprefix.'questions';

        foreach ($xml->subquestions->rows->row as $row)
        {
            $insertdata=array();
            foreach ($row as $key=>$value)
            {
                $insertdata[(string)$key]=(string)$value;
            }
            $insertdata['sid']=$newsid;
            $insertdata['gid']=$aGIDReplacements[(int)$insertdata['gid']];;
            $oldsqid=(int)$insertdata['qid']; unset($insertdata['qid']); // save the old qid
            $insertdata['parent_qid']=$aQIDReplacements[(int)$insertdata['parent_qid']]; // remap the parent_qid

            // now translate any links
            $insertdata['title']=translink('survey', $oldsid, $newsid, $insertdata['title']);
            $insertdata['question']=translink('survey', $oldsid, $newsid, $insertdata['question']);
            $insertdata['help']=translink('survey', $oldsid, $newsid, $insertdata['help']);
            if (isset($aQIDReplacements[$oldsqid])){
               $insertdata['qid']=$aQIDReplacements[$oldsqid];
               db_switchIDInsert('questions',true);
            }

            $query=$connect->GetInsertSQL($tablename,$insertdata);
            $result = $connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />{$query}<br />\n".$connect->ErrorMsg());
            $newsqid=$connect->Insert_ID($tablename,"qid"); // save this for later
            if (!isset($insertdata['qid']))
            {
                $aQIDReplacements[$oldsqid]=$newsqid; // add old and new qid to the mapping array
            }
            else
            {
               db_switchIDInsert('questions',false);
            }
            $results['subquestions']++;
        }
    }

    // Import answers --------------------------------------------------------------
    if(isset($xml->answers))
    {
        $tablename=$dbprefix.'answers';

        foreach ($xml->answers->rows->row as $row)
        {
           $insertdata=array();
            foreach ($row as $key=>$value)
            {
                $insertdata[(string)$key]=(string)$value;
            }
            $insertdata['qid']=$aQIDReplacements[(int)$insertdata['qid']]; // remap the parent_qid

            // now translate any links
            $insertdata['answer']=translink('survey', $oldsid, $newsid, $insertdata['answer']);
            $query=$connect->GetInsertSQL($tablename,$insertdata);
            $result=$connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />{$query}<br />\n".$connect->ErrorMsg());
            $results['answers']++;
        }
    }

    // Import questionattributes --------------------------------------------------------------
    if(isset($xml->question_attributes))
    {
        $tablename=$dbprefix.'question_attributes';

        foreach ($xml->question_attributes->rows->row as $row)
        {
            $insertdata=array();
            foreach ($row as $key=>$value)
            {
                $insertdata[(string)$key]=(string)$value;
            }
            unset($insertdata['qaid']);
            $insertdata['qid']=$aQIDReplacements[(integer)$insertdata['qid']]; // remap the parent_qid

            // now translate any links
            $query=$connect->GetInsertSQL($tablename,$insertdata);
            $result=$connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />{$query}<br />\n".$connect->ErrorMsg());
            $results['question_attributes']++;
        }
    }


    // Import defaultvalues --------------------------------------------------------------
    if(isset($xml->defaultvalues))
    {
        $tablename=$dbprefix.'defaultvalues';

        $results['defaultvalues']=0;
        foreach ($xml->defaultvalues->rows->row as $row)
        {
           $insertdata=array();
            foreach ($row as $key=>$value)
            {
                $insertdata[(string)$key]=(string)$value;
            }
            $insertdata['qid']=$aQIDReplacements[(int)$insertdata['qid']]; // remap the qid
            if (isset($aQIDReplacements[(int)$insertdata['sqid']])) $insertdata['sqid']=$aQIDReplacements[(int)$insertdata['sqid']]; // remap the subquestion id

            // now translate any links
            $query=$connect->GetInsertSQL($tablename,$insertdata);
            $result=$connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />\$query<br />\n".$connect->ErrorMsg());
            $results['defaultvalues']++;
        }
    }

    // Import conditions --------------------------------------------------------------
    if(isset($xml->conditions))
    {
        $tablename=$dbprefix.'conditions';

        $results['conditions']=0;
        foreach ($xml->conditions->rows->row as $row)
        {
            $insertdata=array();
            foreach ($row as $key=>$value)
            {
                $insertdata[(string)$key]=(string)$value;
            }
            // replace the qid for the new one (if there is no new qid in the $aQIDReplacements array it mean that this condition is orphan -> error, skip this record)
            if (isset($aQIDReplacements[$insertdata['qid']]))
            {
                $insertdata['qid']=$aQIDReplacements[$insertdata['qid']]; // remap the qid
            }
            else continue; // a problem with this answer record -> don't consider
            if ($insertdata['cqid'] != 0)
            {
                if (isset($aQIDReplacements[$insertdata['cqid']]))
                {
                    $insertdata['cqid']=$aQIDReplacements[$insertdata['cqid']]; // remap the qid
                }
                else continue; // a problem with this answer record -> don't consider

                list($oldcsid, $oldcgid, $oldqidanscode) = explode("X",$insertdata["cfieldname"],3);

                // replace the gid for the new one in the cfieldname(if there is no new gid in the $aGIDReplacements array it means that this condition is orphan -> error, skip this record)
                if (!isset($aGIDReplacements[$oldcgid]))
                    continue;
            }

            unset($insertdata["cid"]);

            // recreate the cfieldname with the new IDs
            if ($insertdata['cqid'] != 0)
            {
                if (preg_match("/^\+/",$oldcsid))
                {
                    $newcfieldname = '+'.$newsid . "X" . $aGIDReplacements[$oldcgid] . "X" . $insertdata["cqid"] .substr($oldqidanscode,strlen($oldqid));
                }
                else
                {
                    $newcfieldname = $newsid . "X" . $aGIDReplacements[$oldcgid] . "X" . $insertdata["cqid"] .substr($oldqidanscode,strlen($oldqid));
                }
            }
            else
            { // The cfieldname is a not a previous question cfield but a {XXXX} replacement field
                $newcfieldname = $insertdata["cfieldname"];
            }
            $insertdata["cfieldname"] = $newcfieldname;
            if (trim($insertdata["method"])=='')
            {
                $insertdata["method"]='==';
            }

            // now translate any links
            $query=$connect->GetInsertSQL($tablename,$insertdata);
            $result=$connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />\$query<br />\n".$connect->ErrorMsg());
            $results['conditions']++;
        }
    }

    // Import assessments --------------------------------------------------------------
    if(isset($xml->assessments))
    {
        $tablename=$dbprefix.'assessments';

        foreach ($xml->assessments->rows->row as $row)
        {
            $insertdata=array();
            foreach ($row as $key=>$value)
            {
                $insertdata[(string)$key]=(string)$value;
            }
            if  ($insertdata['gid']>0)
            {
                $insertdata['gid']=$aGIDReplacements[(int)$insertdata['gid']]; // remap the qid
            }

            $insertdata['sid']=$newsid; // remap the survey id

            // now translate any links
            $query=$connect->GetInsertSQL($tablename,$insertdata);
            $result=$connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />\$query<br />\n".$connect->ErrorMsg());
            $results['assessments']++;
        }
    }

    // Import quota --------------------------------------------------------------
    if(isset($xml->quota))
    {
        $tablename=$dbprefix.'quota';

        foreach ($xml->quota->rows->row as $row)
        {
            $insertdata=array();
            foreach ($row as $key=>$value)
            {
                $insertdata[(string)$key]=(string)$value;
            }
            $insertdata['sid']=$newsid; // remap the survey id
            $oldid=$insertdata['id'];
            unset($insertdata['id']);
            // now translate any links
            $query=$connect->GetInsertSQL($tablename,$insertdata);
            $result=$connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />\$query<br />\n".$connect->ErrorMsg());
            $aQuotaReplacements[$oldid] = $connect->Insert_ID(db_table_name_nq('quota'),"id");
            $results['quota']++;
        }
    }

    // Import quota_members --------------------------------------------------------------
    if(isset($xml->quota_members))
    {
        $tablename=$dbprefix.'quota_members';

        foreach ($xml->quota_members->rows->row as $row)
        {
            $insertdata=array();
            foreach ($row as $key=>$value)
            {
                $insertdata[(string)$key]=(string)$value;
            }
            $insertdata['sid']=$newsid; // remap the survey id
            $insertdata['qid']=$aQIDReplacements[(int)$insertdata['qid']]; // remap the qid
            $insertdata['quota_id']=$aQuotaReplacements[(int)$insertdata['quota_id']]; // remap the qid
            unset($insertdata['id']);
            // now translate any links
            $query=$connect->GetInsertSQL($tablename,$insertdata);
            $result=$connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />\$query<br />\n".$connect->ErrorMsg());
            $results['quotamembers']++;
        }
    }

    // Import quota_languagesettings --------------------------------------------------------------
    if(isset($xml->quota_languagesettings))
    {
        $tablename=$dbprefix.'quota_languagesettings';

        foreach ($xml->quota_languagesettings->rows->row as $row)
        {
            $insertdata=array();
            foreach ($row as $key=>$value)
            {
                $insertdata[(string)$key]=(string)$value;
            }
            $insertdata['quotals_quota_id']=$aQuotaReplacements[(int)$insertdata['quotals_quota_id']]; // remap the qid
            unset($insertdata['quotals_id']);
            // now translate any links
            $query=$connect->GetInsertSQL($tablename,$insertdata);
            $result=$connect->Execute($query) or safe_die ($clang->gT("Error").": Failed to insert data<br />\$query<br />\n".$connect->ErrorMsg());
            $results['quotals']++;
        }
    }

    // Set survey rights
    GiveAllSurveyPermissions($_SESSION['loginID'],$newsid);
    if ($bTranslateInsertansTags)
    {
        $aOldNewFieldmap=aReverseTranslateFieldnames($oldsid,$newsid,$aGIDReplacements,$aQIDReplacements);
        TranslateInsertansTags($newsid,$oldsid,$aOldNewFieldmap);
    }

    return $results;
}
コード例 #10
0
function addUserGroupInDB($group_name, $group_description) {
    global $connect;
    $iquery = "INSERT INTO ".db_table_name('user_groups')." (name, description, owner_id) VALUES('{$group_name}', '{$group_description}', '{$_SESSION['loginID']}')";
    if($connect->Execute($iquery)) { //Checked
        $id = $connect->Insert_Id(db_table_name_nq('user_groups'),'ugid');
        if($id > 0) {
            $iquery = "INSERT INTO ".db_table_name('user_in_groups')." VALUES($id, '{$_SESSION['loginID']}')";
            $connect->Execute($iquery ) or safe_die($connect->ErrorMsg()); //Checked
        }
        return $id;
    } else {
        return -1;
    }
}
コード例 #11
0
/**
 * get_quotaCompletedCount() returns the number of answers matching the quota
 * @param string $surveyid - Survey identification number
 * @param string $quotaid - quota id for which you want to compute the completed field
 * @return string - number of mathing entries in the result DB or 'N/A'
 */
function get_quotaCompletedCount($surveyid, $quotaid)
{
    $result = "N/A";
    $quota_info = getQuotaInformation($surveyid, GetBaseLanguageFromSurveyID($surveyid), $quotaid);
    $quota = $quota_info[0];
    if (db_tables_exist(db_table_name_nq('survey_' . $surveyid)) && count($quota['members']) > 0) {
        $fields_list = array();
        // Keep a list of fields for easy reference
        // construct an array of value for each $quota['members']['fieldnames']
        unset($querycond);
        $fields_query = array();
        foreach ($quota['members'] as $member) {
            foreach ($member['fieldnames'] as $fieldname) {
                if (!in_array($fieldname, $fields_list)) {
                    $fields_list[] = $fieldname;
                    $fields_query[$fieldname] = array();
                }
                $fields_query[$fieldname][] = db_quote_id($fieldname) . " = '{$member['value']}'";
            }
        }
        foreach ($fields_list as $fieldname) {
            $select_query = " ( " . implode(' OR ', $fields_query[$fieldname]) . ' )';
            $querycond[] = $select_query;
        }
        $querysel = "SELECT count(id) as count FROM " . db_table_name('survey_' . $surveyid) . " WHERE " . implode(' AND ', $querycond) . " " . " AND submitdate IS NOT NULL";
        $result = db_execute_assoc($querysel) or safe_die($connect->ErrorMsg());
        //Checked
        $quota_check = $result->FetchRow();
        $result = $quota_check['count'];
    }
    return $result;
}
コード例 #12
0
 /**
  * Initialize a survey so can use EM to manage navigation
  * @param <type> $surveyid
  * @param <type> $surveyMode
  * @param <type> $anonymized
  * @param <type> $forceRefresh
  */
 static function StartSurvey($surveyid, $surveyMode = 'group', $options = NULL, $forceRefresh = false, $debugLevel = 0)
 {
     $LEM =& LimeExpressionManager::singleton();
     $LEM->sid = sanitize_int($surveyid);
     if (is_null($options)) {
         $options = array();
     }
     $LEM->surveyOptions['active'] = isset($options['active']) ? $options['active'] : false;
     $LEM->surveyOptions['allowsave'] = isset($options['allowsave']) ? $options['allowsave'] : false;
     $LEM->surveyOptions['anonymized'] = isset($options['anonymized']) ? $options['anonymized'] : false;
     $LEM->surveyOptions['assessments'] = isset($options['assessments']) ? $options['assessments'] : false;
     $LEM->surveyOptions['datestamp'] = isset($options['datestamp']) ? $options['datestamp'] : false;
     $LEM->surveyOptions['deletenonvalues'] = isset($options['deletenonvalues']) ? $options['deletenonvalues'] == '1' : true;
     $LEM->surveyOptions['hyperlinkSyntaxHighlighting'] = isset($options['hyperlinkSyntaxHighlighting']) ? $options['hyperlinkSyntaxHighlighting'] : false;
     $LEM->surveyOptions['ipaddr'] = isset($options['ipaddr']) ? $options['ipaddr'] : false;
     $LEM->surveyOptions['radix'] = isset($options['radix']) ? $options['radix'] : '.';
     $LEM->surveyOptions['refurl'] = isset($options['refurl']) ? $options['refurl'] : NULL;
     $LEM->surveyOptions['rooturl'] = isset($options['rooturl']) ? $options['rooturl'] : '';
     $LEM->surveyOptions['savetimings'] = isset($options['savetimings']) ? $options['savetimings'] : '';
     $LEM->sgqaNaming = isset($options['sgqaNaming']) ? $options['sgqaNaming'] == "Y" : true;
     // TODO default should eventually be false
     $LEM->surveyOptions['startlanguage'] = isset($options['startlanguage']) ? $options['startlanguage'] : 'en';
     $LEM->surveyOptions['surveyls_dateformat'] = isset($options['surveyls_dateformat']) ? $options['surveyls_dateformat'] : 1;
     $LEM->surveyOptions['tablename'] = isset($options['tablename']) ? $options['tablename'] : db_table_name_nq('survey_' . $LEM->sid);
     $LEM->surveyOptions['tablename_timings'] = isset($options['savetimings']) && $options['savetimings'] == 'Y' ? db_table_name('survey_' . $LEM->sid . '_timings') : '';
     $LEM->surveyOptions['target'] = isset($options['target']) ? $options['target'] : '/temp/files/';
     $LEM->surveyOptions['timeadjust'] = isset($options['timeadjust']) ? $options['timeadjust'] : 0;
     $LEM->surveyOptions['tempdir'] = isset($options['tempdir']) ? $options['tempdir'] : '/temp/';
     $LEM->surveyOptions['token'] = isset($options['token']) ? $options['token'] : NULL;
     $LEM->debugLevel = $debugLevel;
     $_SESSION['LEMdebugLevel'] = $debugLevel;
     // need acces to SESSSION to decide whether to cache serialized instance of $LEM
     switch ($surveyMode) {
         case 'survey':
             $LEM->allOnOnePage = true;
             $LEM->surveyMode = 'survey';
             break;
         case 'question':
             $LEM->allOnOnePage = false;
             $LEM->surveyMode = 'question';
             break;
         default:
         case 'group':
             $LEM->allOnOnePage = false;
             $LEM->surveyMode = 'group';
             break;
     }
     $LEM->setVariableAndTokenMappingsForExpressionManager($surveyid, $forceRefresh, $LEM->surveyOptions['anonymized'], $LEM->allOnOnePage);
     $LEM->currentGroupSeq = -1;
     $LEM->currentQuestionSeq = -1;
     // for question-by-question mode
     $LEM->indexGseq = array();
     $LEM->indexQseq = array();
     $LEM->qrootVarName2arrayFilter = array();
     if (isset($_SESSION['startingValues']) && is_array($_SESSION['startingValues']) && count($_SESSION['startingValues']) > 0) {
         $startingValues = array();
         foreach ($_SESSION['startingValues'] as $k => $value) {
             if (isset($LEM->knownVars[$k])) {
                 $knownVar = $LEM->knownVars[$k];
             } else {
                 if (isset($LEM->qcode2sgqa[$k])) {
                     $knownVar = $LEM->knownVars[$LEM->qcode2sgqa[$k]];
                 } else {
                     if (isset($LEM->tempVars[$k])) {
                         $knownVar = $LEM->tempVar[$k];
                     } else {
                         continue;
                     }
                 }
             }
             if (!isset($knownVar['jsName'])) {
                 continue;
             }
             switch ($knownVar['type']) {
                 case 'D':
                     //DATE
                     if (trim($value) == "") {
                         $value = NULL;
                     } else {
                         $dateformatdatat = getDateFormatData($LEM->surveyOptions['surveyls_dateformat']);
                         $datetimeobj = new Date_Time_Converter($value, $dateformatdatat['phpdate']);
                         $value = $datetimeobj->convert("Y-m-d");
                     }
                     break;
                 case 'N':
                     //NUMERICAL QUESTION TYPE
                 //NUMERICAL QUESTION TYPE
                 case 'K':
                     //MULTIPLE NUMERICAL QUESTION
                     if (trim($value) == "") {
                         $value = NULL;
                     } else {
                         $value = sanitize_float($value);
                     }
                     break;
                 case '|':
                     //File Upload
                     $value = NULL;
                     // can't upload a file via GET
                     break;
             }
             $_SESSION[$knownVar['sgqa']] = $value;
             $LEM->updatedValues[$knownVar['sgqa']] = array('type' => $knownVar['type'], 'value' => $value);
         }
         $LEM->_UpdateValuesInDatabase(NULL);
     }
     return array('hasNext' => true, 'hasPrevious' => false);
 }
コード例 #13
0
function markDeleted($item) {
	global $connect;
	$query = "update ".db_table_name_nq("cdio3_learningoutcomes")." set status='".db_quote('0')."' ";
	$query .="where id in (".db_quote($item).")";
	
	$connect->execute($query);
	
	return true;
}
コード例 #14
0
 /**
  * Initialize a survey so can use EM to manage navigation
  * @param <type> $surveyid
  * @param <type> $surveyMode
  * @param <type> $anonymized
  * @param <type> $forceRefresh
  */
 static function StartSurvey($surveyid, $surveyMode = 'group', $options = NULL, $forceRefresh = false, $debugLevel = 0)
 {
     $LEM =& LimeExpressionManager::singleton();
     $LEM->sid = sanitize_int($surveyid);
     if (is_null($options)) {
         $options = array();
     }
     $LEM->surveyOptions['active'] = isset($options['active']) ? $options['active'] : false;
     $LEM->surveyOptions['allowsave'] = isset($options['allowsave']) ? $options['allowsave'] : false;
     $LEM->surveyOptions['anonymized'] = isset($options['anonymized']) ? $options['anonymized'] : false;
     $LEM->surveyOptions['assessments'] = isset($options['assessments']) ? $options['assessments'] : false;
     $LEM->surveyOptions['datestamp'] = isset($options['datestamp']) ? $options['datestamp'] : false;
     $LEM->surveyOptions['hyperlinkSyntaxHighlighting'] = isset($options['hyperlinkSyntaxHighlighting']) ? $options['hyperlinkSyntaxHighlighting'] : false;
     $LEM->surveyOptions['ipaddr'] = isset($options['ipaddr']) ? $options['ipaddr'] : false;
     $LEM->surveyOptions['radix'] = isset($options['radix']) ? $options['radix'] : '.';
     $LEM->surveyOptions['refurl'] = isset($options['refurl']) ? $options['refurl'] : NULL;
     $LEM->surveyOptions['rooturl'] = isset($options['rooturl']) ? $options['rooturl'] : '';
     $LEM->surveyOptions['savetimings'] = isset($options['savetimings']) ? $options['savetimings'] : '';
     $LEM->sgqaNaming = isset($options['sgqaNaming']) ? $options['sgqaNaming'] == "Y" : true;
     // TODO default should eventually be false
     $LEM->surveyOptions['startlanguage'] = isset($options['startlanguage']) ? $options['startlanguage'] : 'en';
     $LEM->surveyOptions['surveyls_dateformat'] = isset($options['surveyls_dateformat']) ? $options['surveyls_dateformat'] : 1;
     $LEM->surveyOptions['tablename'] = isset($options['tablename']) ? $options['tablename'] : db_table_name_nq('survey_' . $LEM->sid);
     $LEM->surveyOptions['tablename_timings'] = isset($options['savetimings']) && $options['savetimings'] == 'Y' ? db_table_name('survey_' . $LEM->sid . '_timings') : '';
     $LEM->surveyOptions['target'] = isset($options['target']) ? $options['target'] : '/temp/files/';
     $LEM->surveyOptions['timeadjust'] = isset($options['timeadjust']) ? $options['timeadjust'] : 0;
     $LEM->surveyOptions['tempdir'] = isset($options['tempdir']) ? $options['tempdir'] : '/temp/';
     $LEM->surveyOptions['token'] = isset($options['token']) ? $options['token'] : NULL;
     $LEM->debugLevel = $debugLevel;
     $_SESSION['LEMdebugLevel'] = $debugLevel;
     // need acces to SESSSION to decide whether to cache serialized instance of $LEM
     switch ($surveyMode) {
         case 'survey':
             $LEM->allOnOnePage = true;
             $LEM->surveyMode = 'survey';
             break;
         case 'question':
             $LEM->allOnOnePage = false;
             $LEM->surveyMode = 'question';
             break;
         default:
         case 'group':
             $LEM->allOnOnePage = false;
             $LEM->surveyMode = 'group';
             break;
     }
     $LEM->setVariableAndTokenMappingsForExpressionManager($surveyid, $forceRefresh, $LEM->surveyOptions['anonymized'], $LEM->allOnOnePage);
     $LEM->currentGroupSeq = -1;
     $LEM->currentQuestionSeq = -1;
     // for question-by-question mode
     $LEM->indexGseq = array();
     $LEM->indexQseq = array();
     if (isset($_SESSION['startingValues']) && is_array($_SESSION['startingValues']) && count($_SESSION['startingValues']) > 0) {
         $startingValues = $_SESSION['startingValues'];
         $LEM->_UpdateValuesInDatabase($startingValues);
     }
     return array('hasNext' => true, 'hasPrevious' => false);
 }
コード例 #15
0
ファイル: labels.php プロジェクト: nmklong/limesurvey-cdio3
function insertlabelset()
{
    global $dbprefix, $connect, $clang, $labelsoutput;
    //	$labelsoutput.= $_POST['languageids'];  For debug purposes

    if (isset($_POST['languageids']))
    {
        $postlanguageids=sanitize_languagecodeS($_POST['languageids']);
    }

    if (isset($_POST['label_name']))
    {
        $postlabel_name=sanitize_labelname($_POST['label_name']);
    }

    $postlabel_name = db_quoteall($postlabel_name,true);
    $postlanguageids = db_quoteall($postlanguageids,true);

    $query = "INSERT INTO ".db_table_name('labelsets')." (label_name,languages) VALUES ({$postlabel_name},{$postlanguageids})";
    if (!$result = $connect->Execute($query))
    {
        safe_die("Inserting the label set failed:<br />".$query."<br />".$connect->ErrorMsg());
    }
    else
    {
        return $connect->Insert_ID(db_table_name_nq('labelsets'),"lid");
    }

}
コード例 #16
0
 if ($action == "assessmentadd") {
     $inserttable = $dbprefix . "assessments";
     $first = true;
     foreach ($assessmentlangs as $assessmentlang) {
         if (!isset($_POST['gid'])) {
             $_POST['gid'] = 0;
         }
         $datarray = array('sid' => $surveyid, 'scope' => $_POST['scope'], 'gid' => $_POST['gid'], 'minimum' => $_POST['minimum'], 'maximum' => $_POST['maximum'], 'name' => $_POST['name_' . $assessmentlang], 'language' => $assessmentlang, 'message' => $_POST['assessmentmessage_' . $assessmentlang]);
         if ($first == false) {
             $datarray['id'] = $aid;
         }
         $query = $connect->GetInsertSQL($inserttable, $datarray, get_magic_quotes_gpc());
         $result = $connect->Execute($query) or safe_die("Error inserting<br />{$query}<br />" . $connect->ErrorMsg());
         if ($first == true) {
             $first = false;
             $aid = $connect->Insert_ID(db_table_name_nq('assessments'), "id");
         }
     }
 } elseif ($action == "assessmentupdate") {
     if ($filterxsshtml) {
         require_once "../classes/inputfilter/class.inputfilter_clean.php";
         $myFilter = new InputFilter('', '', 1, 1, 1);
     }
     foreach ($assessmentlangs as $assessmentlang) {
         if (!isset($_POST['gid'])) {
             $_POST['gid'] = 0;
         }
         if ($filterxsshtml) {
             $_POST['name_' . $assessmentlang] = $myFilter->process($_POST['name_' . $assessmentlang]);
             $_POST['assessmentmessage_' . $assessmentlang] = $myFilter->process($_POST['assessmentmessage_' . $assessmentlang]);
         }
コード例 #17
0
ファイル: deactivate.php プロジェクト: himanshu12k/ce-www
    $deactivateoutput .= "\t<input type='submit' value='" . $clang->gT("Deactivate Survey") . "' onclick=\"" . get2post("{$scriptname}?action=deactivate&amp;ok=Y&amp;sid={$_GET['sid']}") . "\" />\n";
    $deactivateoutput .= "</div><br />\n";
} else {
    //See if there is a tokens table for this survey
    if (tableExists("tokens_{$postsid}")) {
        $toldtable = "tokens_{$postsid}";
        $tnewtable = "old_tokens_{$postsid}_{$date}";
        $tdeactivatequery = db_rename_table(db_table_name_nq($toldtable), db_table_name_nq($tnewtable));
        $tdeactivateresult = $connect->Execute($tdeactivatequery) or die("Couldn't deactivate tokens table because:<br />" . htmlspecialchars($connect->ErrorMsg()) . "<br /><br />Survey was not deactivated either.<br /><br /><a href='{$scriptname}?sid={$postsid}'>" . $clang->gT("Main Admin Screen") . "</a>");
        if ($databasetype == 'postgres') {
            // If you deactivate a postgres table you have to rename the according sequence too and alter the id field to point to the changed sequence
            $deactivatequery = db_rename_table(db_table_name_nq($toldtable) . '_tid_seq', db_table_name_nq($tnewtable) . '_tid_seq');
            $deactivateresult = $connect->Execute($deactivatequery) or die("Could not rename the old sequence for this token table. The database reported the following error:<br />" . htmlspecialchars($connect->ErrorMsg()) . "<br /><br /><a href='{$scriptname}?sid={$postsid}'>" . $clang->gT("Main Admin Screen") . "</a>");
            $setsequence = "ALTER TABLE " . db_table_name_nq($tnewtable) . " ALTER COLUMN tid SET DEFAULT nextval('" . db_table_name_nq($tnewtable) . "_tid_seq'::regclass);";
            $deactivateresult = $connect->Execute($setsequence) or die("Could not alter the field 'tid' to point to the new sequence name for this token table. The database reported the following error:<br />" . htmlspecialchars($connect->ErrorMsg()) . "<br /><br />Survey was not deactivated either.<br /><br /><a href='{$scriptname}?sid={$postsid}'>" . $clang->gT("Main Admin Screen") . "</a>");
            $setidx = "ALTER INDEX " . db_table_name_nq($toldtable) . "_idx RENAME TO " . db_table_name_nq($tnewtable) . "_idx;";
            $deactivateresult = $connect->Execute($setidx) or die("Could not alter the index for this token table. The database reported the following error:<br />" . htmlspecialchars($connect->ErrorMsg()) . "<br /><br />Survey was not deactivated either.<br /><br /><a href='{$scriptname}?sid={$_GET['sid']}'>" . $clang->gT("Main Admin Screen") . "</a>");
        }
    }
    // IF there are any records in the saved_control table related to this survey, they have to be deleted
    $query = "DELETE FROM {$dbprefix}saved_control WHERE sid={$postsid}";
    $result = $connect->Execute($query);
    $oldtable = "{$dbprefix}survey_{$postsid}";
    $newtable = "{$dbprefix}old_survey_{$postsid}_{$date}";
    //Update the auto_increment value from the table before renaming
    $new_autonumber_start = 0;
    $query = "SELECT id FROM {$oldtable} ORDER BY id desc";
    $result = db_select_limit_assoc($query, 1, -1, false, false);
    if ($result) {
        while ($row = $result->FetchRow()) {
            if (strlen($row['id']) > 12) {
コード例 #18
0
/**
* This function imports a LimeSurvey .lss survey XML file
* 
* @param mixed $sFullFilepath  The full filepath of the uploaded file
* @param string $sXMLdata  Alternatively you can specify XML data to import in this variable - $sFullFilepath is then ignored - default NULL
* @param string $sNewSurveyName  Name of the to be imported survey (optional) - default NULL
* @param boolean $bTranslateInsertansTags If INSERTANS tags should be translated - defaults to true
*/
function XMLImportSurvey($sFullFilepath, $sXMLdata = NULL, $sNewSurveyName = NULL, $bTranslateInsertansTags = true)
{
    global $connect, $dbprefix, $clang, $timeadjust;
    if ($sXMLdata == NULL) {
        $xml = simplexml_load_file($sFullFilepath);
    } else {
        $xml = simplexml_load_string($sXMLdata);
    }
    if ($xml->LimeSurveyDocType != 'Survey') {
        safe_die('This is not a valid LimeSurvey survey structure XML file.');
    }
    $dbversion = (int) $xml->DBVersion;
    $aQIDReplacements = array();
    $aQuotaReplacements = array();
    $results['defaultvalues'] = 0;
    $results['answers'] = 0;
    $results['surveys'] = 0;
    $results['questions'] = 0;
    $results['subquestions'] = 0;
    $results['question_attributes'] = 0;
    $results['groups'] = 0;
    $results['assessments'] = 0;
    $results['quota'] = 0;
    $results['quotals'] = 0;
    $results['quotamembers'] = 0;
    $results['importwarnings'] = array();
    $aLanguagesSupported = array();
    foreach ($xml->languages->language as $language) {
        $aLanguagesSupported[] = (string) $language;
    }
    $results['languages'] = count($aLanguagesSupported);
    // First get an overview of fieldnames - it's not useful for the moment but might be with newer versions
    /*
        $fieldnames=array();
        foreach ($xml->questions->fields->fieldname as $fieldname )
        {
            $fieldnames[]=(string)$fieldname;
        };*/
    // Import surveys table ===================================================================================
    $tablename = $dbprefix . 'surveys';
    foreach ($xml->surveys->rows->row as $row) {
        $insertdata = array();
        foreach ($row as $key => $value) {
            $insertdata[(string) $key] = (string) $value;
        }
        $oldsid = $insertdata['sid'];
        $newsid = GetNewSurveyID($oldsid);
        //Now insert the new SID and change some values
        $insertdata['sid'] = $newsid;
        //Make sure it is not set active
        $insertdata['active'] = 'N';
        //Set current user to be the owner
        $insertdata['owner_id'] = $_SESSION['loginID'];
        //Change creation date to import date
        $insertdata['datecreated'] = $connect->BindTimeStamp(date_shift(date("Y-m-d H:i:s"), "Y-m-d", $timeadjust));
        db_switchIDInsert('surveys', true);
        $query = $connect->GetInsertSQL($tablename, $insertdata);
        $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />{$query}<br />\n" . $connect->ErrorMsg());
        $results['surveys']++;
        db_switchIDInsert('surveys', false);
    }
    $results['newsid'] = $newsid;
    // Import survey languagesettings table ===================================================================================
    $tablename = $dbprefix . 'surveys_languagesettings';
    foreach ($xml->surveys_languagesettings->rows->row as $row) {
        $insertdata = array();
        foreach ($row as $key => $value) {
            $insertdata[(string) $key] = (string) $value;
        }
        $insertdata['surveyls_survey_id'] = $newsid;
        if ($sNewSurveyName == NULL) {
            $insertdata['surveyls_title'] = translink('survey', $oldsid, $newsid, $insertdata['surveyls_title']);
        } else {
            $insertdata['surveyls_title'] = translink('survey', $oldsid, $newsid, $sNewSurveyName);
        }
        $insertdata['surveyls_description'] = translink('survey', $oldsid, $newsid, $insertdata['surveyls_description']);
        $insertdata['surveyls_welcometext'] = translink('survey', $oldsid, $newsid, $insertdata['surveyls_welcometext']);
        $insertdata['surveyls_urldescription'] = translink('survey', $oldsid, $newsid, $insertdata['surveyls_urldescription']);
        $insertdata['surveyls_email_invite'] = translink('survey', $oldsid, $newsid, $insertdata['surveyls_email_invite']);
        $insertdata['surveyls_email_remind'] = translink('survey', $oldsid, $newsid, $insertdata['surveyls_email_remind']);
        $insertdata['surveyls_email_register'] = translink('survey', $oldsid, $newsid, $insertdata['surveyls_email_register']);
        $insertdata['surveyls_email_confirm'] = translink('survey', $oldsid, $newsid, $insertdata['surveyls_email_confirm']);
        $query = $connect->GetInsertSQL($tablename, $insertdata);
        $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />{$query}<br />\n" . $connect->ErrorMsg());
    }
    // Import groups table ===================================================================================
    $tablename = $dbprefix . 'groups';
    foreach ($xml->groups->rows->row as $row) {
        $insertdata = array();
        foreach ($row as $key => $value) {
            $insertdata[(string) $key] = (string) $value;
        }
        $oldsid = $insertdata['sid'];
        $insertdata['sid'] = $newsid;
        $oldgid = $insertdata['gid'];
        unset($insertdata['gid']);
        // save the old qid
        // now translate any links
        $insertdata['group_name'] = translink('survey', $oldsid, $newsid, $insertdata['group_name']);
        $insertdata['description'] = translink('survey', $oldsid, $newsid, $insertdata['description']);
        // Insert the new group
        if (isset($aGIDReplacements[$oldgid])) {
            db_switchIDInsert('groups', true);
            $insertdata['gid'] = $aGIDReplacements[$oldgid];
        }
        $query = $connect->GetInsertSQL($tablename, $insertdata);
        $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />{$query}<br />\n" . $connect->ErrorMsg());
        $results['groups']++;
        if (!isset($aGIDReplacements[$oldgid])) {
            $newgid = $connect->Insert_ID($tablename, "gid");
            // save this for later
            $aGIDReplacements[$oldgid] = $newgid;
            // add old and new qid to the mapping array
        } else {
            db_switchIDInsert('groups', false);
        }
    }
    // Import questions table ===================================================================================
    // We have to run the question table data two times - first to find all main questions
    // then for subquestions (because we need to determine the new qids for the main questions first)
    if (isset($xml->questions)) {
        $tablename = $dbprefix . 'questions';
        foreach ($xml->questions->rows->row as $row) {
            $insertdata = array();
            foreach ($row as $key => $value) {
                $insertdata[(string) $key] = (string) $value;
            }
            $oldsid = $insertdata['sid'];
            $insertdata['sid'] = $newsid;
            if (!isset($aGIDReplacements[$insertdata['gid']]) || trim($insertdata['title']) == '') {
                continue;
            }
            // Skip questions with invalid group id
            $insertdata['gid'] = $aGIDReplacements[$insertdata['gid']];
            $oldqid = $insertdata['qid'];
            unset($insertdata['qid']);
            // save the old qid
            // now translate any links
            $insertdata['title'] = translink('survey', $oldsid, $newsid, $insertdata['title']);
            $insertdata['question'] = translink('survey', $oldsid, $newsid, $insertdata['question']);
            $insertdata['help'] = translink('survey', $oldsid, $newsid, $insertdata['help']);
            // Insert the new question
            if (isset($aQIDReplacements[$oldqid])) {
                $insertdata['qid'] = $aQIDReplacements[$oldqid];
                db_switchIDInsert('questions', true);
            }
            $query = $connect->GetInsertSQL($tablename, $insertdata);
            $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />{$query}<br />\n" . $connect->ErrorMsg());
            if (!isset($aQIDReplacements[$oldqid])) {
                $newqid = $connect->Insert_ID($tablename, "qid");
                // save this for later
                $aQIDReplacements[$oldqid] = $newqid;
                // add old and new qid to the mapping array
                $results['questions']++;
            } else {
                db_switchIDInsert('questions', false);
            }
        }
    }
    // Import subquestions --------------------------------------------------------------
    if (isset($xml->subquestions)) {
        $tablename = $dbprefix . 'questions';
        foreach ($xml->subquestions->rows->row as $row) {
            $insertdata = array();
            foreach ($row as $key => $value) {
                $insertdata[(string) $key] = (string) $value;
            }
            $insertdata['sid'] = $newsid;
            if (!isset($aGIDReplacements[$insertdata['gid']])) {
                continue;
            }
            // Skip questions with invalid group id
            $insertdata['gid'] = $aGIDReplacements[(int) $insertdata['gid']];
            $oldsqid = (int) $insertdata['qid'];
            unset($insertdata['qid']);
            // save the old qid
            $insertdata['parent_qid'] = $aQIDReplacements[(int) $insertdata['parent_qid']];
            // remap the parent_qid
            // now translate any links
            $insertdata['title'] = translink('survey', $oldsid, $newsid, $insertdata['title']);
            $insertdata['question'] = translink('survey', $oldsid, $newsid, $insertdata['question']);
            $insertdata['help'] = translink('survey', $oldsid, $newsid, $insertdata['help']);
            if (isset($aQIDReplacements[$oldsqid])) {
                $insertdata['qid'] = $aQIDReplacements[$oldsqid];
                db_switchIDInsert('questions', true);
            }
            $query = $connect->GetInsertSQL($tablename, $insertdata);
            $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />{$query}<br />\n" . $connect->ErrorMsg());
            $newsqid = $connect->Insert_ID($tablename, "qid");
            // save this for later
            if (!isset($insertdata['qid'])) {
                $aQIDReplacements[$oldsqid] = $newsqid;
                // add old and new qid to the mapping array
            } else {
                db_switchIDInsert('questions', false);
            }
            $results['subquestions']++;
        }
    }
    // Import answers --------------------------------------------------------------
    if (isset($xml->answers)) {
        $tablename = $dbprefix . 'answers';
        foreach ($xml->answers->rows->row as $row) {
            $insertdata = array();
            foreach ($row as $key => $value) {
                $insertdata[(string) $key] = (string) $value;
            }
            if (!isset($aQIDReplacements[(int) $insertdata['qid']])) {
                continue;
            }
            // Skip questions with invalid group id
            $insertdata['qid'] = $aQIDReplacements[(int) $insertdata['qid']];
            // remap the parent_qid
            // now translate any links
            $query = $connect->GetInsertSQL($tablename, $insertdata);
            $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />{$query}<br />\n" . $connect->ErrorMsg());
            $results['answers']++;
        }
    }
    // Import questionattributes --------------------------------------------------------------
    if (isset($xml->question_attributes)) {
        $tablename = $dbprefix . 'question_attributes';
        foreach ($xml->question_attributes->rows->row as $row) {
            $insertdata = array();
            foreach ($row as $key => $value) {
                $insertdata[(string) $key] = (string) $value;
            }
            unset($insertdata['qaid']);
            if (!isset($aQIDReplacements[(int) $insertdata['qid']])) {
                continue;
            }
            // Skip questions with invalid group id
            $insertdata['qid'] = $aQIDReplacements[(int) $insertdata['qid']];
            // remap the parent_qid
            // now translate any links
            $query = $connect->GetInsertSQL($tablename, $insertdata);
            $result = $connect->Execute($query);
            $results['question_attributes']++;
        }
    }
    // Import defaultvalues --------------------------------------------------------------
    if (isset($xml->defaultvalues)) {
        $tablename = $dbprefix . 'defaultvalues';
        $results['defaultvalues'] = 0;
        foreach ($xml->defaultvalues->rows->row as $row) {
            $insertdata = array();
            foreach ($row as $key => $value) {
                $insertdata[(string) $key] = (string) $value;
            }
            $insertdata['qid'] = $aQIDReplacements[(int) $insertdata['qid']];
            // remap the qid
            if (isset($aQIDReplacements[(int) $insertdata['sqid']])) {
                $insertdata['sqid'] = $aQIDReplacements[(int) $insertdata['sqid']];
            }
            // remap the subquestion id
            // now translate any links
            $query = $connect->GetInsertSQL($tablename, $insertdata);
            $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />\$query<br />\n" . $connect->ErrorMsg());
            $results['defaultvalues']++;
        }
    }
    // At this point we know the new/old SID, GIDs, QIDs and we are able to build
    // the aray mapping old and new fieldnames
    // this will be usefull in order to translate conditions cfieldname and @SGQA@ codes, as well as INSERTANS links.
    $aOldNewFieldmap = aReverseTranslateFieldnames($oldsid, $newsid, $aGIDReplacements, $aQIDReplacements);
    // Import conditions --------------------------------------------------------------
    if (isset($xml->conditions)) {
        $tablename = $dbprefix . 'conditions';
        $results['conditions'] = 0;
        foreach ($xml->conditions->rows->row as $row) {
            $insertdata = array();
            foreach ($row as $key => $value) {
                $insertdata[(string) $key] = (string) $value;
            }
            // replace the qid for the new one (if there is no new qid in the $aQIDReplacements array it mean that this condition is orphan -> error, skip this record)
            if (isset($aQIDReplacements[$insertdata['qid']])) {
                $insertdata['qid'] = $aQIDReplacements[$insertdata['qid']];
                // remap the qid
            } else {
                continue;
            }
            // a problem with this answer record -> don't consider
            if (isset($aQIDReplacements[$insertdata['cqid']])) {
                $oldcqid = $insertdata['cqid'];
                $insertdata['cqid'] = $aQIDReplacements[$insertdata['cqid']];
                // remap the qid
            } else {
                continue;
            }
            // a problem with this answer record -> don't consider
            // replace the old cfieldname by the new one
            // first get the cfieldname without optionnal leading Meta-character
            //  (see Multiple-options (single checkbox)
            preg_match("/^(\\+{0,1})(.*)\$/", $insertdata["cfieldname"], $insertedCfieldname);
            if (isset($aOldNewFieldmap[$insertedCfieldname[2]])) {
                if ($insertedCfieldname[1] == "+") {
                    // this is a single-checkbox cfieldname in the form +SGQA
                    $newcfieldname = '+' . $aOldNewFieldmap[$insertedCfieldname[2]];
                } else {
                    // this is a normal cfieldname in the form SGQ or SGQA
                    // in the case of Multiple-options, this can be a virtual global
                    // cfieldname grouping all checkboxes (in the form SGQ)
                    $newcfieldname = $aOldNewFieldmap[$insertdata["cfieldname"]];
                }
                $insertdata["cfieldname"] = $newcfieldname;
            } else {
                //error_log("TIBO: oldcfieldname={$insertdata["cfieldname"]}//{$insertedCfieldname[2]} can't be found in aOldNewFieldmap");
                continue;
                // a problem with cfieldname mapping -> don't consider
            }
            if (preg_match("/^@(.*)@\$/", $insertdata["value"], $cfieldnameInCondValue)) {
                if (isset($aOldNewFieldmap[$cfieldnameInCondValue[1]])) {
                    $newvalue = '@' . $aOldNewFieldmap[$cfieldnameInCondValue[1]] . '@';
                    $insertdata["value"] = $newvalue;
                } else {
                    //error_log("TIBO2: oldvalue=@..{$cfieldnameInCondValue[1]}..@ can't be found in aOldNewFieldmap");
                    continue;
                    // a problem with cfieldname mapping -> don't consider
                }
            }
            if (trim($insertdata["method"]) == '') {
                $insertdata["method"] = '==';
            }
            unset($insertdata["cid"]);
            $query = $connect->GetInsertSQL($tablename, $insertdata);
            $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />\$query<br />\n" . $connect->ErrorMsg());
            $results['conditions']++;
        }
    }
    // Import assessments --------------------------------------------------------------
    if (isset($xml->assessments)) {
        $tablename = $dbprefix . 'assessments';
        foreach ($xml->assessments->rows->row as $row) {
            $insertdata = array();
            foreach ($row as $key => $value) {
                $insertdata[(string) $key] = (string) $value;
            }
            if ($insertdata['gid'] > 0) {
                $insertdata['gid'] = $aGIDReplacements[(int) $insertdata['gid']];
                // remap the qid
            }
            $insertdata['sid'] = $newsid;
            // remap the survey id
            // now translate any links
            $query = $connect->GetInsertSQL($tablename, $insertdata);
            $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />\$query<br />\n" . $connect->ErrorMsg());
            $results['assessments']++;
        }
    }
    // Import quota --------------------------------------------------------------
    if (isset($xml->quota)) {
        $tablename = $dbprefix . 'quota';
        foreach ($xml->quota->rows->row as $row) {
            $insertdata = array();
            foreach ($row as $key => $value) {
                $insertdata[(string) $key] = (string) $value;
            }
            $insertdata['sid'] = $newsid;
            // remap the survey id
            $oldid = $insertdata['id'];
            unset($insertdata['id']);
            // now translate any links
            $query = $connect->GetInsertSQL($tablename, $insertdata);
            $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />\$query<br />\n" . $connect->ErrorMsg());
            $aQuotaReplacements[$oldid] = $connect->Insert_ID(db_table_name_nq('quota'), "id");
            $results['quota']++;
        }
    }
    // Import quota_members --------------------------------------------------------------
    if (isset($xml->quota_members)) {
        $tablename = $dbprefix . 'quota_members';
        foreach ($xml->quota_members->rows->row as $row) {
            $insertdata = array();
            foreach ($row as $key => $value) {
                $insertdata[(string) $key] = (string) $value;
            }
            $insertdata['sid'] = $newsid;
            // remap the survey id
            $insertdata['qid'] = $aQIDReplacements[(int) $insertdata['qid']];
            // remap the qid
            $insertdata['quota_id'] = $aQuotaReplacements[(int) $insertdata['quota_id']];
            // remap the qid
            unset($insertdata['id']);
            // now translate any links
            $query = $connect->GetInsertSQL($tablename, $insertdata);
            $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />\$query<br />\n" . $connect->ErrorMsg());
            $results['quotamembers']++;
        }
    }
    // Import quota_languagesettings --------------------------------------------------------------
    if (isset($xml->quota_languagesettings)) {
        $tablename = $dbprefix . 'quota_languagesettings';
        foreach ($xml->quota_languagesettings->rows->row as $row) {
            $insertdata = array();
            foreach ($row as $key => $value) {
                $insertdata[(string) $key] = (string) $value;
            }
            $insertdata['quotals_quota_id'] = $aQuotaReplacements[(int) $insertdata['quotals_quota_id']];
            // remap the qid
            unset($insertdata['quotals_id']);
            // now translate any links
            $query = $connect->GetInsertSQL($tablename, $insertdata);
            $result = $connect->Execute($query) or safe_die($clang->gT("Error") . ": Failed to insert data<br />\$query<br />\n" . $connect->ErrorMsg());
            $results['quotals']++;
        }
    }
    // Set survey rights
    $sQuery = "INSERT INTO {$dbprefix}surveys_rights (sid, uid, edit_survey_property, define_questions, browse_response, export, delete_survey, activate_survey) VALUES({$newsid}," . $_SESSION['loginID'] . ",1,1,1,1,1,1)";
    $connect->Execute($sQuery);
    if ($bTranslateInsertansTags) {
        if (isset($aOldNewFieldmap)) {
            // It should be set anyway !
            TranslateInsertansTags($newsid, $oldsid, $aOldNewFieldmap);
        }
    }
    return $results;
}