diff --git a/application/helpers/admin/import_helper.php b/application/helpers/admin/import_helper.php
index c2bbd52ed33..f2040cdc966 100644
--- a/application/helpers/admin/import_helper.php
+++ b/application/helpers/admin/import_helper.php
@@ -1420,27 +1420,44 @@ function XMLImportSurvey($sFullFilePath, $sXMLdata = null, $sNewSurveyName = nul
foreach ($row as $key=>$value) {
$insertdata[(string) $key] = (string) $value;
}
+ if (!isset($insertdata['id']) || (int)$insertdata['id'] < 1){
+ continue;
+ }
+ $oldasid = $insertdata['id'];
+ unset($insertdata['id']);
+
+ if (isset($aASIDReplacements[$oldasid])) {
+ $insertdata['id'] = $aASIDReplacements[$oldasid];
+ }
+
if ($insertdata['gid'] > 0) {
$insertdata['gid'] = $aGIDReplacements[(int) $insertdata['gid']]; // remap the qid
}
$insertdata['sid'] = $iNewSID; // remap the survey id
- unset($insertdata['id']);
// now translate any links
$result = Assessment::model()->insertRecords($insertdata) or safeDie(gT("Error").": Failed to insert data[11]
");
- $results['assessments']++;
+
+ if (!isset($aASIDReplacements[$oldasid])) {
+ $aASIDReplacements[$oldasid] = $result->id; // add old and new id to the mapping array
+ $results['assessments']++;
+ }
+
+
}
}
// Import quota --------------------------------------------------------------
if (isset($xml->quota)) {
-
foreach ($xml->quota->rows->row as $row) {
$insertdata = array();
foreach ($row as $key=>$value) {
$insertdata[(string) $key] = (string) $value;
}
+ if (!isset($insertdata['id']) || (int)$insertdata['id'] < 1){
+ continue;
+ }
$insertdata['sid'] = $iNewSID; // remap the survey id
$oldid = $insertdata['id'];
unset($insertdata['id']);
@@ -1459,6 +1476,9 @@ function XMLImportSurvey($sFullFilePath, $sXMLdata = null, $sNewSurveyName = nul
foreach ($row as $key=>$value) {
$insertdata[(string) $key] = (string) $value;
}
+ if (!isset($insertdata['quota_id']) || (int)$insertdata['quota_id'] < 1){
+ continue;
+ }
$insertdata['sid'] = $iNewSID; // remap the survey id
$insertdata['qid'] = $aQIDReplacements[(int) $insertdata['qid']]; // remap the qid
if (isset($insertdata['quota_id'])) {
@@ -1479,6 +1499,9 @@ function XMLImportSurvey($sFullFilePath, $sXMLdata = null, $sNewSurveyName = nul
foreach ($row as $key=>$value) {
$insertdata[(string) $key] = (string) $value;
}
+ if (!isset($insertdata['quotals_quota_id']) || (int)$insertdata['quotals_quota_id'] < 1){
+ continue;
+ }
$insertdata['autoload_url'] = 0; // used to bypass urlValidator check in QuotaLanguageSetting model
$insertdata['quotals_quota_id'] = $aQuotaReplacements[(int) $insertdata['quotals_quota_id']]; // remap the qid
unset($insertdata['quotals_id']);
@@ -2055,17 +2078,18 @@ function XSSFilterArray(&$array)
}
/**
-* Import survey from an TSV file template that does not require or allow assigning of GID or QID values.
-* NOTE: This currently only supports import of one language
+* Import survey from an TSV file template that does not require assigning of GID or QID values.
+* If ID's are presented, they would be respected and used
+* Multilanguage imports are supported
+* Original function is changed to allow generating of XML instead of creating database objects directly
+* Generated XML code is send to existing lss import function
* @param string $sFullFilePath
-* @return array
+* @return string XML data
*
* @author TMSWhite
*/
function TSVImportSurvey($sFullFilePath)
{
- $results = array();
- $results['error'] = false;
$baselang = 'en'; // TODO set proper default
$handle = fopen($sFullFilePath, 'r');
@@ -2123,24 +2147,21 @@ function TSVImportSurvey($sFullFilePath)
$adata[] = $rowarray;
}
fclose($tmp);
- $results['defaultvalues'] = 0;
- $results['answers'] = 0;
- $results['surveys'] = 0;
- $results['languages'] = 0;
- $results['questions'] = 0;
- $results['subquestions'] = 0;
- $results['question_attributes'] = 0;
- $results['groups'] = 0;
- $results['importwarnings'] = array();
- // these aren't used here, but are needed to avoid errors in post-import display
- $results['assessments'] = 0;
- $results['quota'] = 0;
- $results['quotamembers'] = 0;
- $results['quotals'] = 0;
// collect information about survey and its language settings
$surveyinfo = array();
$surveyls = array();
+ $groups = array();
+ $questions = array();
+ $attributes = array();
+ $subquestions = array();
+ $defaultvalues = array();
+ $answers = array();
+ $assessments = array();
+ $quotas = array();
+ $quota_members = array();
+ $quota_languagesettings = array();
+ $output = array();
foreach ($adata as $row) {
switch ($row['class']) {
case 'S':
@@ -2149,9 +2170,9 @@ function TSVImportSurvey($sFullFilePath)
}
break;
case 'SL':
- if (!isset($surveyls[$row['language']])) {
- $surveyls[$row['language']] = array();
- }
+ /*if (!isset($surveyls[$row['language']])) {
+ $surveyls[$row['language']] = array($baselang);
+ }*/
if (isset($row['text'])) {
$surveyls[$row['language']][$row['name']] = $row['text'];
}
@@ -2168,48 +2189,31 @@ function TSVImportSurvey($sFullFilePath)
// Set survey group id to 1. Makes no sense to import it without the actual survey group.
$surveyinfo['gsid'] = 1;
- $newSurvey = Survey::model()->insertNewSurvey($surveyinfo); //or safeDie(gT("Error").": Failed to insert survey
");
-
- if (!$newSurvey->sid) {
- $results['error'] = CHtml::errorSummary($newSurvey, gT("Error(s) when try to create survey"));
- $results['bFailed'] = true;
- return $results;
+ if (array_key_exists('sid', $surveyinfo)){
+ $iNewSID = $surveyinfo['sid'];
+ } else {
+ $iNewSID = randomChars(6, '123456789');
}
- $iNewSID = $newSurvey->sid;
- $surveyinfo['sid'] = $iNewSID;
- $results['surveys']++;
- $results['newsid'] = $iNewSID;
+
+ $gidNew = 0;
$gid = 0;
- $gseq = 0; // group_order
- $qid = 0;
+ $gseq = 1; // group_order
+ $qid = 1;
+ $qidNew = 0;
+ $asidNew = 0;
$qseq = 0; // question_order
$qtype = 'T';
$aseq = 0; // answer sortorder
-
- // set the language for the survey
- $_title = 'Missing Title';
- foreach ($surveyls as $_lang => $insertdata) {
- $insertdata['surveyls_survey_id'] = $iNewSID;
- $insertdata['surveyls_language'] = $_lang;
- if (isset($insertdata['surveyls_title'])) {
- $_title = $insertdata['surveyls_title'];
- } else {
- $insertdata['surveyls_title'] = $_title;
- }
-
-
- $result = SurveyLanguageSetting::model()->insertNewSurvey($insertdata); //
- if (!$result) {
- $results['error'][] = gT("Error")." : ".gT("Failed to insert survey language");
- break;
- }
- $results['languages']++;
- }
-
+ $attribute_index = 0;
+ $answer_index = 0;
+ $default_index = 0;
+ $quota_index = 0;
+
$ginfo = array();
$qinfo = array();
$sqinfo = array();
+ $asinfo = array();
if (isset($surveyinfo['language'])) {
$baselang = $surveyinfo['language']; // the base language
@@ -2218,15 +2222,15 @@ function TSVImportSurvey($sFullFilePath)
$rownumber = 1;
$lastglang = '';
$lastother = 'N';
- $qseq = 0;
- $iGroupcounter = 0;
+ $qseq = 1;
+ $iGroupcounter = 1;
foreach ($adata as $row) {
$rownumber += 1;
switch ($row['class']) {
case 'G':
// insert group
- $insertdata = array();
- $insertdata['sid'] = $iNewSID;
+ $group = array();
+ $group['sid'] = $iNewSID;
$gname = ((!empty($row['name']) ? $row['name'] : 'G'.$gseq));
$glang = (!empty($row['language']) ? $row['language'] : $baselang);
// when a multi-lang tsv-file without information on the group id/number (old style) is imported,
@@ -2239,73 +2243,79 @@ function TSVImportSurvey($sFullFilePath)
$lastglang = $glang;
//use group id/number from file. if missing, use an increasing number (s.a.)
$sGroupseq = (!empty($row['type/scale']) ? $row['type/scale'] : 'G'.$iGroupcounter++);
- $insertdata['group_name'] = $gname;
- $insertdata['grelevance'] = (isset($row['relevance']) ? $row['relevance'] : '');
- $insertdata['description'] = (isset($row['text']) ? $row['text'] : '');
- $insertdata['language'] = $glang;
- $insertdata['randomization_group'] = (isset($row['random_group']) ? $row['random_group'] : '');
+ $group['group_name'] = $gname;
+ $group['grelevance'] = (isset($row['relevance']) ? $row['relevance'] : '');
+ $group['description'] = (isset($row['text']) ? $row['text'] : '');
+ $group['language'] = $glang;
+ $group['randomization_group'] = (isset($row['random_group']) ? $row['random_group'] : '');
// For multi language survey: same gid/sort order across all languages
if (isset($ginfo[$sGroupseq])) {
$gid = $ginfo[$sGroupseq]['gid'];
- $insertdata['gid'] = $gid;
- $insertdata['group_order'] = $ginfo[$sGroupseq]['group_order'];
+ $group['gid'] = $gid;
+ $group['group_order'] = $ginfo[$sGroupseq]['group_order'];
} else {
- $insertdata['group_order'] = $gseq;
- }
- $newgid = QuestionGroup::model()->insertRecords($insertdata);
- if (!$newgid) {
- $results['error'][] = gT("Error")." : ".gT("Failed to insert group").". ".gT("Text file row number ").$rownumber." (".$gname.")";
- break;
+ if (empty($row['id'])){
+ $gidNew += 1;
+ $gid = $gidNew;
+ } else {
+ $gid = $row['id'];
+ }
+
+ $group['gid'] = $gid;
+ $group['group_order'] = $gseq;
}
+
if (!isset($ginfo[$sGroupseq])) {
- $results['groups']++;
- $gid = $newgid;
+ //$gid = $gseq;
$ginfo[$sGroupseq]['gid'] = $gid;
$ginfo[$sGroupseq]['group_order'] = $gseq++;
}
$qseq = 0; // reset the question_order
+
+ $groups[] = $group;
+
break;
case 'Q':
- // insert question
- $insertdata = array();
- $insertdata['sid'] = $iNewSID;
+ $question = array();
+ $question['sid'] = $iNewSID;
$qtype = (isset($row['type/scale']) ? $row['type/scale'] : 'T');
$qname = (isset($row['name']) ? $row['name'] : 'Q'.$qseq);
- $insertdata['gid'] = $gid;
- $insertdata['type'] = $qtype;
- $insertdata['title'] = $qname;
- $insertdata['question'] = (isset($row['text']) ? $row['text'] : '');
- $insertdata['relevance'] = (isset($row['relevance']) ? $row['relevance'] : '');
- $insertdata['preg'] = (isset($row['validation']) ? $row['validation'] : '');
- $insertdata['help'] = (isset($row['help']) ? $row['help'] : '');
- $insertdata['language'] = (isset($row['language']) ? $row['language'] : $baselang);
- $insertdata['mandatory'] = (isset($row['mandatory']) ? $row['mandatory'] : '');
- $lastother = $insertdata['other'] = (isset($row['other']) ? $row['other'] : 'N'); // Keep trace of other settings for sub question
- $insertdata['same_default'] = (isset($row['same_default']) ? $row['same_default'] : 0);
- $insertdata['parent_qid'] = 0;
+ $question['gid'] = $gid;
+ $question['type'] = $qtype;
+ $question['title'] = $qname;
+ $question['question'] = (isset($row['text']) ? $row['text'] : '');
+ $question['relevance'] = (isset($row['relevance']) ? $row['relevance'] : '');
+ $question['preg'] = (isset($row['validation']) ? $row['validation'] : '');
+ $question['help'] = (isset($row['help']) ? $row['help'] : '');
+ $question['language'] = (isset($row['language']) ? $row['language'] : $baselang);
+ $question['mandatory'] = (isset($row['mandatory']) ? $row['mandatory'] : '');
+ $lastother = $question['other'] = (isset($row['other']) ? $row['other'] : 'N'); // Keep trace of other settings for sub question
+ $question['same_default'] = (isset($row['same_default']) ? $row['same_default'] : 0);
+ $question['parent_qid'] = 0;
// For multi numeric survey : same name, add the gid to have same name on different gid. Bad for EM.
$fullqname = 'G'.$gid.'_'.$qname;
if (isset($qinfo[$fullqname])) {
$qseq = $qinfo[$fullqname]['question_order'];
$qid = $qinfo[$fullqname]['qid'];
- $insertdata['qid'] = $qid;
- $insertdata['question_order'] = $qseq;
+ $question['qid'] = $qid;
+ $question['question_order'] = $qseq;
} else {
- $insertdata['question_order'] = $qseq;
- }
- $question = new Question();
- $question->setAttributes($insertdata, false);
- if (!$question->save()) {
- $results['error'][] = gT("Error")." : ".gT("Could not insert question").". ".gT("Text file row number ").$rownumber." (".$qname.")";
- break;
+ if (empty($row['id'])){
+ $qidNew += 1;
+ $qid = $qidNew;
+ } else {
+ $qid = $row['id'];
+ }
+ $question['question_order'] = $qseq;
+ $question['qid'] = $qid;
}
- $newqid = $question->qid;
+
+ $questions[] = $question;
+
if (!isset($qinfo[$fullqname])) {
- $results['questions']++;
- $qid = $newqid; // save this for later
$qinfo[$fullqname]['qid'] = $qid;
$qinfo[$fullqname]['question_order'] = $qseq++;
}
@@ -2329,23 +2339,19 @@ function TSVImportSurvey($sFullFilePath)
break;
default:
if ($key != '' && $val != '') {
- $insertdata = array();
- $insertdata['qid'] = $qid;
+ $attribute = array();
+ $attribute['qid'] = $qid;
// check if attribute is a i18n attribute. If yes, set language, else set language to null in attribute table
$aAttributeList[$qtype] = \LimeSurvey\Helpers\questionHelper::getQuestionAttributesSettings($qtype);
- if ($aAttributeList[$qtype][$key]['i18n']) {
- $insertdata['language'] = (isset($row['language']) ? $row['language'] : $baselang);
+ if (!empty($aAttributeList[$qtype][$key]['i18n'])) {
+ $attribute['language'] = (isset($row['language']) ? $row['language'] : $baselang);
} else {
- $insertdata['language'] = null;
- }
- $insertdata['attribute'] = $key;
- $insertdata['value'] = $val;
- $result = QuestionAttribute::model()->insertRecords($insertdata); //
- if (!$result) {
- $results['importwarnings'][] = gT("Warning")." : ".gT("Failed to insert question attribute").". ".gT("Text file row number ").$rownumber." ({$key})";
- break;
+ $attribute['language'] = null;
}
- $results['question_attributes']++;
+ $attribute['attribute'] = $key;
+ $attribute['value'] = $val;
+
+ $attributes[] = $attribute;
}
break;
}
@@ -2353,16 +2359,12 @@ function TSVImportSurvey($sFullFilePath)
// insert default value
if (isset($row['default']) && $row['default'] !== "") {
- $insertdata = array();
- $insertdata['qid'] = $qid;
- $insertdata['language'] = (isset($row['language']) ? $row['language'] : $baselang);
- $insertdata['defaultvalue'] = $row['default'];
- $result = DefaultValue::model()->insertRecords($insertdata);
- if (!$result) {
- $results['importwarnings'][] = gT("Warning")." : ".gT("Failed to insert default value").". ".gT("Text file row number ").$rownumber;
- break;
- }
- $results['defaultvalues']++;
+ $defaultvalue = array();
+ $defaultvalue['qid'] = $qid;
+ $defaultvalue['sqid'] = '';
+ $defaultvalue['language'] = (isset($row['language']) ? $row['language'] : $baselang);
+ $defaultvalue['defaultvalue'] = $row['default'];
+ $defaultvalues[] = $defaultvalue;
}
break;
@@ -2376,103 +2378,298 @@ function TSVImportSurvey($sFullFilePath)
if ($qtype == "!" || $qtype == "L") {
// only used to set default value for 'other' in these cases
if (isset($row['default']) && $row['default'] != "") {
- $insertdata = array();
- $insertdata['qid'] = $qid;
- $insertdata['specialtype'] = 'other';
- $insertdata['language'] = (isset($row['language']) ? $row['language'] : $baselang);
- $insertdata['defaultvalue'] = $row['default'];
- $result = DefaultValue::model()->insertRecords($insertdata);
- if (!$result) {
- $results['importwarnings'][] = gT("Warning")." : ".gT("Failed to insert default value").". ".gT("Text file row number ").$rownumber;
- break;
- }
- $results['defaultvalues']++;
+ $defaultvalue = array();
+ $defaultvalue['qid'] = $qid;
+ $defaultvalue['sqid'] = $sqid;
+ $defaultvalue['specialtype'] = 'other';
+ $defaultvalue['language'] = (isset($row['language']) ? $row['language'] : $baselang);
+ $defaultvalue['defaultvalue'] = $row['default'];
+ $defaultvalues[] = $defaultvalue;
}
}
} else {
$scale_id = (isset($row['type/scale']) ? $row['type/scale'] : 0);
- $insertdata = array();
- $insertdata['sid'] = $iNewSID;
- $insertdata['gid'] = $gid;
- $insertdata['parent_qid'] = $qid;
- $insertdata['type'] = $qtype;
- $insertdata['title'] = $sqname;
- $insertdata['question'] = (isset($row['text']) ? $row['text'] : '');
- $insertdata['relevance'] = (isset($row['relevance']) ? $row['relevance'] : '');
- $insertdata['preg'] = (isset($row['validation']) ? $row['validation'] : '');
- $insertdata['help'] = (isset($row['help']) ? $row['help'] : '');
- $insertdata['language'] = (isset($row['language']) ? $row['language'] : $baselang);
- $insertdata['mandatory'] = (isset($row['mandatory']) ? $row['mandatory'] : '');
- $insertdata['scale_id'] = $scale_id;
+ $subquestion = array();
+ $subquestion['sid'] = $iNewSID;
+ $subquestion['gid'] = $gid;
+ $subquestion['parent_qid'] = $qid;
+ $subquestion['type'] = $qtype;
+ $subquestion['title'] = $sqname;
+ $subquestion['question'] = (isset($row['text']) ? $row['text'] : '');
+ $subquestion['relevance'] = (isset($row['relevance']) ? $row['relevance'] : '');
+ $subquestion['preg'] = (isset($row['validation']) ? $row['validation'] : '');
+ $subquestion['help'] = (isset($row['help']) ? $row['help'] : '');
+ $subquestion['language'] = (isset($row['language']) ? $row['language'] : $baselang);
+ $subquestion['mandatory'] = (isset($row['mandatory']) ? $row['mandatory'] : '');
+ $subquestion['scale_id'] = $scale_id;
// For multi nueric language, qid is needed, why not gid. name is not unique.
$fullsqname = 'G'.$gid.'Q'.$qid.'_'.$scale_id.'_'.$sqname;
if (isset($sqinfo[$fullsqname])) {
$qseq = $sqinfo[$fullsqname]['question_order'];
$sqid = $sqinfo[$fullsqname]['sqid'];
- $insertdata['question_order'] = $qseq;
- $insertdata['qid'] = $sqid;
+ $subquestion['question_order'] = $qseq;
+ $subquestion['qid'] = $sqid;
} else {
- $insertdata['question_order'] = $qseq;
- }
- // Insert sub question and keep the sqid for multi language survey
- $question = new Question();
- $question->setAttributes($insertdata,false); //$question->attributes = $insertdata; : this broke call of $this when test rules when save : PLEASE : don't use
- if (!$question->save()) {
- $results['error'][] = gT("Error")." : ".gT("Could not insert subquestion").". ".gT("Text file row number ").$rownumber." (".$sqname.")";
- break;
+ $subquestion['question_order'] = $qseq;
+ if (empty($row['id'])){
+ $qidNew += 1;
+ $sqid = $qidNew;
+ } else {
+ $sqid = $row['id'];
+ }
+
+ $subquestion['qid'] = $sqid;
}
+ $subquestions[] = $subquestion;
if (!isset($sqinfo[$fullsqname])) {
$sqinfo[$fullsqname]['question_order'] = $qseq++;
- $sqid = $question->qid; // save this for later
$sqinfo[$fullsqname]['sqid'] = $sqid;
- $results['subquestions']++;
}
// insert default value
if (isset($row['default']) && $row['default'] != "") {
- $insertdata = array();
- $insertdata['qid'] = $qid;
- $insertdata['sqid'] = $sqid;
- $insertdata['scale_id'] = $scale_id;
- $insertdata['language'] = (isset($row['language']) ? $row['language'] : $baselang);
- $insertdata['defaultvalue'] = $row['default'];
- $result = DefaultValue::model()->insertRecords($insertdata);
- if (!$result) {
- $results['importwarnings'][] = gT("Warning")." : ".gT("Failed to insert default value").". ".gT("Text file row number ").$rownumber;
- break;
- }
- $results['defaultvalues']++;
+ $defaultvalue = array();
+ $defaultvalue['qid'] = $qid;
+ $defaultvalue['sqid'] = $sqid;
+ $defaultvalue['scale_id'] = $scale_id;
+ $defaultvalue['language'] = (isset($row['language']) ? $row['language'] : $baselang);
+ $defaultvalue['defaultvalue'] = $row['default'];
+ $defaultvalues[] = $defaultvalue;
}
}
break;
case 'A':
- $insertdata = array();
- $insertdata['qid'] = $qid;
- $insertdata['code'] = (isset($row['name']) ? $row['name'] : 'A'.$aseq);
- $insertdata['answer'] = (isset($row['text']) ? $row['text'] : '');
- $insertdata['scale_id'] = (isset($row['type/scale']) ? $row['type/scale'] : 0);
- $insertdata['language'] = (isset($row['language']) ? $row['language'] : $baselang);
- $insertdata['assessment_value'] = (int) (isset($row['relevance']) ? $row['relevance'] : '');
- $insertdata['sortorder'] = ++$aseq;
- $result = Answer::model()->insertRecords($insertdata); // or safeDie("Error: Failed to insert answer
");
- if (!$result) {
- $results['error'][] = gT("Error")." : ".gT("Could not insert answer").". ".gT("Text file row number ").$rownumber;
- }
- $results['answers']++;
+ $answer = array();
+ $answer['qid'] = $qid;
+ $answer['code'] = (isset($row['name']) ? $row['name'] : 'A'.$aseq);
+ $answer['answer'] = (isset($row['text']) ? $row['text'] : '');
+ $answer['scale_id'] = (isset($row['type/scale']) ? $row['type/scale'] : 0);
+ $answer['language'] = (isset($row['language']) ? $row['language'] : $baselang);
+ $answer['assessment_value'] = (int) (isset($row['assessment_value']) ? $row['assessment_value'] : '');
+ $answer['sortorder'] = ++$aseq;
+ $answers[] = $answer;
+ break;
+ case 'AS':
+ $assessment = array();
+ $assessment['sid'] = $iNewSID;
+ $assessment['scope'] = isset($row['type/scale'])?$row['type/scale']:'';
+ $assessment['gid'] = $gid;
+ $assessment['name'] = isset($row['name'])?$row['name']:'';
+ $assessment['minimum'] = isset($row['min_num_value'])?$row['min_num_value']:'';
+ $assessment['maximum'] = isset($row['max_num_value'])?$row['max_num_value']:'';
+ $assessment['message'] = isset($row['text'])?$row['text']:'';
+ $assessment['language'] = isset($row['language'])?$row['language']:'';
+ $assessment['id'] = isset($row['id'])?$row['id']:'';
+ $assessments[] = $assessment;
+ break;
+ case 'QTA':
+ $quota = array();
+ $quota['id'] = isset($row['id'])?$row['id']:'';
+ $quota['sid'] = $iNewSID;
+ $quota['name'] = isset($row['name'])?$row['name']:'';
+ $quota['qlimit'] = isset($row['mandatory'])?$row['mandatory']:'';
+ $quota['action'] = isset($row['other'])?$row['other']:'';
+ $quota['active'] = isset($row['default'])?$row['default']:'';
+ $quota['autoload_url'] = isset($row['same_default'])?$row['same_default']:'';
+ $quotas[] = $quota;
+ break;
+ case 'QTAM':
+ $quota_member = array();
+ $quota_member['quota_id'] = isset($row['related_id'])?$row['related_id']:'';
+ $quota_member['sid'] = $iNewSID;
+ $quota_member['qid'] = $qid;
+ $quota_member['code'] = isset($row['name'])?$row['name']:'';
+ $quota_members[] = $quota_member;
break;
+ case 'QTALS':
+ $quota_languagesetting = array();
+ $quota_languagesetting['quotals_quota_id'] = isset($row['related_id'])?$row['related_id']:'';
+ $quota_languagesetting['quotals_language'] = isset($row['language'])?$row['language']:'';
+ //$quota_languagesetting['quotals_name'] = isset($row['name'])?$row['name']:'';
+ $quota_languagesetting['quotals_message'] = isset($row['relevance'])?$row['relevance']:'';
+ $quota_languagesetting['quotals_url'] = isset($row['text'])?$row['text']:'';
+ $quota_languagesetting['quotals_urldescrip'] = isset($row['help'])?$row['help']:'';
+ $quota_languagesettings[] = $quota_languagesetting;
+ break;
+ case 'C':
+ $condition = array();
+ $condition['qid'] = $qid;
+ $condition['scenario'] = $row['type/scale'];
+ $condition['cqid'] = isset($row['related_id'])?$row['related_id']:'';
+ $condition['cfieldname'] = $row['name'];
+ $condition['method'] = $row['relevance'];
+ $condition['value'] = $row['text'];
+ $conditions[] = $condition;
+ break;
}
}
- // Delete the survey if error found
- if (is_array($results['error'])) {
- Survey::model()->deleteSurvey($iNewSID);
+ // combine all xml data into $output variable
+ if (!empty($surveyinfo)){
+ $output['surveys']['fields']['fieldname'] = array_keys($surveyinfo);
+ $output['surveys']['rows']['row'] = $surveyinfo;
+ }
+
+ if (!empty($surveyls)){
+ $output['surveys_languagesettings']['fields']['fieldname'] = array_keys($surveyls[$baselang]);
+ $output['surveys_languagesettings']['rows']['row'] = $surveyls;
+ }
+
+ if (!empty($groups)){
+ $output['groups']['fields']['fieldname'] = array_keys($groups[0]);
+ $output['groups']['rows']['row'] = $groups;
+ }
+
+ if (!empty($questions)){
+ $output['questions']['fields']['fieldname'] = array_keys($questions[0]);
+ $output['questions']['rows']['row'] = $questions;
+ }
+
+ if (!empty($attributes)){
+ $output['question_attributes']['fields']['fieldname'] = array_keys($attributes[0]);
+ $output['question_attributes']['rows']['row'] = $attributes;
+ }
+
+ if (!empty($defaultvalues)){
+ $output['defaultvalues']['fields']['fieldname'] = array_keys($defaultvalues[0]);
+ $output['defaultvalues']['rows']['row'] = $defaultvalues;
+ }
+
+ if (!empty($subquestions)){
+ $output['subquestions']['fields']['fieldname'] = array_keys($subquestions[0]);
+ $output['subquestions']['rows']['row'] = $subquestions;
+ }
+
+ if (!empty($answers)){
+ $output['answers']['fields']['fieldname'] = array_keys($answers[0]);
+ $output['answers']['rows']['row'] = $answers;
+ }
+
+ if (!empty($assessments)){
+ $output['assessments']['fields']['fieldname'] = array_keys($assessments[0]);
+ $output['assessments']['rows']['row'] = $assessments;
+ }
+
+
+ if (!empty($quotas)){
+ $output['quota']['fields']['fieldname'] = array_keys($quotas[0]);
+ $output['quota']['rows']['row'] = $quotas;
+ }
+
+ if (!empty($quota_members)){
+ $output['quota_members']['fields']['fieldname'] = array_keys($quota_members[0]);
+ $output['quota_members']['rows']['row'] = $quota_members;
+ }
+
+ if (!empty($quota_languagesettings)){
+ $output['quota_languagesettings']['fields']['fieldname'] = array_keys($quota_languagesettings[0]);
+ $output['quota_languagesettings']['rows']['row'] = $quota_languagesettings;
+ }
+
+ if (!empty($conditions)){
+ $output['conditions']['fields']['fieldname'] = array_keys($conditions[0]);
+ $output['conditions']['rows']['row'] = $conditions;
+ }
+
+ // generate xml document
+ $xml = createXMLfromData($output);
+ // send xml document into XMLImportSurvey function and display results
+ return XMLImportSurvey('null', $xml);
+}
+
+function createXMLfromData($aData = array()){
+ // get survey languages
+ $surveylanguage = array_key_exists('language', $aData['surveys']['rows']['row'])?(array)$aData['surveys']['rows']['row']['language']:array('en');
+ $surveyAdditionalLanguages = array_key_exists('additional_languages', $aData['surveys']['rows']['row']) && !empty($aData['surveys']['rows']['row']['additional_languages']) ? explode(' ', $aData['surveys']['rows']['row']['additional_languages']) : array();
+ if (count($surveyAdditionalLanguages) == 0){
+ $surveylanguages = $surveylanguage;
} else {
- LimeExpressionManager::SetSurveyId($iNewSID);
- LimeExpressionManager::RevertUpgradeConditionsToRelevance($iNewSID);
- LimeExpressionManager::UpgradeConditionsToRelevance($iNewSID);
+ $surveylanguages = array_merge($surveylanguage, $surveyAdditionalLanguages);
}
- return $results;
+
+ $i = 0;
+ if (array_key_exists('surveys_languagesettings', $aData)){
+ foreach ($aData['surveys_languagesettings']['rows']['row'] as $language => $value) {
+ if (!array_key_exists('surveyls_title', $value)){
+ $aData['surveys_languagesettings']['rows']['row'][$language]['surveyls_title'] = 'Missing Title';
+ }
+ if (!array_key_exists('surveyls_language', $value)){
+ $aData['surveys_languagesettings']['rows']['row'][$language]['surveyls_language'] = $language;
+ }
+ $i += 1;
+ }
+ }
+ $xml = new XMLWriter();
+ $xml->openMemory();
+ $xml->setIndent(true);
+
+ //header
+ $xml->startDocument('1.0', 'UTF-8');
+ $xml->startElement('document');
+ $xml->writeElement('LimeSurveyDocType', 'Survey');
+ $xml->writeElement('DBVersion', getGlobalSetting("DBVersion"));
+
+ $xml->startElement('languages');
+ foreach ($surveylanguages as $surveylanguage) {
+ $xml->writeElement('language', $surveylanguage);
+ }
+ $xml->endElement();
+
+ $index3 = 0;
+ foreach ($aData as $key1 => $value1) {
+ $xml->startElement($key1);
+ foreach ($value1 as $key2 => $value2) {
+ $xml->startElement($key2);
+ foreach ($value2 as $key3 => $value3) {
+ $index3 = 0;
+ if (is_array($value3)){
+ foreach ($value3 as $key4 => $value4) {
+ if (is_array($value4)){
+ //$xml->startElement('row');
+ $xml->startElement($key3);
+ foreach ($value4 as $key5 => $value5) {
+ if (!is_array($value5)){
+ $xml->startElement($key5);
+ $xml->writeCdata($value5);
+ $xml->endElement();
+ }
+ }
+ $xml->endElement();
+ } else {
+ if (is_integer($key4)){
+ $xml->writeElement($key3, $value4);
+ } else {
+ if ($key3 == 'row'){
+ if ($index3 === 0){
+ $xml->startElement($key3);
+ }
+ $xml->startElement($key4);
+ $xml->writeCdata($value4);
+ $xml->endElement();
+ $index3 += 1;
+ if ($index3 === count($value3)){
+ $xml->endElement();
+ }
+ } else {
+ $xml->writeElement($key3, $key4);
+ }
+ }
+ }
+ }
+ } else {
+
+ }
+ }
+ $xml->endElement();
+ }
+ $xml->endElement();
+ }
+
+ $xml->endElement();
+ $xml->endDocument();
+ return $xml->outputMemory(true);
}
+