diff --git a/application/controllers/admin/surveyadmin.php b/application/controllers/admin/surveyadmin.php index e69cf47f432..68cfc3b982b 100644 --- a/application/controllers/admin/surveyadmin.php +++ b/application/controllers/admin/surveyadmin.php @@ -1014,6 +1014,7 @@ private function _reorderGroup($iSurveyID) { $AOrgData = array(); parse_str($_POST['orgdata'], $AOrgData); + $grouporder = 0; foreach ($AOrgData['list'] as $ID => $parent) { @@ -1023,14 +1024,21 @@ private function _reorderGroup($iSurveyID) } elseif ($ID[0] == 'q') { - if (!isset($questionorder[(int)substr($parent, 1)])) - $questionorder[(int)substr($parent, 1)] = 0; - - Question::model()->updateAll(array('question_order' => $questionorder[(int)substr($parent, 1)], 'gid' => (int)substr($parent, 1)), 'qid=:qid', array(':qid' => (int)substr($ID, 1))); + $qid = (int)substr($ID, 1); + $gid = (int)substr($parent, 1); + if (!isset($aQuestionOrder[$gid])) + $aQuestionOrder[$gid] = 0; - Question::model()->updateAll(array('gid' => (int)substr($parent, 1)), 'parent_qid=:parent_qid', array(':parent_qid' => (int)substr($ID, 1))); + $sBaseLanguage = Survey::model()->findByPk($iSurveyID)->language; + $oQuestion = Question::model()->findByPk(array("qid"=>$qid,'language'=>$sBaseLanguage)); + $oldGid = $oQuestion['gid']; - $questionorder[(int)substr($parent, 1)]++; + if($oldGid != $gid) { + fixMovedQuestionConditions($qid,$oldGid,$gid,$iSurveyID); + } + Question::model()->updateAll(array('question_order' => $aQuestionOrder[$gid], 'gid' => $gid), 'qid=:qid', array(':qid' => $qid)); + Question::model()->updateAll(array('gid' => $gid), 'parent_qid=:parent_qid', array(':parent_qid' => $qid)); + $aQuestionOrder[$gid]++; } } LimeExpressionManager::SetDirtyFlag(); // so refreshes syntax highlighting diff --git a/application/helpers/common_helper.php b/application/helpers/common_helper.php index 07c4901889e..524e96108e6 100644 --- a/application/helpers/common_helper.php +++ b/application/helpers/common_helper.php @@ -1310,13 +1310,14 @@ function fixSortOrderGroups($surveyid) //Function rewrites the sortorder for gro QuestionGroup::model()->updateGroupOrder($surveyid,$baselang); } -function fixMovedQuestionConditions($qid,$oldgid,$newgid) //Function rewrites the cfieldname for a question after group change +function fixMovedQuestionConditions($qid,$oldgid,$newgid, $iSurveyID=NULL) //Function rewrites the cfieldname for a question after group change { - $surveyid = Yii::app()->getConfig('sid'); + if(!isset($iSurveyID)) + $iSurveyID = Yii::app()->getConfig('sid'); $qid=sanitize_int($qid); $oldgid=sanitize_int($oldgid); $newgid=sanitize_int($newgid); - Condition::model()->updateCFieldName($surveyid,$qid,$oldgid,$newgid); + Condition::model()->updateCFieldName($iSurveyID,$qid,$oldgid,$newgid); // TMSW Condition->Relevance: Call LEM->ConvertConditionsToRelevance() when done } diff --git a/application/models/Condition.php b/application/models/Condition.php index 94dd3678676..2fa1800901d 100644 --- a/application/models/Condition.php +++ b/application/models/Condition.php @@ -106,15 +106,14 @@ public function updateCFieldName($iSurveyID, $iQuestionID, $iOldGroupID, $iNewGr $oResults=$this->findAllByAttributes(array('cqid'=>$iQuestionID)); foreach ($oResults as $oRow) { - $cfnregs=''; - if (preg_match('/'.$surveyid."X".$iOldGroupID."X".$iQuestionID."(.*)/", $oRow->cfieldname, $cfnregs) > 0) + if (preg_match('/(\S*?)'.$iSurveyID."X".$iOldGroupID."X".$iQuestionID."(.*)/", $oRow->cfieldname, $cfnregs) > 0) { - $newcfn=$surveyid."X".$iNewGroupID."X".$iQuestionID.$cfnregs[1]; - $c2query="UPDATE ".db_table_name('conditions') - ." SET cfieldname='{$newcfn}' WHERE cid={$oRow->cid}"; - - Yii::app()->db->createCommand($c2query)->query(); + $sNewCfn=$cfnregs[1].$iSurveyID."X".$iNewGroupID."X".$iQuestionID.$cfnregs[2]; + Yii::app()->db->createCommand() + ->update($this->tableName(), array('cfieldname' => $sNewCfn), + 'cid=:cid',array(':cid'=>$oRow->cid)); + LimeExpressionManager::UpgradeConditionsToRelevance($iSurveyID,$oRow->qid); } } }