Skip to content

Commit

Permalink
Fixed issue : Error after reordering a question used in condition
Browse files Browse the repository at this point in the history
Dev: add a feature that allows re-calculating the condition of a question when user moves that question to another group
  • Loading branch information
sieutruc committed Oct 23, 2015
1 parent c3c3a9a commit d19113b
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 16 deletions.
19 changes: 12 additions & 7 deletions application/controllers/admin/surveyadmin.php
Expand Up @@ -1013,6 +1013,7 @@ private function _reorderGroup($iSurveyID)
{
$AOrgData = array();
parse_str($_POST['orgdata'], $AOrgData);

$grouporder = 0;
foreach ($AOrgData['list'] as $ID => $parent)
{
Expand All @@ -1022,14 +1023,18 @@ 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)));

Question::model()->updateAll(array('gid' => (int)substr($parent, 1)), 'parent_qid=:parent_qid', array(':parent_qid' => (int)substr($ID, 1)));
$qid = (int)substr($ID, 1);
$gid = (int)substr($parent, 1);
if (!isset($questionorder[$gid]))
$questionorder[$gid] = 0;
$oldgid=Question::model()->getQuestionById($qid)['gid'];
if($oldgid != $gid) {
fixMovedQuestionConditions($qid,$oldgid,$gid,$iSurveyID);
}
Question::model()->updateAll(array('question_order' => $questionorder[$gid], 'gid' => $gid), 'qid=:qid', array(':qid' => $qid));
Question::model()->updateAll(array('gid' => $gid), 'parent_qid=:parent_qid', array(':parent_qid' => $qid));

$questionorder[(int)substr($parent, 1)]++;
$questionorder[$gid]++;
}
}
LimeExpressionManager::SetDirtyFlag(); // so refreshes syntax highlighting
Expand Down
5 changes: 3 additions & 2 deletions application/helpers/common_helper.php
Expand Up @@ -1310,9 +1310,10 @@ 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, $surveyid=NULL) //Function rewrites the cfieldname for a question after group change
{
$surveyid = Yii::app()->getConfig('sid');
if(!isset($surveyid))
$surveyid = Yii::app()->getConfig('sid');
$qid=sanitize_int($qid);
$oldgid=sanitize_int($oldgid);
$newgid=sanitize_int($newgid);
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();
$newcfn=$cfnregs[1].$iSurveyID."X".$iNewGroupID."X".$iQuestionID.$cfnregs[2];
$update = Yii::app()->db->createCommand()
->update($this->tableName(), array('cfieldname' => $newcfn),
'cid=:cid',array(':cid'=>$oRow->cid));
LimeExpressionManager::UpgradeConditionsToRelevance($iSurveyID,$oRow->qid);
}
}
}
Expand Down
10 changes: 10 additions & 0 deletions application/models/Question.php
Expand Up @@ -266,6 +266,16 @@ public function getAdvancedSettingsWithValues($iQuestionID, $sQuestionType, $iSu
return $aAttributeNames;
}

function getQuestionById($qid)
{
return Yii::app()->db->createCommand()
->select()
->from(self::tableName())
->where('qid=:qid')
->bindParam(":qid", $qid, PDO::PARAM_INT)
->queryRow();
}

function getQuestions($sid, $gid, $language)
{
return Yii::app()->db->createCommand()
Expand Down

0 comments on commit d19113b

Please sign in to comment.