Skip to content

Commit

Permalink
Merge pull request #328 from sieutruc/reorderGroupFeature
Browse files Browse the repository at this point in the history
DEV: [bugfix] auto-calculate the conditions when reordering the questions in the groups
  • Loading branch information
Shnoulle committed Oct 23, 2015
2 parents e64f935 + 1b63644 commit 67df87e
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 16 deletions.
20 changes: 14 additions & 6 deletions application/controllers/admin/surveyadmin.php
Expand Up @@ -1014,6 +1014,7 @@ private function _reorderGroup($iSurveyID)
{
$AOrgData = array();
parse_str($_POST['orgdata'], $AOrgData);

$grouporder = 0;
foreach ($AOrgData['list'] as $ID => $parent)
{
Expand All @@ -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
Expand Down
7 changes: 4 additions & 3 deletions application/helpers/common_helper.php
Expand Up @@ -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
}

Expand Down
13 changes: 6 additions & 7 deletions application/models/Condition.php
Expand Up @@ -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);
}
}
}
Expand Down

0 comments on commit 67df87e

Please sign in to comment.