$val) { $p_canswers[$key]= preg_replace("/[^_.a-zA-Z0-9]@/", "", $val); } } } // this array will be used soon, // to explain wich conditions is used to evaluate the question if (isset($stringcomparizonoperators) && $stringcomparizonoperators == 1) { $method = array( "<" => $clang->gT("Less than"), "<=" => $clang->gT("Less than or equal to"), "==" => $clang->gT("equals"), "!=" => $clang->gT("Not equal to"), ">=" => $clang->gT("Greater than or equal to"), ">" => $clang->gT("Greater than"), "RX" => $clang->gT("Regular expression"), "a $clang->gT("Less than (Strings)"), "a<=b" => $clang->gT("Less than or equal to (Strings)"), "a>=b" => $clang->gT("Greater than or equal to (Strings)"), "a>b" => $clang->gT("Greater than (Strings)") ); } else { $method = array( "<" => $clang->gT("Less than"), "<=" => $clang->gT("Less than or equal to"), "==" => $clang->gT("equals"), "!=" => $clang->gT("Not equal to"), ">=" => $clang->gT("Greater than or equal to"), ">" => $clang->gT("Greater than"), "RX" => $clang->gT("Regular expression") ); } if (isset($_POST['method'])) { if (!in_array($_POST['method'], array_keys($method))) { $p_method = "=="; } else { $p_method = trim ($_POST['method']); } } if (isset($_POST['newscenarionum'])) { $p_newscenarionum = sanitize_int($_POST['newscenarionum']); } //END Sanitizing POSTed data include_once("login_check.php"); include_once("database.php"); // Caution (lemeur): database.php uses auto_unescape on all entries in $_POST // Take care to not use auto_unescape on $_POST variables after this //MAKE SURE THAT THERE IS A SID if (!isset($surveyid) || !$surveyid) { $conditionsoutput = "
".$clang->gT("Conditions manager")."
\n" ."
\n" ."\t
".$clang->gT("Error")."

" .$clang->gT("You have not selected a survey")."

" ."
\n" ."
\n"; return; } //MAKE SURE THAT THERE IS A QID if (!isset($qid) || !$qid) { $conditionsoutput = "
".$clang->gT("Conditions manager")."
\n" ."
\n" ."\t
".$clang->gT("Error")."

" .$clang->gT("You have not selected a question")."

" ."
\n" ."
\n"; return; } // If we made it this far, then lets develop the menu items // add the conditions container table $extraGetParams =""; if (isset($qid) && isset($gid)) { $extraGetParams="&gid=$gid&qid=$qid"; } $conditionsoutput_header = "\n" ."\n"; //Now display the information and forms //BEGIN: PREPARE JAVASCRIPT TO SHOW MATCHING ANSWERS TO SELECTED QUESTION $conditionsoutput_main_content .= "\n"; $conditionsoutput_main_content .= "\n"; //END: PREPARE JAVASCRIPT TO SHOW MATCHING ANSWERS TO SELECTED QUESTION //BEGIN DISPLAY CONDITIONS FOR THIS QUESTION if ($subaction=='' || $subaction=='editconditionsform' || $subaction=='insertcondition' || $subaction == "editthiscondition" || $subaction == "delete" || $subaction == "updatecondition" || $subaction == "deletescenario" || $subaction == "renumberscenarios" || $subaction == "deleteallconditions" || $subaction == "updatescenario" || $subaction=='copyconditionsform' || $subaction=='copyconditions') { $conditionsoutput_main_content .= "\n"; } //END DISPLAY CONDITIONS FOR THIS QUESTION // Separator $conditionsoutput_main_content .= "\t\n"; // BEGIN: DISPLAY THE COPY CONDITIONS FORM if ($subaction == "copyconditionsform" || $subaction == "copyconditions") { $conditionsoutput_main_content .= "\n"; } // END: DISPLAY THE COPY CONDITIONS FORM if ( isset($cquestions) ) { if ( count($cquestions) > 0 && count($cquestions) <=10) { $qcount = count($cquestions); } else { $qcount = 9; } } else { $qcount = 0; } //BEGIN: DISPLAY THE ADD or EDIT CONDITION FORM if ($subaction == "editconditionsform" || $subaction == "insertcondition" || $subaction == "updatecondition" || $subaction == "deletescenario" || $subaction == "renumberscenarios" || $subaction == "deleteallconditions" || $subaction == "updatescenario" || $subaction == "editthiscondition" || $subaction == "delete") { $conditionsoutput_main_content .= "\n"; } //END: DISPLAY THE ADD or EDIT CONDITION FORM $conditionsoutput_main_content .= "
\n"; $conditionsoutput_menubar = ""; // will be defined later when we have enough information about the questions $conditionsoutput_action_error = ""; // defined during the actions $conditionsoutput_main_content = ""; // everything after the menubar $markcidarray=Array(); if (isset($_GET['markcid'])) { $markcidarray=explode("-",$_GET['markcid']); } //BEGIN PROCESS ACTIONS // ADD NEW ENTRY IF THIS IS AN ADD 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))) { $conditionsoutput_action_error .= "\n"; } else { if (isset($p_cquestions) && $p_cquestions != '') { $conditionCfieldname=$p_cquestions; } elseif(isset($p_csrctoken) && $p_csrctoken != '') { $conditionCfieldname=$p_csrctoken; } if (isset($p_canswers)) { foreach ($p_canswers as $ca) { //First lets make sure there isn't already an exact replica of this condition $query = "SELECT * FROM {$dbprefix}conditions\n" ."WHERE qid='$qid'\n" ."AND scenario='".$p_scenario."'\n" ."AND cqid='".$p_cqid."'\n" ."AND cfieldname='".$conditionCfieldname."'\n" ."AND method='".$p_method."'\n" ."AND value='".$ca."'"; $result = $connect->Execute($query) or safe_die("Couldn't check for existing condition
$query
".$connect->ErrorMsg()); $count_caseinsensitivedupes = $result->RecordCount(); if ($count_caseinsensitivedupes == 0) { $query = "INSERT INTO {$dbprefix}conditions (qid, scenario, cqid, cfieldname, method, value) VALUES " . "('{$qid}', '{$p_scenario}', '{$p_cqid}', '{$conditionCfieldname}', '{$p_method}', '$ca')"; $result = $connect->Execute($query) or safe_die ("Couldn't insert new condition
$query
".$connect->ErrorMsg()); } } } unset($posted_condition_value); // Please note that auto_unescape is already applied in database.php included above // so we only need to db_quote _POST variables if (isset($_POST['ConditionConst']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab']=="#CONST") { $posted_condition_value = db_quote($_POST['ConditionConst']); } elseif (isset($_POST['prevQuestionSGQA']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab']=="#PREVQUESTIONS") { $posted_condition_value = db_quote($_POST['prevQuestionSGQA']); } elseif (isset($_POST['tokenAttr']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab']=="#TOKENATTRS") { $posted_condition_value = db_quote($_POST['tokenAttr']); } elseif (isset($_POST['ConditionRegexp']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab']=="#REGEXP") { $posted_condition_value = db_quote($_POST['ConditionRegexp']); } if (isset($posted_condition_value)) { $query = "INSERT INTO {$dbprefix}conditions (qid, scenario, cqid, cfieldname, method, value) VALUES " . "('{$qid}', '{$p_scenario}', '{$p_cqid}', '{$conditionCfieldname}', '{$p_method}', '".$posted_condition_value."')"; $result = $connect->Execute($query) or safe_die ("Couldn't insert new condition
$query
".$connect->ErrorMsg()); } } LimeExpressionManager::UpgradeConditionsToRelevance(NULL,$qid); } // UPDATE ENTRY IF THIS IS AN EDIT if (isset($p_subaction) && $p_subaction == "updatecondition") { 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 .= "\n"; } else { if (isset($p_cquestions) && $p_cquestions != '') { $conditionCfieldname=$p_cquestions; } elseif(isset($p_csrctoken) && $p_csrctoken != '') { $conditionCfieldname=$p_csrctoken; } if (isset($p_canswers)) { foreach ($p_canswers as $ca) { // This is an Edit, there will only be ONE VALUE $query = "UPDATE {$dbprefix}conditions SET qid='{$qid}', scenario='{$p_scenario}', cqid='{$p_cqid}', cfieldname='{$conditionCfieldname}', method='{$p_method}', value='$ca' " . " WHERE cid={$p_cid}"; $result = $connect->Execute($query) or safe_die ("Couldn't update condition
$query
".$connect->ErrorMsg()); } } unset($posted_condition_value); // Please note that auto_unescape is already applied in database.php included above // so we only need to db_quote _POST variables if (isset($_POST['ConditionConst']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab']=="#CONST") { $posted_condition_value = db_quote($_POST['ConditionConst']); } elseif (isset($_POST['prevQuestionSGQA']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab']=="#PREVQUESTIONS") { $posted_condition_value = db_quote($_POST['prevQuestionSGQA']); } elseif (isset($_POST['tokenAttr']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab']=="#TOKENATTRS") { $posted_condition_value = db_quote($_POST['tokenAttr']); } elseif (isset($_POST['ConditionRegexp']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab']=="#REGEXP") { $posted_condition_value = db_quote($_POST['ConditionRegexp']); } if (isset($posted_condition_value)) { $query = "UPDATE {$dbprefix}conditions SET qid='{$qid}', scenario='{$p_scenario}' , cqid='{$p_cqid}', cfieldname='{$conditionCfieldname}', method='{$p_method}', value='".$posted_condition_value."' " . " WHERE cid={$p_cid}"; $result = $connect->Execute($query) or safe_die ("Couldn't insert new condition
$query
".$connect->ErrorMsg()); } } LimeExpressionManager::UpgradeConditionsToRelevance(NULL,$qid); } // DELETE ENTRY IF THIS IS DELETE if (isset($p_subaction) && $p_subaction == "delete") { LimeExpressionManager::RevertUpgradeConditionsToRelevance(NULL,$qid); // in case deleted the last condition $query = "DELETE FROM {$dbprefix}conditions WHERE cid={$p_cid}"; $result = $connect->Execute($query) or safe_die ("Couldn't delete condition
$query
".$connect->ErrorMsg()); LimeExpressionManager::UpgradeConditionsToRelevance(NULL,$qid); } // DELETE ALL CONDITIONS IN THIS SCENARIO if (isset($p_subaction) && $p_subaction == "deletescenario") { LimeExpressionManager::RevertUpgradeConditionsToRelevance(NULL,$qid); // in case deleted the last condition $query = "DELETE FROM {$dbprefix}conditions WHERE qid={$qid} AND scenario={$p_scenario}"; $result = $connect->Execute($query) or safe_die ("Couldn't delete scenario
$query
".$connect->ErrorMsg()); LimeExpressionManager::UpgradeConditionsToRelevance(NULL,$qid); } // UPDATE SCENARIO if (isset($p_subaction) && $p_subaction == "updatescenario" && isset($p_newscenarionum)) { $query = "UPDATE {$dbprefix}conditions SET scenario=$p_newscenarionum WHERE qid={$qid} AND scenario={$p_scenario}"; $result = $connect->Execute($query) or safe_die ("Couldn't update scenario
$query
".$connect->ErrorMsg()); LimeExpressionManager::UpgradeConditionsToRelevance(NULL,$qid); } // DELETE ALL CONDITIONS FOR THIS QUESTION if (isset($p_subaction) && $p_subaction == "deleteallconditions") { LimeExpressionManager::RevertUpgradeConditionsToRelevance(NULL,$qid); $query = "DELETE FROM {$dbprefix}conditions WHERE qid={$qid}"; $result = $connect->Execute($query) or safe_die ("Couldn't delete scenario
$query
".$connect->ErrorMsg()); } // RENUMBER SCENARIOS if (isset($p_subaction) && $p_subaction == "renumberscenarios") { $query = "SELECT DISTINCT scenario FROM {$dbprefix}conditions WHERE qid={$qid} ORDER BY scenario"; $result = $connect->Execute($query) or safe_die ("Couldn't select scenario
$query
".$connect->ErrorMsg()); $newindex=1; while ($srow = $result->FetchRow()) { $query2 = "UPDATE {$dbprefix}conditions set scenario=$newindex WHERE qid={$qid} AND scenario=".$srow['scenario'].";"; $result2 = $connect->Execute($query2) or safe_die ("Couldn't renumber scenario
$query
".$connect->ErrorMsg()); $newindex++; } LimeExpressionManager::UpgradeConditionsToRelevance(NULL,$qid); } // COPY CONDITIONS IF THIS IS COPY if (isset($p_subaction) && $p_subaction == "copyconditions") { $qid=returnglobal('qid'); $copyconditionsfrom=returnglobal('copyconditionsfrom'); $copyconditionsto=returnglobal('copyconditionsto'); if (isset($copyconditionsto) && is_array($copyconditionsto) && isset($copyconditionsfrom) && is_array($copyconditionsfrom)) { //Get the conditions we are going to copy $query = "SELECT * FROM {$dbprefix}conditions\n" ."WHERE cid in ('"; $query .= implode("', '", $copyconditionsfrom); $query .= "')"; $result = db_execute_assoc($query) or safe_die("Couldn't get conditions for copy
$query
".$connect->ErrorMsg()); while($row=$result->FetchRow()) { $proformaconditions[]=array("scenario"=>$row['scenario'], "cqid"=>$row['cqid'], "cfieldname"=>$row['cfieldname'], "method"=>$row['method'], "value"=>$row['value']); } // while foreach ($copyconditionsto as $copyc) { list($newsid, $newgid, $newqid)=explode("X", $copyc); foreach ($proformaconditions as $pfc) { //TIBO //First lets make sure there isn't already an exact replica of this condition $query = "SELECT * FROM {$dbprefix}conditions\n" ."WHERE qid='$newqid'\n" ."AND scenario='".$pfc['scenario']."'\n" ."AND cqid='".$pfc['cqid']."'\n" ."AND cfieldname='".$pfc['cfieldname']."'\n" ."AND method='".$pfc['method']."'\n" ."AND value='".$pfc['value']."'"; $result = $connect->Execute($query) or safe_die("Couldn't check for existing condition
$query
".$connect->ErrorMsg()); $count_caseinsensitivedupes = $result->RecordCount(); $countduplicates = 0; if ($count_caseinsensitivedupes != 0) { while ($ccrow=$result->FetchRow()) { if ($ccrow['value'] == $pfc['value']) $countduplicates++; } } if ($countduplicates == 0) //If there is no match, add the condition. { $query = "INSERT INTO {$dbprefix}conditions ( qid,scenario,cqid,cfieldname,method,value) \n" ."VALUES ( '$newqid', '".$pfc['scenario']."', '".$pfc['cqid']."'," ."'".$pfc['cfieldname']."', '".$pfc['method']."'," ."'".$pfc['value']."')"; $result=$connect->Execute($query) or safe_die ("Couldn't insert query
$query
".$connect->ErrorMsg()); $conditionCopied=true; } else { $conditionDuplicated=true; } } } if (isset($conditionCopied) && $conditionCopied === true) { if (isset($conditionDuplicated) && $conditionDuplicated ==true) { $CopyConditionsMessage = "
(".$clang->gT("Conditions successfully copied (some were skipped because they were duplicates)").")
"; } else { $CopyConditionsMessage = "
(".$clang->gT("Conditions successfully copied").")
"; } } else { $CopyConditionsMessage = "
(".$clang->gT("No conditions could be copied (due to duplicates)").")
"; } } LimeExpressionManager::UpgradeConditionsToRelevance($surveyid); // do for whole survey, since don't know which questions affected. } //END PROCESS ACTIONS $cquestions=Array(); $canswers=Array(); //BEGIN: GATHER INFORMATION // 1: Get information for this question if (!isset($qid)) {$qid=returnglobal('qid');} if (!isset($surveyid)) {$surveyid=returnglobal('sid');} $thissurvey=getSurveyInfo($surveyid); $query = "SELECT * " ."FROM {$dbprefix}questions, " ."{$dbprefix}groups " ."WHERE {$dbprefix}questions.gid={$dbprefix}groups.gid " ."AND qid=$qid " ."AND parent_qid=0 " ."AND {$dbprefix}questions.language='".GetBaseLanguageFromSurveyID($surveyid)."'" ; $result = db_execute_assoc($query) or safe_die ("Couldn't get information for question $qid
$query
".$connect->ErrorMsg()); while ($rows=$result->FetchRow()) { $questiongroupname=$rows['group_name']; $questiontitle=$rows['title']; $questiontext=$rows['question']; $questiontype=$rows['type']; } // 2: Get all other questions that occur before this question that are pre-determined answer types // To avoid natural sort order issues, // first get all questions in natural sort order // , and find out which number in that order this question is $qquery = "SELECT * " ."FROM {$dbprefix}questions, " ."{$dbprefix}groups " ."WHERE {$dbprefix}questions.gid={$dbprefix}groups.gid " ."AND parent_qid=0 " ."AND {$dbprefix}questions.sid=$surveyid " ."AND {$dbprefix}questions.language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."AND {$dbprefix}groups.language='".GetBaseLanguageFromSurveyID($surveyid)."' " ; $qresult = db_execute_assoc($qquery) or safe_die ("$qquery
".$connect->ErrorMsg()); $qrows = $qresult->GetRows(); // Perform a case insensitive natural sort on group name then question title (known as "code" in the form) of a multidimensional array usort($qrows, 'GroupOrderThenQuestionOrder'); $position="before"; // Go through each question until we reach the current one foreach ($qrows as $qrow) { if ($qrow["qid"] != $qid && $position=="before") { // remember all previous questions // all question types are supported. $questionlist[]=$qrow["qid"]; } elseif ($qrow["qid"] == $qid) { break; } } // Now, using the same array which is now properly sorted by group then question // Create an array of all the questions that appear AFTER the current one $position = "before"; foreach ($qrows as $qrow) //Go through each question until we reach the current one { if ($qrow["qid"] == $qid) { $position="after"; //break; } elseif ($qrow["qid"] != $qid && $position=="after") { $postquestionlist[]=$qrow['qid']; } } $theserows=array(); $postrows=array(); if (isset($questionlist) && is_array($questionlist)) { foreach ($questionlist as $ql) { $query = "SELECT {$dbprefix}questions.qid, " ."{$dbprefix}questions.sid, " ."{$dbprefix}questions.gid, " ."{$dbprefix}questions.question, " ."{$dbprefix}questions.type, " ."{$dbprefix}questions.title, " ."{$dbprefix}questions.other, " ."{$dbprefix}questions.mandatory " ."FROM {$dbprefix}questions, " ."{$dbprefix}groups " ."WHERE {$dbprefix}questions.gid={$dbprefix}groups.gid " ."AND parent_qid=0 " ."AND {$dbprefix}questions.qid=$ql " ."AND {$dbprefix}questions.language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."AND {$dbprefix}groups.language='".GetBaseLanguageFromSurveyID($surveyid)."'" ; $result=db_execute_assoc($query) or die("Couldn't get question $qid"); $thiscount=$result->RecordCount(); // And store again these questions in this array... while ($myrows=$result->FetchRow()) { //key => value $theserows[]=array("qid"=>$myrows['qid'], "sid"=>$myrows['sid'], "gid"=>$myrows['gid'], "question"=>$myrows['question'], "type"=>$myrows['type'], "mandatory"=>$myrows['mandatory'], "other"=>$myrows['other'], "title"=>$myrows['title']); } } } if (isset($postquestionlist) && is_array($postquestionlist)) { foreach ($postquestionlist as $pq) { $query = "SELECT q.qid, " ."q.sid, " ."q.gid, " ."q.question, " ."q.type, " ."q.title, " ."q.other, " ."q.mandatory " ."FROM {$dbprefix}questions q, " ."{$dbprefix}groups g " ."WHERE q.gid=g.gid AND " ."q.parent_qid=0 AND " ."q.qid=$pq AND " ."q.language='".GetBaseLanguageFromSurveyID($surveyid)."' AND " ."g.language='".GetBaseLanguageFromSurveyID($surveyid)."'"; $result = db_execute_assoc($query) or safe_die("Couldn't get postquestions $qid
$query
".$connect->ErrorMsg()); $postcount=$result->RecordCount(); while($myrows=$result->FetchRow()) { $postrows[]=array("qid"=>$myrows['qid'], "sid"=>$myrows['sid'], "gid"=>$myrows['gid'], "question"=>$myrows['question'], "type"=>$myrows['type'], "mandatory"=>$myrows['mandatory'], "other"=>$myrows['other'], "title"=>$myrows['title']); } // while } $postquestionscount=count($postrows); } $questionscount=count($theserows); if (isset($postquestionscount) && $postquestionscount > 0) { //Build the array used for the questionNav and copyTo select boxes foreach ($postrows as $pr) { $pquestions[]=array("text"=>$pr['title'].": ".substr(strip_tags($pr['question']), 0, 80), "fieldname"=>$pr['sid']."X".$pr['gid']."X".$pr['qid']); } } // Previous question parsing ==> building cquestions[] and canswers[] if ($questionscount > 0) { $X="X"; foreach($theserows as $rows) { $shortquestion=$rows['title'].": ".strip_tags($rows['question']); if ($rows['type'] == "A" || $rows['type'] == "B" || $rows['type'] == "C" || $rows['type'] == "E" || $rows['type'] == "F" || $rows['type'] == "H" ) { $aquery="SELECT * " ."FROM {$dbprefix}questions " ."WHERE parent_qid={$rows['qid']} " ."AND language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."ORDER BY question_order"; $aresult=db_execute_assoc($aquery) or safe_die ("Couldn't get answers to Array questions
$aquery
".$connect->ErrorMsg()); while ($arows = $aresult->FetchRow()) { $shortanswer = "{$arows['title']}: [" . FlattenText($arows['question']) . "]"; $shortquestion=$rows['title'].":$shortanswer ".FlattenText($rows['question']); $cquestions[]=array($shortquestion, $rows['qid'], $rows['type'], $rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']); switch ($rows['type']) { case "A": //Array 5 buttons for ($i=1; $i<=5; $i++) { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], $i, $i); } break; case "B": //Array 10 buttons for ($i=1; $i<=10; $i++) { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], $i, $i); } break; case "C": //Array Y/N/NA $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], "Y", $clang->gT("Yes")); $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], "U", $clang->gT("Uncertain")); $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], "N", $clang->gT("No")); break; case "E": //Array >/=/< $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], "I", $clang->gT("Increase")); $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], "S", $clang->gT("Same")); $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], "D", $clang->gT("Decrease")); break; case "F": //Array Flexible Row case "H": //Array Flexible Column $fquery = "SELECT * " ."FROM {$dbprefix}answers " ."WHERE qid={$rows['qid']} " ."AND language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."AND scale_id=0 " ."ORDER BY sortorder, code "; $fresult = db_execute_assoc($fquery); while ($frow=$fresult->FetchRow()) { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], $frow['code'], $frow['answer']); } break; } // Only Show No-Answer if question is not mandatory if ($rows['mandatory'] != 'Y') { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], "", $clang->gT("No answer")); } } //while } elseif ($rows['type'] == ":" || $rows['type'] == ";") { // Multiflexi //Get question attribute for $canswers $qidattributes=getQuestionAttributes($rows['qid'], $rows['type']); if (isset($qidattributes['multiflexible_max']) && trim($qidattributes['multiflexible_max'])!='') { $maxvalue=floatval($qidattributes['multiflexible_max']); } else { $maxvalue=10; } if (isset($qidattributes['multiflexible_min']) && trim($qidattributes['multiflexible_min'])!='') { $minvalue=floatval($qidattributes['multiflexible_min']); } else { $minvalue=1; } if (isset($qidattributes['multiflexible_step']) && trim($qidattributes['multiflexible_step'])!='') { $stepvalue=floatval($qidattributes['multiflexible_step']); if ($stepvalue==0) $stepvalue=1; } else { $stepvalue=1; } if (isset($qidattributes['multiflexible_checkbox']) && $qidattributes['multiflexible_checkbox']!=0) { $minvalue=0; $maxvalue=1; $stepvalue=1; } // Get the Y-Axis $fquery = "SELECT sq.*, q.other" ." FROM ".db_table_name('questions')." sq, ".db_table_name('questions')." q" ." WHERE sq.sid=$surveyid AND sq.parent_qid=q.qid " . "AND q.language='".GetBaseLanguageFromSurveyID($surveyid)."'" ." AND sq.language='".GetBaseLanguageFromSurveyID($surveyid)."'" ." AND q.qid={$rows['qid']} AND sq.scale_id=0 ORDER BY sq.question_order"; $y_axis_db = db_execute_assoc($fquery); // Get the X-Axis $aquery = "SELECT sq.* FROM ".db_table_name('questions')." q, ".db_table_name('questions')." sq WHERE q.sid=$surveyid AND sq.parent_qid=q.qid AND q.language='".GetBaseLanguageFromSurveyID($surveyid)."' AND sq.language='".GetBaseLanguageFromSurveyID($surveyid)."' AND q.qid=".$rows['qid']." AND sq.scale_id=1 ORDER BY sq.question_order"; $x_axis_db=db_execute_assoc($aquery) or safe_die ("Couldn't get answers to Array questions
$aquery
".$connect->ErrorMsg()); while ($frow=$x_axis_db->FetchRow()) { $x_axis[$frow['title']]=$frow['question']; } while ($arows = $y_axis_db->FetchRow()) { foreach($x_axis as $key=>$val) { $shortquestion=$rows['title'].":{$arows['title']}:$key: [".strip_tags($arows['question']). "][" .strip_tags($val). "] " . FlattenText($rows['question']); $cquestions[]=array($shortquestion, $rows['qid'], $rows['type'], $rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']."_".$key); if ($rows['type'] == ":") { for($ii=$minvalue; $ii<=$maxvalue; $ii+=$stepvalue) { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']."_".$key, $ii, $ii); } } } } unset($x_axis); } //if A,B,C,E,F,H elseif ($rows['type'] == "1") //Multi Scale { $aquery="SELECT * " ."FROM {$dbprefix}questions " ."WHERE parent_qid={$rows['qid']} " ."AND language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."ORDER BY question_order"; $aresult=db_execute_assoc($aquery) or safe_die ("Couldn't get answers to Array questions
$aquery
".$connect->ErrorMsg()); while ($arows = $aresult->FetchRow()) { $attr = getQuestionAttributes($rows['qid']); $label1 = isset($attr['dualscale_headerA']) ? $attr['dualscale_headerA'] : 'Label1'; $label2 = isset($attr['dualscale_headerB']) ? $attr['dualscale_headerB'] : 'Label2'; $shortanswer = "{$arows['title']}: [" . strip_tags($arows['question']) . "][$label1]"; $shortquestion=$rows['title'].":$shortanswer ".strip_tags($rows['question']); $cquestions[]=array($shortquestion, $rows['qid'], $rows['type'], $rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']."#0"); $shortanswer = "{$arows['title']}: [" . strip_tags($arows['question']) . "][$label2]"; $shortquestion=$rows['title'].":$shortanswer ".strip_tags($rows['question']); $cquestions[]=array($shortquestion, $rows['qid'], $rows['type'], $rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']."#1"); // first label $lquery="SELECT * " ."FROM {$dbprefix}answers " ."WHERE qid={$rows['qid']} " ."AND scale_id=0 " ."AND language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."ORDER BY sortorder, answer"; $lresult=db_execute_assoc($lquery) or safe_die ("Couldn't get labels to Array
$lquery
".$connect->ErrorMsg()); while ($lrows = $lresult->FetchRow()) { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']."#0", "{$lrows['code']}", "{$lrows['code']}"); } // second label $lquery="SELECT * " ."FROM {$dbprefix}answers " ."WHERE qid={$rows['qid']} " ."AND scale_id=1 " ."AND language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."ORDER BY sortorder, answer"; $lresult=db_execute_assoc($lquery) or safe_die ("Couldn't get labels to Array
$lquery
".$connect->ErrorMsg()); while ($lrows = $lresult->FetchRow()) { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']."#1", "{$lrows['code']}", "{$lrows['code']}"); } // Only Show No-Answer if question is not mandatory if ($rows['mandatory'] != 'Y') { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']."#0", "", $clang->gT("No answer")); $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']."#1", "", $clang->gT("No answer")); } } //while } elseif ($rows['type'] == "K" ||$rows['type'] == "Q") //Multi shorttext/numerical { $aquery="SELECT * " ."FROM {$dbprefix}questions " ."WHERE parent_qid={$rows['qid']} " ."AND language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."ORDER BY question_order"; $aresult=db_execute_assoc($aquery) or safe_die ("Couldn't get answers to Array questions
$aquery
".$connect->ErrorMsg()); while ($arows = $aresult->FetchRow()) { $shortanswer = "{$arows['title']}: [" . strip_tags($arows['question']) . "]"; $shortquestion=$rows['title'].":$shortanswer ".strip_tags($rows['question']); $cquestions[]=array($shortquestion, $rows['qid'], $rows['type'], $rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']); // Only Show No-Answer if question is not mandatory if ($rows['mandatory'] != 'Y') { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], "", $clang->gT("No answer")); } } //while } elseif ($rows['type'] == "R") //Answer Ranking { $aquery="SELECT * " ."FROM {$dbprefix}answers " ."WHERE qid={$rows['qid']} " ."AND ".db_table_name('answers').".language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."AND scale_id=0 " ."ORDER BY sortorder, answer"; $aresult=db_execute_assoc($aquery) or safe_die ("Couldn't get answers to Ranking question
$aquery
".$connect->ErrorMsg()); $acount=$aresult->RecordCount(); while ($arow=$aresult->FetchRow()) { $theanswer = addcslashes($arow['answer'], "'"); $quicky[]=array($arow['code'], $theanswer); } for ($i=1; $i<=$acount; $i++) { $cquestions[]=array("{$rows['title']}: [RANK $i] ".strip_tags($rows['question']), $rows['qid'], $rows['type'], $rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$i); foreach ($quicky as $qck) { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$i, $qck[0], $qck[1]); } // Only Show No-Answer if question is not mandatory if ($rows['mandatory'] != 'Y') { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$i, " ", $clang->gT("No answer")); } } unset($quicky); } // End if type R elseif($rows['type'] == "M" || $rows['type'] == "P") { $shortanswer = " [".$clang->gT("Group of checkboxes")."]"; $shortquestion=$rows['title'].":$shortanswer ".strip_tags($rows['question']); $cquestions[]=array($shortquestion, $rows['qid'], $rows['type'], $rows['sid'].$X.$rows['gid'].$X.$rows['qid']); $aquery="SELECT * " ."FROM {$dbprefix}questions " ."WHERE parent_qid={$rows['qid']} " ."AND language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."ORDER BY question_order"; $aresult=db_execute_assoc($aquery) or safe_die ("Couldn't get answers to this question
$aquery
".$connect->ErrorMsg()); while ($arows=$aresult->FetchRow()) { $theanswer = addcslashes($arows['question'], "'"); $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], $arows['title'], $theanswer); $shortanswer = "{$arows['title']}: [" . strip_tags($arows['question']) . "]"; $shortanswer .= "[".$clang->gT("Single checkbox")."]"; $shortquestion=$rows['title'].":$shortanswer ".strip_tags($rows['question']); $cquestions[]=array($shortquestion, $rows['qid'], $rows['type'], "+".$rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title']); $canswers[]=array("+".$rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], 'Y', $clang->gT("checked")); $canswers[]=array("+".$rows['sid'].$X.$rows['gid'].$X.$rows['qid'].$arows['title'], '', $clang->gT("not checked")); } } elseif($rows['type'] == "X") //Boilerplate question { //Just ignore this questiontype } else { $cquestions[]=array($shortquestion, $rows['qid'], $rows['type'], $rows['sid'].$X.$rows['gid'].$X.$rows['qid']); switch ($rows['type']) { case "Y": // Y/N/NA $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], "Y", $clang->gT("Yes")); $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], "N", $clang->gT("No")); // Only Show No-Answer if question is not mandatory if ($rows['mandatory'] != 'Y') { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], " ", $clang->gT("No answer")); } break; case "G": //Gender $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], "F", $clang->gT("Female")); $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], "M", $clang->gT("Male")); // Only Show No-Answer if question is not mandatory if ($rows['mandatory'] != 'Y') { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], " ", $clang->gT("No answer")); } break; case "5": // 5 choice for ($i=1; $i<=5; $i++) { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], $i, $i); } // Only Show No-Answer if question is not mandatory if ($rows['mandatory'] != 'Y') { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], " ", $clang->gT("No answer")); } break; case "N": // Simple Numerical questions // Only Show No-Answer if question is not mandatory if ($rows['mandatory'] != 'Y') { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], " ", $clang->gT("No answer")); } break; default: $aquery="SELECT * " ."FROM {$dbprefix}answers " ."WHERE qid={$rows['qid']} " ."AND language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."AND scale_id=0 " ."ORDER BY sortorder, " ."answer"; // Ranking question? Replacing "Ranking" by "this" $aresult=db_execute_assoc($aquery) or safe_die ("Couldn't get answers to this question
$aquery
".$connect->ErrorMsg()); while ($arows=$aresult->FetchRow()) { $theanswer = addcslashes($arows['answer'], "'"); $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], $arows['code'], $theanswer); } if ($rows['type'] == "D") { // Only Show No-Answer if question is not mandatory if ($rows['mandatory'] != 'Y') { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], " ", $clang->gT("No answer")); } } elseif ($rows['type'] != "M" && $rows['type'] != "P" && $rows['type'] != "J" && $rows['type'] != "I" ) { // For dropdown questions // optinnaly add the 'Other' answer if ( ($rows['type'] == "L" || $rows['type'] == "!") && $rows['other'] == "Y") { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], "-oth-", $clang->gT("Other")); } // Only Show No-Answer if question is not mandatory if ($rows['mandatory'] != 'Y') { $canswers[]=array($rows['sid'].$X.$rows['gid'].$X.$rows['qid'], " ", $clang->gT("No answer")); } } break; }//switch row type } //else } //foreach theserows } //if questionscount > 0 //END Gather Information for this question $conditionsoutput_main_content .= "\t
\n"; // Now we have enough information, we can create the menubar and question Navigator $conditionsoutput_menubar .= "\t\n" ."

" ."
\n"; //3: Get other conditions currently set for this question $conditionscount=0; $s=0; $scenarioquery = "SELECT DISTINCT {$dbprefix}conditions.scenario " ."FROM {$dbprefix}conditions " ."WHERE {$dbprefix}conditions.qid=$qid\n" ."ORDER BY {$dbprefix}conditions.scenario"; $scenarioresult = db_execute_assoc($scenarioquery) or safe_die ("Couldn't get other (scenario) conditions for question $qid
$query
".$connect->Error); $scenariocount=$scenarioresult->RecordCount(); $conditionsoutput_main_content .= "\n" ."\t\n" ."\n"; if ($scenariocount > 0) { $js_admin_includes[]= $homeurl.'/scripts/conditions.js'; $js_admin_includes[]= $rooturl.'/scripts/jquery/jquery.checkgroup.js'; while ($scenarionr=$scenarioresult->FetchRow()) { $scenariotext = ""; if ($s == 0 && $scenariocount > 1) { $scenariotext = " -------- Scenario {$scenarionr['scenario']} --------"; } if ($s > 0) { $scenariotext = " -------- ".$clang->gT("OR")." Scenario {$scenarionr['scenario']} --------"; } if ($subaction == "copyconditionsform" || $subaction == "copyconditions") { $initialCheckbox = "\n"; } else { $initialCheckbox = ""; } $conditionsoutput_main_content .= "\n"; unset($currentfield); $query = "SELECT {$dbprefix}conditions.cid, " ."{$dbprefix}conditions.scenario, " ."{$dbprefix}conditions.cqid, " ."{$dbprefix}conditions.cfieldname, " ."{$dbprefix}conditions.method, " ."{$dbprefix}conditions.value, " ."{$dbprefix}questions.type " ."FROM {$dbprefix}conditions, " ."{$dbprefix}questions, " ."{$dbprefix}groups " ."WHERE {$dbprefix}conditions.cqid={$dbprefix}questions.qid " ."AND {$dbprefix}questions.gid={$dbprefix}groups.gid " ."AND {$dbprefix}questions.parent_qid=0 " ."AND {$dbprefix}questions.language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."AND {$dbprefix}groups.language='".GetBaseLanguageFromSurveyID($surveyid)."' " ."AND {$dbprefix}conditions.qid=$qid " ."AND {$dbprefix}conditions.scenario={$scenarionr['scenario']}\n" ."AND {$dbprefix}conditions.cfieldname NOT LIKE '{%' \n" // avoid catching SRCtokenAttr conditions ."ORDER BY {$dbprefix}groups.group_order,{$dbprefix}questions.question_order, {$dbprefix}conditions.cfieldname"; $result = db_execute_assoc($query) or safe_die ("Couldn't get other conditions for question $qid
$query
".$connect->ErrorMsg()); $conditionscount=$result->RecordCount(); $querytoken = "SELECT {$dbprefix}conditions.cid, " ."{$dbprefix}conditions.scenario, " ."{$dbprefix}conditions.cqid, " ."{$dbprefix}conditions.cfieldname, " ."{$dbprefix}conditions.method, " ."{$dbprefix}conditions.value, " ."'' AS type " ."FROM {$dbprefix}conditions " ."WHERE " ." {$dbprefix}conditions.qid=$qid " ."AND {$dbprefix}conditions.scenario={$scenarionr['scenario']}\n" ."AND {$dbprefix}conditions.cfieldname LIKE '{%' \n" // only catching SRCtokenAttr conditions ."ORDER BY {$dbprefix}conditions.cfieldname"; $resulttoken = db_execute_assoc($querytoken) or safe_die ("Couldn't get other conditions for question $qid
$query
".$connect->ErrorMsg()); $conditionscounttoken=$resulttoken->RecordCount(); $conditionscount=$conditionscount+$conditionscounttoken; if ($conditionscount > 0) { $aConditionsMerged=Array(); while ($arow=$resulttoken->FetchRow()) { $aConditionsMerged[]=$arow; } while ($arow=$result->FetchRow()) { $aConditionsMerged[]=$arow; } // while ($rows=$result->FetchRow()) foreach ($aConditionsMerged as $rows) { if($rows['method'] == "") {$rows['method'] = "==";} //Fill in the empty method from previous versions $markcidstyle=""; if (array_search($rows['cid'], $markcidarray) === FALSE) // PHP5 // === required cause key 0 would otherwise be interpreted as FALSE { $markcidstyle=""; } else { // This is the style used when the condition editor is called // in order to check which conditions prevent a question deletion $markcidstyle="background-color: #5670A1;"; } if ($subaction == "editthiscondition" && isset($p_cid) && $rows['cid'] === $p_cid) { // Style used when editing a condition $markcidstyle="background-color: #FCCFFF;"; } if (isset($currentfield) && $currentfield != $rows['cfieldname']) { $conditionsoutput_main_content .= "\n" ."\t"; } elseif (isset($currentfield)) { $conditionsoutput_main_content .= "\n" ."\t"; } $conditionsoutput_main_content .= "\t\n" ."\t\n" ."\t\n"; $currentfield=$rows['cfieldname']; } $conditionsoutput_main_content .= "\t\n" ."\n" ."\t\n"; } else { $conditionsoutput_main_content .= "\t\n" ."\n" ."\t\n"; } $s++; } } else { // no condition ==> disable delete all conditions button, and display a simple comment $conditionsoutput_main_content .= "\n"; } $conditionsoutput_main_content .= "" . "
\n"; $showreplace="$questiontitle". showSpeaker($questiontext); $onlyshow=str_replace("{QID}", $showreplace, $clang->gT("Only show question {QID} IF")); if ($subaction== "editconditionsform" || $subaction=='insertcondition' || $subaction == "editthiscondition" || $subaction == "delete" || $subaction == "updatecondition" || $subaction == "deletescenario" || $subaction == "updatescenario" || $subaction == "renumberscenarios") { $conditionsoutput_main_content .= "\t\n" ."
$onlyshow\n" ."
\n" ."\n" ."\n" ."\n" ."\n"; if ($scenariocount > 0) { // show the Delete all conditions for this question button $conditionsoutput_main_content .= "gT("Are you sure you want to delete all conditions set to the questions you have selected?","js")."')) {document.getElementById('deleteallconditions').submit();}\"" ." title='".$clang->gTview("Delete all conditions")."' >" ." ".$clang->gT("Delete all conditions")."\n"; } if ($scenariocount > 1) { // show the renumber scenario button for this question $conditionsoutput_main_content .= "gT("Are you sure you want to renumber the scenarios with incremented numbers beginning from 1?","js")."')) {document.getElementById('toplevelsubaction').value='renumberscenarios'; document.getElementById('deleteallconditions').submit();}\"" ." title='".$clang->gTview("Renumber scenario automatically")."' >" ." ".$clang->gT("Renumber scenario automatically")."\n"; } } else { $conditionsoutput_main_content .= "\t
$onlyshow\n" ."\n" ."\n" ."\n" ."\n"; } $conditionsoutput_main_content .= "
\n" ."\t
\n" ."" ." 
\n" ."$initialCheckbox\n" . "
$scenariotext \n" ."
\n"; if ($scenariotext != "" && ($subaction == "editconditionsform" ||$subaction == "insertcondition" || $subaction == "updatecondition" || $subaction == "editthiscondition" || $subaction == "renumberscenarios" || $subaction == "updatescenario" || $subaction == "deletescenario" || $subaction == "delete") ) { $conditionsoutput_main_content .= "\tgT("Are you sure you want to delete all conditions set in this scenario?","js")."')) {document.getElementById('deletescenario{$scenarionr['scenario']}').submit();}\"" ." title='".$clang->gTview("Delete this scenario")."' >" ." gT("Delete this scenario")." name='DeleteWholeGroup' />\n"; $conditionsoutput_main_content .= "\t" ." ".$clang->gT("Edit scenario")."\n"; } $conditionsoutput_main_content .= "\t\n" ."\t\n" ."\t\n" ."\t\n" ."
\n" ."" .$clang->gT("and")."
\n" ."" .$clang->gT("OR")."
\n" ."\n" ."\t\n"; if ( $subaction == "copyconditionsform" || $subaction == "copyconditions") { $conditionsoutput_main_content .= "" . "\n"; } $conditionsoutput_main_content .= "" ."\n" ."\t" .$method[trim ($rows['method'])] ."\n" ."\t\n" ."\n" ."\t\n" ."\t\n" ."\t\n" ."\t
  \n" . "\t\n" . "\n" ."\t\n"; $leftOperandType = 'unknown'; // prevquestion, tokenattr if ($thissurvey['anonymized'] != 'Y' && preg_match('/^{TOKEN:([^}]*)}$/',$rows['cfieldname'],$extractedTokenAttr) > 0) { $leftOperandType = 'tokenattr'; $aTokenAttrNames=GetTokenFieldsAndNames($surveyid); if (count($aTokenAttrNames) != 0) { $thisAttrName=html_escape($aTokenAttrNames[strtolower($extractedTokenAttr[1])])." [".$clang->gT("From token table")."]"; } else { $thisAttrName=html_escape($extractedTokenAttr[1])." [".$clang->gT("Inexistant token table")."]"; } $conditionsoutput_main_content .= "\t$thisAttrName\n"; // TIBO not sure this is used anymore !! $conditionsList[]=array("cid"=>$rows['cid'], "text"=>$thisAttrName); } else { $leftOperandType = 'prevquestion'; foreach ($cquestions as $cqn) { if ($cqn[3] == $rows['cfieldname']) { $conditionsoutput_main_content .= "\t$cqn[0] (qid{$rows['cqid']})\n"; $conditionsList[]=array("cid"=>$rows['cid'], "text"=>$cqn[0]." ({$rows['value']})"); } else { //$conditionsoutput_main_content .= "\tERROR: Delete this condition. It is out of order.\n"; } } } $conditionsoutput_main_content .= "\t\n" ."\n" // .$clang->gT("Equals")."\n" ."\n"; // let's read the condition's right operand // determine its type and display it $rightOperandType = 'unknown'; // predefinedAnsw,constantVal, prevQsgqa, tokenAttr, regexp if ($rows['method'] == 'RX') { $rightOperandType = 'regexp'; $conditionsoutput_main_content .= "".html_escape($rows['value'])."\n"; } elseif (preg_match('/^@([0-9]+X[0-9]+X[^@]*)@$/',$rows['value'],$matchedSGQA) > 0) { // SGQA $rightOperandType = 'prevQsgqa'; $textfound=false; foreach ($cquestions as $cqn) { if ($cqn[3] == $matchedSGQA[1]) { $matchedSGQAText=$cqn[0]; $textfound=true; break; } } if ($textfound === false) { $matchedSGQAText=$rows['value'].' ('.$clang->gT("Not found").')'; } $conditionsoutput_main_content .= "".html_escape($matchedSGQAText)."\n"; } elseif ($thissurvey['anonymized'] != 'Y' && preg_match('/^{TOKEN:([^}]*)}$/',$rows['value'],$extractedTokenAttr) > 0) { $rightOperandType = 'tokenAttr'; $aTokenAttrNames=GetTokenFieldsAndNames($surveyid); if (count($aTokenAttrNames) != 0) { $thisAttrName=html_escape($aTokenAttrNames[strtolower($extractedTokenAttr[1])])." [".$clang->gT("From token table")."]"; } else { $thisAttrName=html_escape($extractedTokenAttr[1])." [".$clang->gT("Inexistant token table")."]"; } $conditionsoutput_main_content .= "\t$thisAttrName\n"; } elseif (isset($canswers)) { foreach ($canswers as $can) { if ($can[0] == $rows['cfieldname'] && $can[1] == $rows['value']) { $conditionsoutput_main_content .= "$can[2] ($can[1])\n"; $rightOperandType = 'predefinedAnsw'; } } } // if $rightOperandType is still unkown then it is a simple constant if ($rightOperandType == 'unknown') { $rightOperandType = 'constantVal'; if ($rows['value'] == ' ' || $rows['value'] == '') { $conditionsoutput_main_content .= "".$clang->gT("No answer")."\n"; } else { $conditionsoutput_main_content .= "".html_escape($rows['value'])."\n"; } } $conditionsoutput_main_content .= "\t\n"; if ($subaction == "editconditionsform" ||$subaction == "insertcondition" || $subaction == "updatecondition" || $subaction == "editthiscondition" || $subaction == "renumberscenarios" || $subaction == "deleteallconditions" || $subaction == "updatescenario" || $subaction == "deletescenario" || $subaction == "delete") { // show single condition action buttons in edit mode $conditionsoutput_main_content .= "" ."gT("Are you sure you want to delete this condition?","js")."')) {\$('#editModeTargetVal{$rows['cid']}').remove();\$('#cquestions{$rows['cid']}').remove();document.getElementById('conditionaction{$rows['cid']}').submit();}\"" ." title='".$clang->gTview("Delete this condition")."' >" ." ".$clang->gT("Delete this condition")."\n" ."" ." ".$clang->gT("Edit this condition")."\n" ."\t\n" ."\t\n" ."\t\n" // ."\t\n" ."\t\n" ."\t\n" ."\t\n" ."\t\n"; // now sets e corresponding hidden input field // depending on the leftOperandType if ($leftOperandType == 'tokenattr') { $conditionsoutput_main_content .= "" ."\t\n"; } else { $conditionsoutput_main_content .= "" ."\t\n"; } // now set the corresponding hidden input field // depending on the rightOperandType // This is used when Editting a condition if ($rightOperandType == 'predefinedAnsw') { $conditionsoutput_main_content .= "" ."\t\n"; } elseif ($rightOperandType == 'prevQsgqa') { $conditionsoutput_main_content .= "" ."\t\n"; } elseif ($rightOperandType == 'tokenAttr') { $conditionsoutput_main_content .= "" ."\t\n"; } elseif ($rightOperandType == 'regexp') { $conditionsoutput_main_content .= "" ."\t\n"; } else { $conditionsoutput_main_content .= "" ."\t\n"; } } $conditionsoutput_main_content .= "" ."\t
\n" ."\t
\n" ."
\n" ."
".$clang->gT("This question is always shown.")."\n" . "
\n"; $conditionsoutput_main_content .= "
\n" ."
\n"; $conditionsoutput_main_content .= "
".$clang->gT("Copy conditions")."
\n"; //CopyConditionsMessage if (isset ($CopyConditionsMessage)) { $conditionsoutput_main_content .= "
\n" ."$CopyConditionsMessage\n" ."
\n"; } if (isset($conditionsList) && is_array($conditionsList)) { //TIBO $js_admin_includes[]= $rooturl.'/scripts/jquery/jquery.multiselect.min.js'; $css_admin_includes[] = '../scripts/jquery/css/jquery.multiselect.css'; $conditionsoutput_main_content .= ""; $conditionsoutput_main_content .= "\t
\n" ."\t
".$clang->gT("Copy the selected conditions to").":
\n" ."\t
\n" ."\t\t\n" ."\t
\n" ."\t
\n"; if ( !isset($pquestions) || count($pquestions) == 0) { $disableCopyCondition=" disabled='disabled'"; } else { $disableCopyCondition=" "; } $conditionsoutput_main_content .= "\t
\n" // ."\t\tgT("Are you sure you want to copy these condition(s) to the questions you have selected?","js")."')){prepareCopyconditions(); return true;} else {return false;}\" $disableCopyCondition/>\n" ."\t\t\n" ."\n" ."\n" ."\n" ."\n" ."
\n"; $conditionsoutput_main_content .= "\n"; } else { $conditionsoutput_main_content .= "
\n" ."
".$clang->gT("This survey's questions don't use conditions")."

\n" ."
\n"; } $conditionsoutput_main_content .= "
\n"; $conditionsoutput_main_content .= "
\n"; if ($subaction == "editthiscondition" && isset($p_cid)) { $mytitle = $clang->gT("Edit condition"); } else { $mytitle = $clang->gT("Add condition"); } $conditionsoutput_main_content .= "
".$mytitle."
\n"; /////////////////////////////////////////////////////////////////////////////////////////// // Begin "Scenario" row if ( ( $subaction != "editthiscondition" && isset($scenariocount) && ($scenariocount == 1 || $scenariocount==0)) || ( $subaction == "editthiscondition" && isset($scenario) && $scenario == 1) ) { $scenarioAddBtn = "\t" ."".$clang->gT(\n"; $scenarioTxt = "".$clang->gT("Default scenario").""; $scenarioInputStyle = "style = 'display: none;'"; } else { $scenarioAddBtn = ""; $scenarioTxt = ""; $scenarioInputStyle = "style = ''"; } $conditionsoutput_main_content .="
\n" ."
$scenarioAddBtn ".$clang->gT("Scenario")."
\n" ."
" ."$scenarioTxt\n" ."
\n" ."
\n"; // Begin "Question" row $conditionsoutput_main_content .="
\n" ."
".$clang->gT("Question")."
\n" ."
\n" ."\t
\n" ."\t\n"; // Previous question tab $conditionsoutput_main_content .= "
\n"; foreach (GetTokenFieldsAndNames($surveyid) as $tokenattr => $tokenattrName) { // Check to select if (isset($p_csrctoken) && $p_csrctoken == '{TOKEN:'.strtoupper($tokenattr).'}') { $selectThisSrcTokenAttr = "selected=\"selected\""; } else { $selectThisSrcTokenAttr = ""; } $conditionsoutput_main_content .= "\n"; } $conditionsoutput_main_content .= "\n" ."
\n\n"; $conditionsoutput_main_content .= "\t
\n"; // end conditionsource div $conditionsoutput_main_content .= "
\n" ."
\n"; // Begin "Comparison operator" row $conditionsoutput_main_content .="
\n" ."
".$clang->gT("Comparison operator")."
\n" ."
\n" ."\n" ."
\n" ."
\n"; // Begin "Answer" row $conditionsoutput_main_content .="
\n" ."
".$clang->gT("Answer")."
\n"; if ($subaction == "editthiscondition") { $multipletext = ""; if (isset($_POST['EDITConditionConst']) && $_POST['EDITConditionConst'] != '') { $EDITConditionConst=html_escape($_POST['EDITConditionConst']); } else { $EDITConditionConst=""; } if (isset($_POST['EDITConditionRegexp']) && $_POST['EDITConditionRegexp'] != '') { $EDITConditionRegexp=html_escape($_POST['EDITConditionRegexp']); } else { $EDITConditionRegexp=""; } } else { $multipletext = "multiple"; if (isset($_POST['ConditionConst']) && $_POST['ConditionConst'] != '') { $EDITConditionConst=html_escape($_POST['ConditionConst']); } else { $EDITConditionConst=""; } if (isset($_POST['ConditionRegexp']) && $_POST['ConditionRegexp'] != '') { $EDITConditionRegexp=html_escape($_POST['ConditionRegexp']); } else { $EDITConditionRegexp=""; } } $conditionsoutput_main_content .= "" ."
\n" ."
\n" ."\t\n"; // Predefined answers tab $conditionsoutput_main_content .= "\t
\n" ."\t\t\n" ."\t\t
".$clang->gT("Predefined answer options for this question")."\n" ."\t
\n"; // Constant tab $conditionsoutput_main_content .= "\t
\n" ."\t\t\n" ."\t\t
".$clang->gT("Constant value")."
\n" ."\t
\n"; // Previous answers tab @SGQA@ placeholders $conditionsoutput_main_content .= "\t
\n" ."\t\t\n"; foreach (GetTokenFieldsAndNames($surveyid) as $tokenattr => $tokenattrName) { $conditionsoutput_main_content .= "\t\t\n"; } $conditionsoutput_main_content .= "\t\t\n" ."\t\t
".$clang->gT("Attributes values from the participant's token")."\n" ."\t
\n"; // Regexp Tab $conditionsoutput_main_content .= "\t
\n" ."\t\t\n" ."\t\t
\n" ."\t
\n"; $conditionsoutput_main_content .= "
\n"; // end conditiontarget div $js_admin_includes[]= $homeurl.'/scripts/conditions.js'; $js_admin_includes[]= $rooturl.'/scripts/jquery/lime-conditions-tabs.js'; if ($subaction == "editthiscondition" && isset($p_cid)) { $submitLabel = $clang->gT("Update condition"); $submitSubaction = "updatecondition"; $submitcid = sanitize_int($p_cid); } else { $submitLabel = $clang->gT("Add condition"); $submitSubaction = "insertcondition"; $submitcid = ""; } $conditionsoutput_main_content .= "
\n" ."
\n"; // Begin buttons row $conditionsoutput_main_content .= "
\n" ."\t\n" ."\t\n" ."\n" ."\n" ."\n" ."\n" ."\n" ."\n" ."\n" // auto-select tab by jQuery when editing a condition ."\n" // auto-select tab by jQuery when editing a condition ."\n" // auto-select target answers by jQuery when editing a condition ."
\n" ."
\n"; if (!isset($js_getAnswers_onload)) { $js_getAnswers_onload = ''; } $conditionsoutput_main_content .= "\n"; $conditionsoutput_main_content .= "
\n"; $conditionsoutput = $conditionsoutput_header . $conditionsoutput_menubar . $conditionsoutput_action_error . $conditionsoutput_main_content; ////////////// FUNCTIONS ///////////////////////////// function showSpeaker($hinttext) { global $clang, $imageurl, $max; if(!isset($max)) { $max = 20; } $htmlhinttext=str_replace("'",''',$hinttext); //the string is already HTML except for single quotes so we just replace these only $jshinttext=javascript_escape($hinttext,true,true); if(strlen(html_entity_decode($hinttext,ENT_QUOTES,'UTF-8')) > ($max+3)) { $shortstring = FlattenText($hinttext); $shortstring = htmlspecialchars(mb_strcut(html_entity_decode($shortstring,ENT_QUOTES,'UTF-8'), 0, $max, 'UTF-8')); //output with hoover effect $reshtml= "gT("Question","js").": $jshinttext')\" />" ." \"$shortstring...\" " ."$htmlhinttextgT("Question","js").": $jshinttext')\" />"; } else { $shortstring = FlattenText($hinttext); $reshtml= " \"$shortstring\""; } return $reshtml; }