function templateoptions($optionarray, $selectedvalue) { $return = ''; foreach ($optionarray as $arkey => $arvalue) { $return .= "<option value='" . HTMLEscape($arkey) . "'"; if ($arkey == $selectedvalue) { $return .= " selected='selected'"; } $return .= '>' . HTMLEscape($arkey) . "</option>\n"; } return $return; }
/** * Quotes a translation according to purpose * if sEscapeMode is null, we use HTML method because probably we had to specify null as sEscapeMode upstream * * @param mixed $sText Text to quote * @param string $sEscapeMode Optional - One of the values 'html','js' or 'unescaped' - defaults to 'html' */ function quoteText($sText, $sEscapeMode = 'html') { if ($sEscapeMode === null) { $sEscapeMode = 'html'; } switch ($sEscapeMode) { case 'html': return HTMLEscape($sText); break; case 'js': return javascriptEscape($sText); break; case 'unescaped': return $sText; break; default: return "Unsupported EscapeMode in gT method"; break; } }
function do_array_multiflexi($ia) { global $thissurvey; global $notanswered; $repeatheadings = Yii::app()->getConfig("repeatheadings"); $minrepeatheadings = Yii::app()->getConfig("minrepeatheadings"); $extraclass = ""; $answertypeclass = ""; $clang = Yii::app()->lang; $caption = $clang->gT("An array of sub-question on each cell. The sub-question text are in the table header and concerns line header. "); $checkconditionFunction = "fixnum_checkconditions"; //echo '<pre>'; print_r($_POST); echo '</pre>'; $defaultvaluescript = ''; $qquery = "SELECT other FROM {{questions}} WHERE qid=" . $ia[0] . " AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' and parent_qid=0"; $other = Yii::app()->db->createCommand($qquery)->queryScalar(); //Checked $aQuestionAttributes = getQuestionAttributeValues($ia[0], $ia[4]); if (trim($aQuestionAttributes['multiflexible_max']) != '' && trim($aQuestionAttributes['multiflexible_min']) == '') { $maxvalue = $aQuestionAttributes['multiflexible_max']; $extraclass .= " maxvalue maxvalue-" . trim($aQuestionAttributes['multiflexible_max']); if (isset($minvalue['value']) && $minvalue['value'] == 0) { $minvalue = 0; } else { $minvalue = 1; } } if (trim($aQuestionAttributes['multiflexible_min']) != '' && trim($aQuestionAttributes['multiflexible_max']) == '') { $minvalue = $aQuestionAttributes['multiflexible_min']; $extraclass .= " minvalue minvalue-" . trim($aQuestionAttributes['multiflexible_max']); $maxvalue = $aQuestionAttributes['multiflexible_min'] + 10; } if (trim($aQuestionAttributes['multiflexible_min']) == '' && trim($aQuestionAttributes['multiflexible_max']) == '') { if (isset($minvalue['value']) && $minvalue['value'] == 0) { $minvalue = 0; } else { $minvalue = 1; } $maxvalue = 10; } if (trim($aQuestionAttributes['multiflexible_min']) != '' && trim($aQuestionAttributes['multiflexible_max']) != '') { if ($aQuestionAttributes['multiflexible_min'] < $aQuestionAttributes['multiflexible_max']) { $minvalue = $aQuestionAttributes['multiflexible_min']; $maxvalue = $aQuestionAttributes['multiflexible_max']; } } if (trim($aQuestionAttributes['multiflexible_step']) != '' && $aQuestionAttributes['multiflexible_step'] > 0) { $stepvalue = $aQuestionAttributes['multiflexible_step']; } else { $stepvalue = 1; } if ($aQuestionAttributes['reverse'] == 1) { $tmp = $minvalue; $minvalue = $maxvalue; $maxvalue = $tmp; $reverse = true; $stepvalue = -$stepvalue; } else { $reverse = false; } $checkboxlayout = false; $inputboxlayout = false; if ($aQuestionAttributes['multiflexible_checkbox'] != 0) { $minvalue = 0; $maxvalue = 1; $checkboxlayout = true; $answertypeclass = " checkbox"; $caption .= $clang->gT("Check or uncheck the answer for each subquestion. "); } elseif ($aQuestionAttributes['input_boxes'] != 0) { $inputboxlayout = true; $answertypeclass .= " numeric-item text"; $extraclass .= " numberonly"; $caption .= $clang->gT("Each answers are a number. "); } else { $answertypeclass = " dropdown"; $caption .= $clang->gT("Select the answer for each subquestion. "); } if (ctype_digit(trim($aQuestionAttributes['repeat_headings'])) && trim($aQuestionAttributes['repeat_headings'] != "")) { $repeatheadings = intval($aQuestionAttributes['repeat_headings']); $minrepeatheadings = 0; } if (intval(trim($aQuestionAttributes['maximum_chars'])) > 0) { // Only maxlength attribute, use textarea[maxlength] jquery selector for textarea $maximum_chars = intval(trim($aQuestionAttributes['maximum_chars'])); $maxlength = "maxlength='{$maximum_chars}' "; $extraclass .= " maxchars maxchars-" . $maximum_chars; } else { $maxlength = ""; } if ($thissurvey['nokeyboard'] == 'Y') { includeKeypad(); $kpclass = " num-keypad"; $extraclass .= " inputkeypad"; } else { $kpclass = ""; } if (trim($aQuestionAttributes['answer_width']) != '') { $answerwidth = $aQuestionAttributes['answer_width']; } else { $answerwidth = 20; } $columnswidth = 100 - $answerwidth * 2; $lquery = "SELECT * FROM {{questions}} WHERE parent_qid={$ia[0]} AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' and scale_id=1 ORDER BY question_order"; $lresult = dbExecuteAssoc($lquery); $aQuestions = $lresult->readAll(); $labelans = array(); $labelcode = array(); foreach ($aQuestions as $lrow) { $labelans[] = $lrow['question']; $labelcode[] = $lrow['title']; } if ($numrows = count($labelans)) { if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) { $numrows++; } $cellwidth = $columnswidth / $numrows; $cellwidth = sprintf('%02d', $cellwidth); $sQuery = "SELECT count(question) FROM {{questions}} WHERE parent_qid=" . $ia[0] . " AND scale_id=0 AND question like '%|%'"; $iCount = Yii::app()->db->createCommand($sQuery)->queryScalar(); if ($iCount > 0) { $right_exists = true; $answerwidth = $answerwidth / 2; $caption .= $clang->gT("The last cell give some information. "); } else { $right_exists = false; } // $right_exists is a flag to find out if there are any right hand answer parts. If there arent we can leave out the right td column if ($aQuestionAttributes['random_order'] == 1) { $ansquery = "SELECT * FROM {{questions}} WHERE parent_qid={$ia['0']} AND scale_id=0 AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' ORDER BY " . dbRandom(); } else { $ansquery = "SELECT * FROM {{questions}} WHERE parent_qid={$ia['0']} AND scale_id=0 AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' ORDER BY question_order"; } $ansresult = dbExecuteAssoc($ansquery)->readAll(); //Checked if (trim($aQuestionAttributes['parent_order'] != '')) { $iParentQID = (int) $aQuestionAttributes['parent_order']; $aResult = array(); $sessionao = $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['answer_order']; foreach ($sessionao[$iParentQID] as $aOrigRow) { $sCode = $aOrigRow['title']; foreach ($ansresult as $aRow) { if ($sCode == $aRow['title']) { $aResult[] = $aRow; } } } $ansresult = $aResult; } $anscount = count($ansresult); $fn = 1; $mycols = "\t<colgroup class=\"col-responses\">\n" . "\n\t<col class=\"answertext\" width=\"{$answerwidth}%\" />\n"; $answer_head_line = "\t<td > </td>\n"; $odd_even = ''; foreach ($labelans as $ld) { $answer_head_line .= "\t<th>" . $ld . "</th>\n"; $odd_even = alternation($odd_even); $mycols .= "<col class=\"{$odd_even}\" width=\"{$cellwidth}%\" />\n"; } if ($right_exists) { $answer_head_line .= "\t<td> </td>"; $odd_even = alternation($odd_even); $mycols .= "<col class=\"answertextright {$odd_even}\" width=\"{$answerwidth}%\" />\n"; } $answer_head = "\n\t<thead>\n<tr class=\"dontread\">\n" . $answer_head_line . "</tr>\n\t</thead>\n"; $mycols .= "\t</colgroup>\n"; $trbc = ''; $answer = "\n<table class=\"question subquestions-list questions-list {$answertypeclass}-list {$extraclass}\" summary=\"{$caption}\">\n" . $mycols . $answer_head . "\n"; $answer .= "<tbody>"; foreach ($ansresult as $ansrow) { if (isset($repeatheadings) && $repeatheadings > 0 && $fn - 1 > 0 && ($fn - 1) % $repeatheadings == 0) { if ($anscount - $fn + 1 >= $minrepeatheadings) { $answer .= "</tbody>\n<tbody>"; // Close actual body and open another one $answer .= "<tr class=\"repeat headings dontread\">\n" . $answer_head_line . "</tr>\n\n"; } } $myfname = $ia[1] . $ansrow['title']; $answertext = $ansrow['question']; $answertextsave = $answertext; /* Check if this item has not been answered: the 'notanswered' variable must be an array, containing a list of unanswered questions, the current question must be in the array, and there must be no answer available for the item in this session. */ if ($ia[6] == 'Y' && is_array($notanswered)) { //Go through each labelcode and check for a missing answer! If any are found, highlight this line $emptyresult = 0; foreach ($labelcode as $ld) { $myfname2 = $myfname . '_' . $ld; if (array_search($myfname2, $notanswered) !== FALSE && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname2] == "") { $emptyresult = 1; } } if ($emptyresult == 1) { $answertext = '<span class="errormandatory">' . $answertext . '</span>'; } } // Get array_filter stuff $trbc = alternation($trbc, 'row'); list($htmltbody2, $hiddenfield) = return_array_filter_strings($ia, $aQuestionAttributes, $thissurvey, $ansrow, $myfname, $trbc, $myfname, "tr", "{$trbc} subquestions-list questions-list {$answertypeclass}-list"); $answer .= $htmltbody2; if (strpos($answertext, '|')) { $answertext = substr($answertext, 0, strpos($answertext, '|')); } $answer .= "\t<th class=\"answertext\" width=\"{$answerwidth}%\">\n" . "{$answertext}\n" . $hiddenfield . "<input type=\"hidden\" name=\"java{$myfname}\" id=\"java{$myfname}\" value=\""; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname])) { $answer .= $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname]; } $answer .= "\" />\n\t</th>\n"; $first_hidden_field = ''; $thiskey = 0; foreach ($labelcode as $ld) { if ($checkboxlayout == false) { $myfname2 = $myfname . "_{$ld}"; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname2])) { $myfname2_java_value = " value=\"{$_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname2]}\" "; } else { $myfname2_java_value = ""; } $answer .= "\t<td class=\"answer_cell_00{$ld} question-item answer-item {$answertypeclass}-item {$extraclass}\">\n" . "\t<input type=\"hidden\" name=\"java{$myfname2}\" id=\"java{$myfname2}\" {$myfname2_java_value} />\n" . "<label class=\"hide read\" for=\"answer{$myfname2}\">{$labelans[$thiskey]}</label>\n"; $sSeparator = getRadixPointData($thissurvey['surveyls_numberformat']); $sSeparator = $sSeparator['separator']; if ($inputboxlayout == false) { $answer .= "\t<select class=\"multiflexiselect\" name=\"{$myfname2}\" id=\"answer{$myfname2}\" title=\"" . HTMLEscape($labelans[$thiskey]) . '"' . " onchange=\"{$checkconditionFunction}(this.value, this.name, this.type)\">\n" . "<option value=\"\">" . $clang->gT('...') . "</option>\n"; for ($ii = $minvalue; $reverse ? $ii >= $maxvalue : $ii <= $maxvalue; $ii += $stepvalue) { $answer .= '<option value="' . str_replace('.', $sSeparator, $ii) . '"'; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname2]) && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname2] == $ii) { $answer .= SELECTED; } $answer .= ">" . str_replace('.', $sSeparator, $ii) . "</option>\n"; } $answer .= "\t</select>\n"; } elseif ($inputboxlayout == true) { $answer .= "\t<input type='text' class=\"multiflexitext text {$kpclass}\" name=\"{$myfname2}\" id=\"answer{$myfname2}\" {$maxlength} size=5 title=\"" . HTMLEscape($labelans[$thiskey]) . '"' . " onkeyup=\"{$checkconditionFunction}(this.value, this.name, this.type)\"" . " value=\""; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname2]) && is_numeric($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname2])) { $answer .= str_replace('.', $sSeparator, $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname2]); } $answer .= "\" />\n"; } $answer .= "\t</td>\n"; $inputnames[] = $myfname2; $thiskey++; } else { $myfname2 = $myfname . "_{$ld}"; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname2]) && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname2] == '1') { $myvalue = '1'; $setmyvalue = CHECKED; } else { $myvalue = ''; $setmyvalue = ''; } $answer .= "\t<td class=\"answer_cell_00{$ld} question-item answer-item {$answertypeclass}-item\">\n" . "\t<input type=\"hidden\" name=\"java{$myfname2}\" id=\"java{$myfname2}\" value=\"{$myvalue}\"/>\n" . "\t<input type=\"hidden\" name=\"{$myfname2}\" id=\"answer{$myfname2}\" value=\"{$myvalue}\" />\n"; $answer .= "\t<input type=\"checkbox\" class=\"checkbox {$extraclass}\" name=\"cbox_{$myfname2}\" id=\"cbox_{$myfname2}\" {$setmyvalue} " . " onclick=\"cancelBubbleThis(event); " . " aelt=document.getElementById('answer{$myfname2}');" . " jelt=document.getElementById('java{$myfname2}');" . " if(this.checked) {" . " aelt.value=1;jelt.value=1;{$checkconditionFunction}(1,'{$myfname2}',aelt.type);" . " } else {" . " aelt.value='';jelt.value='';{$checkconditionFunction}('','{$myfname2}',aelt.type);" . " }; return true;\" " . " />\n"; $answer .= "<label class=\"hide read\" for=\"cbox_{$myfname2}\">{$labelans[$thiskey]}</label>\n"; $inputnames[] = $myfname2; // $answer .= "</label>\n" $answer .= "" . "\t</td>\n"; $thiskey++; } } if (strpos($answertextsave, '|')) { $answertext = substr($answertextsave, strpos($answertextsave, '|') + 1); $answer .= "\t<td class=\"answertextright\" style='text-align:left;' width=\"{$answerwidth}%\">{$answertext}</td>\n"; } elseif ($right_exists) { $answer .= "\t<td class=\"answertextright\" style='text-align:left;' width=\"{$answerwidth}%\"> </td>\n"; } $answer .= "</tr>\n"; //IF a MULTIPLE of flexi-redisplay figure, repeat the headings $fn++; } $answer .= "\t</tbody>\n</table>\n"; } else { $answer = "\n<p class=\"error\">" . $clang->gT("Error: There are no answer options for this question and/or they don't exist in this language.") . "</p>\n"; $inputnames = ''; } return array($answer, $inputnames); }
function index($subaction, $iSurveyID = null, $gid = null, $qid = null) { $iSurveyID = sanitize_int($iSurveyID); $gid = sanitize_int($gid); $qid = sanitize_int($qid); $clang = $this->getController()->lang; $imageurl = Yii::app()->getConfig("adminimageurl"); Yii::app()->loadHelper("database"); if (!empty($_POST['subaction'])) { $subaction = Yii::app()->request->getPost('subaction'); } //BEGIN Sanitizing POSTed data if (!isset($iSurveyID)) { $iSurveyID = returnGlobal('sid'); } if (!isset($qid)) { $qid = returnGlobal('qid'); } if (!isset($gid)) { $gid = returnGlobal('gid'); } if (!isset($p_scenario)) { $p_scenario = returnGlobal('scenario'); } if (!isset($p_cqid)) { $p_cqid = returnGlobal('cqid'); if ($p_cqid == '') { $p_cqid = 0; } // we are not using another question as source of condition } if (!isset($p_cid)) { $p_cid = returnGlobal('cid'); } if (!isset($p_subaction)) { if (isset($_POST['subaction'])) { $p_subaction = $_POST['subaction']; } else { $p_subaction = $subaction; } } if (!isset($p_cquestions)) { $p_cquestions = returnGlobal('cquestions'); } if (!isset($p_csrctoken)) { $p_csrctoken = returnGlobal('csrctoken'); } if (!isset($p_prevquestionsgqa)) { $p_prevquestionsgqa = returnGlobal('prevQuestionSGQA'); } if (!isset($p_canswers)) { if (isset($_POST['canswers']) && is_array($_POST['canswers'])) { foreach ($_POST['canswers'] as $key => $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 (Yii::app()->getConfig('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<b" => $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 autoUnescape on all entries in $_POST // Take care to not use autoUnescape on $_POST variables after this $br = CHtml::openTag('br /'); //MAKE SURE THAT THERE IS A SID if (!isset($iSurveyID) || !$iSurveyID) { $conditionsoutput = $clang->gT("You have not selected a survey") . str_repeat($br, 2); $conditionsoutput .= CHtml::submitButton($clang->gT("Main admin screen"), array('onclick' => "window.open('" . $this->getController()->createUrl("admin/") . "', '_top')")) . $br; safeDie($conditionsoutput); return; } if (isset($p_subaction) && $p_subaction == "resetsurveylogic") { $clang = $this->getController()->lang; $resetsurveylogicoutput = $br; $resetsurveylogicoutput .= CHtml::openTag('table', array('class' => 'alertbox')); $resetsurveylogicoutput .= CHtml::openTag('tr') . CHtml::openTag('td', array('colspan' => '2')); $resetsurveylogicoutput .= CHtml::tag('font', array('size' => '1'), CHtml::tag('strong', array(), $clang->gT("Reset Survey Logic"))); $resetsurveylogicoutput .= CHtml::closeTag('td') . CHtml::closeTag('tr'); if (!isset($_GET['ok'])) { $button_yes = CHtml::submitButton($clang->gT("Yes"), array('onclick' => "window.open('" . $this->getController()->createUrl("admin/conditions/sa/index/subaction/resetsurveylogic/surveyid/{$iSurveyID}") . "?ok=Y" . "', '_top')")); $button_cancel = CHtml::submitButton($clang->gT("Cancel"), array('onclick' => "window.open('" . $this->getController()->createUrl("admin/survey/sa/view/surveyid/{$iSurveyID}") . "', '_top')")); $messagebox_content = $clang->gT("You are about to delete all conditions on this survey's questions") . "({$iSurveyID})" . $br . $clang->gT("We recommend that before you proceed, you export the entire survey from the main administration screen.") . $br . $clang->gT("Continue?") . $br . $button_yes . $button_cancel; $this->_renderWrappedTemplate('conditions', array('message' => array('title' => $clang->gT("Warning"), 'message' => $messagebox_content))); exit; } else { LimeExpressionManager::RevertUpgradeConditionsToRelevance($iSurveyID); Conditions::model()->deleteRecords("qid in (select qid from {{questions}} where sid={$iSurveyID})"); Yii::app()->session['flashmessage'] = $clang->gT("All conditions in this survey have been deleted."); $this->getController()->redirect($this->getController()->createUrl('admin/survey/sa/view/surveyid/' . $iSurveyID)); } } // MAKE SURE THAT THERE IS A QID if (!isset($qid) || !$qid) { $conditionsoutput = $clang->gT("You have not selected a question") . str_repeat($br, 2); $conditionsoutput .= CHtml::submitButton($clang->gT("Main admin screen"), array('onclick' => "window.open('" . $this->getController()->createUrl("admin/") . "', '_top')")) . $br; safeDie($conditionsoutput); 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_action_error = ""; // defined during the actions $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 .= CHtml::script("\n<!--\n alert(\"" . $clang->gT("Your condition could not be added! It did not include the question and/or answer upon which the condition was based. Please ensure you have selected a question and an answer.", "js") . "\")\n //-->\n"); } else { if (isset($p_cquestions) && $p_cquestions != '') { $conditionCfieldname = $p_cquestions; } elseif (isset($p_csrctoken) && $p_csrctoken != '') { $conditionCfieldname = $p_csrctoken; } $condition_data = array('qid' => $qid, 'scenario' => $p_scenario, 'cqid' => $p_cqid, 'cfieldname' => $conditionCfieldname, 'method' => $p_method); if (isset($p_canswers)) { foreach ($p_canswers as $ca) { //First lets make sure there isn't already an exact replica of this condition $condition_data['value'] = $ca; $result = Conditions::model()->findAllByAttributes($condition_data); $count_caseinsensitivedupes = count($result); if ($count_caseinsensitivedupes == 0) { $result = Conditions::model()->insertRecords($condition_data); } } } unset($posted_condition_value); // Please note that autoUnescape 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 = Yii::app()->request->getPost('ConditionConst'); } elseif (isset($_POST['prevQuestionSGQA']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab'] == "#PREVQUESTIONS") { $posted_condition_value = Yii::app()->request->getPost('prevQuestionSGQA'); } elseif (isset($_POST['tokenAttr']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab'] == "#TOKENATTRS") { $posted_condition_value = Yii::app()->request->getPost('tokenAttr'); } elseif (isset($_POST['ConditionRegexp']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab'] == "#REGEXP") { $posted_condition_value = Yii::app()->request->getPost('ConditionRegexp'); } if (isset($posted_condition_value)) { $condition_data['value'] = $posted_condition_value; $result = Conditions::model()->insertRecords($condition_data); } } 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 .= CHtml::script("\n<!--\n alert(\"" . $clang->gT("Your condition could not be added! It did not include the question and/or answer upon which the condition was based. Please ensure you have selected a question and an answer.", "js") . "\")\n //-->\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 $updated_data = array('qid' => $qid, 'scenario' => $p_scenario, 'cqid' => $p_cqid, 'cfieldname' => $conditionCfieldname, 'method' => $p_method, 'value' => $ca); $result = Conditions::model()->insertRecords($updated_data, TRUE, array('cid' => $p_cid)); } } unset($posted_condition_value); // Please note that autoUnescape 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 = Yii::app()->request->getPost('ConditionConst'); } elseif (isset($_POST['prevQuestionSGQA']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab'] == "#PREVQUESTIONS") { $posted_condition_value = Yii::app()->request->getPost('prevQuestionSGQA'); } elseif (isset($_POST['tokenAttr']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab'] == "#TOKENATTRS") { $posted_condition_value = Yii::app()->request->getPost('tokenAttr'); } elseif (isset($_POST['ConditionRegexp']) && isset($_POST['editTargetTab']) && $_POST['editTargetTab'] == "#REGEXP") { $posted_condition_value = Yii::app()->request->getPost('ConditionRegexp'); } if (isset($posted_condition_value)) { $updated_data = array('qid' => $qid, 'scenario' => $p_scenario, 'cqid' => $p_cqid, 'cfieldname' => $conditionCfieldname, 'method' => $p_method, 'value' => $posted_condition_value); $result = Conditions::model()->insertRecords($updated_data, TRUE, array('cid' => $p_cid)); } } 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 $result = Conditions::model()->deleteRecords(array('cid' => $p_cid)); 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 $result = Conditions::model()->deleteRecords(array('qid' => $qid, 'scenario' => $p_scenario)); LimeExpressionManager::UpgradeConditionsToRelevance(NULL, $qid); } // UPDATE SCENARIO if (isset($p_subaction) && $p_subaction == "updatescenario" && isset($p_newscenarionum)) { $result = Conditions::model()->insertRecords(array('scenario' => $p_newscenarionum), TRUE, array('qid' => $qid, 'scenario' => $p_scenario)); LimeExpressionManager::UpgradeConditionsToRelevance(NULL, $qid); } // DELETE ALL CONDITIONS FOR THIS QUESTION if (isset($p_subaction) && $p_subaction == "deleteallconditions") { LimeExpressionManager::RevertUpgradeConditionsToRelevance(NULL, $qid); // in case deleted the last condition $result = Conditions::model()->deleteRecords(array('qid' => $qid)); } // RENUMBER SCENARIOS if (isset($p_subaction) && $p_subaction == "renumberscenarios") { $query = "SELECT DISTINCT scenario FROM {{conditions}} WHERE qid=:qid ORDER BY scenario"; $result = Yii::app()->db->createCommand($query)->bindParam(":qid", $qid, PDO::PARAM_INT)->query() or safeDie("Couldn't select scenario<br />{$query}<br />"); $newindex = 1; foreach ($result->readAll() as $srow) { // new var $update_result == old var $result2 $update_result = Conditions::model()->insertRecords(array('scenario' => $newindex), TRUE, array('qid' => $qid, 'scenario' => $srow['scenario'])); $newindex++; } LimeExpressionManager::UpgradeConditionsToRelevance(NULL, $qid); Yii::app()->session['flashmessage'] = $clang->gT("All conditions scenarios were renumbered."); } // 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 foreach ($copyconditionsfrom as &$entry) { $entry = Yii::app()->db->quoteValue($entry); } $query = "SELECT * FROM {{conditions}}\n" . "WHERE cid in ("; $query .= implode(", ", $copyconditionsfrom); $query .= ")"; $result = Yii::app()->db->createCommand($query)->query() or safeDie("Couldn't get conditions for copy<br />{$query}<br />"); foreach ($result->readAll() as $row) { $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 $conditions_data = array('qid' => $newqid, 'scenario' => $pfc['scenario'], 'cqid' => $pfc['cqid'], 'cfieldname' => $pfc['cfieldname'], 'method' => $pfc['method'], 'value' => $pfc['value']); $result = Conditions::model()->findAllByAttributes($conditions_data); $count_caseinsensitivedupes = count($result); $countduplicates = 0; if ($count_caseinsensitivedupes != 0) { foreach ($result as $ccrow) { if ($ccrow['value'] == $pfc['value']) { $countduplicates++; } } } if ($countduplicates == 0) { $result = Conditions::model()->insertRecords($conditions_data); $conditionCopied = true; } else { $conditionDuplicated = true; } } } if (isset($conditionCopied) && $conditionCopied === true) { if (isset($conditionDuplicated) && $conditionDuplicated == true) { $CopyConditionsMessage = CHtml::tag('div', array('class' => 'partialheader'), '(' . $clang->gT("Conditions successfully copied (some were skipped because they were duplicates)") . ')'); } else { $CopyConditionsMessage = CHtml::tag('div', array('class' => 'successheader'), '(' . $clang->gT("Conditions successfully copied") . ')'); } } else { $CopyConditionsMessage = CHtml::tag('div', array('class' => 'warningheader'), '(' . $clang->gT("No conditions could be copied (due to duplicates)") . ')'); } } LimeExpressionManager::UpgradeConditionsToRelevance($iSurveyID); // 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($iSurveyID)) { $iSurveyID = returnGlobal('sid'); } $thissurvey = getSurveyInfo($iSurveyID); $qresult = Questions::model()->with('groups')->findByAttributes(array('qid' => $qid, 'parent_qid' => 0, 'language' => Survey::model()->findByPk($iSurveyID)->language)); $questiongroupname = $qresult->groups->group_name; $questiontitle = $qresult['title']; $questiontext = $qresult['question']; $questiontype = $qresult['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 $qresult = Questions::model()->with(array('groups' => array('condition' => 'groups.language = :lang', 'params' => array(':lang' => Survey::model()->findByPk($iSurveyID)->language))))->findAllByAttributes(array('parent_qid' => 0, 'sid' => $iSurveyID, 'language' => Survey::model()->findByPk($iSurveyID)->language)); $qrows = array(); foreach ($qresult as $k => $v) { $qrows[$k] = array_merge($v->attributes, $v->groups->attributes); } // 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) { 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) { $result = Questions::model()->with(array('groups' => array('condition' => 'groups.language = :lang', 'params' => array(':lang' => Survey::model()->findByPk($iSurveyID)->language))))->findAllByAttributes(array('qid' => $ql, 'parent_qid' => 0, 'sid' => $iSurveyID, 'language' => Survey::model()->findByPk($iSurveyID)->language)); $thiscount = count($result); // And store again these questions in this array... foreach ($result as $myrows) { //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) { $result = Questions::model()->with(array('groups' => array('condition' => 'groups.language = :lang', 'params' => array(':lang' => Survey::model()->findByPk($iSurveyID)->language))))->findAllByAttributes(array('qid' => $pq, 'parent_qid' => 0, 'sid' => $iSurveyID, 'language' => Survey::model()->findByPk($iSurveyID)->language)); $postcount = count($result); foreach ($result as $myrows) { $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") { $aresult = Questions::model()->findAllByAttributes(array('parent_qid' => $rows['qid'], 'language' => Survey::model()->findByPk($iSurveyID)->language), array('order' => 'question_order ASC')); foreach ($aresult as $arows) { $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 //Array Flexible Row case "H": //Array Flexible Column $fresult = Answers::model()->findAllByAttributes(array('qid' => $rows['qid'], "language" => Survey::model()->findByPk($iSurveyID)->language, 'scale_id' => 0), array('order' => 'sortorder, code')); foreach ($fresult as $frow) { $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 = getQuestionAttributeValues($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 {{questions sq}}, {{questions q}}" . " WHERE sq.sid={$iSurveyID} AND sq.parent_qid=q.qid " . "AND q.language=:lang" . " AND sq.language=:lang" . " AND q.qid=:qid\n AND sq.scale_id=0\n ORDER BY sq.question_order"; $sLanguage = Survey::model()->findByPk($iSurveyID)->language; $y_axis_db = Yii::app()->db->createCommand($fquery)->bindParam(":lang", $sLanguage, PDO::PARAM_STR)->bindParam(":qid", $rows['qid'], PDO::PARAM_INT)->query(); // Get the X-Axis $aquery = "SELECT sq.*\n FROM {{questions q}}, {{questions sq}}\n WHERE q.sid={$iSurveyID}\n AND sq.parent_qid=q.qid\n AND q.language=:lang\n AND sq.language=:lang\n AND q.qid=:qid\n AND sq.scale_id=1\n ORDER BY sq.question_order"; $x_axis_db = Yii::app()->db->createCommand($aquery)->bindParam(":lang", $sLanguage, PDO::PARAM_STR)->bindParam(":qid", $rows['qid'], PDO::PARAM_INT)->query() or safeDie("Couldn't get answers to Array questions<br />{$aquery}<br />"); foreach ($x_axis_db->readAll() as $frow) { $x_axis[$frow['title']] = $frow['question']; } foreach ($y_axis_db->readAll() as $yrow) { foreach ($x_axis as $key => $val) { $shortquestion = $rows['title'] . ":{$yrow['title']}:{$key}: [" . strip_tags($yrow['question']) . "][" . strip_tags($val) . "] " . flattenText($rows['question']); $cquestions[] = array($shortquestion, $rows['qid'], $rows['type'], $rows['sid'] . $X . $rows['gid'] . $X . $rows['qid'] . $yrow['title'] . "_" . $key); if ($rows['type'] == ":") { for ($ii = $minvalue; $ii <= $maxvalue; $ii += $stepvalue) { $canswers[] = array($rows['sid'] . $X . $rows['gid'] . $X . $rows['qid'] . $yrow['title'] . "_" . $key, $ii, $ii); } } } } unset($x_axis); } elseif ($rows['type'] == "1") { $aresult = Questions::model()->findAllByAttributes(array('parent_qid' => $rows['qid'], 'language' => Survey::model()->findByPk($iSurveyID)->language), array('order' => 'question_order desc')); foreach ($aresult as $arows) { $attr = getQuestionAttributeValues($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 $lresult = Answers::model()->findAllByAttributes(array('qid' => $rows['qid'], 'scale_id' => 0, 'language' => Survey::model()->findByPk($iSurveyID)->language), array('order' => 'sortorder, answer')); foreach ($lresult as $lrows) { $canswers[] = array($rows['sid'] . $X . $rows['gid'] . $X . $rows['qid'] . $arows['title'] . "#0", "{$lrows['code']}", "{$lrows['code']}"); } // second label $lresult = Answers::model()->findAllByAttributes(array('qid' => $rows['qid'], 'scale_id' => 1, 'language' => Survey::model()->findByPk($iSurveyID)->language), array('order' => 'sortorder, answer')); foreach ($lresult as $lrows) { $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") { $aresult = Questions::model()->findAllByAttributes(array("parent_qid" => $rows['qid'], "language" => Survey::model()->findByPk($iSurveyID)->language), array('order' => 'question_order desc')); foreach ($aresult as $arows) { $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") { $aresult = Answers::model()->findAllByAttributes(array("qid" => $rows['qid'], "scale_id" => 0, "language" => Survey::model()->findByPk($iSurveyID)->language), array('order' => 'sortorder, answer')); $acount = count($aresult); foreach ($aresult as $arow) { $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); } 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']); $aresult = Questions::model()->findAllByAttributes(array("parent_qid" => $rows['qid'], "language" => Survey::model()->findByPk($iSurveyID)->language), array('order' => 'question_order desc')); foreach ($aresult as $arows) { $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") { //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: $aresult = Answers::model()->findAllByAttributes(array('qid' => $rows['qid'], 'scale_id' => 0, 'language' => Survey::model()->findByPk($iSurveyID)->language), array('order' => 'sortorder, answer')); foreach ($aresult as $arows) { $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 $questionNavOptions = CHtml::openTag('optgroup', array('class' => 'activesurveyselect', 'label' => $clang->gT("Before", "js"))); foreach ($theserows as $row) { $question = $row['question']; $question = strip_tags($question); if (strlen($question) < 35) { $questionselecter = $question; } else { //$questionselecter = substr($question, 0, 35).".."; $questionselecter = htmlspecialchars(mb_strcut(html_entity_decode($question, ENT_QUOTES, 'UTF-8'), 0, 35, 'UTF-8')) . "..."; } $questionNavOptions .= CHtml::tag('option', array('value' => $this->getController()->createUrl("/admin/conditions/sa/index/subaction/editconditionsform/surveyid/{$iSurveyID}/gid/{$row['gid']}/qid/{$row['qid']}")), $questionselecter); } $questionNavOptions .= CHtml::closeTag('optgroup'); $questionNavOptions .= CHtml::openTag('optgroup', array('class' => 'activesurveyselect', 'label' => $clang->gT("Current", "js"))); $question = strip_tags($questiontext); if (strlen($question) < 35) { $questiontextshort = $question; } else { //$questiontextshort = substr($question, 0, 35).".."; $questiontextshort = htmlspecialchars(mb_strcut(html_entity_decode($question, ENT_QUOTES, 'UTF-8'), 0, 35, 'UTF-8')) . "..."; } $questionNavOptions .= CHtml::tag('option', array('value' => $this->getController()->createUrl("/admin/conditions/sa/index/subaction/editconditionsform/surveyid/{$iSurveyID}/gid/{$gid}/qid/{$qid}"), 'selected' => 'selected'), $questiontitle . ': ' . $questiontextshort); $questionNavOptions .= CHtml::closeTag('optgroup'); $questionNavOptions .= CHtml::openTag('optgroup', array('class' => 'activesurveyselect', 'label' => $clang->gT("After", "js"))); foreach ($postrows as $row) { $question = $row['question']; $question = strip_tags($question); if (strlen($question) < 35) { $questionselecter = $question; } else { //$questionselecter = substr($question, 0, 35).".."; $questionselecter = htmlspecialchars(mb_strcut(html_entity_decode($question, ENT_QUOTES, 'UTF-8'), 0, 35, 'UTF-8')) . "..."; } $questionNavOptions .= CHtml::tag('option', array('value' => $this->getController()->createUrl("/admin/conditions/sa/index/subaction/editconditionsform/surveyid/{$iSurveyID}/gid/{$row['gid']}/qid/{$row['qid']}")), $row['title'] . ':' . $questionselecter); } $questionNavOptions .= CHtml::closeTag('optgroup'); //Now display the information and forms //BEGIN: PREPARE JAVASCRIPT TO SHOW MATCHING ANSWERS TO SELECTED QUESTION $javascriptpre = CHtml::openTag('script', array('type' => 'text/javascript')) . "<!--\n" . "\tvar Fieldnames = new Array();\n" . "\tvar Codes = new Array();\n" . "\tvar Answers = new Array();\n" . "\tvar QFieldnames = new Array();\n" . "\tvar Qcqids = new Array();\n" . "\tvar Qtypes = new Array();\n"; $jn = 0; if (isset($canswers)) { foreach ($canswers as $can) { $an = ls_json_encode(flattenText($can[2])); $javascriptpre .= "Fieldnames[{$jn}]='{$can['0']}';\n" . "Codes[{$jn}]='{$can['1']}';\n" . "Answers[{$jn}]={$an};\n"; $jn++; } } $jn = 0; if (isset($cquestions)) { foreach ($cquestions as $cqn) { $javascriptpre .= "QFieldnames[{$jn}]='{$cqn['3']}';\n" . "Qcqids[{$jn}]='{$cqn['1']}';\n" . "Qtypes[{$jn}]='{$cqn['2']}';\n"; $jn++; } } // record a JS variable to let jQuery know if survey is Anonymous if ($thissurvey['anonymized'] == 'Y') { $javascriptpre .= "isAnonymousSurvey = true;"; } else { $javascriptpre .= "isAnonymousSurvey = false;"; } $javascriptpre .= "//-->\n" . CHtml::closeTag('script'); //END: PREPARE JAVASCRIPT TO SHOW MATCHING ANSWERS TO SELECTED QUESTION $this->getController()->_css_admin_includes(Yii::app()->getConfig("publicstyleurl") . 'jquery.multiselect.css'); $aViewUrls = array(); $aData['clang'] = $clang; $aData['surveyid'] = $iSurveyID; $aData['qid'] = $qid; $aData['gid'] = $gid; $aData['imageurl'] = $imageurl; $aData['extraGetParams'] = $extraGetParams; $aData['quesitonNavOptions'] = $questionNavOptions; $aData['conditionsoutput_action_error'] = $conditionsoutput_action_error; $aData['javascriptpre'] = $javascriptpre; $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') { //3: Get other conditions currently set for this question $conditionscount = 0; $s = 0; $criteria = new CDbCriteria(); $criteria->select = 'scenario'; // only select the 'scenario' column $criteria->condition = 'qid=:qid'; $criteria->params = array(':qid' => $qid); $criteria->order = 'scenario'; $criteria->group = 'scenario'; $scenarioresult = Conditions::model()->findAll($criteria); $scenariocount = count($scenarioresult); $showreplace = "{$questiontitle}" . $this->_showSpeaker($questiontext); $onlyshow = sprintf($clang->gT("Only show question %s IF"), $showreplace); $aData['conditionsoutput'] = ''; $aData['extraGetParams'] = $extraGetParams; $aData['quesitonNavOptions'] = $questionNavOptions; $aData['conditionsoutput_action_error'] = $conditionsoutput_action_error; $aData['javascriptpre'] = $javascriptpre; $aData['onlyshow'] = $onlyshow; $aData['subaction'] = $subaction; $aData['scenariocount'] = $scenariocount; $aViewUrls['conditionslist_view'][] = $aData; if ($scenariocount > 0) { //self::_js_admin_includes($this->config->item("generalscripts").'jquery/jquery.checkgroup.js'); $this->getController()->_js_admin_includes(Yii::app()->getConfig("generalscripts") . 'jquery/jquery.checkgroup.js'); foreach ($scenarioresult as $scenarionr) { $scenariotext = ""; if ($s == 0 && $scenariocount > 1) { $scenariotext = " -------- <i>Scenario {$scenarionr['scenario']}</i> --------"; } if ($s > 0) { $scenariotext = " -------- <i>" . $clang->gT("OR") . " Scenario {$scenarionr['scenario']}</i> --------"; } if ($subaction == "copyconditionsform" || $subaction == "copyconditions") { $initialCheckbox = "<td><input type='checkbox' id='scenarioCbx{$scenarionr['scenario']}' checked='checked'/>\n" . "<script type='text/javascript'>\$(document).ready(function () { \$('#scenarioCbx{$scenarionr['scenario']}').checkgroup({ groupName:'aConditionFromScenario{$scenarionr['scenario']}'}); });</script>" . "</td><td> </td>\n"; } else { $initialCheckbox = ""; } if ($scenariotext != "" && ($subaction == "editconditionsform" || $subaction == "insertcondition" || $subaction == "updatecondition" || $subaction == "editthiscondition" || $subaction == "renumberscenarios" || $subaction == "updatescenario" || $subaction == "deletescenario" || $subaction == "delete")) { $img_tag = CHtml::image($imageurl . '/scenario_delete.png', $clang->gT("Delete this scenario"), array('name' => 'DeleteWholeGroup')); $additional_main_content = CHtml::link($img_tag, '#', array('onclick' => "if ( confirm('" . $clang->gT("Are you sure you want to delete all conditions set in this scenario?", "js") . "')) { document.getElementById('deletescenario{$scenarionr['scenario']}').submit();}")); $img_tag = CHtml::image($imageurl . '/scenario_edit.png', $clang->gT("Edit scenario"), array('name' => 'DeleteWholeGroup')); $additional_main_content .= CHtml::link($img_tag, '#', array('id' => 'editscenariobtn' . $scenarionr['scenario'], 'onclick' => "\$('#editscenario{$scenarionr['scenario']}').toggle('slow');")); $aData['additional_content'] = $additional_main_content; } $aData['initialCheckbox'] = $initialCheckbox; $aData['scenariotext'] = $scenariotext; $aData['scenarionr'] = $scenarionr; if (!isset($aViewUrls['output'])) { $aViewUrls['output'] = ''; } $aViewUrls['output'] .= $this->getController()->render('/admin/conditions/includes/conditions_scenario', $aData, TRUE); unset($currentfield); $query = "SELECT count(*) as recordcount\n FROM {{conditions}} c, {{questions}} q, {{groups}} g\n WHERE c.cqid=q.qid " . "AND q.gid=g.gid " . "AND q.parent_qid=0 " . "AND q.language=:lang1 " . "AND g.language=:lang2 " . "AND c.qid=:qid " . "AND c.scenario=:scenario " . "AND c.cfieldname NOT LIKE '{%' "; // avoid catching SRCtokenAttr conditions $sLanguage = Survey::model()->findByPk($iSurveyID)->language; $result = Yii::app()->db->createCommand($query)->bindValue(":scenario", $scenarionr['scenario'])->bindValue(":qid", $qid, PDO::PARAM_INT)->bindValue(":lang1", $sLanguage, PDO::PARAM_STR)->bindValue(":lang2", $sLanguage, PDO::PARAM_STR)->queryRow(); $conditionscount = (int) $result['recordcount']; $query = "SELECT c.cid, c.scenario, c.cqid, c.cfieldname, c.method, c.value, q.type\n FROM {{conditions}} c, {{questions}} q, {{groups}} g\n WHERE c.cqid=q.qid " . "AND q.gid=g.gid " . "AND q.parent_qid=0 " . "AND q.language=:lang1 " . "AND g.language=:lang2 " . "AND c.qid=:qid " . "AND c.scenario=:scenario " . "AND c.cfieldname NOT LIKE '{%' " . "ORDER BY g.group_order, q.question_order, c.cfieldname"; $sLanguage = Survey::model()->findByPk($iSurveyID)->language; $result = Yii::app()->db->createCommand($query)->bindValue(":scenario", $scenarionr['scenario'])->bindValue(":qid", $qid, PDO::PARAM_INT)->bindValue(":lang1", $sLanguage, PDO::PARAM_STR)->bindValue(":lang2", $sLanguage, PDO::PARAM_STR)->query() or safeDie("Couldn't get other conditions for question {$qid}<br />{$query}<br />"); $querytoken = "SELECT count(*) as recordcount " . "FROM {{conditions}} " . "WHERE " . " {{conditions}}.qid=:qid " . "AND {{conditions}}.scenario=:scenario " . "AND {{conditions}}.cfieldname LIKE '{%' "; // only catching SRCtokenAttr conditions $resulttoken = Yii::app()->db->createCommand($querytoken)->bindValue(":scenario", $scenarionr['scenario'], PDO::PARAM_INT)->bindValue(":qid", $qid, PDO::PARAM_INT)->queryRow() or safeDie("Couldn't get other conditions for question {$qid}<br />{$query}<br />"); $conditionscounttoken = (int) $resulttoken['recordcount']; $querytoken = "SELECT {{conditions}}.cid, " . "{{conditions}}.scenario, " . "{{conditions}}.cqid, " . "{{conditions}}.cfieldname, " . "{{conditions}}.method, " . "{{conditions}}.value, " . "'' AS type " . "FROM {{conditions}} " . "WHERE " . " {{conditions}}.qid=:qid " . "AND {{conditions}}.scenario=:scenario " . "AND {{conditions}}.cfieldname LIKE '{%' " . "ORDER BY {{conditions}}.cfieldname"; $resulttoken = Yii::app()->db->createCommand($querytoken)->bindValue(":scenario", $scenarionr['scenario'], PDO::PARAM_INT)->bindValue(":qid", $qid, PDO::PARAM_INT)->query() or safeDie("Couldn't get other conditions for question {$qid}<br />{$query}<br />"); $conditionscount = $conditionscount + $conditionscounttoken; if ($conditionscount > 0) { $aConditionsMerged = array(); foreach ($resulttoken->readAll() as $arow) { $aConditionsMerged[] = $arow; } foreach ($result->readAll() as $arow) { $aConditionsMerged[] = $arow; } foreach ($aConditionsMerged as $rows) { if ($rows['method'] == "") { $rows['method'] = "=="; } //Fill in the empty method from previous versions $markcidstyle = "oddrow"; if (array_search($rows['cid'], $markcidarray) !== FALSE) { // This is the style used when the condition editor is called // in order to check which conditions prevent a question deletion $markcidstyle = "markedrow"; } if ($subaction == "editthiscondition" && isset($p_cid) && $rows['cid'] === $p_cid) { // Style used when editing a condition $markcidstyle = "editedrow"; } if (isset($currentfield) && $currentfield != $rows['cfieldname']) { $aViewUrls['output'] .= "<tr class='evenrow'>\n" . "\t<td colspan='2'>\n" . "<span><strong>" . $clang->gT("and") . "</strong></span></td></tr>"; } elseif (isset($currentfield)) { $aViewUrls['output'] .= "<tr class='evenrow'>\n" . "\t<td colspan='2'>\n" . "<span><strong>" . $clang->gT("or") . "</strong></span></td></tr>"; } $aViewUrls['output'] .= "\t<tr class='{$markcidstyle}'>\n" . "\t<td colspan='2'>" . CHtml::form(array("/admin/conditions/sa/index/subaction/{$subaction}/surveyid/{$iSurveyID}/gid/{$gid}/qid/{$qid}/"), 'post', array('id' => "conditionaction{$rows['cid']}", 'name' => "conditionaction{$rows['cid']}")) . "<table>\n" . "\t<tr>\n"; if ($subaction == "copyconditionsform" || $subaction == "copyconditions") { $aViewUrls['output'] .= "<td> </td>" . "<td>\n" . "\t<input type='checkbox' name='aConditionFromScenario{$scenarionr['scenario']}' id='cbox{$rows['cid']}' value='{$rows['cid']}' checked='checked'/>\n" . "</td>\n"; } $aViewUrls['output'] .= "" . "<td>\n" . "\t<span>\n"; $leftOperandType = 'unknown'; // prevquestion, tokenattr if ($thissurvey['anonymized'] != 'Y' && preg_match('/^{TOKEN:([^}]*)}$/', $rows['cfieldname'], $extractedTokenAttr) > 0) { $leftOperandType = 'tokenattr'; $aTokenAttrNames = getTokenFieldsAndNames($iSurveyID); if (count($aTokenAttrNames) != 0) { $thisAttrName = HTMLEscape($aTokenAttrNames[strtolower($extractedTokenAttr[1])]['description']) . " [" . $clang->gT("From token table") . "]"; } else { $thisAttrName = HTMLEscape($extractedTokenAttr[1]) . " [" . $clang->gT("Inexistant token table") . "]"; } $aViewUrls['output'] .= "\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']) { $aViewUrls['output'] .= "\t{$cqn['0']} (qid{$rows['cqid']})\n"; $conditionsList[] = array("cid" => $rows['cid'], "text" => $cqn[0] . " ({$rows['value']})"); } else { //$aViewUrls['output'] .= "\t<font color='red'>ERROR: Delete this condition. It is out of order.</font>\n"; } } } $aViewUrls['output'] .= "\t</span></td>\n" . "\t<td>\n" . "<span>\n" . $method[trim($rows['method'])] . "</span>\n" . "\t</td>\n" . "\n" . "\t<td>\n" . "<span>\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'; $aViewUrls['output'] .= "" . HTMLEscape($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") . ')'; } $aViewUrls['output'] .= "" . HTMLEscape($matchedSGQAText) . "\n"; } elseif ($thissurvey['anonymized'] != 'Y' && preg_match('/^{TOKEN:([^}]*)}$/', $rows['value'], $extractedTokenAttr) > 0) { $rightOperandType = 'tokenAttr'; $aTokenAttrNames = getTokenFieldsAndNames($iSurveyID); if (count($aTokenAttrNames) != 0) { $thisAttrName = HTMLEscape($aTokenAttrNames[strtolower($extractedTokenAttr[1])]['description']) . " [" . $clang->gT("From token table") . "]"; } else { $thisAttrName = HTMLEscape($extractedTokenAttr[1]) . " [" . $clang->gT("Inexistant token table") . "]"; } $aViewUrls['output'] .= "\t{$thisAttrName}\n"; } elseif (isset($canswers)) { foreach ($canswers as $can) { if ($can[0] == $rows['cfieldname'] && $can[1] == $rows['value']) { $aViewUrls['output'] .= "{$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'] == '') { $aViewUrls['output'] .= "" . $clang->gT("No answer") . "\n"; } else { $aViewUrls['output'] .= "" . HTMLEscape($rows['value']) . "\n"; } } $aViewUrls['output'] .= "\t</span></td>\n" . "\t<td>\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 $aData['rows'] = $rows; $aData['sImageURL'] = Yii::app()->getConfig('adminimageurl'); //$aViewUrls['includes/conditions_edit'][] = $aData; $aViewUrls['output'] .= $this->getController()->render('/admin/conditions/includes/conditions_edit', $aData, TRUE); // now sets e corresponding hidden input field // depending on the leftOperandType if ($leftOperandType == 'tokenattr') { $aViewUrls['output'] .= CHtml::hiddenField('csrctoken', HTMLEscape($rows['cfieldname']), array('id' => 'csrctoken' . $rows['cid'])); } else { $aViewUrls['output'] .= CHtml::hiddenField('cquestions', HTMLEscape($rows['cfieldname']), array('id' => 'cquestions' . $rows['cid'])); } // now set the corresponding hidden input field // depending on the rightOperandType // This is used when Editting a condition if ($rightOperandType == 'predefinedAnsw') { $aViewUrls['output'] .= CHtml::hiddenField('EDITcanswers[]', HTMLEscape($rows['value']), array('id' => 'editModeTargetVal' . $rows['cid'])); } elseif ($rightOperandType == 'prevQsgqa') { $aViewUrls['output'] .= CHtml::hiddenField('EDITprevQuestionSGQA', HTMLEscape($rows['value']), array('id' => 'editModeTargetVal' . $rows['cid'])); } elseif ($rightOperandType == 'tokenAttr') { $aViewUrls['output'] .= CHtml::hiddenField('EDITtokenAttr', HTMLEscape($rows['value']), array('id' => 'editModeTargetVal' . $rows['cid'])); } elseif ($rightOperandType == 'regexp') { $aViewUrls['output'] .= CHtml::hiddenField('EDITConditionRegexp', HTMLEscape($rows['value']), array('id' => 'editModeTargetVal' . $rows['cid'])); } else { $aViewUrls['output'] .= CHtml::hiddenField('EDITConditionConst', HTMLEscape($rows['value']), array('id' => 'editModeTargetVal' . $rows['cid'])); } } $aViewUrls['output'] .= CHtml::closeTag('td') . CHtml::closeTag('tr') . CHtml::closeTag('table') . CHtml::closeTag('form') . CHtml::closeTag('td') . CHtml::closeTag('tr'); $currentfield = $rows['cfieldname']; } } $s++; } } else { // no condition ==> disable delete all conditions button, and display a simple comment $aViewUrls['output'] = CHtml::openTag('tr') . CHtml::tag('td', array(), $clang->gT("This question is always shown.")) . CHtml::tag('td', array(), ' ') . CHtml::closeTag('tr'); } $aViewUrls['output'] .= CHtml::closeTag('table'); } //END DISPLAY CONDITIONS FOR THIS QUESTION // BEGIN: DISPLAY THE COPY CONDITIONS FORM if ($subaction == "copyconditionsform" || $subaction == "copyconditions") { $aViewUrls['output'] .= "<tr class=''><td colspan='3'>\n" . CHtml::form(array("/admin/conditions/sa/index/subaction/copyconditions/surveyid/{$iSurveyID}/gid/{$gid}/qid/{$qid}/"), 'post', array('id' => "copyconditions", 'name' => "copyconditions")) . "<div class='header ui-widget-header'>" . $clang->gT("Copy conditions") . "</div>\n"; //CopyConditionsMessage if (isset($CopyConditionsMessage)) { $aViewUrls['output'] .= "<div class='messagebox ui-corner-all'>\n" . "{$CopyConditionsMessage}\n" . "</div>\n"; } if (isset($conditionsList) && is_array($conditionsList)) { //TIBO $this->getController()->_js_admin_includes(Yii::app()->getConfig("generalscripts") . 'jquery/jquery.multiselect.min.js'); // TODO $aViewUrls['output'] .= "<script type='text/javascript'>\$(document).ready(function () { \$('#copytomultiselect').multiselect( { autoOpen: true, noneSelectedText: '" . $clang->gT("No questions selected") . "', checkAllText: '" . $clang->gT("Check all") . "', uncheckAllText: '" . $clang->gT("Uncheck all") . "', selectedText: '# " . $clang->gT("selected") . "', beforeclose: function(){ return false;},height: 200 } ); });</script>"; $aViewUrls['output'] .= "\t<div class='conditioncopy-tbl-row'>\n" . "\t<div class='condition-tbl-left'>" . $clang->gT("Copy the selected conditions to") . ":</div>\n" . "\t<div class='condition-tbl-right'>\n" . "\t\t<select name='copyconditionsto[]' id='copytomultiselect' multiple='multiple' >\n"; if (isset($pquestions) && count($pquestions) != 0) { foreach ($pquestions as $pq) { $aViewUrls['output'] .= "\t\t<option value='{$pq['fieldname']}'>" . $pq['text'] . "</option>\n"; } } $aViewUrls['output'] .= "\t\t</select>\n" . "\t</div>\n" . "\t</div>\n"; if (!isset($pquestions) || count($pquestions) == 0) { $disableCopyCondition = " disabled='disabled'"; } else { $disableCopyCondition = " "; } $aViewUrls['output'] .= "\t<div class='condition-tbl-full'>\n" . "\t\t<input type='submit' value='" . $clang->gT("Copy conditions") . "' onclick=\"prepareCopyconditions(); return true;\" {$disableCopyCondition}/>\n" . "<input type='hidden' name='subaction' value='copyconditions' />\n" . "<input type='hidden' name='sid' value='{$iSurveyID}' />\n" . "<input type='hidden' name='gid' value='{$gid}' />\n" . "<input type='hidden' name='qid' value='{$qid}' />\n" . "</div>\n"; $aViewUrls['output'] .= "<script type=\"text/javascript\">\n" . "function prepareCopyconditions()\n" . "{\n" . "\t\$(\"input:checked[name^='aConditionFromScenario']\").each(function(i,val)\n" . "\t{\n" . "var thecid = val.value;\n" . "var theform = document.getElementById('copyconditions');\n" . "addHiddenElement(theform,'copyconditionsfrom[]',thecid);\n" . "return true;\n" . "\t});\n" . "}\n" . "</script>\n"; } else { $aViewUrls['output'] .= "<div class='messagebox ui-corner-all'>\n" . "<div class='partialheader'>" . $clang->gT("There are no existing conditions in this survey.") . "</div><br />\n" . "</div>\n"; } $aViewUrls['output'] .= "</form></td></tr>\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") { $aViewUrls['output'] .= CHtml::form(array("/admin/conditions/sa/index/subaction/{$subaction}/surveyid/{$iSurveyID}/gid/{$gid}/qid/{$qid}/"), 'post', array('id' => "editconditions", 'name' => "editconditions")); if ($subaction == "editthiscondition" && isset($p_cid)) { $mytitle = $clang->gT("Edit condition"); } else { $mytitle = $clang->gT("Add condition"); } $aViewUrls['output'] .= "<div class='header ui-widget-header'>" . $mytitle . "</div>\n"; /////////////////////////////////////////////////////////////////////////////////////////// // Begin "Scenario" row if ($subaction != "editthiscondition" && isset($scenariocount) && ($scenariocount == 1 || $scenariocount == 0) || $subaction == "editthiscondition" && isset($scenario) && $scenario == 1) { $scenarioAddBtn = "\t<a id='scenarioaddbtn' href='#' onclick=\"\$('#scenarioaddbtn').hide();\$('#defaultscenariotxt').hide('slow');\$('#scenario').show('slow');\">" . "<img src='{$imageurl}/plus.png' alt='" . $clang->gT('Add scenario') . "' /></a>\n"; $scenarioTxt = "<span id='defaultscenariotxt'>" . $clang->gT("Default scenario") . "</span>"; $scenarioInputStyle = "style = 'display: none;'"; } else { $scenarioAddBtn = ""; $scenarioTxt = ""; $scenarioInputStyle = "style = ''"; } $aViewUrls['output'] .= "<div class='condition-tbl-row'>\n" . "<div class='condition-tbl-left'>{$scenarioAddBtn} " . $clang->gT("Scenario") . "</div>\n" . "<div class='condition-tbl-right'><input type='text' name='scenario' id='scenario' value='1' size='2' {$scenarioInputStyle}/>" . "{$scenarioTxt}\n" . "</div>\n" . "</div>\n"; // Begin "Question" row $aViewUrls['output'] .= "<div class='condition-tbl-row'>\n" . "<div class='condition-tbl-left'>" . $clang->gT("Question") . "</div>\n" . "<div class='condition-tbl-right'>\n" . "\t<div id=\"conditionsource\" class=\"tabs-nav\">\n" . "\t<ul>\n" . "\t<li><a href=\"#SRCPREVQUEST\"><span>" . $clang->gT("Previous questions") . "</span></a></li>\n" . "\t<li><a href=\"#SRCTOKENATTRS\"><span>" . $clang->gT("Token fields") . "</span></a></li>\n" . "\t</ul>\n"; // Previous question tab $aViewUrls['output'] .= "<div id='SRCPREVQUEST'><select name='cquestions' id='cquestions' size='" . ($qcount + 1) . "' >\n"; if (isset($cquestions)) { $js_getAnswers_onload = ""; foreach ($cquestions as $cqn) { $aViewUrls['output'] .= "<option value='{$cqn['3']}' title=\"" . htmlspecialchars($cqn[0]) . "\""; if (isset($p_cquestions) && $cqn[3] == $p_cquestions) { $aViewUrls['output'] .= " selected"; if (isset($p_canswers)) { $canswersToSelect = ""; foreach ($p_canswers as $checkval) { $canswersToSelect .= ";{$checkval}"; } $canswersToSelect = substr($canswersToSelect, 1); $js_getAnswers_onload .= "\$('#canswersToSelect').val('{$canswersToSelect}');\n"; } } $aViewUrls['output'] .= ">{$cqn['0']}</option>\n"; } } $aViewUrls['output'] .= "</select>\n" . "</div>\n"; // Source token Tab $aViewUrls['output'] .= "<div id='SRCTOKENATTRS'><select name='csrctoken' id='csrctoken' size='" . ($qcount + 1) . "' >\n"; foreach (getTokenFieldsAndNames($iSurveyID) as $tokenattr => $tokenattrName) { // Check to select if (isset($p_csrctoken) && $p_csrctoken == '{TOKEN:' . strtoupper($tokenattr) . '}') { $selectThisSrcTokenAttr = "selected=\"selected\""; } else { $selectThisSrcTokenAttr = ""; } $aViewUrls['output'] .= "<option value='{TOKEN:" . strtoupper($tokenattr) . "}' {$selectThisSrcTokenAttr}>" . HTMLEscape($tokenattrName['description']) . "</option>\n"; } $aViewUrls['output'] .= "</select>\n" . "</div>\n\n"; $aViewUrls['output'] .= "\t</div>\n"; // end conditionsource div $aViewUrls['output'] .= "</div>\n" . "</div>\n"; // Begin "Comparison operator" row $aViewUrls['output'] .= "<div class='condition-tbl-row'>\n" . "<div class='condition-tbl-left'>" . $clang->gT("Comparison operator") . "</div>\n" . "<div class='condition-tbl-right'>\n" . "<select name='method' id='method'>\n"; foreach ($method as $methodCode => $methodTxt) { $selected = $methodCode == "==" ? " selected='selected'" : ""; $aViewUrls['output'] .= "\t<option value='" . $methodCode . "'{$selected}>" . $methodTxt . "</option>\n"; } $aViewUrls['output'] .= "</select>\n" . "</div>\n" . "</div>\n"; // Begin "Answer" row $aViewUrls['output'] .= "<div class='condition-tbl-row'>\n" . "<div class='condition-tbl-left'>" . $clang->gT("Answer") . "</div>\n"; if ($subaction == "editthiscondition") { $multipletext = ""; if (isset($_POST['EDITConditionConst']) && $_POST['EDITConditionConst'] != '') { $EDITConditionConst = HTMLEscape($_POST['EDITConditionConst']); } else { $EDITConditionConst = ""; } if (isset($_POST['EDITConditionRegexp']) && $_POST['EDITConditionRegexp'] != '') { $EDITConditionRegexp = HTMLEscape($_POST['EDITConditionRegexp']); } else { $EDITConditionRegexp = ""; } } else { $multipletext = "multiple"; if (isset($_POST['ConditionConst']) && $_POST['ConditionConst'] != '') { $EDITConditionConst = HTMLEscape($_POST['ConditionConst']); } else { $EDITConditionConst = ""; } if (isset($_POST['ConditionRegexp']) && $_POST['ConditionRegexp'] != '') { $EDITConditionRegexp = HTMLEscape($_POST['ConditionRegexp']); } else { $EDITConditionRegexp = ""; } } $aViewUrls['output'] .= "" . "<div class='condition-tbl-right'>\n" . "<div id=\"conditiontarget\" class=\"tabs-nav\">\n" . "\t<ul>\n" . "\t\t<li><a href=\"#CANSWERSTAB\"><span>" . $clang->gT("Predefined") . "</span></a></li>\n" . "\t\t<li><a href=\"#CONST\"><span>" . $clang->gT("Constant") . "</span></a></li>\n" . "\t\t<li><a href=\"#PREVQUESTIONS\"><span>" . $clang->gT("Questions") . "</span></a></li>\n" . "\t\t<li><a href=\"#TOKENATTRS\"><span>" . $clang->gT("Token fields") . "</span></a></li>\n" . "\t\t<li><a href=\"#REGEXP\"><span>" . $clang->gT("RegExp") . "</span></a></li>\n" . "\t</ul>\n"; // Predefined answers tab $aViewUrls['output'] .= "\t<div id='CANSWERSTAB'>\n" . "\t\t<select name='canswers[]' {$multipletext} id='canswers' size='7'>\n" . "\t\t</select>\n" . "\t\t<br /><span id='canswersLabel'>" . $clang->gT("Predefined answer options for this question") . "</span>\n" . "\t</div>\n"; // Constant tab $aViewUrls['output'] .= "\t<div id='CONST' style='display:block;' >\n" . "\t\t<textarea name='ConditionConst' id='ConditionConst' rows='5' cols='113'>{$EDITConditionConst}</textarea>\n" . "\t\t<br /><div id='ConditionConstLabel'>" . $clang->gT("Constant value") . "</div>\n" . "\t</div>\n"; // Previous answers tab @SGQA@ placeholders $aViewUrls['output'] .= "\t<div id='PREVQUESTIONS'>\n" . "\t\t<select name='prevQuestionSGQA' id='prevQuestionSGQA' size='7'>\n"; foreach ($cquestions as $cqn) { // building the @SGQA@ placeholders options if ($cqn[2] != 'M' && $cqn[2] != 'P') { // Type M or P aren't real fieldnames and thus can't be used in @SGQA@ placehodlers $aViewUrls['output'] .= "\t\t<option value='@{$cqn['3']}@' title=\"" . htmlspecialchars($cqn[0]) . "\""; if (isset($p_prevquestionsgqa) && $p_prevquestionsgqa == "@" . $cqn[3] . "@") { $aViewUrls['output'] .= " selected='selected'"; } $aViewUrls['output'] .= ">{$cqn['0']}</option>\n"; } } $aViewUrls['output'] .= "\t\t</select>\n" . "\t\t<br /><span id='prevQuestionSGQALabel'>" . $clang->gT("Answers from previous questions") . "</span>\n" . "\t</div>\n"; // Token tab $aViewUrls['output'] .= "\t<div id='TOKENATTRS'>\n" . "\t\t<select name='tokenAttr' id='tokenAttr' size='7'>\n"; foreach (getTokenFieldsAndNames($iSurveyID) as $tokenattr => $tokenattrName) { $aViewUrls['output'] .= "\t\t<option value='{TOKEN:" . strtoupper($tokenattr) . "}'>" . HTMLEscape($tokenattrName['description']) . "</option>\n"; } $aViewUrls['output'] .= "\t\t</select>\n" . "\t\t<br /><span id='tokenAttrLabel'>" . $clang->gT("Attributes values from the participant's token") . "</span>\n" . "\t</div>\n"; // Regexp Tab $aViewUrls['output'] .= "\t<div id='REGEXP' style='display:block;'>\n" . "\t\t<textarea name='ConditionRegexp' id='ConditionRegexp' rows='5' cols='113'>{$EDITConditionRegexp}</textarea>\n" . "\t\t<br /><div id='ConditionRegexpLabel'><a href=\"http://docs.limesurvey.org/tiki-index.php?page=Using+Regular+Expressions\" target=\"_blank\">" . $clang->gT("Regular expression") . "</a></div>\n" . "\t</div>\n"; $aViewUrls['output'] .= "</div>\n"; // end conditiontarget div $this->getController()->_js_admin_includes(Yii::app()->getConfig("adminscripts") . 'conditions.js'); $this->getController()->_js_admin_includes(Yii::app()->getConfig("generalscripts") . '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 = ""; } $aViewUrls['output'] .= "</div>\n" . "</div>\n"; // Begin buttons row $aViewUrls['output'] .= "<div class='condition-tbl-full'>\n" . "\t<input type='reset' id='resetForm' value='" . $clang->gT("Clear") . "' />\n" . "\t<input type='submit' value='" . $submitLabel . "' />\n" . "<input type='hidden' name='sid' value='{$iSurveyID}' />\n" . "<input type='hidden' name='gid' value='{$gid}' />\n" . "<input type='hidden' name='qid' value='{$qid}' />\n" . "<input type='hidden' name='subaction' value='{$submitSubaction}' />\n" . "<input type='hidden' name='cqid' id='cqid' value='' />\n" . "<input type='hidden' name='cid' id='cid' value='" . $submitcid . "' />\n" . "<input type='hidden' name='editTargetTab' id='editTargetTab' value='' />\n" . "<input type='hidden' name='editSourceTab' id='editSourceTab' value='' />\n" . "<input type='hidden' name='canswersToSelect' id='canswersToSelect' value='' />\n" . "</div>\n" . "</form>\n"; if (!isset($js_getAnswers_onload)) { $js_getAnswers_onload = ''; } $aViewUrls['output'] .= "<script type='text/javascript'>\n" . "<!--\n" . "\t" . $js_getAnswers_onload . "\n"; if (isset($p_method)) { $aViewUrls['output'] .= "\tdocument.getElementById('method').value='" . $p_method . "';\n"; } if ($subaction == "editthiscondition") { // in edit mode we read previous values in order to dusplay them in the corresponding inputs if (isset($_POST['EDITConditionConst']) && $_POST['EDITConditionConst'] != '') { // In order to avoid issues with backslash escaping, I don't use javascript to set the value // Thus the value is directly set when creating the Textarea element //$aViewUrls['output'] .= "\tdocument.getElementById('ConditionConst').value='".HTMLEscape($_POST['EDITConditionConst'])."';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editTargetTab').value='#CONST';\n"; } elseif (isset($_POST['EDITprevQuestionSGQA']) && $_POST['EDITprevQuestionSGQA'] != '') { $aViewUrls['output'] .= "\tdocument.getElementById('prevQuestionSGQA').value='" . HTMLEscape($_POST['EDITprevQuestionSGQA']) . "';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editTargetTab').value='#PREVQUESTIONS';\n"; } elseif (isset($_POST['EDITtokenAttr']) && $_POST['EDITtokenAttr'] != '') { $aViewUrls['output'] .= "\tdocument.getElementById('tokenAttr').value='" . HTMLEscape($_POST['EDITtokenAttr']) . "';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editTargetTab').value='#TOKENATTRS';\n"; } elseif (isset($_POST['EDITConditionRegexp']) && $_POST['EDITConditionRegexp'] != '') { // In order to avoid issues with backslash escaping, I don't use javascript to set the value // Thus the value is directly set when creating the Textarea element //$aViewUrls['output'] .= "\tdocument.getElementById('ConditionRegexp').value='".HTMLEscape($_POST['EDITConditionRegexp'])."';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editTargetTab').value='#REGEXP';\n"; } elseif (isset($_POST['EDITcanswers']) && is_array($_POST['EDITcanswers'])) { // was a predefined answers post $aViewUrls['output'] .= "\tdocument.getElementById('editTargetTab').value='#CANSWERSTAB';\n"; $aViewUrls['output'] .= "\t\$('#canswersToSelect').val('" . $_POST['EDITcanswers'][0] . "');\n"; } if (isset($_POST['csrctoken']) && $_POST['csrctoken'] != '') { $aViewUrls['output'] .= "\tdocument.getElementById('csrctoken').value='" . HTMLEscape($_POST['csrctoken']) . "';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editSourceTab').value='#SRCTOKENATTRS';\n"; } else { if (isset($_POST['cquestions']) && $_POST['cquestions'] != '') { $aViewUrls['output'] .= "\tdocument.getElementById('cquestions').value='" . HTMLEscape($_POST['cquestions']) . "';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editSourceTab').value='#SRCPREVQUEST';\n"; } } } else { // in other modes, for the moment we do the same as for edit mode if (isset($_POST['ConditionConst']) && $_POST['ConditionConst'] != '') { // In order to avoid issues with backslash escaping, I don't use javascript to set the value // Thus the value is directly set when creating the Textarea element //$aViewUrls['output'] .= "\tdocument.getElementById('ConditionConst').value='".HTMLEscape($_POST['ConditionConst'])."';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editTargetTab').value='#CONST';\n"; } elseif (isset($_POST['prevQuestionSGQA']) && $_POST['prevQuestionSGQA'] != '') { $aViewUrls['output'] .= "\tdocument.getElementById('prevQuestionSGQA').value='" . HTMLEscape($_POST['prevQuestionSGQA']) . "';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editTargetTab').value='#PREVQUESTIONS';\n"; } elseif (isset($_POST['tokenAttr']) && $_POST['tokenAttr'] != '') { $aViewUrls['output'] .= "\tdocument.getElementById('tokenAttr').value='" . HTMLEscape($_POST['tokenAttr']) . "';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editTargetTab').value='#TOKENATTRS';\n"; } elseif (isset($_POST['ConditionRegexp']) && $_POST['ConditionRegexp'] != '') { // In order to avoid issues with backslash escaping, I don't use javascript to set the value // Thus the value is directly set when creating the Textarea element //$aViewUrls['output'] .= "\tdocument.getElementById('ConditionRegexp').value='".HTMLEscape($_POST['ConditionRegexp'])."';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editTargetTab').value='#REGEXP';\n"; } else { // was a predefined answers post if (isset($_POST['cquestions'])) { $aViewUrls['output'] .= "\tdocument.getElementById('cquestions').value='" . HTMLEscape($_POST['cquestions']) . "';\n"; } $aViewUrls['output'] .= "\tdocument.getElementById('editTargetTab').value='#CANSWERSTAB';\n"; } if (isset($_POST['csrctoken']) && $_POST['csrctoken'] != '') { $aViewUrls['output'] .= "\tdocument.getElementById('csrctoken').value='" . HTMLEscape($_POST['csrctoken']) . "';\n"; $aViewUrls['output'] .= "\tdocument.getElementById('editSourceTab').value='#SRCTOKENATTRS';\n"; } else { if (isset($_POST['cquestions'])) { $aViewUrls['output'] .= "\tdocument.getElementById('cquestions').value='" . javascriptEscape($_POST['cquestions']) . "';\n"; } $aViewUrls['output'] .= "\tdocument.getElementById('editSourceTab').value='#SRCPREVQUEST';\n"; } } if (isset($p_scenario)) { $aViewUrls['output'] .= "\tdocument.getElementById('scenario').value='" . $p_scenario . "';\n"; } $aViewUrls['output'] .= "-->\n" . "</script>\n"; } //END: DISPLAY THE ADD or EDIT CONDITION FORM $conditionsoutput = $aViewUrls['output']; $aData['conditionsoutput'] = $conditionsoutput; $this->_renderWrappedTemplate('conditions', $aViewUrls, $aData); // TMSW Conditions->Relevance: Must call LEM->ConvertConditionsToRelevance() whenever Condition is added or updated - what is best location for that action? }
?> ' class='btn btn-default' <?php if (!is_template_editable($templatename)) { ?> disabled='disabled' <?php } ?> /> <input type='hidden' name='editfile' value='<?php echo $editfile; ?> ' /> <input type='hidden' name='screenname' value='<?php echo HTMLEscape($screenname); ?> ' /> <input type='hidden' name='templatename' value='<?php echo $templatename; ?> ' /> <input type='hidden' name='action' value='templateuploadfile' /> <?php if (isset($_GET['editfile'])) { ?> <input type='hidden' name='editfileindex' value='<?php echo $_GET['editfile']; ?> ' /> <?php
</div> <!-- Right Menu --> <div class="col-md-7 text-right form-inline"> <div class="form-group"> <label for='templatedir'><?php eT("Template:"); ?></label> <select class="listboxtemplates form-control" id='templatedir' name='templatedir' onchange="javascript: window.open('<?php echo $this->createUrl("admin/templates/sa/view/editfile/".$editfile."/screenname/".$screenname); ?>/templatename/'+escape(this.value), '_top')"> <?php echo templateoptions($templates, $templatename); ?> </select> </div> <div class="form-group"> <label for='listboxtemplates'><?php eT("Screen:"); ?></label> <select class="listboxtemplates form-control" id='listboxtemplates' name='screenname' onchange="javascript: window.open('<?php echo $this->createUrl("admin/templates/sa/screenredirect/editfile/".$editfile."/templatename/".$templatename); ?>/screenname/'+escape(this.value), '_top')"> <?php echo makeoptions($screens, "id", "name", HTMLEscape($screenname) ); ?> </select> </div> <?php if(isset($fullpagebar['savebutton']['form'])):?> <a class="btn btn-success" href="#" role="button" id="save-form-button" data-form-id="<?php echo $fullpagebar['savebutton']['form']; ?>"> <span class="glyphicon glyphicon-ok" ></span> <?php eT("Save");?> </a> <?php endif;?> <!-- Close --> <?php if(isset($fullpagebar['closebutton']['url'])):?> <a class="btn btn-danger" href="<?php echo $fullpagebar['closebutton']['url']; ?>" role="button"> <span class="glyphicon glyphicon-close" ></span> <?php eT("Close");?>
{ ?> <td><img class='handle' src='<?php echo $sImageURL; ?>handle.png' alt=''/></td> <td> <input type='hidden' class='hiddencode' value='<?php echo $row['code'] ?>' /> <input type='text' class='codeval' id='code_<?php echo $row['sortorder'] ?>' name='code_<?php echo $row['sortorder'] ?>' maxlength='5' size='6' value='<?php echo $row['code'] ?>'/> </td> <td> <input type='text' class='assessmentval' id='assessmentvalue_<?php echo $row['sortorder'] ?>' style='text-align: right;' name='assessmentvalue_<?php echo $row['sortorder'] ?>' maxlength='5' size='6' value='<?php echo $row['assessment_value'] ?>' /> </td> <?php } ?> <td> <input type='text' name='title_<?php echo $row['language'] ?>_<?php echo $row['sortorder'] ?>' maxlength='3000' size='80' value="<?php echo HTMLEscape($row['title']) ?>" /> <?php echo getEditor("editlabel", "title_{$row['language']}_{$row['sortorder']}", "[" . gT("Label:", "js") . "](" . $row['language'] . ")", '', '', '', $action); ?> </td> <td style='text-align:center;'> <?php if ($first) { ?> <img src='<?php echo $sImageURL; ?>addanswer.png' class='btnaddanswer' alt='<?php eT("Insert a new label after this one") ?>' /> <img src='<?php echo $sImageURL; ?>deleteanswer.png' class='btndelanswer' alt='<?php eT("Delete this label") ?>' /> <?php } ?> </td>
?> <?php echo CHtml::dropDownList('completionstate', $sCompletionStateValue, array('all' => $clang->gT("All responses"), 'complete' => $clang->gT("Completed responses only"), 'incomplete' => $clang->gT("Incomplete responses only"))); ?> <input type='hidden' name='sid' value='<?php echo $surveyid; ?> ' /> <input type='hidden' name='action' value='browse' /> <input type='hidden' name='subaction' value='all' /> <?php if (isset($_POST['sql'])) { ?> <input type='hidden' name='sql' value='<?php echo HTMLEscape($_POST['sql']); ?> ' /> <?php } ?> </form></div> </div> </div> <?php echo CHtml::form(array("admin/responses/sa/browse/surveyid/{$surveyid}/"), 'post', array('id' => 'resulttableform')); ?> <!-- DATA TABLE --> <?php if ($fncount < 10) {
/** * This function replaces keywords in a text and is mainly intended for templates * If you use this functions put your replacement strings into the $replacements variable * instead of using global variables * NOTE - Don't do any embedded replacements in this function. Create the array of replacement values and * they will be done in batch at the end * * @param mixed $line Text to search in * @param mixed $replacements Array of replacements: Array( <stringtosearch>=><stringtoreplacewith> * @param boolean $anonymized Determines if token data is being used or just replaced with blanks * @param questionNum - needed to support dynamic JavaScript-based tailoring within questions * @return string Text with replaced strings */ function templatereplace($line, $replacements = array(), &$redata = array(), $debugSrc = 'Unspecified', $anonymized = false, $questionNum = NULL, $registerdata = array()) { /* global $clienttoken,$token,$sitename,$move,$showxquestions,$showqnumcode,$questioncode,$register_errormsg; global $s_lang,$errormsg,$saved_id, $relativeurl, $languagechanger,$captchapath,$loadname; */ /* $allowedvars = array('surveylist', 'sitename', 'clienttoken', 'rooturl', 'thissurvey', 'imageurl', 'defaulttemplate', 'percentcomplete', 'move', 'groupname', 'groupdescription', 'question', 'showxquestions', 'showgroupinfo', 'showqnumcode', 'questioncode', 'answer', 'navigator', 'help', 'totalquestions', 'surveyformat', 'completed', 'register_errormsg', 'notanswered', 'privacy', 'surveyid', 'publicurl', 'templatedir', 'token', 'assessments', 's_lang', 'errormsg', 'clang', 'saved_id', 'usertemplaterootdir', 'relativeurl', 'languagechanger', 'printoutput', 'captchapath', 'loadname'); */ $allowedvars = array('answer', 'assessments', 'captchapath', 'clienttoken', 'completed', 'errormsg', 'groupdescription', 'groupname', 'help', 'imageurl', 'languagechanger', 'loadname', 'move', 'navigator', 'percentcomplete', 'privacy', 'question', 'register_errormsg', 'relativeurl', 's_lang', 'saved_id', 'showgroupinfo', 'showqnumcode', 'showxquestions', 'sitename', 'surveylist', 'templatedir', 'thissurvey', 'token', 'totalBoilerplatequestions', 'totalquestions'); $varsPassed = array(); foreach ($allowedvars as $var) { if (isset($redata[$var])) { ${$var} = $redata[$var]; $varsPassed[] = $var; } } // if (count($varsPassed) > 0) { // log_message('debug', 'templatereplace() called from ' . $debugSrc . ' contains: ' . implode(', ', $varsPassed)); // } // if (isset($redata['question'])) { // LimeExpressionManager::ShowStackTrace('has QID and/or SGA',$allowedvars); // } // extract($redata); // creates variables for each of the keys in the array // Local over-rides in case not set above if (!isset($showgroupinfo)) { $showgroupinfo = Yii::app()->getConfig('showgroupinfo'); } if (!isset($showqnumcode)) { $showqnumcode = Yii::app()->getConfig('showqnumcode'); } $_surveyid = Yii::app()->getConfig('surveyID'); if (!isset($showxquestions)) { $showxquestions = Yii::app()->getConfig('showxquestions'); } if (!isset($s_lang)) { $s_lang = isset(Yii::app()->session['survey_' . $_surveyid]['s_lang']) ? Yii::app()->session['survey_' . $_surveyid]['s_lang'] : 'en'; } if (!isset($captchapath)) { $captchapath = ''; } $clang = Yii::app()->lang; Yii::app()->loadHelper('surveytranslator'); $questiondetails = array('sid' => 0, 'gid' => 0, 'qid' => 0, 'aid' => 0); if (isset($question) && isset($question['sgq'])) { $questiondetails = getSIDGIDQIDAIDType($question['sgq']); } //Gets an array containing SID, GID, QID, AID and Question Type) if (isset($thissurvey['sid'])) { $surveyid = $thissurvey['sid']; } // lets sanitize the survey template if (isset($thissurvey['templatedir'])) { $templatename = $thissurvey['templatedir']; } else { $templatename = Yii::app()->getConfig('defaulttemplate'); } if (!isset($templatedir)) { $templatedir = getTemplatePath($templatename); } if (!isset($templateurl)) { $templateurl = getTemplateURL($templatename) . "/"; } // TEMPLATECSS and TEMPLATEJS $_templatecss = ""; $_templatejs = ""; if (stripos($line, "{TEMPLATECSS}")) { $css_header_includes = Yii::app()->getConfig("css_header_includes"); if (file_exists($templatedir . DIRECTORY_SEPARATOR . 'jquery-ui-custom.css')) { $template_jqueryui_css = "<link rel='stylesheet' type='text/css' media='all' href='{$templateurl}jquery-ui-custom.css' />\n"; } elseif (file_exists($templatedir . DIRECTORY_SEPARATOR . 'jquery-ui.css')) { $template_jqueryui_css = "<link rel='stylesheet' type='text/css' media='all' href='{$templateurl}jquery-ui.css' />\n"; } else { $_templatecss .= "<link rel='stylesheet' type='text/css' media='all' href='" . Yii::app()->getConfig('publicstyleurl') . "jquery-ui.css' />\n"; // Remove it after corrected slider $template_jqueryui_css = ""; } if ($css_header_includes) { foreach ($css_header_includes as $cssinclude) { if (substr($cssinclude, 0, 4) == 'http' || substr($cssinclude, 0, strlen(Yii::app()->getConfig('publicurl'))) == Yii::app()->getConfig('publicurl')) { $_templatecss .= "<link rel='stylesheet' type='text/css' media='all' href='" . $cssinclude . "' />\n"; } else { if (file_exists($templatedir . DIRECTORY_SEPARATOR . $cssinclude)) { $_templatecss .= "<link rel='stylesheet' type='text/css' media='all' href='{$templateurl}{$cssinclude}' />\n"; } else { $_templatecss .= "<link rel='stylesheet' type='text/css' media='all' href='" . Yii::app()->getConfig('publicstyleurl') . $cssinclude . "' />\n"; } } } } $_templatecss .= $template_jqueryui_css; // Template jquery ui after default css $_templatecss .= "<link rel='stylesheet' type='text/css' media='all' href='{$templateurl}template.css' />\n"; if (getLanguageRTL($clang->langcode)) { $_templatecss .= "<link rel='stylesheet' type='text/css' media='all' href='{$templateurl}template-rtl.css' />\n"; } } if (stripos($line, "{TEMPLATEJS}")) { $js_header_includes = header_includes(false, 'js'); $_jqueryuijsurl = Yii::app()->getConfig('generalscripts') . "jquery/jquery-ui.js"; $_templatejs .= "<script type='text/javascript' src='" . Yii::app()->getConfig('generalscripts') . "jquery/jquery.js'></script>\n"; $_templatejs .= "<script type='text/javascript' src='{$_jqueryuijsurl}'></script>\n"; $_templatejs .= "<script type='text/javascript' src='" . Yii::app()->getConfig('generalscripts') . "jquery/jquery.ui.touch-punch.min.js'></script>\n"; if ($js_header_includes) { foreach ($js_header_includes as $jsinclude) { if (substr($jsinclude, 0, 4) == 'http' || substr($jsinclude, 0, strlen(Yii::app()->getConfig('publicurl'))) == Yii::app()->getConfig('publicurl')) { $_templatejs .= "<script type='text/javascript' src='{$jsinclude}'></script>\n"; } else { $_templatejs .= "<script type='text/javascript' src='" . Yii::app()->getConfig('generalscripts') . $jsinclude . "'></script>\n"; } } } $_templatejs .= "<script type='text/javascript' src='" . Yii::app()->getConfig('generalscripts') . "survey_runtime.js'></script>\n"; $_templatejs .= "<script type='text/javascript' src='{$templateurl}template.js'></script>\n"; $_templatejs .= useFirebug(); } // surveyformat if (isset($thissurvey['format'])) { $surveyformat = str_replace(array("A", "S", "G"), array("allinone", "questionbyquestion", "groupbygroup"), $thissurvey['format']); } else { $surveyformat = ""; } if (isset(Yii::app()->session['step']) && Yii::app()->session['step'] % 2 && $surveyformat != "allinone") { $surveyformat .= " page-odd"; } if (isset($thissurvey['allowjumps']) && $thissurvey['allowjumps'] == "Y" && $surveyformat != "allinone" && (isset(Yii::app()->session['step']) && Yii::app()->session['step'] > 0)) { $surveyformat .= " withindex"; } if (isset($thissurvey['showprogress']) && $thissurvey['showprogress'] == "Y") { $surveyformat .= " showprogress"; } if (isset($thissurvey['showqnumcode'])) { $surveyformat .= " showqnumcode-" . $thissurvey['showqnumcode']; } // real survey contact if (isset($surveylist) && isset($surveylist['contact'])) { $surveycontact = $surveylist['contact']; } elseif (isset($surveylist) && isset($thissurvey['admin']) && $thissurvey['admin'] != "") { $surveycontact = sprintf($clang->gT("Please contact %s ( %s ) for further assistance."), $thissurvey['admin'], $thissurvey['adminemail']); } else { $surveycontact = ""; } // If there are non-bracketed replacements to be made do so above this line. // Only continue in this routine if there are bracketed items to replace {} if (strpos($line, "{") === false) { // process string anyway so that it can be pretty-printed return LimeExpressionManager::ProcessString($line, $questionNum, NULL, false, 1, 1, true); } if ($showgroupinfo == 'both' || $showgroupinfo == 'name' || $showgroupinfo == 'choose' && !isset($thissurvey['showgroupinfo']) || $showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'B' || $showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'N') { $_groupname = isset($groupname) ? $groupname : ''; } else { $_groupname = ''; } if ($showgroupinfo == 'both' || $showgroupinfo == 'description' || $showgroupinfo == 'choose' && !isset($thissurvey['showgroupinfo']) || $showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'B' || $showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'D') { $_groupdescription = isset($groupdescription) ? $groupdescription : ''; } else { $_groupdescription = ''; } if (isset($question) && is_array($question)) { $_question = $question['all']; $_question_text = $question['text']; $_question_help = $question['help']; $_question_mandatory = $question['mandatory']; $_question_man_message = $question['man_message']; $_question_valid_message = $question['valid_message']; $_question_file_valid_message = $question['file_valid_message']; $_question_sgq = isset($question['sgq']) ? $question['sgq'] : ''; $_question_essentials = $question['essentials']; $_getQuestionClass = $question['class']; $_question_man_class = $question['man_class']; $_question_input_error_class = $question['input_error_class']; $_question_number = $question['number']; $_question_code = $question['code']; $_question_type = $question['type']; } else { $_question = isset($question) ? $question : ''; $_question_text = ''; $_question_help = ''; $_question_mandatory = ''; $_question_man_message = ''; $_question_valid_message = ''; $_question_file_valid_message = ''; $_question_sgq = ''; $_question_essentials = ''; $_getQuestionClass = ''; $_question_man_class = ''; $_question_input_error_class = ''; $_question_number = ''; $_question_code = ''; $_question_type = ''; } if ($_question_type == '*') { $_question_text = '<div class="em_equation">' . $_question_text . '</div>'; } if (!($showqnumcode == 'both' || $showqnumcode == 'number' || $showqnumcode == 'choose' && !isset($thissurvey['showqnumcode']) || $showqnumcode == 'choose' && $thissurvey['showqnumcode'] == 'B' || $showqnumcode == 'choose' && $thissurvey['showqnumcode'] == 'N')) { $_question_number = ''; } if (!($showqnumcode == 'both' || $showqnumcode == 'code' || $showqnumcode == 'choose' && !isset($thissurvey['showqnumcode']) || $showqnumcode == 'choose' && $thissurvey['showqnumcode'] == 'B' || $showqnumcode == 'choose' && $thissurvey['showqnumcode'] == 'C')) { $_question_code = ''; } if (!isset($totalquestions)) { $totalquestions = 0; } $_totalquestionsAsked = $totalquestions; if ($showxquestions == 'show' || $showxquestions == 'choose' && !isset($thissurvey['showxquestions']) || $showxquestions == 'choose' && $thissurvey['showxquestions'] == 'Y') { if ($_totalquestionsAsked < 1) { $_therearexquestions = $clang->gT("There are no questions in this survey"); // Singular } elseif ($_totalquestionsAsked == 1) { $_therearexquestions = $clang->gT("There is 1 question in this survey"); //Singular } else { $_therearexquestions = $clang->gT("There are {NUMBEROFQUESTIONS} questions in this survey."); //Note this line MUST be before {NUMBEROFQUESTIONS} } } else { $_therearexquestions = ''; } if (isset($token)) { $_token = $token; } elseif (isset($clienttoken)) { $_token = htmlentities($clienttoken, ENT_QUOTES, 'UTF-8'); // or should it be URL-encoded? } else { $_token = ''; } // Expiry if (isset($thissurvey['expiry'])) { $dateformatdetails = getDateFormatData($thissurvey['surveyls_dateformat']); Yii::import('application.libraries.Date_Time_Converter', true); $datetimeobj = new Date_Time_Converter($thissurvey['expiry'], "Y-m-d"); $_dateoutput = $datetimeobj->convert($dateformatdetails['phpdate']); } else { $_dateoutput = '-'; } $_submitbutton = "<input class='submit' type='submit' value=' " . $clang->gT("Submit") . " ' name='move2' onclick=\"javascript:document.limesurvey.move.value = 'movesubmit';\" />"; if (isset($thissurvey['surveyls_url']) and $thissurvey['surveyls_url'] != "") { if (trim($thissurvey['surveyls_urldescription']) != '') { $_linkreplace = "<a href='{$thissurvey['surveyls_url']}'>{$thissurvey['surveyls_urldescription']}</a>"; } else { $_linkreplace = "<a href='{$thissurvey['surveyls_url']}'>{$thissurvey['surveyls_url']}</a>"; } } else { $_linkreplace = ''; } if (isset($thissurvey['sid']) && isset($_SESSION['survey_' . $thissurvey['sid']]['srid']) && $thissurvey['active'] == 'Y') { $iscompleted = Survey_dynamic::model($surveyid)->isCompleted($_SESSION['survey_' . $thissurvey['sid']]['srid']); } else { $iscompleted = false; } if (isset($surveyid) && !$iscompleted) { $_clearall = "<input type='button' name='clearallbtn' value='" . $clang->gT("Exit and clear survey") . "' class='clearall' " . "onclick=\"if (confirm('" . $clang->gT("Are you sure you want to clear all your responses?", 'js') . "')) {\nwindow.open('" . Yii::app()->getController()->createUrl("survey/index/sid/{$surveyid}", array('move' => 'clearall', 'lang' => $s_lang), '&'); if (returnGlobal('token')) { $_clearall .= "&token=" . urlencode(trim(sanitize_token(strip_tags(returnGlobal('token'))))); } $_clearall .= "', '_self')}\" />"; } else { $_clearall = ""; } if (isset(Yii::app()->session['datestamp'])) { $_datestamp = Yii::app()->session['datestamp']; } else { $_datestamp = '-'; } if (isset($thissurvey['allowsave']) and $thissurvey['allowsave'] == "Y") { // Find out if the user has any saved data if ($thissurvey['format'] == 'A') { if ($thissurvey['tokenanswerspersistence'] != 'Y' || !isset($surveyid) || !tableExists('tokens_' . $surveyid)) { $_saveall = "\t\t\t<input type='button' name='loadall' value='" . $clang->gT("Load unfinished survey") . "' class='saveall' onclick=\"javascript:addHiddenField(document.getElementById('limesurvey'),'loadall',this.value);document.getElementById('limesurvey').submit();\" " . ($thissurvey['active'] != "Y" ? "disabled='disabled'" : "") . "/>" . "\n\t\t\t<input type='button' name='saveallbtn' value='" . $clang->gT("Resume later") . "' class='saveall' onclick=\"javascript:document.limesurvey.move.value = this.value;addHiddenField(document.getElementById('limesurvey'),'saveall',this.value);document.getElementById('limesurvey').submit();\" " . ($thissurvey['active'] != "Y" ? "disabled='disabled'" : "") . "/>"; // Show Save So Far button } else { $_saveall = "\t\t\t<input type='button' name='saveallbtn' value='" . $clang->gT("Resume later") . "' class='saveall' onclick=\"javascript:document.limesurvey.move.value = this.value;addHiddenField(document.getElementById('limesurvey'),'saveall',this.value);document.getElementById('limesurvey').submit();\" " . ($thissurvey['active'] != "Y" ? "disabled='disabled'" : "") . "/>"; // Show Save So Far button } } elseif (isset($surveyid) && (!isset($_SESSION['survey_' . $surveyid]['step']) || !$_SESSION['survey_' . $surveyid]['step'])) { //First page, show LOAD if ($thissurvey['tokenanswerspersistence'] != 'Y' || !isset($surveyid) || !tableExists('tokens_' . $surveyid)) { $_saveall = "\t\t\t<input type='button' name='loadall' value='" . $clang->gT("Load unfinished survey") . "' class='saveall' onclick=\"javascript:addHiddenField(document.getElementById('limesurvey'),'loadall',this.value);document.getElementById('limesurvey').submit();\" " . ($thissurvey['active'] != "Y" ? "disabled='disabled'" : "") . "/>"; } else { $_saveall = ''; } } elseif (isset(Yii::app()->session['scid']) && (isset($move) && $move == "movelast")) { //Already saved and on Submit Page, dont show Save So Far button $_saveall = ''; } else { $_saveall = "<input type='button' name='saveallbtn' value='" . $clang->gT("Resume later") . "' class='saveall' onclick=\"javascript:document.limesurvey.move.value = this.value;addHiddenField(document.getElementById('limesurvey'),'saveall',this.value);document.getElementById('limesurvey').submit();\" " . ($thissurvey['active'] != "Y" ? "disabled='disabled'" : "") . "/>"; // Show Save So Far button } } else { $_saveall = ""; } if (!isset($help)) { $help = ""; } if (flattenText($help, true, true) != '') { if (!isset($helpicon)) { if (file_exists($templatedir . '/help.gif')) { $helpicon = $templateurl . 'help.gif'; } elseif (file_exists($templatedir . '/help.png')) { $helpicon = $templateurl . 'help.png'; } else { $helpicon = Yii::app()->getConfig('imageurl') . "/help.gif"; } } $_questionhelp = "<img src='{$helpicon}' alt='Help' align='left' />" . $help; } else { $_questionhelp = $help; } if (isset($thissurvey['allowprev']) && $thissurvey['allowprev'] == "N") { $_strreview = ""; } else { $_strreview = $clang->gT("If you want to check any of the answers you have made, and/or change them, you can do that now by clicking on the [<< prev] button and browsing through your responses."); } if (isset($thissurvey['active']) and $thissurvey['active'] == "N") { $_restart = "<a href='" . Yii::app()->getController()->createUrl("survey/index/sid/{$surveyid}/newtest/Y"); if (isset($s_lang) && $s_lang != '') { $_restart .= "/lang/" . $s_lang; } $_restart .= "'>" . $clang->gT("Restart this survey") . "</a>"; } else { if (isset($surveyid)) { $restart_extra = ""; $restart_token = returnGlobal('token'); if (!empty($restart_token)) { $restart_extra .= "/token/" . urlencode($restart_token); } else { $restart_extra = "/newtest/Y"; } if (!empty($_GET['lang'])) { $restart_extra .= "/lang/" . returnGlobal('lang'); } $_restart = "<a href='" . Yii::app()->getController()->createUrl("survey/index/sid/{$surveyid}{$restart_extra}") . "'>" . $clang->gT("Restart this Survey") . "</a>"; } else { $_restart = ""; } } if (isset($thissurvey['anonymized']) && $thissurvey['anonymized'] == 'Y') { $_savealert = $clang->gT("To remain anonymous please use a pseudonym as your username, also an email address is not required."); } else { $_savealert = ""; } if (isset($surveyid)) { $_return_to_survey = "<a href=" . Yii::app()->getController()->createUrl("survey/index/sid/{$surveyid}"); if (returnGlobal('token')) { $_return_to_survey .= "?amp;token=" . urlencode(trim(sanitize_xss_string(strip_tags(returnGlobal('token'))))); } $_return_to_survey .= "'>" . $clang->gT("Return to survey") . "</a>"; } else { $_return_to_survey = ""; } // Save Form $_saveform = "<table><tr><td align='right'>" . $clang->gT("Name") . ":</td><td><input type='text' name='savename' value='"; if (isset($_POST['savename'])) { $_saveform .= HTMLEscape(autoUnescape($_POST['savename'])); } $_saveform .= "' /></td></tr>\n" . "<tr><td align='right'>" . $clang->gT("Password") . ":</td><td><input type='password' name='savepass' value='"; if (isset($_POST['savepass'])) { $_saveform .= HTMLEscape(autoUnescape($_POST['savepass'])); } $_saveform .= "' /></td></tr>\n" . "<tr><td align='right'>" . $clang->gT("Repeat password") . ":</td><td><input type='password' name='savepass2' value='"; if (isset($_POST['savepass2'])) { $_saveform .= HTMLEscape(autoUnescape($_POST['savepass2'])); } $_saveform .= "' /></td></tr>\n" . "<tr><td align='right'>" . $clang->gT("Your email address") . ":</td><td><input type='text' name='saveemail' value='"; if (isset($_POST['saveemail'])) { $_saveform .= HTMLEscape(autoUnescape($_POST['saveemail'])); } $_saveform .= "' /></td></tr>\n"; if (isset($thissurvey['usecaptcha']) && function_exists("ImageCreate") && isCaptchaEnabled('saveandloadscreen', $thissurvey['usecaptcha'])) { $_saveform .= "<tr><td align='right'>" . $clang->gT("Security question") . ":</td><td><table><tr><td valign='middle'><img src='" . Yii::app()->getController()->createUrl('/verification/image/sid/' . (isset($surveyid) ? $surveyid : '')) . "' alt6='' /></td><td valign='middle' style='text-align:left'><input type='text' size='5' maxlength='3' name='loadsecurity' value='' /></td></tr></table></td></tr>\n"; } $_saveform .= "<tr><td align='right'></td><td></td></tr>\n" . "<tr><td></td><td><input type='submit' id='savebutton' name='savesubmit' value='" . $clang->gT("Save Now") . "' /></td></tr>\n" . "</table>"; // Load Form $_loadform = "<table><tr><td align='right'>" . $clang->gT("Saved name") . ":</td><td><input type='text' name='loadname' value='"; if (isset($loadname)) { $_loadform .= HTMLEscape(autoUnescape($loadname)); } $_loadform .= "' /></td></tr>\n" . "<tr><td align='right'>" . $clang->gT("Password") . ":</td><td><input type='password' name='loadpass' value='"; if (isset($loadpass)) { $_loadform .= HTMLEscape(autoUnescape($loadpass)); } $_loadform .= "' /></td></tr>\n"; if (isset($thissurvey['usecaptcha']) && function_exists("ImageCreate") && isCaptchaEnabled('saveandloadscreen', $thissurvey['usecaptcha'])) { $_loadform .= "<tr><td align='right'>" . $clang->gT("Security question") . ":</td><td><table><tr><td valign='middle'><img src='" . Yii::app()->getController()->createUrl('/verification/image/sid/' . $surveyid) . "' alt='' /></td><td valign='middle'><input type='text' size='5' maxlength='3' name='loadsecurity' value='' alt=''/></td></tr></table></td></tr>\n"; } $_loadform .= "<tr><td align='right'></td><td></td></tr>\n" . "<tr><td></td><td><input type='submit' id='loadbutton' value='" . $clang->gT("Load now") . "' /></td></tr></table>\n"; // Registration Form if (isset($surveyid) || isset($registerdata) && $debugSrc == 'register.php') { if (isset($surveyid)) { $tokensid = $surveyid; } else { $tokensid = $registerdata['sid']; } $_registerform = "<form method='post' action='" . Yii::app()->getController()->createUrl('/register/index/surveyid/' . $tokensid) . "'>\n"; if (!isset($_REQUEST['lang'])) { $_reglang = Survey::model()->findByPk($tokensid)->language; } else { $_reglang = returnGlobal('lang'); } $_registerform .= "<input type='hidden' name='lang' value='" . $_reglang . "' />\n"; $_registerform .= "<input type='hidden' name='sid' value='{$tokensid}' id='sid' />\n"; $_registerform .= "<table class='register' summary='Registrationform'>\n" . "<tr><td align='right'>" . $clang->gT("First name") . ":</td>" . "<td align='left'><input class='text' type='text' name='register_firstname'"; if (isset($_POST['register_firstname'])) { $_registerform .= " value='" . htmlentities(returnGlobal('register_firstname'), ENT_QUOTES, 'UTF-8') . "'"; } $_registerform .= " /></td></tr>" . "<tr><td align='right'>" . $clang->gT("Last name") . ":</td>\n" . "<td align='left'><input class='text' type='text' name='register_lastname'"; if (isset($_POST['register_lastname'])) { $_registerform .= " value='" . htmlentities(returnGlobal('register_lastname'), ENT_QUOTES, 'UTF-8') . "'"; } $_registerform .= " /></td></tr>\n" . "<tr><td align='right'>" . $clang->gT("Email address") . ":</td>\n" . "<td align='left'><input class='text' type='text' name='register_email'"; if (isset($_POST['register_email'])) { $_registerform .= " value='" . htmlentities(returnGlobal('register_email'), ENT_QUOTES, 'UTF-8') . "'"; } $_registerform .= " /></td></tr>\n"; foreach ($thissurvey['attributedescriptions'] as $field => $attribute) { if (empty($attribute['show_register']) || $attribute['show_register'] != 'Y') { continue; } $_registerform .= ' <tr> <td align="right">' . $thissurvey['attributecaptions'][$field] . ($attribute['mandatory'] == 'Y' ? '*' : '') . ':</td> <td align="left"><input class="text" type="text" name="register_' . $field . '" /></td> </tr>'; } if ((count($registerdata) > 1 || isset($thissurvey['usecaptcha'])) && function_exists("ImageCreate") && isCaptchaEnabled('registrationscreen', $thissurvey['usecaptcha'])) { $_registerform .= "<tr><td align='right'>" . $clang->gT("Security Question") . ":</td><td><table><tr><td valign='middle'><img src='" . Yii::app()->getController()->createUrl('/verification/image/sid/' . $surveyid) . "' alt='' /></td><td valign='middle'><input type='text' size='5' maxlength='3' name='loadsecurity' value='' /></td></tr></table></td></tr>\n"; } $_registerform .= "<tr><td></td><td><input id='registercontinue' class='submit' type='submit' value='" . $clang->gT("Continue") . "' />" . "</td></tr>\n" . "</table>\n"; if (count($registerdata) > 1 && $registerdata['sid'] != NULL && $debugSrc == 'register.php') { $_registerform .= "<input name='startdate' type ='hidden' value='" . $registerdata['startdate'] . "' />"; $_registerform .= "<input name='enddate' type ='hidden' value='" . $registerdata['enddate'] . "' />"; } $_registerform .= "</form>\n"; } else { $_registerform = ""; } // Assessments $assessmenthtml = ""; if (isset($surveyid) && !is_null($surveyid) && function_exists('doAssessment')) { $assessmentdata = doAssessment($surveyid, true); $_assessment_current_total = $assessmentdata['total']; if (stripos($line, "{ASSESSMENTS}")) { $assessmenthtml = doAssessment($surveyid, false); } } else { $_assessment_current_total = ''; } if (isset($thissurvey['googleanalyticsapikey']) && trim($thissurvey['googleanalyticsapikey']) != '') { $_googleAnalyticsAPIKey = trim($thissurvey['googleanalyticsapikey']); } else { $_googleAnalyticsAPIKey = trim(getGlobalSetting('googleanalyticsapikey')); } $_googleAnalyticsStyle = isset($thissurvey['googleanalyticsstyle']) ? $thissurvey['googleanalyticsstyle'] : '0'; $_googleAnalyticsJavaScript = ''; if ($_googleAnalyticsStyle != '' && $_googleAnalyticsStyle != 0 && $_googleAnalyticsAPIKey != '') { switch ($_googleAnalyticsStyle) { case '1': // Default Google Tracking $_googleAnalyticsJavaScript = <<<EOD <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', '{$_googleAnalyticsAPIKey}']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> EOD; break; case '2': // SurveyName-[SID]/[GSEQ]-GroupName - create custom GSEQ based upon page step $moveInfo = LimeExpressionManager::GetLastMoveResult(); if (is_null($moveInfo)) { $gseq = 'welcome'; } else { if ($moveInfo['finished']) { $gseq = 'finished'; } else { if (isset($moveInfo['at_start']) && $moveInfo['at_start']) { $gseq = 'welcome'; } else { if (is_null($_groupname)) { $gseq = 'printanswers'; } else { $gseq = $moveInfo['gseq'] + 1; } } } } $_trackURL = htmlspecialchars($thissurvey['name'] . '-[' . $surveyid . ']/[' . $gseq . ']-' . $_groupname); $_googleAnalyticsJavaScript = <<<EOD <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', '{$_googleAnalyticsAPIKey}']); _gaq.push(['_trackPageview','{$_trackURL}']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> EOD; break; } } $_endtext = ''; if (isset($thissurvey['surveyls_endtext']) && trim($thissurvey['surveyls_endtext']) != '') { $_endtext = $thissurvey['surveyls_endtext']; } // Set the array of replacement variables here - don't include curly braces $coreReplacements = array(); $coreReplacements['ACTIVE'] = isset($thissurvey['active']) && !($thissurvey['active'] != "Y"); $coreReplacements['AID'] = isset($questiondetails['aid']) ? $questiondetails['aid'] : ''; $coreReplacements['ANSWER'] = isset($answer) ? $answer : ''; // global $coreReplacements['ANSWERSCLEARED'] = $clang->gT("Answers cleared"); $coreReplacements['ASSESSMENTS'] = $assessmenthtml; $coreReplacements['ASSESSMENT_CURRENT_TOTAL'] = $_assessment_current_total; $coreReplacements['ASSESSMENT_HEADING'] = $clang->gT("Your assessment"); $coreReplacements['CHECKJAVASCRIPT'] = "<noscript><span class='warningjs'>" . $clang->gT("Caution: JavaScript execution is disabled in your browser. You may not be able to answer all questions in this survey. Please, verify your browser parameters.") . "</span></noscript>"; $coreReplacements['CLEARALL'] = $_clearall; $coreReplacements['CLOSEWINDOW'] = "<a href='javascript:%20self.close()'>" . $clang->gT("Close this window") . "</a>"; $coreReplacements['COMPLETED'] = isset($redata['completed']) ? $redata['completed'] : ''; // global $coreReplacements['DATESTAMP'] = $_datestamp; $coreReplacements['ENDTEXT'] = $_endtext; $coreReplacements['EXPIRY'] = $_dateoutput; $coreReplacements['GID'] = isset($questiondetails['gid']) ? $questiondetails['gid'] : ''; $coreReplacements['GOOGLE_ANALYTICS_API_KEY'] = $_googleAnalyticsAPIKey; $coreReplacements['GOOGLE_ANALYTICS_JAVASCRIPT'] = $_googleAnalyticsJavaScript; $coreReplacements['GROUPDESCRIPTION'] = $_groupdescription; $coreReplacements['GROUPNAME'] = $_groupname; $coreReplacements['LANG'] = $clang->getlangcode(); $coreReplacements['LANGUAGECHANGER'] = isset($languagechanger) ? $languagechanger : ''; // global $coreReplacements['LOADERROR'] = isset($errormsg) ? $errormsg : ''; // global $coreReplacements['LOADFORM'] = $_loadform; $coreReplacements['LOADHEADING'] = $clang->gT("Load a previously saved survey"); $coreReplacements['LOADMESSAGE'] = $clang->gT("You can load a survey that you have previously saved from this screen.") . "<br />" . $clang->gT("Type in the 'name' you used to save the survey, and the password.") . "<br />"; $coreReplacements['NAVIGATOR'] = isset($navigator) ? $navigator : ''; // global $coreReplacements['NOSURVEYID'] = isset($surveylist) ? $surveylist['nosid'] : ''; $coreReplacements['NUMBEROFQUESTIONS'] = $_totalquestionsAsked; $coreReplacements['PERCENTCOMPLETE'] = isset($percentcomplete) ? $percentcomplete : ''; // global $coreReplacements['PRIVACY'] = isset($privacy) ? $privacy : ''; // global $coreReplacements['PRIVACYMESSAGE'] = "<span style='font-weight:bold; font-style: italic;'>" . $clang->gT("A Note On Privacy") . "</span><br />" . $clang->gT("This survey is anonymous.") . "<br />" . $clang->gT("The record kept of your survey responses does not contain any identifying information about you unless a specific question in the survey has asked for this. If you have responded to a survey that used an identifying token to allow you to access the survey, you can rest assured that the identifying token is not kept with your responses. It is managed in a separate database, and will only be updated to indicate that you have (or haven't) completed this survey. There is no way of matching identification tokens with survey responses in this survey."); $coreReplacements['QID'] = isset($questiondetails['qid']) ? $questiondetails['qid'] : ''; $coreReplacements['QUESTION'] = $_question; $coreReplacements['QUESTIONHELP'] = $_questionhelp; $coreReplacements['QUESTIONHELPPLAINTEXT'] = strip_tags(addslashes($help)); // global $coreReplacements['QUESTION_CLASS'] = $_getQuestionClass; $coreReplacements['QUESTION_CODE'] = $_question_code; $coreReplacements['QUESTION_ESSENTIALS'] = $_question_essentials; $coreReplacements['QUESTION_FILE_VALID_MESSAGE'] = $_question_file_valid_message; $coreReplacements['QUESTION_HELP'] = $_question_help; $coreReplacements['QUESTION_INPUT_ERROR_CLASS'] = $_question_input_error_class; $coreReplacements['QUESTION_MANDATORY'] = $_question_mandatory; $coreReplacements['QUESTION_MAN_CLASS'] = $_question_man_class; $coreReplacements['QUESTION_MAN_MESSAGE'] = $_question_man_message; $coreReplacements['QUESTION_NUMBER'] = $_question_number; $coreReplacements['QUESTION_TEXT'] = $_question_text; $coreReplacements['QUESTION_VALID_MESSAGE'] = $_question_valid_message; $coreReplacements['REGISTERERROR'] = isset($register_errormsg) ? $register_errormsg : ''; // global $coreReplacements['REGISTERFORM'] = $_registerform; $coreReplacements['REGISTERMESSAGE1'] = $clang->gT("You must be registered to complete this survey"); $coreReplacements['REGISTERMESSAGE2'] = $clang->gT("You may register for this survey if you wish to take part.") . "<br />\n" . $clang->gT("Enter your details below, and an email containing the link to participate in this survey will be sent immediately."); $coreReplacements['RESTART'] = $_restart; $coreReplacements['RETURNTOSURVEY'] = $_return_to_survey; $coreReplacements['SAVE'] = $_saveall; $coreReplacements['SAVEALERT'] = $_savealert; $coreReplacements['SAVEDID'] = isset($saved_id) ? $saved_id : ''; // global $coreReplacements['SAVEERROR'] = isset($errormsg) ? $errormsg : ''; // global - same as LOADERROR $coreReplacements['SAVEFORM'] = $_saveform; $coreReplacements['SAVEHEADING'] = $clang->gT("Save your unfinished survey"); $coreReplacements['SAVEMESSAGE'] = $clang->gT("Enter a name and password for this survey and click save below.") . "<br />\n" . $clang->gT("Your survey will be saved using that name and password, and can be completed later by logging in with the same name and password.") . "<br /><br />\n" . $clang->gT("If you give an email address, an email containing the details will be sent to you.") . "<br /><br />\n" . $clang->gT("After having clicked the save button you can either close this browser window or continue filling out the survey."); $coreReplacements['SGQ'] = $_question_sgq; $coreReplacements['SID'] = isset($surveyid) ? $surveyid : (isset($questiondetails['sid']) ? $questiondetails['sid'] : ''); $coreReplacements['SITENAME'] = isset($sitename) ? $sitename : ''; // global $coreReplacements['SUBMITBUTTON'] = $_submitbutton; $coreReplacements['SUBMITCOMPLETE'] = "<strong>" . $clang->gT("Thank you!") . "<br /><br />" . $clang->gT("You have completed answering the questions in this survey.") . "</strong><br /><br />" . $clang->gT("Click on 'Submit' now to complete the process and save your answers."); $coreReplacements['SUBMITREVIEW'] = $_strreview; $coreReplacements['SURVEYCONTACT'] = $surveycontact; $coreReplacements['SURVEYDESCRIPTION'] = isset($thissurvey['description']) ? $thissurvey['description'] : ''; $coreReplacements['SURVEYFORMAT'] = isset($surveyformat) ? $surveyformat : ''; // global $coreReplacements['SURVEYLANGAGE'] = $clang->langcode; $coreReplacements['SURVEYLANGUAGE'] = $clang->langcode; $coreReplacements['SURVEYLIST'] = isset($surveylist) ? $surveylist['list'] : ''; $coreReplacements['SURVEYLISTHEADING'] = isset($surveylist) ? $surveylist['listheading'] : ''; $coreReplacements['SURVEYNAME'] = isset($thissurvey['name']) ? $thissurvey['name'] : ''; $coreReplacements['TEMPLATECSS'] = $_templatecss; $coreReplacements['TEMPLATEJS'] = $_templatejs; $coreReplacements['TEMPLATEURL'] = $templateurl; $coreReplacements['THEREAREXQUESTIONS'] = $_therearexquestions; if (!$anonymized) { $coreReplacements['TOKEN'] = $_token; } $coreReplacements['URL'] = $_linkreplace; $coreReplacements['WELCOME'] = isset($thissurvey['welcome']) ? $thissurvey['welcome'] : ''; if (!is_null($replacements) && is_array($replacements)) { $doTheseReplacements = array_merge($coreReplacements, $replacements); // so $replacements overrides core values } else { $doTheseReplacements = $coreReplacements; } // Now do all of the replacements - In rare cases, need to do 3 deep recursion, that that is default $line = LimeExpressionManager::ProcessString($line, $questionNum, $doTheseReplacements, false, 3, 1); return $line; }
function do_array_dual($ia) { global $thissurvey; global $notanswered; $repeatheadings = Yii::app()->getConfig("repeatheadings"); $minrepeatheadings = Yii::app()->getConfig("minrepeatheadings"); $extraclass = ""; $answertypeclass = ""; // Maybe not $clang = Yii::app()->lang; $checkconditionFunction = "checkconditions"; $inputnames = array(); $labelans1 = array(); $labelans = array(); $qquery = "SELECT other FROM {{questions}} WHERE qid=" . $ia[0] . " AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "'"; $other = dbExecuteAssoc($qquery)->read(); $other = reset($other); //Checked $lquery = "SELECT * FROM {{answers}} WHERE scale_id=0 AND qid={$ia[0]} AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' ORDER BY sortorder, code"; $lquery1 = "SELECT * FROM {{answers}} WHERE scale_id=1 AND qid={$ia[0]} AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' ORDER BY sortorder, code"; $aQuestionAttributes = getQuestionAttributeValues($ia[0], $ia[4]); if ($aQuestionAttributes['use_dropdown'] == 1) { $useDropdownLayout = true; $extraclass .= " dropdown-list"; $answertypeclass .= " dropdown"; } else { $useDropdownLayout = false; $extraclass .= " radio-list"; $answertypeclass .= " radio"; } if (ctype_digit(trim($aQuestionAttributes['repeat_headings'])) && trim($aQuestionAttributes['repeat_headings'] != "")) { $repeatheadings = intval($aQuestionAttributes['repeat_headings']); $minrepeatheadings = 0; } if (trim($aQuestionAttributes['dualscale_headerA'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]) != '') { $leftheader = $clang->gT($aQuestionAttributes['dualscale_headerA'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]); } else { $leftheader = ''; } if (trim($aQuestionAttributes['dualscale_headerB'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]) != '') { $rightheader = $clang->gT($aQuestionAttributes['dualscale_headerB'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]); } else { $rightheader = ''; } $lresult = dbExecuteAssoc($lquery); //Checked $aAnswersScale1 = $lresult->readAll(); if ($useDropdownLayout === false && count($aAnswersScale1) > 0) { if (trim($aQuestionAttributes['answer_width']) != '') { $answerwidth = $aQuestionAttributes['answer_width']; } else { $answerwidth = 20; } $columnswidth = 100 - $answerwidth; foreach ($aAnswersScale1 as $lrow) { $labelans[] = $lrow['answer']; $labelcode[] = $lrow['code']; } $lresult1 = dbExecuteAssoc($lquery1); //Checked foreach ($lresult1->readAll() as $lrow1) { $labelans1[] = $lrow1['answer']; $labelcode1[] = $lrow1['code']; } $numrows = count($labelans) + count($labelans1); if ($ia[6] != "Y" && SHOW_NO_ANSWER == 1) { $numrows++; } $cellwidth = $columnswidth / $numrows; $cellwidth = sprintf("%02d", $cellwidth); $sQuery = "SELECT count(question) FROM {{questions}} WHERE parent_qid=" . $ia[0] . " and scale_id=0 AND question like '%|%'"; $iCount = Yii::app()->db->createCommand($sQuery)->queryScalar(); $right_exists = $iCount > 0; // $right_exists is a flag to find out if there are any right hand answer parts. If there aren't we can leave out the right td column if ($aQuestionAttributes['random_order'] == 1) { $ansquery = "SELECT * FROM {{questions}} WHERE parent_qid={$ia['0']} AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' and scale_id=0 ORDER BY " . dbRandom(); } else { $ansquery = "SELECT * FROM {{questions}} WHERE parent_qid={$ia['0']} AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' and scale_id=0 ORDER BY question_order"; } $ansresult = dbExecuteAssoc($ansquery); //Checked $aQuestionsRight = $ansresult->readAll(); $anscount = count($aQuestionsRight); $fn = 1; // unselect second scale when using "no answer" $answer = "<script type='text/javascript'>\n" . "<!--\n" . "function noanswer_checkconditions(value, name, type)\n" . "{\n" . "\tvar vname;\n" . "\tvname = name.replace(/#.*\$/,\"\");\n" . "\t\$('input[name^=\"' + vname + '\"]').attr('checked',false);\n" . "\t\$('input[id=\"answer' + vname + '#0-\"]').attr('checked',true);\n" . "\t\$('input[name^=\"java' + vname + '\"]').val('');\n" . "\t{$checkconditionFunction}(value, name, type);\n" . "}\n" . "function secondlabel_checkconditions(value, name, type)\n" . "{\n" . "\tvar vname;\n" . "\tvname = \"answer\"+name.replace(/#1/g,\"#0-\");\n" . "\tif(document.getElementById(vname))\n" . "\t{\n" . "\tdocument.getElementById(vname).checked=false;\n" . "\t}\n" . "\t{$checkconditionFunction}(value, name, type);\n" . "}\n" . " //-->\n" . " </script>\n"; // Header row and colgroups $mycolumns = "\t<colgroup class=\"col-responses group-1\">\n" . "\t<col class=\"col-answers\" width=\"{$answerwidth}%\" />\n"; $answer_head_line = "\t<th class=\"header_answer_text\"> </th>\n\n"; $odd_even = ''; foreach ($labelans as $ld) { $answer_head_line .= "\t<th>" . $ld . "</th>\n"; $odd_even = alternation($odd_even); $mycolumns .= "<col class=\"{$odd_even}\" width=\"{$cellwidth}%\" />\n"; } $mycolumns .= "\t</colgroup>\n"; if (count($labelans1) > 0) { $mycolumns .= "\t<colgroup class=\"col-responses group-2\">\n" . "\t<col class=\"seperator\" />\n"; $answer_head_line .= "\n\t<td class=\"header_separator\"> </td>\n\n"; // Separator foreach ($labelans1 as $ld) { $answer_head_line .= "\t<th>" . $ld . "</th>\n"; $odd_even = alternation($odd_even); $mycolumns .= "<col class=\"{$odd_even}\" width=\"{$cellwidth}%\" />\n"; } } if ($right_exists) { $answer_head_line .= "\t<td class=\"header_answer_text_right\"> </td>\n"; $mycolumns .= "\n\t<col class=\"answertextright\" />\n\n"; } if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) { $answer_head_line .= "\t<td class=\"header_separator\"> </td>\n"; // Separator $answer_head_line .= "\t<th class=\"header_no_answer\">" . $clang->gT('No answer') . "</th>\n"; $odd_even = alternation($odd_even); $mycolumns .= "\n\t<col class=\"seperator\" />\n\n"; $mycolumns .= "\t<col class=\"col-no-answer {$odd_even}\" width=\"{$cellwidth}%\" />\n"; } $mycolumns .= "\t</colgroup>\n"; $answer_head2 = "\n<tr class=\"array1 header_row\">\n" . $answer_head_line . "</tr>\n"; // build first row of header if needed if ($leftheader != '' || $rightheader != '') { $answer_head1 = "<tr class=\"array1 groups header_row\">\n" . "\t<th class=\"header_answer_text\"> </th>\n" . "\t<th colspan=\"" . count($labelans) . "\" class=\"dsheader\">{$leftheader}</th>\n"; if (count($labelans1) > 0) { $answer_head1 .= "\t<td class=\"header_separator\"> </td>\n" . "\t<th colspan=\"" . count($labelans1) . "\" class=\"dsheader\">{$rightheader}</th>\n"; } if ($right_exists) { $answer_head1 .= "\t<td class=\"header_answer_text_right\"> </td>\n"; } if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) { $answer_head1 .= "\t<td class=\"header_separator\"> </td>\n"; // Separator $answer_head1 .= "\t<th class=\"header_no_answer\"> </th>\n"; } $answer_head1 .= "</tr>\n"; } else { $answer_head1 = ''; } $answer .= "\n<table class=\"question subquestions-list questions-list\" summary=\"" . str_replace('"', '', strip_tags($ia[3])) . " - a dual array type question\">\n" . $mycolumns . "\n\t<thead>\n" . $answer_head1 . $answer_head2 . "\n\t</thead>\n" . "<tbody>\n"; $trbc = ''; foreach ($aQuestionsRight as $ansrow) { // Build repeat headings if needed if (isset($repeatheadings) && $repeatheadings > 0 && $fn - 1 > 0 && ($fn - 1) % $repeatheadings == 0) { if ($anscount - $fn + 1 >= $minrepeatheadings) { $answer .= "</tbody>\n<tbody>"; // Close actual body and open another one //$answer .= $answer_head1; $answer .= "\n<tr class=\"repeat headings\">\n" . $answer_head_line . "</tr>\n"; } } $trbc = alternation($trbc, 'row'); $answertext = dTexts__run($ansrow['question']); $answertextsave = $answertext; $dualgroup = 0; $myfname0 = $ia[1] . $ansrow['title']; $myfname = $ia[1] . $ansrow['title'] . '#0'; $myfname1 = $ia[1] . $ansrow['title'] . '#1'; // new multi-scale-answer /* Check if this item has not been answered: the 'notanswered' variable must be an array, containing a list of unanswered questions, the current question must be in the array, and there must be no answer available for the item in this session. */ if ($ia[6] == 'Y' && is_array($notanswered) && (array_search($myfname, $notanswered) !== FALSE || array_search($myfname1, $notanswered) !== FALSE) && ($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname] == '' || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1] == '')) { $answertext = "<span class='errormandatory'>{$answertext}</span>"; } // Get array_filter stuff list($htmltbody2, $hiddenfield) = return_array_filter_strings($ia, $aQuestionAttributes, $thissurvey, $ansrow, $myfname0, $trbc, $myfname, "tr", "{$trbc} answers-list radio-list"); $answer .= $htmltbody2; if (strpos($answertext, '|')) { $answertext = substr($answertext, 0, strpos($answertext, '|')); } array_push($inputnames, $myfname); $answer .= "\t<th class=\"answertext\">\n" . $hiddenfield . "{$answertext}\n" . "<input type=\"hidden\" name=\"java{$myfname}\" id=\"java{$myfname}\" value=\""; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname])) { $answer .= $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname]; } $answer .= "\" />\n\t</th>\n"; $hiddenanswers = ''; $thiskey = 0; foreach ($labelcode as $ld) { $answer .= "\t<td class=\"answer_cell_1_00{$ld} answer-item {$answertypeclass}-item\">\n" . "<label for=\"answer{$myfname}-{$ld}\">\n" . "\t<input class=\"radio\" type=\"radio\" name=\"{$myfname}\" value=\"{$ld}\" id=\"answer{$myfname}-{$ld}\" title=\"" . HTMLEscape(strip_tags($labelans[$thiskey])) . '"'; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname]) && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname] == $ld) { $answer .= CHECKED; } // --> START NEW FEATURE - SAVE $answer .= " onclick=\"{$checkconditionFunction}(this.value, this.name, this.type)\" />\n</label>\n"; // --> END NEW FEATURE - SAVE $answer .= "\n\t</td>\n"; $thiskey++; } if (count($labelans1) > 0) { $dualgroup++; $hiddenanswers = ''; $answer .= "\t<td class=\"dual_scale_separator information-item\"> </td>\n"; // separator array_push($inputnames, $myfname1); $hiddenanswers .= "<input type=\"hidden\" name=\"java{$myfname1}\" id=\"java{$myfname1}\" value=\""; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1])) { $hiddenanswers .= $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1]; } $hiddenanswers .= "\" />\n"; $thiskey = 0; foreach ($labelcode1 as $ld) { $answer .= "\t<td class=\"answer_cell_2_00{$ld} answer-item radio-item\">\n"; if ($hiddenanswers != '') { $answer .= $hiddenanswers; $hiddenanswers = ''; } $answer .= "<label for=\"answer{$myfname1}-{$ld}\">\n" . "\t<input class=\"radio\" type=\"radio\" name=\"{$myfname1}\" value=\"{$ld}\" id=\"answer{$myfname1}-{$ld}\" title=\"" . HTMLEscape(strip_tags($labelans1[$thiskey])) . '"'; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1]) && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1] == $ld) { $answer .= CHECKED; } // --> START NEW FEATURE - SAVE $answer .= " onclick=\"secondlabel_checkconditions(this.value, this.name, this.type)\" />\n</label>\n"; // --> END NEW FEATURE - SAVE $answer .= "\t</td>\n"; $thiskey++; } } if (strpos($answertextsave, '|')) { $answertext = substr($answertextsave, strpos($answertextsave, '|') + 1); $answer .= "\t<td class=\"answertextright\">{$answertext}</td>\n"; $hiddenanswers = ''; } elseif ($right_exists) { $answer .= "\t<td class=\"answertextright\"> </td>\n"; } if ($ia[6] != "Y" && SHOW_NO_ANSWER == 1) { $answer .= "\t<td class=\"dual_scale_separator information-item\"> </td>\n"; // separator $answer .= "\t<td class=\"dual_scale_no_answer answer-item radio-item noanswer-item\">\n" . "<label for='answer{$myfname}-'>\n" . "\t<input class='radio' type='radio' name='{$myfname}' value='' id='answer{$myfname}-' title='" . $clang->gT("No answer") . "'"; if (!isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname]) || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname] == "") { $answer .= CHECKED; } // --> START NEW FEATURE - SAVE $answer .= " onclick=\"noanswer_checkconditions(this.value, this.name, this.type)\" />\n" . "</label>\n" . "\t</td>\n"; // --> END NEW FEATURE - SAVE } $answer .= "</tr>\n"; // $inputnames[]=$myfname; //IF a MULTIPLE of flexi-redisplay figure, repeat the headings $fn++; } $answer .= "\t</tbody>\n"; $answer .= "</table>\n"; } elseif ($useDropdownLayout === true && count($aAnswersScale1) > 0) { if (trim($aQuestionAttributes['answer_width']) != '') { $answerwidth = $aQuestionAttributes['answer_width']; } else { $answerwidth = 20; } $separatorwidth = (100 - $answerwidth) / 10; $columnswidth = 100 - $answerwidth - $separatorwidth * 2; $answer = ""; // Get Answers //question atribute random_order set? if ($aQuestionAttributes['random_order'] == 1) { $ansquery = "SELECT * FROM {{questions}} WHERE parent_qid={$ia['0']} and scale_id=0 AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' ORDER BY " . dbRandom(); } else { $ansquery = "SELECT * FROM {{questions}} WHERE parent_qid={$ia['0']} and scale_id=0 AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' ORDER BY question_order"; } $ansresult = dbExecuteAssoc($ansquery); $aSubquestions = $ansresult->readAll(); //Checked $anscount = count($aSubquestions); if ($anscount == 0) { $inputnames = array(); $answer .= "\n<p class=\"error\">" . $clang->gT('Error: This question has no answers.') . "</p>\n"; } else { //already done $lresult = dbExecuteAssoc($lquery); foreach ($aAnswersScale1 as $lrow) { $labels0[] = array('code' => $lrow['code'], 'title' => $lrow['answer']); } $lresult1 = dbExecuteAssoc($lquery1); //Checked foreach ($lresult1->readAll() as $lrow1) { $labels1[] = array('code' => $lrow1['code'], 'title' => $lrow1['answer']); } // Get attributes for Headers and Prefix/Suffix if (trim($aQuestionAttributes['dropdown_prepostfix'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]) != '') { list($ddprefix, $ddsuffix) = explode("|", $aQuestionAttributes['dropdown_prepostfix'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]); $ddprefix = $ddprefix; $ddsuffix = $ddsuffix; } else { $ddprefix = ''; $ddsuffix = ''; } if (trim($aQuestionAttributes['dropdown_separators']) != '') { list($postanswSep, $interddSep) = explode('|', $aQuestionAttributes['dropdown_separators']); $postanswSep = $postanswSep; $interddSep = $interddSep; } else { $postanswSep = ''; $interddSep = ''; } $colspan_1 = ''; $colspan_2 = ''; $suffix_cell = ''; $answer .= "\n<table class=\"question subquestion-list questions-list dropdown-list\" summary=\"" . str_replace('"', '', strip_tags($ia[3])) . " - an dual array type question\">\n\n" . "\t<col class=\"answertext\" width=\"{$answerwidth}%\" />\n"; if ($ddprefix != '') { $answer .= "\t<col class=\"ddprefix\" />\n"; $colspan_1 = ' colspan="2"'; } $answer .= "\t<col class=\"dsheader\" />\n"; if ($ddsuffix != '') { $answer .= "\t<col class=\"ddsuffix\" />\n"; if (!empty($colspan_1)) { $colspan_2 = ' colspan="3"'; } $suffix_cell = "\t<td> </td>\n"; // suffix } $answer .= "\t<col class=\"ddarrayseparator\" width=\"{$separatorwidth}%\" />\n"; if ($ddprefix != '') { $answer .= "\t<col class=\"ddprefix\" />\n"; } $answer .= "\t<col class=\"dsheader\" />\n"; if ($ddsuffix != '') { $answer .= "\t<col class=\"ddsuffix\" />\n"; } // headers $answer .= "\n\t<thead>\n" . "<tr>\n" . "\t<td{$colspan_1}> </td>\n" . "\n" . "\t<th>{$leftheader}</th>\n" . "\n" . "\t<td{$colspan_2}> </td>\n" . "\t<th>{$rightheader}</th>\n" . $suffix_cell . "</tr>\n" . "\t</thead>\n\n"; $answer .= "\n<tbody>\n"; $trbc = ''; foreach ($aSubquestions as $ansrow) { $rowname = $ia[1] . $ansrow['title']; $dualgroup = 0; $myfname = $ia[1] . $ansrow['title'] . "#" . $dualgroup; $dualgroup1 = 1; $myfname1 = $ia[1] . $ansrow['title'] . "#" . $dualgroup1; if ($ia[6] == 'Y' && is_array($notanswered) && (array_search($myfname, $notanswered) !== FALSE || array_search($myfname1, $notanswered) !== FALSE) && ($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname] == '' || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1] == '')) { $answertext = "<span class='errormandatory'>" . dTexts__run($ansrow['question']) . "</span>"; } else { $answertext = dTexts__run($ansrow['question']); } $trbc = alternation($trbc, 'row'); // Get array_filter stuff list($htmltbody2, $hiddenfield) = return_array_filter_strings($ia, $aQuestionAttributes, $thissurvey, $ansrow, $rowname, $trbc, $myfname, "tr", "{$trbc} subquestion-list questions-list dropdown-list"); $answer .= $htmltbody2; $answer .= "\t<th class=\"answertext\">\n" . "<label for=\"answer{$rowname}\">\n" . $hiddenfield . "{$answertext}\n" . "</label>\n" . "\t</th>\n"; // Label0 // prefix if ($ddprefix != '') { $answer .= "\t<td class=\"ddprefix information-item\">{$ddprefix}</td>\n"; } $answer .= "\t<td class=\"answer-item dropdown-item\">\n" . "<select name=\"{$myfname}\" id=\"answer{$myfname}\" onchange=\"array_dual_dd_checkconditions(this.value, this.name, this.type,{$dualgroup},{$checkconditionFunction});\">\n"; if (!isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname]) || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname] == '') { $answer .= "\t<option value=\"\" " . SELECTED . '>' . $clang->gT('Please choose...') . "</option>\n"; } foreach ($labels0 as $lrow) { $answer .= "\t<option value=\"" . $lrow['code'] . '" '; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname]) && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname] == $lrow['code']) { $answer .= SELECTED; } $answer .= '>' . flattenText($lrow['title']) . "</option>\n"; } // If not mandatory and showanswer, show no ans if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) { $answer .= "\t<option class=\"noanswer-item\" value=\"\" "; if (!isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname]) || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname] == '') { $answer .= SELECTED; } $answer .= '>' . $clang->gT('No answer') . "</option>\n"; } $answer .= "</select>\n"; // suffix if ($ddsuffix != '') { $answer .= "\t<td class=\"ddsuffix information-item\">{$ddsuffix}</td>\n"; } $answer .= "<input type=\"hidden\" name=\"java{$myfname}\" id=\"java{$myfname}\" value=\""; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname])) { $answer .= $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname]; } $answer .= "\" />\n" . "\t</td>\n"; $inputnames[] = $myfname; $answer .= "\t<td class=\"ddarrayseparator information-item\">{$interddSep}</td>\n"; //Separator // Label1 // prefix if ($ddprefix != '') { $answer .= "\t<td class='ddprefix information-item'>{$ddprefix}</td>\n"; } // $answer .= "\t<td align='left' width='$columnswidth%'>\n" $answer .= "\t<td class=\"answer-item dropdown-item\">\n" . "<select name=\"{$myfname1}\" id=\"answer{$myfname1}\" onchange=\"array_dual_dd_checkconditions(this.value, this.name, this.type,{$dualgroup1},{$checkconditionFunction});\">\n"; if (empty($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname])) { $answer .= "\t<option value=\"\"" . SELECTED . '>' . $clang->gT('Please choose...') . "</option>\n"; } foreach ($labels1 as $lrow1) { $answer .= "\t<option value=\"" . $lrow1['code'] . '" '; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1]) && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1] == $lrow1['code']) { $answer .= SELECTED; } $answer .= '>' . flattenText($lrow1['title']) . "</option>\n"; } // If not mandatory and showanswer, show no ans if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) { $answer .= "\t<option class=\"noanswer-item\" value='' "; if (empty($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname])) { $answer .= SELECTED; } $answer .= ">" . $clang->gT('No answer') . "</option>\n"; } $answer .= "</select>\n"; // suffix if ($ddsuffix != '') { $answer .= "\t<td class=\"ddsuffix information-item\">{$ddsuffix}</td>\n"; } $answer .= "<input type=\"hidden\" name=\"java{$myfname1}\" id=\"java{$myfname1}\" value=\""; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1])) { $answer .= $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1]; } $answer .= "\" />\n" . "\t</td>\n"; $inputnames[] = $myfname1; $answer .= "</tr>\n"; } } // End there are answers $answer .= "\t</tbody>\n"; $answer .= "</table>\n"; } else { $answer = "<p class='error'>" . $clang->gT("Error: There are no answer options for this question and/or they don't exist in this language.") . "</p>\n"; $inputnames = ""; } return array($answer, $inputnames); }
$clang->eT("Starting from:"); ?> <input type='text' size='4' value='<?php echo $start; ?> ' name='start' id='start' /> <input type='submit' value='<?php $clang->eT("Show"); ?> ' /> </font> <?php if (Yii::app()->request->getPost('sql')) { ?> <input type='hidden' name='sql' value='<?php echo HTMLEscape(Yii::app()->request->getPost('sql')); ?> ' /> <?php } ?> </form> </div> </div> <?php echo CHtml::form(array("admin/responses/sa/time/surveyid/{$surveyid}/"), 'post', array('id' => 'resulttableform')); ?> <!-- DATA TABLE --> <?php
} ?> <?php if (!empty($tids)) { ?> <input type='hidden' name='tokenids' value="<?php echo $tids; ?> " /> <?php } ?> <?php foreach ($aSurveyLangs as $language) { $message = HTMLEscape($_POST['message_' . $language]); $subject = HTMLEscape($_POST['subject_' . $language]); ?> <input type='hidden' name='from_<?php echo $language; ?> ' value="<?php echo $_POST['from_' . $language]; ?> " /> <input type='hidden' name='subject_<?php echo $language; ?> ' value="<?php echo $_POST['subject_' . $language]; ?> " />
<?php echo HTMLEscape($row['title']); ?> </h2> <div> <?php echo convertSqlDate($row['created_at']); ?> <?php echo "<br>" . countCommentsForPost($row['id']) . " comments."; ?> </div> <p> <?php echo HTMLEscape($row['body']); ?> </p> <p> <a href="view-post.php?post_id=<?php echo $row['id']; ?> ">Read more....</a> </p> <?php } ?> </body> </html>
function do_array_dual($ia) { global $thissurvey; global $notanswered; $repeatheadings = Yii::app()->getConfig("repeatheadings"); $minrepeatheadings = Yii::app()->getConfig("minrepeatheadings"); $extraclass = ""; $answertypeclass = ""; // Maybe not $clang = Yii::app()->lang; $inputnames = array(); $labelans1 = array(); $labelans = array(); $aQuestionAttributes = getQuestionAttributeValues($ia[0], $ia[4]); if ($aQuestionAttributes['random_order'] == 1) { $ansquery = "SELECT * FROM {{questions}} WHERE parent_qid={$ia['0']} AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' and scale_id=0 ORDER BY " . dbRandom(); } else { $ansquery = "SELECT * FROM {{questions}} WHERE parent_qid={$ia['0']} AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' and scale_id=0 ORDER BY question_order"; } $ansresult = dbExecuteAssoc($ansquery); //Checked $aSubQuestions = $ansresult->readAll(); $anscount = count($aSubQuestions); $lquery = "SELECT * FROM {{answers}} WHERE scale_id=0 AND qid={$ia[0]} AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' ORDER BY sortorder, code"; $lresult = dbExecuteAssoc($lquery); //Checked $aAnswersScale0 = $lresult->readAll(); $lquery1 = "SELECT * FROM {{answers}} WHERE scale_id=1 AND qid={$ia[0]} AND language='" . $_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang'] . "' ORDER BY sortorder, code"; $lresult1 = dbExecuteAssoc($lquery1); //Checked $aAnswersScale1 = $lresult1->readAll(); if ($aQuestionAttributes['use_dropdown'] == 1) { $useDropdownLayout = true; $extraclass .= " dropdown-list"; $answertypeclass .= " dropdown"; $doDualScaleFunction = "doDualScaleDropDown"; // javascript funtion to lauch at end of answers } else { $useDropdownLayout = false; $extraclass .= " radio-list"; $answertypeclass .= " radio"; $doDualScaleFunction = "doDualScaleRadio"; } if (ctype_digit(trim($aQuestionAttributes['repeat_headings'])) && trim($aQuestionAttributes['repeat_headings'] != "")) { $repeatheadings = intval($aQuestionAttributes['repeat_headings']); $minrepeatheadings = 0; } if (trim($aQuestionAttributes['dualscale_headerA'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]) != '') { $leftheader = $aQuestionAttributes['dualscale_headerA'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]; } else { $leftheader = ''; } if (trim($aQuestionAttributes['dualscale_headerB'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]) != '') { $rightheader = $aQuestionAttributes['dualscale_headerB'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]; } else { $rightheader = ''; } if (trim($aQuestionAttributes['answer_width']) != '') { $answerwidth = $aQuestionAttributes['answer_width']; } else { $answerwidth = 20; } // Find if we have rigth and center text // TODO move "|" to attribute $sQuery = "SELECT count(question) FROM {{questions}} WHERE parent_qid=" . $ia[0] . " and scale_id=0 AND question like '%|%'"; $rigthCount = Yii::app()->db->createCommand($sQuery)->queryScalar(); $rightexists = $rigthCount > 0; // $right_exists: flag to find out if there are any right hand answer parts. leaving right column but don't force with $sQuery = "SELECT count(question) FROM {{questions}} WHERE parent_qid=" . $ia[0] . " and scale_id=0 AND question like '%|%|%'"; $centerCount = Yii::app()->db->createCommand($sQuery)->queryScalar(); $centerexists = $centerCount > 0; // $center_exists: flag to find out if there are any center hand answer parts. leaving center column but don't force with // Label and code for input foreach ($aAnswersScale0 as $lrow) { $labels0[] = array('code' => $lrow['code'], 'title' => $lrow['answer']); } foreach ($aAnswersScale1 as $lrow) { $labels1[] = array('code' => $lrow['code'], 'title' => $lrow['answer']); } if (count($aAnswersScale0) > 0 && $anscount) { $answer = ""; $fn = 1; // Used by repeat_heading if ($useDropdownLayout === false) { $columnswidth = 100 - $answerwidth; foreach ($aAnswersScale0 as $lrow) { $labelans0[] = $lrow['answer']; $labelcode0[] = $lrow['code']; } foreach ($aAnswersScale1 as $lrow) { $labelans1[] = $lrow['answer']; $labelcode1[] = $lrow['code']; } $numrows = count($labelans0) + count($labelans1); // Add needed row and fill some boolean: shownoanswer, rightexists, centerexists $shownoanswer = $ia[6] != "Y" && SHOW_NO_ANSWER == 1; if ($shownoanswer) { $numrows++; } if ($rightexists) { $numrows++; } if ($centerexists) { $numrows++; } $cellwidth = $columnswidth / $numrows; //$cellwidth=sprintf("%02d", $cellwidth); // No reason to do this, except to leave place for seperator ? But then table can not be the same in all browser // Header row and colgroups $mycolumns = "\t<col class=\"col-answers\" width=\"{$answerwidth}%\" />\n"; $answer_head_line = "\t<th class=\"header_answer_text\"> </th>\n\n"; $mycolumns .= "\t<colgroup class=\"col-responses group-1\">\n"; $odd_even = ''; foreach ($labelans0 as $ld) { $answer_head_line .= "\t<th>" . $ld . "</th>\n"; $odd_even = alternation($odd_even); $mycolumns .= "<col class=\"{$odd_even}\" width=\"{$cellwidth}%\" />\n"; } $mycolumns .= "\t</colgroup>\n"; if (count($labelans1) > 0) { $seperatorwidth = $centerexists ? "width=\"{$cellwidth}%\" " : ""; $mycolumns .= "\t<col class=\"seperator\" {$seperatorwidth}/>\n"; $mycolumns .= "\t<colgroup class=\"col-responses group-2\">\n"; $answer_head_line .= "\n\t<td class=\"header_separator\"> </td>\n\n"; // Separator : and No answer for accessibility for first colgroup foreach ($labelans1 as $ld) { $answer_head_line .= "\t<th>" . $ld . "</th>\n"; $odd_even = alternation($odd_even); $mycolumns .= "<col class=\"{$odd_even}\" width=\"{$cellwidth}%\" />\n"; } $mycolumns .= "\t</colgroup>\n"; } if ($shownoanswer || $rightexists) { $rigthwidth = $rightexists ? "width=\"{$cellwidth}%\" " : ""; $mycolumns .= "\t<col class=\"seperator rigth_separator\" {$rigthwidth}/>\n"; $answer_head_line .= "\n\t<td class=\"header_separator rigth_separator\"> </td>\n"; } if ($shownoanswer) { $mycolumns .= "\t<col class=\"col-no-answer\" width=\"{$cellwidth}%\" />\n"; $answer_head_line .= "\n\t<th class=\"header_no_answer\">" . $clang->gT('No answer') . "</th>\n"; } $answer_head2 = "\n<tr class=\"array1 header_row\">\n" . $answer_head_line . "</tr>\n"; // build first row of header if needed if ($leftheader != '' || $rightheader != '') { $answer_head1 = "<tr class=\"array1 groups header_row\">\n" . "\t<th class=\"header_answer_text\"> </th>\n" . "\t<th colspan=\"" . count($labelans0) . "\" class=\"dsheader\">{$leftheader}</th>\n"; if (count($labelans1) > 0) { $answer_head1 .= "\t<td class=\"header_separator\"> </td>\n" . "\t<th colspan=\"" . count($labelans1) . "\" class=\"dsheader\">{$rightheader}</th>\n"; } if ($shownoanswer || $rightexists) { $rigthclass = $rightexists ? " header_answer_text_right" : ""; $answer_head1 .= "\t<td class=\"header_separator {$rigthclass}\"> </td>\n"; if ($shownoanswer) { $answer_head1 .= "\t<th class=\"header_no_answer\"> </th>\n"; } } $answer_head1 .= "</tr>\n"; } else { $answer_head1 = ""; } $answer .= "\n<table class=\"question subquestions-list questions-list\" summary=\"" . str_replace('"', '', strip_tags($ia[3])) . " - a dual array type question\">\n" . $mycolumns . "\n\t<thead>\n" . $answer_head1 . $answer_head2 . "\n\t</thead>\n" . "<tbody>\n"; // And no each line of body $trbc = ''; foreach ($aSubQuestions as $ansrow) { // Build repeat headings if needed if (isset($repeatheadings) && $repeatheadings > 0 && $fn - 1 > 0 && ($fn - 1) % $repeatheadings == 0) { if ($anscount - $fn + 1 >= $minrepeatheadings) { $answer .= "</tbody>\n<tbody>"; // Close actual body and open another one //$answer .= $answer_head1; $answer .= "\n<tr class=\"repeat headings\">\n" . $answer_head_line . "</tr>\n"; } } $trbc = alternation($trbc, 'row'); $answertext = $ansrow['question']; // rigth and center answertext: not explode for ? Why not if (strpos($answertext, '|')) { $answertextrigth = substr($answertext, strpos($answertext, '|') + 1); $answertext = substr($answertext, 0, strpos($answertext, '|')); } else { $answertextrigth = ""; } if ($centerexists) { $answertextcenter = substr($answertextrigth, 0, strpos($answertextrigth, '|')); $answertextrigth = substr($answertextrigth, strpos($answertextrigth, '|') + 1); } else { $answertextcenter = ""; } $myfname = $ia[1] . $ansrow['title']; $myfname0 = $ia[1] . $ansrow['title'] . '#0'; $myfid0 = $ia[1] . $ansrow['title'] . '_0'; $myfname1 = $ia[1] . $ansrow['title'] . '#1'; // new multi-scale-answer $myfid1 = $ia[1] . $ansrow['title'] . '_1'; /* Check if this item has not been answered: the 'notanswered' variable must be an array, containing a list of unanswered questions, the current question must be in the array, and there must be no answer available for the item in this session. */ if ($ia[6] == 'Y' && is_array($notanswered) && (array_search($myfname0, $notanswered) !== FALSE || array_search($myfname1, $notanswered) !== FALSE) && ($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0] == '' || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1] == '')) { $answertext = "<span class='errormandatory'>{$answertext}</span>"; } // Get array_filter stuff list($htmltbody2, $hiddenfield) = return_array_filter_strings($ia, $aQuestionAttributes, $thissurvey, $ansrow, $myfname, $trbc, $myfname, "tr", "{$trbc} answers-list radio-list"); $answer .= $htmltbody2; array_push($inputnames, $myfname0); $answer .= "\t<th class=\"answertext\">\n" . $hiddenfield . "{$answertext}\n"; // Hidden answers used by EM: sure can be added in javascript $answer .= "<input type=\"hidden\" disabled=\"disabled\" name=\"java{$myfid0}\" id=\"java{$myfid0}\" value=\""; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0])) { $answer .= $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0]; } $answer .= "\" />\n"; if (count($labelans1) > 0) { $answer .= "<input type=\"hidden\" disabled=\"disabled\" name=\"java{$myfid1}\" id=\"java{$myfid1}\" value=\""; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1])) { $answer .= $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1]; } $answer .= "\" />\n"; } $answer .= "\t</th>\n"; $hiddenanswers = ''; $thiskey = 0; foreach ($labelcode0 as $ld) { $answer .= "\t<td class=\"answer_cell_1_00{$ld} answer-item {$answertypeclass}-item\">\n" . "<label for=\"answer{$myfname}-{$ld}\">\n" . "\t<input class=\"radio\" type=\"radio\" name=\"{$myfname0}\" value=\"{$ld}\" id=\"answer{$myfid0}-{$ld}\" title=\"" . HTMLEscape(strip_tags($labelans0[$thiskey])) . '"'; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0]) && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0] == $ld) { $answer .= CHECKED; } $answer .= " />\n</label>\n"; $answer .= "\n\t</td>\n"; $thiskey++; } if (count($labelans1) > 0) { $answer .= "\t<td class=\"dual_scale_separator information-item\">"; if ($shownoanswer) { $answer .= "<label for='answer{$myfid0}-' class= \"jshide\">\n" . "\t<input class='radio' type='radio' name='{$myfname0}' value='' id='answer{$myfid0}-' title='" . $clang->gT("No answer") . "'"; if (!isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0]) || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0] == "") { $answer .= CHECKED; } $answer .= " />\n" . "</label>\n"; } $answer .= "{$answertextcenter}</td>\n"; // separator array_push($inputnames, $myfname1); $thiskey = 0; foreach ($labelcode1 as $ld) { $answer .= "\t<td class=\"answer_cell_2_00{$ld} answer-item radio-item\">\n"; $answer .= "<label for=\"answer{$myfname1}-{$ld}\">\n" . "\t<input class=\"radio\" type=\"radio\" name=\"{$myfname1}\" value=\"{$ld}\" id=\"answer{$myfid1}-{$ld}\" title=\"" . HTMLEscape(strip_tags($labelans1[$thiskey])) . '"'; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1]) && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1] == $ld) { $answer .= CHECKED; } $answer .= " />\n</label>\n"; $answer .= "\t</td>\n"; $thiskey++; } } if ($shownoanswer || $rightexists) { $answer .= "\t<td class=\"answertextright dual_scale_separator information-item\">{$answertextrigth}</td>\n"; } if ($shownoanswer) { $answer .= "\t<td class=\"dual_scale_no_answer answer-item radio-item noanswer-item\">\n"; if (count($labelans1) > 0) { $answer .= "<label for='answer{$myfid1}-'>\n" . "\t<input class='radio' type='radio' name='{$myfname1}' value='' id='answer{$myfid1}-' title='" . $clang->gT("No answer") . "'"; if (!isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1]) || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1] == "") { $answer .= CHECKED; } // --> START NEW FEATURE - SAVE $answer .= " />\n" . "</label>\n"; } else { $answer .= "<label for='answer{$myfid0}-'>\n" . "\t<input class='radio' type='radio' name='{$myfname0}' value='' id='answer{$myfid0}-' title='" . $clang->gT("No answer") . "'"; if (!isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0]) || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0] == "") { $answer .= CHECKED; } // --> START NEW FEATURE - SAVE $answer .= " />\n" . "</label>\n"; } $answer .= "\t</td>\n"; } $answer .= "</tr>\n"; $fn++; } $answer .= "</tbody>\n"; $answer .= "</table>"; } elseif ($useDropdownLayout === true) { $separatorwidth = (100 - $answerwidth) / 10; $cellwidth = (100 - $answerwidth - $separatorwidth) / 2; $answer = ""; // Get attributes for Headers and Prefix/Suffix if (trim($aQuestionAttributes['dropdown_prepostfix'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]) != '') { list($ddprefix, $ddsuffix) = explode("|", $aQuestionAttributes['dropdown_prepostfix'][$_SESSION['survey_' . Yii::app()->getConfig('surveyID')]['s_lang']]); $ddprefix = $ddprefix; $ddsuffix = $ddsuffix; } else { $ddprefix = ''; $ddsuffix = ''; } if (trim($aQuestionAttributes['dropdown_separators']) != '') { $aSeparator = explode('|', $aQuestionAttributes['dropdown_separators']); if (isset($aSeparator[1])) { $interddSep = $aSeparator[1]; } else { $interddSep = $aSeparator[0]; } } else { $interddSep = ''; } $colspan_1 = ''; $colspan_2 = ''; $suffix_cell = ''; $answer .= "\n<table class=\"question subquestion-list questions-list dropdown-list\" summary=\"" . str_replace('"', '', strip_tags($ia[3])) . " - an dual array type question\">\n\n" . "\t<col class=\"answertext\" width=\"{$answerwidth}%\" />\n"; if ($ddprefix != '' || $ddsuffix != '') { $answer .= "\t<colgroup width=\"{$cellwidth}%\">\n"; } if ($ddprefix != '') { $answer .= "\t\t<col class=\"ddprefix\" />\n"; $colspan_1 = ' colspan="2"'; } $headcolwidth = $ddprefix != '' || $ddsuffix != '' ? "" : " width=\"{$cellwidth}%\""; $answer .= "\t<col class=\"dsheader\"{$headcolwidth} />\n"; if ($ddsuffix != '') { $answer .= "\t<col class=\"ddsuffix\" />\n"; } if ($ddprefix != '' || $ddsuffix != '') { $answer .= "\t</colgroup>\n"; } $answer .= "\t<col class=\"ddarrayseparator\"{$separatorwidth} />\n"; if ($ddprefix != '' || $ddsuffix != '') { $answer .= "\t<colgroup width=\"{$cellwidth}%\">\n"; } if ($ddprefix != '') { $answer .= "\t\t<col class=\"ddprefix\" />\n"; } $answer .= "\t<col class=\"dsheader\"{$headcolwidth} />\n"; if ($ddsuffix != '') { $answer .= "\t<col class=\"ddsuffix\" />\n"; } if ($ddprefix != '' || $ddsuffix != '') { $answer .= "\t</colgroup>\n"; } // colspan : for header only if ($ddprefix != '' && $ddsuffix != '') { $colspan = ' colspan="3"'; } elseif ($ddprefix != '' || $ddsuffix != '') { $colspan = ' colspan="2"'; } else { $colspan = ""; } // headers $answer .= "\n\t<thead>\n" . "<tr>\n" . "\t<td> </td>\n" . "\t<th{$colspan}>{$leftheader}</th>\n" . "\t<td> </td>\n" . "\t<th{$colspan}>{$rightheader}</th>\n"; $answer .= "\t</tr>\n" . "\t</thead>\n"; $answer .= "\n<tbody>\n"; $trbc = ''; foreach ($aSubQuestions as $ansrow) { $myfname = $ia[1] . $ansrow['title']; $myfname0 = $ia[1] . $ansrow['title'] . "#0"; $myfid0 = $ia[1] . $ansrow['title'] . "_0"; $myfname1 = $ia[1] . $ansrow['title'] . "#1"; $myfid1 = $ia[1] . $ansrow['title'] . "_1"; if ($ia[6] == 'Y' && is_array($notanswered) && (array_search($myfname0, $notanswered) !== FALSE || array_search($myfname1, $notanswered) !== FALSE) && ($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0] == '' || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1] == '')) { $answertext = "<span class='errormandatory'>" . $ansrow['question'] . "</span>"; } else { $answertext = $ansrow['question']; } list($htmltbody2, $hiddenfield) = return_array_filter_strings($ia, $aQuestionAttributes, $thissurvey, $ansrow, $myfname, $trbc, $myfname, "tr", "{$trbc} subquestion-list questions-list dropdown-list"); $answer .= $htmltbody2; $answer .= "\t<th class=\"answertext\">\n" . "<label for=\"answer{$myfname}\">\n" . "{$answertext}\n" . "</label>\n"; // Hidden answers used by EM: sure can be added in javascript $answer .= "<input type=\"hidden\" disabled=\"disabled\" name=\"java{$myfid0}\" id=\"java{$myfid0}\" value=\""; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0])) { $answer .= $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0]; } $answer .= "\" />\n"; $answer .= "<input type=\"hidden\" disabled=\"disabled\" name=\"java{$myfid1}\" id=\"java{$myfid1}\" value=\""; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1])) { $answer .= $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1]; } $answer .= "\" />\n"; $answer . "\t</th>\n"; // Selector 0 if ($ddprefix != '') { $answer .= "\t<td class=\"ddprefix information-item\">{$ddprefix}</td>\n"; } $answer .= "\t<td class=\"answer-item dropdown-item\">\n" . "<select name=\"{$myfname0}\" id=\"answer{$myfid0}\">\n"; if (!isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0]) || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0] == '') { $answer .= "\t<option value=\"\" " . SELECTED . '>' . $clang->gT('Please choose...') . "</option>\n"; } foreach ($labels0 as $lrow) { $answer .= "\t<option value=\"" . $lrow['code'] . '" '; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0]) && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0] == $lrow['code']) { $answer .= SELECTED; } $answer .= '>' . flattenText($lrow['title']) . "</option>\n"; } // If not mandatory and showanswer, show no ans if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) { $answer .= "\t<option class=\"noanswer-item\" value=\"\" "; if (!isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0]) || $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname0] == '') { $answer .= SELECTED; } $answer .= '>' . $clang->gT('No answer') . "</option>\n"; } $answer .= "</select>\n"; $answer .= "</td>\n"; if ($ddsuffix != '') { $answer .= "\t<td class=\"ddsuffix information-item\">{$ddsuffix}</td>\n"; } $inputnames[] = $myfname0; $answer .= "\t<td class=\"ddarrayseparator information-item\">{$interddSep}</td>\n"; //Separator // Selector 1 if ($ddprefix != '') { $answer .= "\t<td class='ddprefix information-item'>{$ddprefix}</td>\n"; } $answer .= "\t<td class=\"answer-item dropdown-item\">\n" . "<select name=\"{$myfname1}\" id=\"answer{$myfid1}\">\n"; if (empty($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname])) { $answer .= "\t<option value=\"\"" . SELECTED . '>' . $clang->gT('Please choose...') . "</option>\n"; } foreach ($labels1 as $lrow1) { $answer .= "\t<option value=\"" . $lrow1['code'] . '" '; if (isset($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1]) && $_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname1] == $lrow1['code']) { $answer .= SELECTED; } $answer .= '>' . flattenText($lrow1['title']) . "</option>\n"; } // If not mandatory and showanswer, show no ans if ($ia[6] != 'Y' && SHOW_NO_ANSWER == 1) { $answer .= "\t<option class=\"noanswer-item\" value='' "; if (empty($_SESSION['survey_' . Yii::app()->getConfig('surveyID')][$myfname])) { $answer .= SELECTED; } $answer .= ">" . $clang->gT('No answer') . "</option>\n"; } $answer .= "</select>\n"; $answer .= "</td>\n"; if ($ddsuffix != '') { $answer .= "\t<td class=\"ddsuffix information-item\">{$ddsuffix}</td>\n"; } $inputnames[] = $myfname1; $answer .= "</tr>\n"; } $answer .= "\t</tbody>\n"; $answer .= "</table>\n"; } } else { $answer = "<p class='error'>" . $clang->gT("Error: There are no answer options for this question and/or they don't exist in this language.") . "</p>\n"; $inputnames = ""; } header_includes("dualscale.js"); $answer .= "<script type='text/javascript'>\n" . " <!--\n" . " {$doDualScaleFunction}({$ia[0]});\n" . " -->\n" . "</script>\n"; return array($answer, $inputnames); }
<form action='<?php echo $this->createUrl("admin/responses/browse/surveyid/$surveyid/"); ?>' id='browseresults' method='post'> <img src='<?php echo $sImageURL; ?>blank.gif' width='31' height='20' alt='' /> <?php $clang->eT("Records displayed:"); ?><input type='text' size='4' value='<?php echo $dtcount2; ?>' name='limit' id='limit' /> <?php $clang->eT("Starting from:"); ?><input type='text' size='4' value='<?php echo $start; ?>' name='start' id='start' /> <input type='submit' value='<?php $clang->eT("Show"); ?>' /> <?php $clang->eT("Display:"); ?> <?php echo CHtml::dropDownList('completionstate',$sCompletionStateValue,array('all'=> $clang->gT("All responses"), 'complete'=> $clang->gT("Completed responses only"), 'incomplete'=> $clang->gT("Incomplete responses only")),array('onchange'=>'javascript:submit();')); ?> <input type='hidden' name='sid' value='<?php echo $surveyid; ?>' /> <input type='hidden' name='action' value='browse' /> <input type='hidden' name='subaction' value='all' /> <?php if (isset($_POST['sql'])) { ?> <input type='hidden' name='sql' value='<?php echo HTMLEscape($_POST['sql']); ?>' /> <?php } ?> </form></div> </div> </div> <form action='<?php echo $this->createUrl("admin/responses/browse/surveyid/$surveyid"); ?>' id='resulttableform' method='post'> <!-- DATA TABLE --> <?php if ($fncount < 10) { ?> <table class='browsetable' style='width:100%'> <?php } else { ?> <table class='browsetable'> <?php } ?> <thead>
</div> <div style='margin-top:1em;'> <?php if (Permission::model()->hasGlobalPermission('templates','update')) { ?> <?php echo CHtml::form(array('admin/templates/sa/uploadfile'), 'post', array('id'=>'importtemplatefile', 'name'=>'importtemplatefile', 'enctype'=>'multipart/form-data')); ?> <?php eT("Upload a file:"); ?><br><input name='upload_file' id="upload_file" type="file" required="required"/><br /> <input type='submit' value='<?php eT("Upload"); ?>' class='btn btn-default' <?php if (!is_template_editable($templatename)) { ?> disabled='disabled' <?php } ?> /> <input type='hidden' name='editfile' value='<?php echo $editfile; ?>' /> <input type='hidden' name='screenname' value='<?php echo HTMLEscape($screenname); ?>' /> <input type='hidden' name='templatename' value='<?php echo $templatename; ?>' /> <input type='hidden' name='action' value='templateuploadfile' /> </form> <?php } ?> </div> </div> </div> <?php endif;?> <div class="row template-sum" style="margin-bottom: 100px;"> <div class="col-lg-12"> <h4> <?php eT("Preview:"); ?>
/** * This function replaces keywords in a text and is mainly intended for templates * If you use this functions put your replacement strings into the $replacements variable * instead of using global variables * NOTE - Don't do any embedded replacements in this function. Create the array of replacement values and * they will be done in batch at the end * * @param mixed $line Text to search in * @param mixed $replacements Array of replacements: Array( <stringtosearch>=><stringtoreplacewith> * @param boolean $anonymized Determines if token data is being used or just replaced with blanks * @param questionNum - needed to support dynamic JavaScript-based tailoring within questions * @param bStaticReplacement - Default off, forces non-dynamic replacements without <SPAN> tags (e.g. for the Completed page) * @return string Text with replaced strings */ function templatereplace($line, $replacements = array(), &$redata = array(), $debugSrc = 'Unspecified', $anonymized = false, $questionNum = NULL, $registerdata = array(), $bStaticReplacement = false, $oTemplate = '') { /* global $clienttoken,$token,$sitename,$move,$showxquestions,$showqnumcode,$questioncode; global $s_lang,$errormsg,$saved_id, $languagechanger,$captchapath,$loadname; */ /* $allowedvars = array('surveylist', 'sitename', 'clienttoken', 'rooturl', 'thissurvey', 'imageurl', 'defaulttemplate', 'percentcomplete', 'move', 'groupname', 'groupdescription', 'question', 'showxquestions', 'showgroupinfo', 'showqnumcode', 'questioncode', 'answer', 'navigator', 'help', 'totalquestions', 'surveyformat', 'completed', 'notanswered', 'privacy', 'surveyid', 'publicurl', 'templatedir', 'token', 'assessments', 's_lang', 'errormsg', 'saved_id', 'usertemplaterootdir', 'languagechanger', 'printoutput', 'captchapath', 'loadname'); */ $allowedvars = array('assessments', 'captchapath', 'clienttoken', 'completed', 'errormsg', 'groupdescription', 'groupname', 'imageurl', 'languagechanger', 'loadname', 'move', 'navigator', 'moveprevbutton', 'movenextbutton', 'percentcomplete', 'privacy', 's_lang', 'saved_id', 'showgroupinfo', 'showqnumcode', 'showxquestions', 'sitename', 'sitelogo', 'surveylist', 'templatedir', 'thissurvey', 'token', 'totalBoilerplatequestions', 'totalquestions', 'questionindex', 'questionindexmenu'); $varsPassed = array(); foreach ($allowedvars as $var) { if (isset($redata[$var])) { ${$var} = $redata[$var]; $varsPassed[] = $var; } } // if (count($varsPassed) > 0) { // log_message('debug', 'templatereplace() called from ' . $debugSrc . ' contains: ' . implode(', ', $varsPassed)); // } // if (isset($redata['question'])) { // LimeExpressionManager::ShowStackTrace('has QID and/or SGA',$allowedvars); // } // extract($redata); // creates variables for each of the keys in the array // Local over-rides in case not set above if (!isset($showgroupinfo)) { $showgroupinfo = Yii::app()->getConfig('showgroupinfo'); } if (!isset($showqnumcode)) { $showqnumcode = Yii::app()->getConfig('showqnumcode'); } $_surveyid = Yii::app()->getConfig('surveyID'); if (!isset($showxquestions)) { $showxquestions = Yii::app()->getConfig('showxquestions'); } if (!isset($s_lang)) { $s_lang = isset(Yii::app()->session['survey_' . $_surveyid]['s_lang']) ? Yii::app()->session['survey_' . $_surveyid]['s_lang'] : 'en'; } if ($_surveyid && !isset($thissurvey)) { $thissurvey = getSurveyInfo($_surveyid, $s_lang); } if (!isset($captchapath)) { $captchapath = ''; } if (!isset($sitename)) { $sitename = Yii::app()->getConfig('sitename'); } if (!isset($saved_id) && isset(Yii::app()->session['survey_' . $_surveyid]['srid'])) { $saved_id = Yii::app()->session['survey_' . $_surveyid]['srid']; } Yii::app()->loadHelper('surveytranslator'); if (isset($thissurvey['sid'])) { $surveyid = $thissurvey['sid']; } // lets sanitize the survey template if (isset($thissurvey['templatedir'])) { $templatename = $thissurvey['templatedir']; } else { $templatename = Yii::app()->getConfig('defaulttemplate'); } if (!isset($templatedir)) { $templatedir = getTemplatePath($templatename); } if (!isset($templateurl)) { $templateurl = getTemplateURL($templatename) . "/"; } if (!$anonymized && isset($thissurvey['anonymized'])) { $anonymized = $thissurvey['anonymized'] == "Y"; } // TEMPLATECSS $_templatecss = ""; $_templatejs = ""; /** * Template css/js files from the template config files are loaded. * It use the asset manager (so user never need to empty the cache, even if template is updated) * If debug mode is on, no asset manager is used. * * oTemplate is defined in controller/survey/index * * If templatereplace is called from the template editor, a $oTemplate is provided. */ $oTemplate = Template::model()->getInstance($templatename); $aCssFiles = $oTemplate->config->files->css->filename; $aJsFiles = $oTemplate->config->files->js->filename; $aOtherFiles = $oTemplate->otherFiles; //var_dump($aOtherFiles); die(); if (stripos($line, "{TEMPLATECSS}")) { // If the template has files for css, we can't publish the files one by one, but we must publish them as a whole directory // TODO : extend asset manager so it check for file modification even in directory mode if (!YII_DEBUG || count($aOtherFiles) < 0) { foreach ($aCssFiles as $sCssFile) { if (file_exists($oTemplate->path . DIRECTORY_SEPARATOR . $sCssFile)) { Yii::app()->getClientScript()->registerCssFile(App()->getAssetManager()->publish($oTemplate->path . DIRECTORY_SEPARATOR . $sCssFile), $sCssFile['media']); } } } else { foreach ($aCssFiles as $sCssFile) { if (file_exists($oTemplate->path . DIRECTORY_SEPARATOR . $sCssFile)) { Yii::app()->getClientScript()->registerCssFile("{$templateurl}{$sCssFile}", $sCssFile['media']); } } } /* RTL CSS */ if (getLanguageRTL(App()->language)) { $aCssFiles = (array) $oTemplate->config->files->rtl->css->filename; if (!YII_DEBUG) { foreach ($aCssFiles as $sCssFile) { if (file_exists($oTemplate->path . DIRECTORY_SEPARATOR . $sCssFile)) { Yii::app()->getClientScript()->registerCssFile(App()->getAssetManager()->publish($oTemplate->path . DIRECTORY_SEPARATOR . $sCssFile), $sCssFile['media']); } } } else { foreach ($aCssFiles as $sCssFile) { if (file_exists($oTemplate->path . DIRECTORY_SEPARATOR . $sCssFile)) { Yii::app()->getClientScript()->registerCssFile("{$templateurl}{$sCssFile}", $sCssFile['media']); } } } } } if (stripos($line, "{TEMPLATEJS}")) { if (!YII_DEBUG) { foreach ($aJsFiles as $sJsFile) { if (file_exists($oTemplate->path . DIRECTORY_SEPARATOR . $sJsFile)) { App()->getClientScript()->registerScriptFile(App()->getAssetManager()->publish($oTemplate->path . DIRECTORY_SEPARATOR . $sJsFile)); } } } else { foreach ($aJsFiles as $sJsFile) { if (file_exists($oTemplate->path . DIRECTORY_SEPARATOR . $sJsFile)) { Yii::app()->getClientScript()->registerScriptFile("{$templateurl}{$sJsFile}"); } } } /* RTL JS */ if (getLanguageRTL(App()->language)) { $aJsFiles = (array) $oTemplate->config->files->rtl->js->filename; if (!YII_DEBUG) { foreach ($aJsFiles as $aJsFile) { if (file_exists($oTemplate->path . DIRECTORY_SEPARATOR . $aJsFile)) { App()->getClientScript()->registerScriptFile(App()->getAssetManager()->publish($oTemplate->path . DIRECTORY_SEPARATOR . $aJsFile)); } } } else { foreach ($aJsFiles as $sJsFile) { if (file_exists($oTemplate->path . DIRECTORY_SEPARATOR . $sJsFile)) { Yii::app()->getClientScript()->registerScriptFile("{$templateurl}{$sJsFile}"); } } } } } // surveyformat if (isset($thissurvey['format'])) { $surveyformat = str_replace(array("A", "S", "G"), array("allinone", "questionbyquestion", "groupbygroup"), $thissurvey['format']); } else { $surveyformat = ""; } if ($oTemplate->config->engine->cssframework) { $surveyformat .= " " . $oTemplate->config->engine->cssframework . "-engine "; } if (isset(Yii::app()->session['step']) && Yii::app()->session['step'] % 2 && $surveyformat != "allinone") { $surveyformat .= " page-odd"; } if (isset($thissurvey['questionindex']) && $thissurvey['questionindex'] > 0 && $surveyformat != "allinone" && (isset(Yii::app()->session['step']) && Yii::app()->session['step'] > 0)) { $surveyformat .= " withindex"; } if (isset($thissurvey['showprogress']) && $thissurvey['showprogress'] == "Y") { $surveyformat .= " showprogress"; } if (isset($thissurvey['showqnumcode'])) { $surveyformat .= " showqnumcode-" . $thissurvey['showqnumcode']; } // real survey contact if (isset($surveylist) && isset($surveylist['contact'])) { $surveycontact = $surveylist['contact']; } elseif (isset($surveylist) && isset($thissurvey['admin']) && $thissurvey['admin'] != "") { $surveycontact = sprintf(gT("Please contact %s ( %s ) for further assistance."), $thissurvey['admin'], $thissurvey['adminemail']); } else { $surveycontact = ""; } // If there are non-bracketed replacements to be made do so above this line. // Only continue in this routine if there are bracketed items to replace {} if (strpos($line, "{") === false) { // process string anyway so that it can be pretty-printed return LimeExpressionManager::ProcessString($line, $questionNum, NULL, false, 1, 1, true); } if ($showgroupinfo == 'both' || $showgroupinfo == 'name' || $showgroupinfo == 'choose' && !isset($thissurvey['showgroupinfo']) || $showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'B' || $showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'N') { $_groupname = isset($groupname) ? $groupname : ''; } else { $_groupname = ''; } if ($showgroupinfo == 'both' || $showgroupinfo == 'description' || $showgroupinfo == 'choose' && !isset($thissurvey['showgroupinfo']) || $showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'B' || $showgroupinfo == 'choose' && $thissurvey['showgroupinfo'] == 'D') { $_groupdescription = isset($groupdescription) ? $groupdescription : ''; } else { $_groupdescription = ''; } if (!isset($totalquestions)) { $totalquestions = 0; } $_totalquestionsAsked = $totalquestions; if ($showxquestions == 'show' || $showxquestions == 'choose' && !isset($thissurvey['showxquestions']) || $showxquestions == 'choose' && $thissurvey['showxquestions'] == 'Y') { if ($_totalquestionsAsked < 1) { $_therearexquestions = gT("There are no questions in this survey"); // Singular } elseif ($_totalquestionsAsked == 1) { $_therearexquestions = gT("There is 1 question in this survey"); //Singular } else { $_therearexquestions = gT("There are {NUMBEROFQUESTIONS} questions in this survey."); //Note this line MUST be before {NUMBEROFQUESTIONS} } } else { $_therearexquestions = ''; } if (isset($token)) { $_token = $token; } elseif (isset($clienttoken)) { $_token = htmlentities($clienttoken, ENT_QUOTES, 'UTF-8'); // or should it be URL-encoded? } else { $_token = ''; } // Expiry if (isset($thissurvey['expiry'])) { $dateformatdetails = getDateFormatData($thissurvey['surveyls_dateformat']); Yii::import('application.libraries.Date_Time_Converter', true); $datetimeobj = new Date_Time_Converter($thissurvey['expiry'], "Y-m-d"); $_dateoutput = $datetimeobj->convert($dateformatdetails['phpdate']); } else { $_dateoutput = '-'; } $_submitbutton = "<input class='submit btn btn-default' type='submit' value=' " . gT("Submit") . " ' name='move2' onclick=\"javascript:document.limesurvey.move.value = 'movesubmit';\" />"; if (isset($thissurvey['surveyls_url']) and $thissurvey['surveyls_url'] != "") { if (trim($thissurvey['surveyls_urldescription']) != '') { $_linkreplace = "<a href='{$thissurvey['surveyls_url']}'>{$thissurvey['surveyls_urldescription']}</a>"; } else { $_linkreplace = "<a href='{$thissurvey['surveyls_url']}'>{$thissurvey['surveyls_url']}</a>"; } } else { $_linkreplace = ''; } if (isset($thissurvey['sid']) && isset($_SESSION['survey_' . $thissurvey['sid']]['srid']) && $thissurvey['active'] == 'Y') { $iscompleted = SurveyDynamic::model($surveyid)->isCompleted($_SESSION['survey_' . $thissurvey['sid']]['srid']); } else { $iscompleted = false; } if (isset($surveyid) && !$iscompleted) { $_clearall = CHtml::htmlButton(gT("Exit and clear survey"), array('type' => 'submit', 'id' => "clearall", 'value' => 'clearall', 'name' => 'clearall', 'class' => 'clearall button btn btn-default btn-lg col-xs-4 hidden', 'data-confirmedby' => 'confirm-clearall', 'title' => gT("This action need confirmation."))); $_clearall .= CHtml::checkBox("confirm-clearall", false, array('id' => 'confirm-clearall', 'value' => 'confirm', 'class' => 'hide jshide btn btn-default btn-lg col-xs-4')); $_clearall .= CHtml::label(gT("Are you sure you want to clear all your responses?"), 'confirm-clearall', array('class' => 'hide jshide btn btn-default btn-lg col-xs-4')); $_clearalllinks = '<li><a href="#" id="clearallbtnlink">' . gT("Exit and clear survey") . '</a></li>'; } else { $_clearall = ""; $_clearalllinks = ''; } if (isset(Yii::app()->session['datestamp'])) { $_datestamp = Yii::app()->session['datestamp']; } else { $_datestamp = '-'; } if (isset($thissurvey['allowsave']) and $thissurvey['allowsave'] == "Y") { $_saveall = doHtmlSaveAll(isset($move) ? $move : NULL); $_savelinks = doHtmlSaveLinks(isset($move) ? $move : NULL); } else { $_saveall = ""; $_savelinks = ""; } if (isset($thissurvey['allowprev']) && $thissurvey['allowprev'] == "N") { $_strreview = ""; } else { $_strreview = gT("If you want to check any of the answers you have made, and/or change them, you can do that now by clicking on the [<< prev] button and browsing through your responses."); } if (isset($surveyid)) { $restartparam = array(); if ($_token) { $restartparam['token'] = sanitize_token($_token); } // urlencode with needed with sanitize_token if (Yii::app()->request->getQuery('lang')) { $restartparam['lang'] = sanitize_languagecode(Yii::app()->request->getQuery('lang')); } elseif ($s_lang) { $restartparam['lang'] = $s_lang; } $restartparam['newtest'] = "Y"; $restarturl = Yii::app()->getController()->createUrl("survey/index/sid/{$surveyid}", $restartparam); $_restart = "<a href='{$restarturl}'>" . gT("Restart this Survey") . "</a>"; } else { $_restart = ""; } if (isset($thissurvey['anonymized']) && $thissurvey['anonymized'] == 'Y') { $_savealert = gT("To remain anonymous please use a pseudonym as your username, also an email address is not required."); } else { $_savealert = ""; } if (isset($surveyid)) { if ($_token) { $returnlink = Yii::app()->getController()->createUrl("survey/index/sid/{$surveyid}", array('token' => Token::sanitizeToken($_token))); } else { $returnlink = Yii::app()->getController()->createUrl("survey/index/sid/{$surveyid}"); } $_return_to_survey = "<a href='{$returnlink}'>" . gT("Return to survey") . "</a>"; } else { $_return_to_survey = ""; } // Save Form $_saveform = "<table class='save-survey-form'><tr class='save-survey-row save-survey-name'><td class='save-survey-label label-cell' align='right'><label for='savename'>" . gT("Name") . "</label>:</td><td class='save-survey-input input-cell'><input type='text' name='savename' id='savename' value='"; if (isset($_POST['savename'])) { $_saveform .= HTMLEscape(autoUnescape($_POST['savename'])); } $_saveform .= "' /></td></tr>\n" . "<tr class='save-survey-row save-survey-password-1'><td class='save-survey-label label-cell' align='right'><label for='savepass'>" . gT("Password") . "</label>:</td><td class='save-survey-input input-cell'><input type='password' id='savepass' name='savepass' value='"; if (isset($_POST['savepass'])) { $_saveform .= HTMLEscape(autoUnescape($_POST['savepass'])); } $_saveform .= "' /></td></tr>\n" . "<tr class='save-survey-row save-survey-password-2'><td class='save-survey-label label-cell' align='right'><label for='savepass2'>" . gT("Repeat password") . "</label>:</td><td class='save-survey-input input-cell'><input type='password' id='savepass2' name='savepass2' value='"; if (isset($_POST['savepass2'])) { $_saveform .= HTMLEscape(autoUnescape($_POST['savepass2'])); } $_saveform .= "' /></td></tr>\n" . "<tr class='save-survey-row save-survey-email'><td class='save-survey-label label-cell' align='right'><label for='saveemail'>" . gT("Your email address") . "</label>:</td><td class='save-survey-input input-cell'><input type='text' id='saveemail' name='saveemail' value='"; if (isset($_POST['saveemail'])) { $_saveform .= HTMLEscape(autoUnescape($_POST['saveemail'])); } $_saveform .= "' /></td></tr>\n"; if (isset($thissurvey['usecaptcha']) && function_exists("ImageCreate") && isCaptchaEnabled('saveandloadscreen', $thissurvey['usecaptcha'])) { $_saveform .= "<tr class='save-survey-row save-survey-captcha'><td class='save-survey-label label-cell' align='right'><label for='loadsecurity'>" . gT("Security question") . "</label>:</td><td class='save-survey-input input-cell'><table class='captcha-table'><tr><td class='captcha-image' valign='middle'><img alt='' src='" . Yii::app()->getController()->createUrl('/verification/image/sid/' . (isset($surveyid) ? $surveyid : '')) . "' /></td><td class='captcha-input' valign='middle' style='text-align:left'><input type='text' size='5' maxlength='3' id='loadsecurity' name='loadsecurity' value='' /></td></tr></table></td></tr>\n"; } $_saveform .= "<tr><td align='right'></td><td></td></tr>\n" . "<tr class='save-survey-row save-survey-submit'><td class='save-survey-label label-cell'><label class='hide jshide' for='savebutton'>" . gT("Save Now") . "</label></td><td class='save-survey-input input-cell'><input type='submit' id='savebutton' name='savesubmit' class='button' value='" . gT("Save Now") . "' /></td></tr>\n" . "</table>"; // Load Form $_loadform = "<table class='load-survey-form'><tr class='load-survey-row load-survey-name'><td class='load-survey-label label-cell' align='right'><label for='loadname'>" . gT("Saved name") . "</label>:</td><td class='load-survey-input input-cell'><input type='text' id='loadname' name='loadname' value='"; if (isset($loadname)) { $_loadform .= HTMLEscape(autoUnescape($loadname)); } $_loadform .= "' /></td></tr>\n" . "<tr class='load-survey-row load-survey-password'><td class='load-survey-label label-cell' align='right'><label for='loadpass'>" . gT("Password") . "</label>:</td><td class='load-survey-input input-cell'><input type='password' id='loadpass' name='loadpass' value='"; if (isset($loadpass)) { $_loadform .= HTMLEscape(autoUnescape($loadpass)); } $_loadform .= "' /></td></tr>\n"; if (isset($thissurvey['usecaptcha']) && function_exists("ImageCreate") && isCaptchaEnabled('saveandloadscreen', $thissurvey['usecaptcha'])) { $_loadform .= "<tr class='load-survey-row load-survey-captcha'><td class='load-survey-label label-cell' align='right'><label for='loadsecurity'>" . gT("Security question") . "</label>:</td><td class='load-survey-input input-cell'><table class='captcha-table'><tr><td class='captcha-image' valign='middle'><img src='" . Yii::app()->getController()->createUrl('/verification/image/sid/' . (isset($surveyid) ? $surveyid : '')) . "' alt='' /></td><td class='captcha-input' valign='middle'><input type='text' size='5' maxlength='3' id='loadsecurity' name='loadsecurity' value='' alt=''/></td></tr></table></td></tr>\n"; } $_loadform .= "<tr class='load-survey-row load-survey-submit'><td class='load-survey-label label-cell'><label class='hide jshide' for='loadbutton'>" . gT("Load now") . "</label></td><td class='load-survey-input input-cell'><input type='submit' id='loadbutton' class='button' value='" . gT("Load now") . "' /></td></tr></table>\n"; // Assessments $assessmenthtml = ""; if (isset($surveyid) && !is_null($surveyid) && function_exists('doAssessment')) { $assessmentdata = doAssessment($surveyid, true); $_assessment_current_total = $assessmentdata['total']; if (stripos($line, "{ASSESSMENTS}")) { $assessmenthtml = doAssessment($surveyid, false); } } else { $_assessment_current_total = ''; } if (isset($thissurvey['googleanalyticsapikey']) && trim($thissurvey['googleanalyticsapikey']) != '') { $_googleAnalyticsAPIKey = trim($thissurvey['googleanalyticsapikey']); } else { $_googleAnalyticsAPIKey = trim(getGlobalSetting('googleanalyticsapikey')); } $_googleAnalyticsStyle = isset($thissurvey['googleanalyticsstyle']) ? $thissurvey['googleanalyticsstyle'] : '0'; $_googleAnalyticsJavaScript = ''; if ($_googleAnalyticsStyle != '' && $_googleAnalyticsStyle != 0 && $_googleAnalyticsAPIKey != '') { switch ($_googleAnalyticsStyle) { case '1': // Default Google Tracking $_googleAnalyticsJavaScript = <<<EOD <script> (function(i,s,o,g,r,a,m){ i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments) },i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '{$_googleAnalyticsAPIKey}', 'auto'); // Replace with your property ID. ga('send', 'pageview'); </script> EOD; break; case '2': // SurveyName-[SID]/[GSEQ]-GroupName - create custom GSEQ based upon page step $moveInfo = LimeExpressionManager::GetLastMoveResult(); if (is_null($moveInfo)) { $gseq = 'welcome'; } else { if ($moveInfo['finished']) { $gseq = 'finished'; } else { if (isset($moveInfo['at_start']) && $moveInfo['at_start']) { $gseq = 'welcome'; } else { if (is_null($_groupname)) { $gseq = 'printanswers'; } else { $gseq = $moveInfo['gseq'] + 1; } } } } $_trackURL = htmlspecialchars($thissurvey['name'] . '-[' . $surveyid . ']/[' . $gseq . ']-' . $_groupname); $_googleAnalyticsJavaScript = <<<EOD <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '{$_googleAnalyticsAPIKey}', 'auto'); // Replace with your property ID. ga('send', 'pageview'); ga('send', 'pageview', '{$_trackURL}'); </script> EOD; break; } } $_endtext = ''; if (isset($thissurvey['surveyls_endtext']) && trim($thissurvey['surveyls_endtext']) != '') { $_endtext = $thissurvey['surveyls_endtext']; } $sitelogo = !empty($oTemplate->siteLogo) ? '<img src="' . App()->getAssetManager()->publish($oTemplate->path . '/' . $oTemplate->siteLogo) . '"/>' : ''; // Set the array of replacement variables here - don't include curly braces $coreReplacements = array(); $coreReplacements['ACTIVE'] = isset($thissurvey['active']) && !($thissurvey['active'] != "Y"); $coreReplacements['ANSWERSCLEARED'] = gT("Answers cleared"); $coreReplacements['ASSESSMENTS'] = $assessmenthtml; $coreReplacements['ASSESSMENT_CURRENT_TOTAL'] = $_assessment_current_total; $coreReplacements['ASSESSMENT_HEADING'] = gT("Your assessment"); $coreReplacements['CHECKJAVASCRIPT'] = "<noscript><span class='warningjs'>" . gT("Caution: JavaScript execution is disabled in your browser. You may not be able to answer all questions in this survey. Please, verify your browser parameters.") . "</span></noscript>"; $coreReplacements['CLEARALL'] = $_clearall; $coreReplacements['CLEARALL_LINKS'] = $_clearalllinks; $coreReplacements['CLOSEWINDOW'] = ''; // Obsolete tag - keep this line for compatibility reaons $coreReplacements['COMPLETED'] = isset($redata['completed']) ? $redata['completed'] : ''; // global $coreReplacements['DATESTAMP'] = $_datestamp; $coreReplacements['ENDTEXT'] = $_endtext; $coreReplacements['EXPIRY'] = $_dateoutput; $coreReplacements['ADMINNAME'] = isset($thissurvey['admin']) ? $thissurvey['admin'] : ''; $coreReplacements['ADMINEMAIL'] = isset($thissurvey['adminemail']) ? $thissurvey['adminemail'] : ''; $coreReplacements['GID'] = Yii::app()->getConfig('gid', ''); // Use the gid of the question, except if we are not in question (Randomization group name) $coreReplacements['GOOGLE_ANALYTICS_API_KEY'] = $_googleAnalyticsAPIKey; $coreReplacements['GOOGLE_ANALYTICS_JAVASCRIPT'] = $_googleAnalyticsJavaScript; $coreReplacements['GROUPDESCRIPTION'] = $_groupdescription; $coreReplacements['GROUPNAME'] = $_groupname; $coreReplacements['LANG'] = App()->language; $coreReplacements['LANGUAGECHANGER'] = isset($languagechanger) ? $languagechanger : ''; // global $coreReplacements['LOADERROR'] = isset($errormsg) ? $errormsg : ''; // global $coreReplacements['LOADFORM'] = $_loadform; $coreReplacements['LOADHEADING'] = gT("Load a previously saved survey"); $coreReplacements['LOADMESSAGE'] = gT("You can load a survey that you have previously saved from this screen.") . "<br />" . gT("Type in the 'name' you used to save the survey, and the password.") . "<br />"; $coreReplacements['NAVIGATOR'] = isset($navigator) ? $navigator : ''; // global $coreReplacements['MOVEPREVBUTTON'] = isset($moveprevbutton) ? $moveprevbutton : ''; // global $coreReplacements['MOVENEXTBUTTON'] = isset($movenextbutton) ? $movenextbutton : ''; // global $coreReplacements['NOSURVEYID'] = isset($surveylist) ? $surveylist['nosid'] : ''; $coreReplacements['NUMBEROFQUESTIONS'] = $_totalquestionsAsked; $coreReplacements['PERCENTCOMPLETE'] = isset($percentcomplete) ? $percentcomplete : ''; // global $coreReplacements['PRIVACY'] = isset($privacy) ? $privacy : ''; // global $coreReplacements['PRIVACYMESSAGE'] = "<span style='font-weight:bold; font-style: italic;'>" . gT("A Note On Privacy") . "</span><br />" . gT("This survey is anonymous.") . "<br />" . gT("The record of your survey responses does not contain any identifying information about you, unless a specific survey question explicitly asked for it.") . ' ' . gT("If you used an identifying token to access this survey, please rest assured that this token will not be stored together with your responses. It is managed in a separate database and will only be updated to indicate whether you did (or did not) complete this survey. There is no way of matching identification tokens with survey responses."); $coreReplacements['QUESTION_INDEX'] = isset($questionindex) ? $questionindex : ''; $coreReplacements['QUESTION_INDEX_MENU'] = isset($questionindexmenu) ? $questionindexmenu : ''; $coreReplacements['RESTART'] = $_restart; $coreReplacements['RETURNTOSURVEY'] = $_return_to_survey; $coreReplacements['SAVE_LINKS'] = $_savelinks; $coreReplacements['SAVE'] = $_saveall; $coreReplacements['SAVEALERT'] = $_savealert; $coreReplacements['SAVEDID'] = isset($saved_id) ? $saved_id : ''; // global $coreReplacements['SAVEERROR'] = isset($errormsg) ? $errormsg : ''; // global - same as LOADERROR $coreReplacements['SAVEFORM'] = $_saveform; $coreReplacements['SAVEHEADING'] = gT("Save your unfinished survey"); $coreReplacements['SAVEMESSAGE'] = gT("Enter a name and password for this survey and click save below.") . "<br />\n" . gT("Your survey will be saved using that name and password, and can be completed later by logging in with the same name and password.") . "<br /><br />\n<span class='emailoptional'>" . gT("If you give an email address, an email containing the details will be sent to you.") . "</span><br /><br />\n" . gT("After having clicked the save button you can either close this browser window or continue filling out the survey."); $coreReplacements['SID'] = Yii::app()->getConfig('surveyID', ''); // Allways use surveyID from config $coreReplacements['SITENAME'] = isset($sitename) ? $sitename : ''; // global $coreReplacements['SITELOGO'] = $sitelogo; $coreReplacements['SUBMITBUTTON'] = $_submitbutton; $coreReplacements['SUBMITCOMPLETE'] = "<strong>" . gT("Thank you!") . "<br /><br />" . gT("You have completed answering the questions in this survey.") . "</strong><br /><br />" . gT("Click on 'Submit' now to complete the process and save your answers."); $coreReplacements['SUBMITREVIEW'] = $_strreview; $coreReplacements['SURVEYCONTACT'] = $surveycontact; $coreReplacements['SURVEYDESCRIPTION'] = isset($thissurvey['description']) ? $thissurvey['description'] : ''; $coreReplacements['SURVEYFORMAT'] = isset($surveyformat) ? $surveyformat : ''; // global $coreReplacements['SURVEYLANGUAGE'] = App()->language; $coreReplacements['SURVEYLIST'] = isset($surveylist) ? $surveylist['list'] : ''; $coreReplacements['SURVEYLISTHEADING'] = isset($surveylist) ? $surveylist['listheading'] : ''; $coreReplacements['SURVEYNAME'] = isset($thissurvey['name']) ? $thissurvey['name'] : ''; $coreReplacements['SURVEYRESOURCESURL'] = isset($thissurvey['sid']) ? Yii::app()->getConfig("uploadurl") . '/surveys/' . $thissurvey['sid'] . '/' : ''; $coreReplacements['TEMPLATECSS'] = $_templatecss; $coreReplacements['TEMPLATEJS'] = $_templatejs; $coreReplacements['TEMPLATEURL'] = $templateurl; $coreReplacements['THEREAREXQUESTIONS'] = $_therearexquestions; $coreReplacements['TOKEN'] = !$anonymized ? $_token : ''; // Silently replace TOKEN by empty string $coreReplacements['URL'] = $_linkreplace; $coreReplacements['WELCOME'] = isset($thissurvey['welcome']) ? $thissurvey['welcome'] : ''; if (!isset($replacements['QID'])) { Yii::import('application.helpers.SurveyRuntimeHelper'); $coreReplacements = array_merge($coreReplacements, SurveyRuntimeHelper::getQuestionReplacement(null)); // so $replacements overrides core values } if (!is_null($replacements) && is_array($replacements)) { $doTheseReplacements = array_merge($coreReplacements, $replacements); // so $replacements overrides core values } else { $doTheseReplacements = $coreReplacements; } // Now do all of the replacements - In rare cases, need to do 3 deep recursion, that that is default $line = LimeExpressionManager::ProcessString($line, $questionNum, $doTheseReplacements, false, 3, 1, false, true, $bStaticReplacement); return $line; }
//GET SURVEY DETAILS $bplang = new limesurvey_lang($language); if ($ishtml === true) { $aDefaultTexts = templateDefaultTexts($bplang); } else { $aDefaultTexts = templateDefaultTexts($bplang, 'unescaped'); } if (!$thissurvey[$language]['email_invite']) { if ($ishtml === true) { $thissurvey[$language]['email_invite'] = HTMLEscape($aDefaultTexts['invitation']); } else { $thissurvey[$language]['email_invite'] = $aDefaultTexts['invitation']; } } if (!$thissurvey[$language]['email_invite_subj']) { $thissurvey[$language]['email_invite_subj'] = $aDefaultTexts['invitation_subject']; } $fieldsarray["{ADMINNAME}"] = $thissurvey[$baselang]['adminname']; $fieldsarray["{ADMINEMAIL}"] = $thissurvey[$baselang]['adminemail']; $fieldsarray["{SURVEYNAME}"] = $thissurvey[$language]['name']; $fieldsarray["{SURVEYDESCRIPTION}"] = $thissurvey[$language]['description']; $fieldsarray["{EXPIRY}"] = $thissurvey[$baselang]["expiry"];
echo $row['assessment_value']; ?> ' /> </td> <?php } ?> <td> <input type='text' name='title_<?php echo $row['language']; ?> _<?php echo $row['sortorder']; ?> ' maxlength='3000' size='80' value="<?php echo HTMLEscape($row['title']); ?> " /> <?php echo getEditor("editlabel", "title_{$row['language']}_{$row['sortorder']}", "[" . $clang->gT("Label:", "js") . "](" . $row['language'] . ")", '', '', '', $action); ?> </td> <td style='text-align:center;'> <?php if ($first) { ?> <img src='<?php echo $sImageURL; ?> addanswer.png' class='btnaddanswer' alt='<?php $clang->eT("Insert a new label after this one");
</a> <a href='<?php echo $this->createUrl("/admin/responses/time/surveyid/$iSurveyId/start/$end/imit/$limit"); ?>' title='<?php $clang->eT("Show last..."); ?>'> <img name='DataEnd' align='left' src='<?php echo $sImageURL; ?>/dataend.png' alt='<?php $clang->eT("Show last.."); ?>' /> </a> <img src='<?php echo $sImageURL; ?>/separator.gif' alt='' /> <?php } ?> <form action='<?php echo $this->createUrl("/admin/responses/time/surveyid/{$iSurveyId}"); ?>' id='browseresults' method='post'> <font size='1' face='verdana'> <img src='<?php echo $sImageURL; ?>/blank.gif' width='31' height='20' alt='' /> <?php $clang->eT("Records displayed:"); ?> <input type='text' size='4' value='<?php echo $limit ?>' name='limit' id='limit' /> <?php $clang->eT("Starting from:"); ?> <input type='text' size='4' value='<?php echo $start; ?>' name='start' id='start' /> <input type='submit' value='<?php $clang->eT("Show"); ?>' /> </font> <?php if (Yii::app()->request->getPost('sql')) { ?> <input type='hidden' name='sql' value='<?php echo HTMLEscape(Yii::app()->request->getPost('sql')); ?>' /> <?php } ?> </form> </div> </div> <form action='<?php echo $this->createUrl("/admin/responses/time/surveyid/{$iSurveyId}"); ?>' id='resulttableform' method='post'> <!-- DATA TABLE --> <?php if ($fncount < 10) { ?> <table class='browsetable' style='width:100%'> <?php } else { ?> <table class='browsetable'> <?php } ?> <thead>