diff --git a/application/helpers/admin/activate_helper.php b/application/helpers/admin/activate_helper.php
index 58a4d5f678c..3d8091302e0 100644
--- a/application/helpers/admin/activate_helper.php
+++ b/application/helpers/admin/activate_helper.php
@@ -18,51 +18,62 @@
* @param int $fixnumbering
* @todo can call this function (no $_GET, but getParam) AND do it with Yii
*/
-function fixNumbering($fixnumbering, $iSurveyID)
+function fixNumbering($iQuestionID, $iSurveyID)
{
Yii::app()->loadHelper("database");
LimeExpressionManager::RevertUpgradeConditionsToRelevance($iSurveyID);
//Fix a question id - requires renumbering a question
- $oldqid = (int) $fixnumbering;
- $lastqid=Question::model()->getMaxId('qid', true); // Always refresh as we insert new qid's
- $newqid=$lastqid+1;
+ $iQuestionID = (int) $iQuestionID;
+ $iMaxQID=Question::model()->getMaxId('qid', true); // Always refresh as we insert new qid's
+ $iNewQID=$iMaxQID+1;
// Not sure we can do this in MSSQL ?
- $query = "UPDATE {{questions}} SET qid=$newqid WHERE qid=$oldqid";
- $result = db_execute_assosc($query);
+ $sQuery = "UPDATE {{questions}} SET qid=$iNewQID WHERE qid=$iQuestionID";
+ Yii::app()->db->createCommand($sQuery)->query();
// Update subquestions
- $query = "UPDATE {{questions}} SET parent_qid=$newqid WHERE parent_qid=$oldqid";
- $result = db_execute_assosc($query);
+ $sQuery = "UPDATE {{questions}} SET parent_qid=$iNewQID WHERE parent_qid=$iQuestionID";
+ Yii::app()->db->createCommand($sQuery)->query();
//Update conditions.. firstly conditions FOR this question
- $query = "UPDATE {{conditions}} SET qid=$newqid WHERE qid=$oldqid";
- $result = db_execute_assosc($query);
+ $sQuery = "UPDATE {{conditions}} SET qid=$iNewQID WHERE qid=$iQuestionID";
+ Yii::app()->db->createCommand($sQuery)->query();
+ //Update default values
+ $sQuery = "UPDATE {{defaultvalues}} SET qid=$iNewQID WHERE qid=$iQuestionID";
+ Yii::app()->db->createCommand($sQuery)->query();
+ $sQuery = "UPDATE {{defaultvalues}} SET sqid=$iNewQID WHERE sqid=$iQuestionID";
+ Yii::app()->db->createCommand($sQuery)->query();
+ //Update quotas
+ $sQuery = "UPDATE {{quota_members}} SET qid=$iNewQID WHERE qid=$iQuestionID";
+ Yii::app()->db->createCommand($sQuery)->query();
+ //Update url params
+ $sQuery = "UPDATE {{survey_url_parameters}} SET targetqid=$iNewQID WHERE targetqid=$iQuestionID";
+ Yii::app()->db->createCommand($sQuery)->query();
+ $sQuery = "UPDATE {{survey_url_parameters}} SET targetsqid=$iNewQID WHERE targetsqid=$iQuestionID";
+ Yii::app()->db->createCommand($sQuery)->query();
//Now conditions based upon this question
- $query = "SELECT cqid, cfieldname FROM {{conditions}} WHERE cqid=$oldqid";
- $result = dbExecuteAssoc($query);
- foreach ($result->readAll() as $row)
- {
- $switcher[]=array("cqid"=>$row['cqid'], "cfieldname"=>$row['cfieldname']);
+ $sQuery = "SELECT cqid, cfieldname FROM {{conditions}} WHERE cqid=$iQuestionID";
+ $sResult=Yii::app()->db->createCommand($sQuery)->query();
+ foreach ($sResult->readAll() as $row){
+ $aSwitcher[]=array("cqid"=>$row['cqid'], "cfieldname"=>$row['cfieldname']);
}
- if (isset($switcher))
+ if (isset($aSwitcher))
{
- foreach ($switcher as $switch)
+ foreach ($aSwitcher as $aSwitch)
{
- $query = "UPDATE {{conditions}}
- SET cqid=$newqid,
- cfieldname='".str_replace("X".$oldqid, "X".$newqid, $switch['cfieldname'])."'
- WHERE cqid=$oldqid";
- $result = db_execute_assosc($query);
+ $sQuery = "UPDATE {{conditions}}
+ SET cqid=$iNewQID,
+ cfieldname='".str_replace("X".$iQuestionID, "X".$iNewQID, $aSwitch['cfieldname'])."'
+ WHERE cqid=$iQuestionID";
+ $sResult = db_execute_assosc($sQuery);
}
}
- // TMSW Condition->Relevance: (1) Call LEM->ConvertConditionsToRelevance()when done. (2) Should relevance for old conditions be removed first?
//Now question_attributes
- $query = "UPDATE {{question_attributes}} SET qid=$newqid WHERE qid=$oldqid";
- $result = db_execute_assosc($query);
+ $sQuery = "UPDATE {{question_attributes}} SET qid=$iNewQID WHERE qid=$iQuestionID";
+ Yii::app()->db->createCommand($sQuery)->query();
//Now answers
- $query = "UPDATE {{answers}} SET qid=$newqid WHERE qid=$oldqid";
- $result = db_execute_assosc($query);
+ $sQuery = "UPDATE {{answers}} SET qid=$iNewQID WHERE qid=$iQuestionID";
+ Yii::app()->db->createCommand($sQuery)->query();
LimeExpressionManager::UpgradeConditionsToRelevance($iSurveyID);
}
@@ -102,11 +113,11 @@ function checkQuestions($postsid, $iSurveyID, $qtypes)
//CHECK TO MAKE SURE ALL QUESTION TYPES THAT REQUIRE ANSWERS HAVE ACTUALLY GOT ANSWERS
//THESE QUESTION TYPES ARE:
- // # "L" -> LIST
+ // # "L" -> LIST
// # "O" -> LIST WITH COMMENT
// # "M" -> Multiple choice
- // # "P" -> Multiple choice with comments
- // # "A", "B", "C", "E", "F", "H", "^" -> Various Array Types
+ // # "P" -> Multiple choice with comments
+ // # "A", "B", "C", "E", "F", "H", "^" -> Various Array Types
// # "R" -> RANKING
// # "U" -> FILE CSV MORE
// # "I" -> LANGUAGE SWITCH
@@ -214,25 +225,13 @@ function checkQuestions($postsid, $iSurveyID, $qtypes)
}
//CHECK THAT ALL THE CREATED FIELDS WILL BE UNIQUE
- $fieldmap = createFieldMap($iSurveyID,'full',false,false,getBaseLanguageFromSurveyID($iSurveyID));
- if (isset($fieldmap))
- {
- foreach($fieldmap as $fielddata)
- {
- $fieldlist[]=$fielddata['fieldname'];
- }
- $fieldlist=array_reverse($fieldlist); //let's always change the later duplicate, not the earlier one
- }
-
- $checkKeysUniqueComparison = create_function('$value','if ($value > 1) return true;');
- @$duplicates = array_keys (array_filter (array_count_values($fieldlist), $checkKeysUniqueComparison));
- if (isset($duplicates))
+ $fieldmap = createFieldMap($iSurveyID,'full',true,false,getBaseLanguageFromSurveyID($iSurveyID),$aDuplicateQIDs);
+ if (count($aDuplicateQIDs))
{
- foreach ($duplicates as $dup)
+ foreach ($aDuplicateQIDs as $iQID=>$aDuplicate)
{
- $badquestion=arraySearchByKey($dup, $fieldmap, "fieldname", 1);
- $fix = "[Click Here to Fix]";
- $failedcheck[]=array($badquestion['qid'], $badquestion['question'], ": Bad duplicate fieldname $fix", $badquestion['gid']);
+ $sFixLink = "[Click here to fix]";
+ $failedcheck[]=array($iQID, $aDuplicate['question'], ": Bad duplicate fieldname {$sFixLink}", $aDuplicate['gid']);
}
}
if(isset($failedcheck))
@@ -375,15 +374,12 @@ function activateSurvey($iSurveyID, $simulate = false)
$createsurvey[$arow['fieldname']] = "ntext";
}
}
-
-
}
if ($simulate){
return array('dbengine'=>$CI->db->databasetabletype, 'dbtype'=>Yii::app()->db->driverName, 'fields'=>$arrSim);
}
-
// If last question is of type MCABCEFHP^QKJR let's get rid of the ending coma in createsurvey
//$createsurvey = rtrim($createsurvey, ",\n")."\n"; // Does nothing if not ending with a comma
@@ -402,7 +398,7 @@ function activateSurvey($iSurveyID, $simulate = false)
{
if (isset($createsurvey['token'])) Yii::app()->db->createCommand()->createIndex("idx_survey_token_{$iSurveyID}_".rand(1,50000),$tabname,'token');
}
- catch (CDbException $e)
+ catch (CDbException $e)
{
}
diff --git a/application/helpers/common_helper.php b/application/helpers/common_helper.php
index 69d03083df5..f341269cdd3 100644
--- a/application/helpers/common_helper.php
+++ b/application/helpers/common_helper.php
@@ -1800,8 +1800,7 @@ function createCompleteSGQA($iSurveyID,$aFilters,$sLanguage) {
* @param string $sQuestionLanguage The language to use
* @return array
*/
-function createFieldMap($surveyid, $style='short', $force_refresh=false, $questionid=false, $sLanguage) {
- global $aDuplicateQIDs;
+function createFieldMap($surveyid, $style='short', $force_refresh=false, $questionid=false, $sLanguage, &$aDuplicateQIDs=array()) {
$sLanguage = sanitize_languagecode($sLanguage);
$surveyid = sanitize_int($surveyid);