Skip to content

Commit

Permalink
Fixed issue #4608: INSERTANS conversion fails at survey import with .…
Browse files Browse the repository at this point in the history
…lss file

git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey@9264 b72ed6b6-b9f8-46b5-92b4-906544132732
  • Loading branch information
c-schmitz committed Oct 18, 2010
1 parent d198ddb commit fffc4dd
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 31 deletions.
21 changes: 13 additions & 8 deletions admin/importsurvey.php
Expand Up @@ -33,20 +33,16 @@
}
elseif (isset($sExtension) && strtolower($sExtension)=='lss')
{
$aImportResults=XMLImportSurvey($sFullFilepath);
$aImportResults=XMLImportSurvey($sFullFilepath,null,null,(isset($_POST['translinksfields'])));
} elseif (isset($copyfunction))
{
$aImportResults=XMLImportSurvey('',$copysurveydata,$sNewSurveyName);
}


// Translate INSERTANS codes if chosen
if (isset($aImportResults['fieldnames']) && $sTransLinks === true)
{
transInsertAns($aImportResults['newsid'],$aImportResults['oldsid'],$aImportResults['fieldnames']);
}
// Create old fieldnames


if ((isset($importingfrom) && $importingfrom == "http") || isset($copyfunction))
{
$importsurvey .= "<br />\n<div class='successheader'>".$clang->gT("Success")."</div><br /><br />\n";
Expand Down Expand Up @@ -1202,8 +1198,11 @@ function CSVImportSurvey($sFullFilepath)
* 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)
function XMLImportSurvey($sFullFilepath,$sXMLdata=NULL,$sNewSurveyName=NULL, $bTranslateInsertansTags=true)
{
global $connect, $dbprefix, $clang, $timeadjust;

Expand Down Expand Up @@ -1656,6 +1655,12 @@ function XMLImportSurvey($sFullFilepath,$sXMLdata=NULL,$sNewSurveyName=NULL)
// 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)
{
$aOldNewFieldmap=aReverseTranslateFieldnames($oldsid,$newsid,$aGIDReplacements,$aQIDReplacements);
TranslateInsertansTags($newsid,$oldsid,$aOldNewFieldmap);
}


return $results;
Expand Down
2 changes: 1 addition & 1 deletion admin/remotecontrol/lsrc.helper.php
Expand Up @@ -1972,7 +1972,7 @@ function importSurvey($iVid, $sVtit , $sVbes, $sVwel, $sUbes, $sVtyp) //XXX
// Translate INSERTANS codes
if (isset($fieldnames))
{
transInsertAns($newsid,$oldsid,$fieldnames);
TranslateInsertansTags($newsid,$oldsid,$fieldnames);
}
$surveyid=$newsid;

Expand Down
56 changes: 34 additions & 22 deletions common.php
Expand Up @@ -6321,22 +6321,34 @@ function translink($type, $oldid, $newid, $text)
}


function aReverseTranslateFieldnames($iOldSID,$iNewSID,$aGIDReplacements,$aQIDReplacements)
{
$aGIDReplacements=array_flip($aGIDReplacements);
$aQIDReplacements=array_flip($aQIDReplacements);
$aFieldMap=createFieldMap($iNewSID);
$aFieldMappings=array();
foreach ($aFieldMap as $sFieldname=>$aFieldinfo)
{
if ($aFieldinfo['qid']!=null)
{
$aFieldMappings[$sFieldname]=$iNewSID.'X'.$aGIDReplacements[$aFieldinfo['gid']].'X'.$aQIDReplacements[$aFieldinfo['qid']].$aFieldinfo['aid'];
}
}
return $aFieldMappings;
}


/**
* put your comment there...
* This function replaces the old insertans tags with new ones across a survey
*
* @param string $newsid
* @param string $oldsid
* @param mixed $fieldnames
* @param string $newsid Old SID
* @param string $oldsid New SID
* @param mixed $fieldnames Array array('oldfieldname'=>'newfieldname')
*/
function transInsertAns($newsid,$oldsid,$fieldnames)
function TranslateInsertansTags($newsid,$oldsid,$fieldnames)
{
global $connect, $dbprefix;

if (!isset($_POST['translinksfields']))
{
return;
}

$newsid=sanitize_int($newsid);
$oldsid=sanitize_int($oldsid);

Expand All @@ -6351,10 +6363,10 @@ function transInsertAns($newsid,$oldsid,$fieldnames)
$endurl = $qentry['surveyls_url'];
$language = $qentry['surveyls_language'];

foreach ($fieldnames as $fnrow)
foreach ($fieldnames as $sOldFieldname=>$sNewFieldname)
{
$pattern = "{INSERTANS:".$fnrow['oldfieldname']."}";
$replacement = "{INSERTANS:".$fnrow['newfieldname']."}";
$pattern = "{INSERTANS:".$sOldFieldname."}";
$replacement = "{INSERTANS:".$sNewFieldname."}";
$urldescription=preg_replace('/'.$pattern.'/', $replacement, $urldescription);
$endurl=preg_replace('/'.$pattern.'/', $replacement, $endurl);
}
Expand All @@ -6378,10 +6390,10 @@ function transInsertAns($newsid,$oldsid,$fieldnames)
$gid = $qentry['gid'];
$language = $qentry['language'];

foreach ($fieldnames as $fnrow)
foreach ($fieldnames as $sOldFieldname=>$sNewFieldname)
{
$pattern = "{INSERTANS:".$fnrow['oldfieldname']."}";
$replacement = "{INSERTANS:".$fnrow['newfieldname']."}";
$pattern = "{INSERTANS:".$sOldFieldname."}";
$replacement = "{INSERTANS:".$sNewFieldname."}";
$description=preg_replace('/'.$pattern.'/', $replacement, $description);
}

Expand All @@ -6404,10 +6416,10 @@ function transInsertAns($newsid,$oldsid,$fieldnames)
$qid = $qentry['qid'];
$language = $qentry['language'];

foreach ($fieldnames as $fnrow)
foreach ($fieldnames as $sOldFieldname=>$sNewFieldname)
{
$pattern = "{INSERTANS:".$fnrow['oldfieldname']."}";
$replacement = "{INSERTANS:".$fnrow['newfieldname']."}";
$pattern = "{INSERTANS:".$sOldFieldname."}";
$replacement = "{INSERTANS:".$sNewFieldname."}";
$question=preg_replace('/'.$pattern.'/', $replacement, $question);
$help=preg_replace('/'.$pattern.'/', $replacement, $help);
}
Expand All @@ -6433,10 +6445,10 @@ function transInsertAns($newsid,$oldsid,$fieldnames)
$qid = $qentry['qid'];
$language = $qentry['language'];

foreach ($fieldnames as $fnrow)
foreach ($fieldnames as $sOldFieldname=>$sNewFieldname)
{
$pattern = "{INSERTANS:".$fnrow['oldfieldname']."}";
$replacement = "{INSERTANS:".$fnrow['newfieldname']."}";
$pattern = "{INSERTANS:".$sOldFieldname."}";
$replacement = "{INSERTANS:".$sNewFieldname."}";
$answer=preg_replace('/'.$pattern.'/', $replacement, $answer);
}

Expand Down

0 comments on commit fffc4dd

Please sign in to comment.