From 605b8f5ec3dfba7fc5b42267d8597aa2417c0e4f Mon Sep 17 00:00:00 2001 From: Denis Chenu Date: Tue, 25 Nov 2014 10:06:53 +0100 Subject: [PATCH] Fixed issue #09344: AND rules with ATTRIBUTE disappear when modify and importing the survey Dev : importing : bad order for getConditionsForEM : with $qid set : it work Dev : modify : debug to 2 show Notice, surely broke before Dev : reset the relevance equation when show condition (if needed) Dev : TODO : use Yii on getConditionsForEM, but big request here --- .../controllers/admin/conditionsaction.php | 49 ++++++++++++------- .../helpers/expressions/em_manager_helper.php | 4 +- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/application/controllers/admin/conditionsaction.php b/application/controllers/admin/conditionsaction.php index 5a8a28324e6..c77281b8b57 100644 --- a/application/controllers/admin/conditionsaction.php +++ b/application/controllers/admin/conditionsaction.php @@ -204,12 +204,15 @@ function index($subaction, $iSurveyID=null, $gid=null, $qid=null) if (isset($p_subaction) && $p_subaction == "insertcondition") { - if (( !isset($p_canswers) && - !isset($_POST['ConditionConst']) && - !isset($_POST['prevQuestionSGQA']) && - !isset($_POST['tokenAttr']) && - !isset($_POST['ConditionRegexp'])) || - (!isset($p_cquestions) && !isset($p_csrctoken)) + if ( + ( + !isset($p_canswers) && + !isset($_POST['ConditionConst']) && + !isset($_POST['prevQuestionSGQA']) && + !isset($_POST['tokenAttr']) && + !isset($_POST['ConditionRegexp']) + ) || + (!isset($p_cquestions) && !isset($p_csrctoken)) ) { $conditionsoutput_action_error .= CHtml::script("\n\n"); @@ -413,7 +416,6 @@ function index($subaction, $iSurveyID=null, $gid=null, $qid=null) // COPY CONDITIONS IF THIS IS COPY if ( isset($p_subaction) && $p_subaction == "copyconditions" ) { - $qid = returnGlobal('qid'); $copyconditionsfrom = returnGlobal('copyconditionsfrom'); $copyconditionsto = returnGlobal('copyconditionsto'); @@ -1147,13 +1149,14 @@ function index($subaction, $iSurveyID=null, $gid=null, $qid=null) $aViewUrls['conditionshead_view'][] = $aData; //BEGIN DISPLAY CONDITIONS FOR THIS QUESTION - if ( $subaction == 'index' || - $subaction == 'editconditionsform' || $subaction == 'insertcondition' || - $subaction == "editthiscondition" || $subaction == "delete" || - $subaction == "updatecondition" || $subaction == "deletescenario" || - $subaction == "renumberscenarios" || $subaction == "deleteallconditions" || - $subaction == "updatescenario" || - $subaction == 'copyconditionsform' || $subaction == 'copyconditions' || $subaction == 'conditions' + if ( + $subaction == 'index' || + $subaction == 'editconditionsform' || $subaction == 'insertcondition' || + $subaction == "editthiscondition" || $subaction == "delete" || + $subaction == "updatecondition" || $subaction == "deletescenario" || + $subaction == "renumberscenarios" || $subaction == "deleteallconditions" || + $subaction == "updatescenario" || + $subaction == 'copyconditionsform' || $subaction == 'copyconditions' || $subaction == 'conditions' ) { @@ -1375,13 +1378,21 @@ function index($subaction, $iSurveyID=null, $gid=null, $qid=null) { $leftOperandType = 'tokenattr'; $aTokenAttrNames=getTokenFieldsAndNames($iSurveyID); - if (count($aTokenAttrNames) != 0) + if(isset($aTokenAttrNames[strtolower($extractedTokenAttr[1])])) { - $thisAttrName=HTMLEscape($aTokenAttrNames[strtolower($extractedTokenAttr[1])]['description'])." [".gT("From token table")."]"; + $thisAttrName=HTMLEscape($aTokenAttrNames[strtolower($extractedTokenAttr[1])]['description']); } else { - $thisAttrName=HTMLEscape($extractedTokenAttr[1])." [".gT("Inexistant token table")."]"; + $thisAttrName=HTMLEscape($extractedTokenAttr[1]); + } + if(tableExists("{{tokens_$iSurveyID}}")) + { + $thisAttrName.= " [".gT("From token table")."]"; + } + else + { + $thisAttrName.= " [".gT("Inexistant token table")."]"; } $aViewUrls['output'] .= "\t$thisAttrName\n"; // TIBO not sure this is used anymore !! @@ -1565,10 +1576,10 @@ function index($subaction, $iSurveyID=null, $gid=null, $qid=null) } } - - $s++; } + // If we have a condition, allways reset the condition, this can fix old import (see #09344) + LimeExpressionManager::UpgradeConditionsToRelevance(NULL,$qid); } else { // no condition ==> disable delete all conditions button, and display a simple comment diff --git a/application/helpers/expressions/em_manager_helper.php b/application/helpers/expressions/em_manager_helper.php index 0f8cc30a15c..ec7e4592100 100644 --- a/application/helpers/expressions/em_manager_helper.php +++ b/application/helpers/expressions/em_manager_helper.php @@ -8065,11 +8065,11 @@ private static function getConditionsForEM($surveyid=NULL, $qid=NULL) $databasetype = Yii::app()->db->getDriverName(); if ($databasetype=='mssql' || $databasetype=='dblib') { - $query .= " order by sid, c.qid, scenario, cqid, cfieldname, value"; + $query .= " order by c.qid, sid, scenario, cqid, cfieldname, value"; } else { - $query .= " order by sid, qid, scenario, cqid, cfieldname, value"; + $query .= " order by qid, sid, scenario, cqid, cfieldname, value"; } return Yii::app()->db->createCommand($query)->query();