Skip to content

Commit

Permalink
New Feature #05269: Use ExpressionManager for Branching logic as opti…
Browse files Browse the repository at this point in the history
…onal alternative to Conditions

BugFix of All-in-one navigation (was not re-displaying page when there are violations of mandatory or validation rules)

git-svn-id: file:///Users/Shitiz/Downloads/lssvn/source/limesurvey_dev_tms@11608 b72ed6b6-b9f8-46b5-92b4-906544132732
  • Loading branch information
TMSWhite committed Dec 7, 2011
1 parent f09b45c commit 02d4a3e
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 27 deletions.
2 changes: 1 addition & 1 deletion classes/eval/ExpressionManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -1189,7 +1189,7 @@ public function GetJavascriptTestforExpression($expected,$num)
$jsParts = array();
$jsParts[] = "val = " . $expr . ";\n";
$jsParts[] = "klass = (LEMeq(addslashes(val),'" . addslashes($expected) . "')) ? 'ok' : 'error';\n";
$jsParts[] = "document.getElementById('test_" . $num . "').innerHTML=htmlspecialchars(val);\n";
$jsParts[] = "document.getElementById('test_" . $num . "').innerHTML=(val);\n";
$jsParts[] = "document.getElementById('test_" . $num . "').className=klass;\n";
return implode('',$jsParts);

Expand Down
46 changes: 31 additions & 15 deletions classes/eval/LimeExpressionManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class LimeExpressionManager {
private $currentQuestionSeq; // for Question-by-Question mode, the 0-based index
private $currentQID; // used in Question-by-Question modecu
private $currentQset=NULL; // set of the current set of questions to be displayed, indexed by QID - at least one must be relevant
private $lastMoveResult=NULL; // last result of NavigateForwards, NavigateBackwards, or JumpTo
private $indexQseq; // array of information needed to generate navigation index in question-by-question mode
private $indexGseq; // array of information needed to generate navigation index in group-by-group mode
private $gseq2info; // array of group sequence number to static info
Expand Down Expand Up @@ -2195,7 +2196,7 @@ static function NavigateForwards($force=false) {
}
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,$finished);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>$finished,
'message'=>$message,
'gseq'=>1,
Expand All @@ -2205,6 +2206,7 @@ static function NavigateForwards($force=false) {
'unansweredSQs'=>$result['unansweredSQs'],
'invalidSQs'=>$result['invalidSQs'],
);
return $LEM->lastMoveResult;
break;
case 'group':
// First validate the current group
Expand All @@ -2221,7 +2223,7 @@ static function NavigateForwards($force=false) {
// redisplay the current group
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,false);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>false,
'message'=>$message,
'gseq'=>$LEM->currentGroupSeq,
Expand All @@ -2231,6 +2233,7 @@ static function NavigateForwards($force=false) {
'unansweredSQs'=>$result['unansweredSQs'],
'invalidSQs'=>$result['invalidSQs'],
);
return $LEM->lastMoveResult;
}
}
while (true)
Expand All @@ -2240,7 +2243,7 @@ static function NavigateForwards($force=false) {
{
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,true);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>true,
'message'=>$message,
'gseq'=>$LEM->currentGroupSeq,
Expand All @@ -2250,6 +2253,7 @@ static function NavigateForwards($force=false) {
'unansweredSQs'=>(isset($result['unansweredSQs']) ? $result['unansweredSQs'] : ''),
'invalidSQs'=>(isset($result['invalidSQs']) ? $result['invalidSQs'] : ''),
);
return $LEM->lastMoveResult;
}

$result = $LEM->_ValidateGroup($LEM->currentGroupSeq);
Expand All @@ -2265,7 +2269,7 @@ static function NavigateForwards($force=false) {
// display new group
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,false);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>false,
'message'=>$message,
'gseq'=>$LEM->currentGroupSeq,
Expand All @@ -2275,6 +2279,7 @@ static function NavigateForwards($force=false) {
'unansweredSQs'=>$result['unansweredSQs'],
'invalidSQs'=>$result['invalidSQs'],
);
return $LEM->lastMoveResult;
}
}
break;
Expand All @@ -2292,7 +2297,7 @@ static function NavigateForwards($force=false) {
// redisplay the current question
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,false);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>false,
'message'=>$message,
'qseq'=>$LEM->currentQuestionSeq,
Expand All @@ -2303,6 +2308,7 @@ static function NavigateForwards($force=false) {
'unansweredSQs'=>$result['unansweredSQs'],
'invalidSQs'=>$result['invalidSQs'],
);
return $LEM->lastMoveResult;
}
}
while (true)
Expand All @@ -2312,7 +2318,7 @@ static function NavigateForwards($force=false) {
{
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,true);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>true,
'message'=>$message,
'qseq'=>$LEM->currentQuestionSeq,
Expand All @@ -2323,6 +2329,7 @@ static function NavigateForwards($force=false) {
'unansweredSQs'=>(isset($result['unansweredSQs']) ? $result['unansweredSQs'] : ''),
'invalidSQs'=>(isset($result['invalidSQs']) ? $result['invalidSQs'] : ''),
);
return $LEM->lastMoveResult;
}

// Set certain variables normally set by StartProcessingGroup()
Expand Down Expand Up @@ -2351,7 +2358,7 @@ static function NavigateForwards($force=false) {
// display new question
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,false);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>false,
'message'=>$message,
'qseq'=>$LEM->currentQuestionSeq,
Expand All @@ -2362,6 +2369,7 @@ static function NavigateForwards($force=false) {
'unansweredSQs'=>$result['unansweredSQs'],
'invalidSQs'=>$result['invalidSQs'],
);
return $LEM->lastMoveResult;
}
}
break;
Expand Down Expand Up @@ -2496,7 +2504,7 @@ private function _UpdateValuesInDatabase($updatedValues, $finished=false)
* @param <type> $preview - if true, then treat this group/question as relevant, even if it is not, so that it can be displayed
* @return <type>
*/
static function JumpTo($seq,$force=false,$preview=false) {
static function JumpTo($seq,$preview=false,$force=false) {
$now = microtime(true);
$LEM =& LimeExpressionManager::singleton();

Expand All @@ -2522,7 +2530,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
// redisplay the current group
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,false);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>false,
'message'=>$message,
'gseq'=>$LEM->currentGroupSeq,
Expand All @@ -2532,6 +2540,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
'unansweredSQs'=>$result['unansweredSQs'],
'invalidSQs'=>$result['invalidSQs'],
);
return $LEM->lastMoveResult;
}
}
$LEM->currentGroupSeq = $seq-1; // Try to jump to the requested group, but navigate to next if needed
Expand All @@ -2542,7 +2551,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
{
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,true);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>true,
'message'=>$message,
'gseq'=>$LEM->currentGroupSeq,
Expand All @@ -2552,6 +2561,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
'unansweredSQs'=>(isset($result['unansweredSQs']) ? $result['unansweredSQs'] : ''),
'invalidSQs'=>(isset($result['invalidSQs']) ? $result['invalidSQs'] : ''),
);
return $LEM->lastMoveResult;
}

$result = $LEM->_ValidateGroup($LEM->currentGroupSeq);
Expand All @@ -2567,7 +2577,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
// display new group
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,false);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>false,
'message'=>$message,
'gseq'=>$LEM->currentGroupSeq,
Expand All @@ -2577,6 +2587,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
'unansweredSQs'=>$result['unansweredSQs'],
'invalidSQs'=>$result['invalidSQs'],
);
return $LEM->lastMoveResult;
}
}
break;
Expand All @@ -2594,7 +2605,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
// redisplay the current question
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,false);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>false,
'message'=>$message,
'qseq'=>$LEM->currentQuestionSeq,
Expand All @@ -2605,6 +2616,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
'unansweredSQs'=>$result['unansweredSQs'],
'invalidSQs'=>$result['invalidSQs'],
);
return $LEM->lastMoveResult;
}
}
$LEM->currentQuestionSeq=$seq-1; // try to jump to requeted question, but go on to next if needed
Expand All @@ -2615,7 +2627,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
{
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,true);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>true,
'message'=>$message,
'qseq'=>$LEM->currentQuestionSeq,
Expand All @@ -2626,6 +2638,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
'unansweredSQs'=>$result['unansweredSQs'],
'invalidSQs'=>$result['invalidSQs'],
);
return $LEM->lastMoveResult;
}

// Set certain variables normally set by StartProcessingGroup()
Expand Down Expand Up @@ -2654,7 +2667,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
// display new question
$message .= $LEM->_UpdateValuesInDatabase($updatedValues,false);
$LEM->runtimeTimings[] = array(__METHOD__,(microtime(true) - $now));
return array(
$LEM->lastMoveResult = array(
'finished'=>false,
'message'=>$message,
'qseq'=>$LEM->currentQuestionSeq,
Expand All @@ -2665,6 +2678,7 @@ static function JumpTo($seq,$force=false,$preview=false) {
'unansweredSQs'=>$result['unansweredSQs'],
'invalidSQs'=>$result['invalidSQs'],
);
return $LEM->lastMoveResult;
}
}
break;
Expand Down Expand Up @@ -3533,7 +3547,9 @@ static function GetStepIndexInfo($step=NULL)
$LEM =& LimeExpressionManager::singleton();
switch ($LEM->surveyMode)
{
default:
case 'survey':
return $LEM->lastMoveResult;
break;
case 'group':
if (is_null($step)) {
return $LEM->indexGseq;
Expand Down
2 changes: 1 addition & 1 deletion classes/eval/test/navigation_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@
while(true) {
$now = microtime(true);
// LimeExpressionManager::StartProcessingPage();
$result = LimeExpressionManager::NavigateForwards(true,true);
$result = LimeExpressionManager::NavigateForwards(true);
print $result['message'] . "<br/>";
// LimeExpressionManager::FinishProcessingGroup(); // move this internally? This is what is needed to save group data so visible to GetRelevanceAndTailoringJavaScript()
LimeExpressionManager::FinishProcessingPage();
Expand Down

0 comments on commit 02d4a3e

Please sign in to comment.