/** * dataentry::editdata() * Edit dataentry. * @param mixed $subaction * @param mixed $id * @param mixed $surveyid * @param mixed $language * @return */ public function editdata($subaction, $id, $surveyid, $language = '') { if ($language == '') { $language = Survey::model()->findByPk($surveyid)->language; } $surveyid = sanitize_int($surveyid); $id = sanitize_int($id); $aViewUrls = array(); if (!isset($sDataEntryLanguage)) { $sDataEntryLanguage = Survey::model()->findByPk($surveyid)->language; } $surveyinfo = getSurveyInfo($surveyid); if (Permission::model()->hasSurveyPermission($surveyid, 'responses', 'update')) { $surveytable = "{{survey_" . $surveyid . '}}'; $aData['display']['menu_bars']['browse'] = gT("Data entry"); Yii::app()->loadHelper('database'); //FIRST LETS GET THE NAMES OF THE QUESTIONS AND MATCH THEM TO THE FIELD NAMES FOR THE DATABASE $fnquery = "SELECT * FROM {{questions}}, {{groups}} g, {{surveys}} WHERE\n {{questions}}.gid=g.gid AND\n {{questions}}.language = '{$sDataEntryLanguage}' AND g.language = '{$sDataEntryLanguage}' AND\n {{questions}}.sid={{surveys}}.sid AND {{questions}}.sid='{$surveyid}'\n order by group_order, question_order"; $fnresult = dbExecuteAssoc($fnquery); $fnresult = $fnresult->readAll(); $fncount = count($fnresult); $fnrows = array(); //Create an empty array in case FetchRow does not return any rows foreach ($fnresult as $fnrow) { $fnrows[] = $fnrow; $private = $fnrow['anonymized']; $datestamp = $fnrow['datestamp']; $ipaddr = $fnrow['ipaddr']; } // Get table output into array // Perform a case insensitive natural sort on group name then question title of a multidimensional array // $fnames = (Field Name in Survey Table, Short Title of Question, Question Type, Field Name, Question Code, Predetermined Answer if exist) $fnames['completed'] = array('fieldname' => "completed", 'question' => gT("Completed"), 'type' => 'completed'); $fnames = array_merge($fnames, createFieldMap($surveyid, 'full', false, false, $sDataEntryLanguage)); // Fix private if disallowed to view token if (!Permission::model()->hasSurveyPermission($surveyid, 'tokens', 'read')) { unset($fnames['token']); } $nfncount = count($fnames) - 1; //SHOW INDIVIDUAL RECORD if ($subaction == "edit" && Permission::model()->hasSurveyPermission($surveyid, 'responses', 'update')) { $idquery = "SELECT * FROM {$surveytable} WHERE id={$id}"; $idresult = dbExecuteAssoc($idquery) or safeDie("Couldn't get individual record<br />{$idquery}<br />"); foreach ($idresult->readAll() as $idrow) { $results[] = $idrow; } } elseif ($subaction == "editsaved" && Permission::model()->hasSurveyPermission($surveyid, 'responses', 'update')) { if (isset($_GET['public']) && $_GET['public'] == "true") { $password = md5(Yii::app()->request->getParam('accesscode')); } else { $password = Yii::app()->request->getParam('accesscode'); } $svresult = SavedControl::model()->findAllByAttributes(array('sid' => $surveyid, 'identifier' => Yii::app()->request->getParam('identifier'), 'access_code' => $password)); foreach ($svresult as $svrow) { $saver['email'] = $svrow['email']; $saver['scid'] = $svrow['scid']; $saver['ip'] = $svrow['ip']; } $svresult = SavedControl::model()->findAllByAttributes(array('scid' => $saver['scid'])); foreach ($svresult as $svrow) { $responses[$svrow['fieldname']] = $svrow['value']; } // while $fieldmap = createFieldMap($surveyid, 'full', false, false, getBaseLanguageFromSurveyID($surveyid)); foreach ($fieldmap as $fm) { if (isset($responses[$fm['fieldname']])) { $results1[$fm['fieldname']] = $responses[$fm['fieldname']]; } else { $results1[$fm['fieldname']] = ""; } } $results1['id'] = ""; $results1['datestamp'] = dateShift(date("Y-m-d H:i:s"), "Y-m-d H:i:s", Yii::app()->getConfig('timeadjust')); $results1['ipaddr'] = $saver['ip']; $results[] = $results1; } $aData = array('id' => $id, 'surveyid' => $surveyid, 'subaction' => $subaction, 'part' => 'header'); $aViewUrls[] = 'dataentry_header_view'; $aViewUrls[] = 'edit'; $highlight = FALSE; unset($fnames['lastpage']); // unset timings foreach ($fnames as $fname) { if ($fname['type'] == "interview_time" || $fname['type'] == "page_time" || $fname['type'] == "answer_time") { unset($fnames[$fname['fieldname']]); $nfncount--; } } $aDataentryoutput = ''; foreach ($results as $idrow) { $fname = reset($fnames); do { if (isset($idrow[$fname['fieldname']])) { $answer = $idrow[$fname['fieldname']]; } $question = $fname['question']; $aDataentryoutput .= "\t<tr"; if ($highlight) { $aDataentryoutput .= " class='odd'"; } else { $aDataentryoutput .= " class='even'"; } $highlight = !$highlight; $aDataentryoutput .= ">\n" . "<td>" . "\n"; $aDataentryoutput .= stripJavaScript($question); $aDataentryoutput .= "</td>\n" . "<td>\n"; //$aDataentryoutput .= "\t-={$fname[3]}=-"; //Debugging info if (isset($fname['qid']) && isset($fname['type'])) { $qidattributes = getQuestionAttributeValues($fname['qid']); } switch ($fname['type']) { case "completed": // First compute the submitdate if ($private == "Y") { // In case of anonymized responses survey with no datestamp // then the the answer submitdate gets a conventional timestamp // 1st Jan 1980 $mysubmitdate = date("Y-m-d H:i", mktime(0, 0, 0, 1, 1, 1980)); // Note that the completed field only supports 17 chars (so no seconds!) } else { $mysubmitdate = dateShift(date("Y-m-d H:i:s"), "Y-m-d H:i", Yii::app()->getConfig('timeadjust')); // Note that the completed field only supports 17 chars (so no seconds!) } $completedate = empty($idrow['submitdate']) ? $mysubmitdate : $idrow['submitdate']; $selected = empty($idrow['submitdate']) ? 'N' : $completedate; $select_options = array('N' => gT('No', 'unescaped'), $completedate => gT('Yes', 'unescaped')); $aDataentryoutput .= CHtml::dropDownList('completed', $selected, $select_options, array('class' => 'form-control')); break; case "X": //Boilerplate question $aDataentryoutput .= ""; break; case "Q": case "K": $aDataentryoutput .= $fname['subquestion'] . ' '; $aDataentryoutput .= CHtml::textField($fname['fieldname'], $idrow[$fname['fieldname']]); break; case "id": $aDataentryoutput .= CHtml::tag('span', array('style' => 'font-weight: bold;'), ' ' . $idrow[$fname['fieldname']]); break; case "5": //5 POINT CHOICE radio-buttons for ($i = 1; $i <= 5; $i++) { $checked = FALSE; if ($idrow[$fname['fieldname']] == $i) { $checked = TRUE; } $aDataentryoutput .= '<span class="five-point">'; $aDataentryoutput .= CHtml::radioButton($fname['fieldname'], $checked, array('class' => '', 'value' => $i, 'id' => '5-point-choice-' . $i)); $aDataentryoutput .= '<label for="5-point-choice-' . $i . '">' . $i . '</label>'; $aDataentryoutput .= '</span> '; } break; case "D": //DATE $thisdate = ''; $dateformatdetails = getDateFormatDataForQID($qidattributes, $surveyid); if ($idrow[$fname['fieldname']] != '') { $datetimeobj = new Date_Time_Converter($idrow[$fname['fieldname']], "Y-m-d H:i:s"); $thisdate = $datetimeobj->convert($dateformatdetails['phpdate']); } else { $thisdate = ''; } if (canShowDatePicker($dateformatdetails)) { $goodchars = str_replace(array("m", "d", "y", "H", "M"), "", $dateformatdetails['dateformat']); $goodchars = "0123456789" . $goodchars[0]; $aDataentryoutput .= CHtml::textField($fname['fieldname'], $thisdate, array('class' => 'popupdate', 'size' => '12', 'onkeypress' => 'return goodchars(event,\'' . $goodchars . '\')')); $aDataentryoutput .= CHtml::hiddenField('dateformat' . $fname['fieldname'], $dateformatdetails['jsdate'], array('id' => "dateformat{$fname['fieldname']}")); // $aDataentryoutput .= "\t<input type='text' class='popupdate' size='12' name='{$fname['fieldname']}' value='{$thisdate}' onkeypress=\"return goodchars(event,'".$goodchars."')\"/>\n"; // $aDataentryoutput .= "\t<input type='hidden' name='dateformat{$fname['fieldname']}' id='dateformat{$fname['fieldname']}' value='{$dateformatdetails['jsdate']}' />\n"; } else { $aDataentryoutput .= CHtml::textField($fname['fieldname'], $thisdate); } break; case "G": //GENDER drop-down list $select_options = array('' => gT("Please choose") . '...', 'F' => gT("Female"), 'M' => gT("Male")); $aDataentryoutput .= CHtml::listBox($fname['fieldname'], $idrow[$fname['fieldname']], $select_options); break; case "L": //LIST drop-down //LIST drop-down case "!": //List (Radio) $qidattributes = getQuestionAttributeValues($fname['qid']); if (isset($qidattributes['category_separator']) && trim($qidattributes['category_separator']) != '') { $optCategorySeparator = $qidattributes['category_separator']; } else { unset($optCategorySeparator); } if (substr($fname['fieldname'], -5) == "other") { $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' />\n"; } else { $lquery = "SELECT * FROM {{answers}} WHERE qid={$fname['qid']} AND language = '{$sDataEntryLanguage}' ORDER BY sortorder, answer"; $lresult = dbExecuteAssoc($lquery); $aDataentryoutput .= "\t<select name='{$fname['fieldname']}' class='form-control'>\n" . "<option value=''"; if ($idrow[$fname['fieldname']] == "") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . gT("Please choose") . "..</option>\n"; if (!isset($optCategorySeparator)) { foreach ($lresult->readAll() as $llrow) { $aDataentryoutput .= "<option value='{$llrow['code']}'"; if ($idrow[$fname['fieldname']] == $llrow['code']) { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">{$llrow['answer']}</option>\n"; } } else { $defaultopts = array(); $optgroups = array(); foreach ($lresult->readAll() as $llrow) { list($categorytext, $answertext) = explode($optCategorySeparator, $llrow['answer']); if ($categorytext == '') { $defaultopts[] = array('code' => $llrow['code'], 'answer' => $answertext); } else { $optgroups[$categorytext][] = array('code' => $llrow['code'], 'answer' => $answertext); } } foreach ($optgroups as $categoryname => $optionlistarray) { $aDataentryoutput .= "<optgroup class=\"dropdowncategory\" label=\"" . $categoryname . "\">\n"; foreach ($optionlistarray as $optionarray) { $aDataentryoutput .= "\t<option value='{$optionarray['code']}'"; if ($idrow[$fname['fieldname']] == $optionarray['code']) { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">{$optionarray['answer']}</option>\n"; } $aDataentryoutput .= "</optgroup>\n"; } foreach ($defaultopts as $optionarray) { $aDataentryoutput .= "<option value='{$optionarray['code']}'"; if ($idrow[$fname['fieldname']] == $optionarray['code']) { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">{$optionarray['answer']}</option>\n"; } } $oquery = "SELECT other FROM {{questions}} WHERE qid={$fname['qid']} AND {{questions}}.language = '{$sDataEntryLanguage}'"; $oresult = dbExecuteAssoc($oquery) or safeDie("Couldn't get other for list question<br />" . $oquery . "<br />"); foreach ($oresult->readAll() as $orow) { $fother = $orow['other']; } if ($fother == "Y") { $aDataentryoutput .= "<option value='-oth-'"; if ($idrow[$fname['fieldname']] == "-oth-") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . gT("Other") . "</option>\n"; } $aDataentryoutput .= "\t</select>\n"; } break; case "O": //LIST WITH COMMENT drop-down/radio-button list + textarea $lquery = "SELECT * FROM {{answers}} WHERE qid={$fname['qid']} AND language = '{$sDataEntryLanguage}' ORDER BY sortorder, answer"; $lresult = dbExecuteAssoc($lquery); $aDataentryoutput .= "\t<select name='{$fname['fieldname']}' class='form-control'>\n" . "<option value=''"; if ($idrow[$fname['fieldname']] == "") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . gT("Please choose") . "..</option>\n"; foreach ($lresult->readAll() as $llrow) { $aDataentryoutput .= "<option value='{$llrow['code']}'"; if ($idrow[$fname['fieldname']] == $llrow['code']) { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">{$llrow['answer']}</option>\n"; } $fname = next($fnames); $aDataentryoutput .= "\t</select>\n" . "\t<br />\n" . "\t<textarea cols='45' rows='5' name='{$fname['fieldname']}'>" . htmlspecialchars($idrow[$fname['fieldname']]) . "</textarea>\n"; break; case "R": //RANKING TYPE QUESTION $thisqid = $fname['qid']; $currentvalues = array(); $myfname = $fname['sid'] . 'X' . $fname['gid'] . 'X' . $fname['qid']; $aDataentryoutput .= '<div id="question' . $thisqid . '" class="ranking-answers"><ul class="answers-list">'; while (isset($fname['type']) && $fname['type'] == "R" && $fname['qid'] == $thisqid) { //Let's get all the existing values into an array if ($idrow[$fname['fieldname']]) { $currentvalues[] = $idrow[$fname['fieldname']]; } $fname = next($fnames); } $ansquery = "SELECT * FROM {{answers}} WHERE language = '{$sDataEntryLanguage}' AND qid={$thisqid} ORDER BY sortorder, answer"; $ansresult = Yii::app()->db->createCommand($ansquery)->query()->readAll(); //Checked $anscount = count($ansresult); $answers = array(); foreach ($ansresult as $ansrow) { $answers[] = $ansrow; } for ($i = 1; $i <= $anscount; $i++) { $aDataentryoutput .= "\n<li class=\"select-item\">"; $aDataentryoutput .= "<label for=\"answer{$myfname}{$i}\">"; if ($i == 1) { $aDataentryoutput .= gT('First choice'); } else { $aDataentryoutput .= gT('Next choice'); } $aDataentryoutput .= "</label>"; $aDataentryoutput .= "<select name=\"{$myfname}{$i}\" id=\"answer{$myfname}{$i}\" class='form-control'>\n"; !isset($currentvalues[$i - 1]) ? $selected = " selected=\"selected\"" : ($selected = ""); $aDataentryoutput .= "\t<option value=\"\" {$selected}>" . gT('None') . "</option>\n"; foreach ($answers as $ansrow) { isset($currentvalues[$i - 1]) && $currentvalues[$i - 1] == $ansrow['code'] ? $selected = " selected=\"selected\"" : ($selected = ""); $aDataentryoutput .= "\t<option value=\"" . $ansrow['code'] . "\" {$selected}>" . flattenText($ansrow['answer']) . "</option>\n"; } $aDataentryoutput .= "</select\n"; $aDataentryoutput .= "</li>"; } $aDataentryoutput .= '</ul>'; $aDataentryoutput .= "<div style='display:none' id='ranking-{$thisqid}-maxans'>{$anscount}</div>" . "<div style='display:none' id='ranking-{$thisqid}-minans'>0</div>" . "<div style='display:none' id='ranking-{$thisqid}-name'>javatbd{$myfname}</div>"; $aDataentryoutput .= "<div style=\"display:none\">"; foreach ($answers as $ansrow) { $aDataentryoutput .= "<div id=\"htmlblock-{$thisqid}-{$ansrow['code']}\">{$ansrow['answer']}</div>"; } $aDataentryoutput .= "</div>"; $aDataentryoutput .= '</div>'; App()->getClientScript()->registerPackage('jquery-actual'); App()->getClientScript()->registerScriptFile(App()->getAssetManager()->publish(SCRIPT_PATH . 'ranking.js')); App()->getClientScript()->registerCssFile(App()->getAssetManager()->publish(dirname(Yii::app()->request->scriptFile) . '/styles-public/ranking.css')); $aDataentryoutput .= "<script type='text/javascript'>\n" . " <!--\n" . "var aRankingTranslations = {\n choicetitle: '" . gT("Your Choices", 'js') . "',\n ranktitle: '" . gT("Your Ranking", 'js') . "'\n };\n" . "function checkconditions(){};" . "\$(function() {" . " doDragDropRank({$thisqid},0,true,true);\n" . "});\n" . " -->\n" . "</script>\n"; unset($answers); $fname = prev($fnames); break; case "M": //Multiple choice checkbox $qidattributes = getQuestionAttributeValues($fname['qid']); if (trim($qidattributes['display_columns']) != '') { $dcols = $qidattributes['display_columns']; } else { $dcols = 0; } // while ($fname[3] == "M" && $question != "" && $question == $fname['type']) $thisqid = $fname['qid']; while ($fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); //$aDataentryoutput .= substr($fname['fieldname'], strlen($fname['fieldname'])-5, 5)."<br />\n"; if (substr($fname['fieldname'], -5) == "other") { $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' />\n"; } else { $aDataentryoutput .= "<div class='checkbox'>\t<input type='checkbox' class='checkboxbtn' name='{$fname['fieldname']}' id='{$fname['fieldname']}' value='Y'"; if ($idrow[$fname['fieldname']] == "Y") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " /><label for='{$fname['fieldname']}'>{$fname['subquestion']}</label></div>\n"; } $fname = next($fnames); } $fname = prev($fnames); break; case "I": //Language Switch $lquery = "SELECT * FROM {{answers}} WHERE qid={$fname['qid']} AND language = '{$sDataEntryLanguage}' ORDER BY sortorder, answer"; $lresult = dbExecuteAssoc($lquery); $slangs = Survey::model()->findByPk($surveyid)->additionalLanguages; $baselang = Survey::model()->findByPk($surveyid)->language; array_unshift($slangs, $baselang); $aDataentryoutput .= "<select name='{$fname['fieldname']}' class='form-control'>\n"; $aDataentryoutput .= "<option value=''"; if ($idrow[$fname['fieldname']] == "") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . gT("Please choose") . "..</option>\n"; foreach ($slangs as $lang) { $aDataentryoutput .= "<option value='{$lang}'"; if ($lang == $idrow[$fname['fieldname']]) { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . getLanguageNameFromCode($lang, false) . "</option>\n"; } $aDataentryoutput .= "</select>"; break; case "P": //Multiple choice with comments checkbox + text $aDataentryoutput .= "<table>\n"; while (isset($fname) && $fname['type'] == "P") { $thefieldname = $fname['fieldname']; if (substr($thefieldname, -7) == "comment") { $aDataentryoutput .= "<td><input type='text' name='{$fname['fieldname']}' size='50' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' /></td>\n" . "\t</tr>\n"; } elseif (substr($fname['fieldname'], -5) == "other") { $aDataentryoutput .= "\t<tr>\n" . "<td>\n" . "\t<input type='text' name='{$fname['fieldname']}' size='30' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' />\n" . "</td>\n" . "<td>\n"; $fname = next($fnames); $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' size='50' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' />\n" . "</td>\n" . "\t</tr>\n"; } else { $aDataentryoutput .= "\t<tr>\n" . "<td><div class='checkbox'><input type='checkbox' class='checkboxbtn' name=\"{$fname['fieldname']}\" id=\"{$fname['fieldname']}\" value='Y'"; if ($idrow[$fname['fieldname']] == "Y") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " /><label for=\"{$fname['fieldname']}\">{$fname['subquestion']}</label></div></td>\n"; } $fname = next($fnames); } $aDataentryoutput .= "</table>\n"; $fname = prev($fnames); break; case "|": //FILE UPLOAD $aDataentryoutput .= "<table>\n"; if ($fname['aid'] !== 'filecount' && isset($idrow[$fname['fieldname'] . '_filecount']) && $idrow[$fname['fieldname'] . '_filecount'] > 0) { //file metadata $metadata = json_decode($idrow[$fname['fieldname']], true); $qAttributes = getQuestionAttributeValues($fname['qid']); for ($i = 0; $i < $qAttributes['max_num_of_files'] && isset($metadata[$i]); $i++) { if ($qAttributes['show_title']) { $aDataentryoutput .= '<tr><td>Title </td><td><input type="text" class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_title_' . $i . '" name="title" size=50 value="' . htmlspecialchars($metadata[$i]["title"]) . '" /></td></tr>'; } if ($qAttributes['show_comment']) { $aDataentryoutput .= '<tr><td >Comment </td><td><input type="text" class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_comment_' . $i . '" name="comment" size=50 value="' . htmlspecialchars($metadata[$i]["comment"]) . '" /></td></tr>'; } $aDataentryoutput .= '<tr><td> File name</td><td><input class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_name_' . $i . '" name="name" size=50 value="' . htmlspecialchars(rawurldecode($metadata[$i]["name"])) . '" /></td></tr>' . '<tr><td></td><td><input type="hidden" class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_size_' . $i . '" name="size" size=50 value="' . htmlspecialchars($metadata[$i]["size"]) . '" /></td></tr>' . '<tr><td></td><td><input type="hidden" class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_ext_' . $i . '" name="ext" size=50 value="' . htmlspecialchars($metadata[$i]["ext"]) . '" /></td></tr>' . '<tr><td></td><td><input type="hidden" class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_filename_' . $i . '" name="filename" size=50 value="' . htmlspecialchars(rawurldecode($metadata[$i]["filename"])) . '" /></td></tr>'; } $aDataentryoutput .= '<tr><td></td><td><input type="hidden" id="' . $fname['fieldname'] . '" name="' . $fname['fieldname'] . '" size=50 value="' . htmlspecialchars($idrow[$fname['fieldname']]) . '" /></td></tr>'; $aDataentryoutput .= '</table>'; $aDataentryoutput .= '<script type="text/javascript"> $(function() { $(".' . $fname['fieldname'] . '").keyup(function() { var filecount = $("#' . $fname['fieldname'] . '_filecount").val(); var jsonstr = "["; var i; for (i = 0; i < filecount; i++) { if (i != 0) jsonstr += ","; jsonstr += \'{"title":"\'+$("#' . $fname['fieldname'] . '_title_"+i).val()+\'",\'; jsonstr += \'"comment":"\'+$("#' . $fname['fieldname'] . '_comment_"+i).val()+\'",\'; jsonstr += \'"size":"\'+$("#' . $fname['fieldname'] . '_size_"+i).val()+\'",\'; jsonstr += \'"ext":"\'+$("#' . $fname['fieldname'] . '_ext_"+i).val()+\'",\'; jsonstr += \'"filename":"\'+$("#' . $fname['fieldname'] . '_filename_"+i).val()+\'",\'; jsonstr += \'"name":"\'+encodeURIComponent($("#' . $fname['fieldname'] . '_name_"+i).val())+\'"}\'; } jsonstr += "]"; $("#' . $fname['fieldname'] . '").val(jsonstr); }); }); </script>'; } else { //file count $aDataentryoutput .= '<input readonly id="' . $fname['fieldname'] . '" name="' . $fname['fieldname'] . '" value ="' . htmlspecialchars($idrow[$fname['fieldname']]) . '" /></td></table>'; } break; case "N": //NUMERICAL TEXT $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='{$idrow[$fname['fieldname']]}' " . "onkeypress=\"return goodchars(event,'0123456789.,')\" />\n"; break; case "S": //SHORT FREE TEXT $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' />\n"; break; case "T": //LONG FREE TEXT $aDataentryoutput .= "\t<textarea rows='5' cols='45' name='{$fname['fieldname']}'>" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "</textarea>\n"; break; case "U": //HUGE FREE TEXT $aDataentryoutput .= "\t<textarea rows='50' cols='70' name='{$fname['fieldname']}'>" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "</textarea>\n"; break; case "Y": //YES/NO radio-buttons $aDataentryoutput .= "\t<select name='{$fname['fieldname']}' class='form-control'>\n" . "<option value=''"; if ($idrow[$fname['fieldname']] == "") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . gT("Please choose") . "..</option>\n" . "<option value='Y'"; if ($idrow[$fname['fieldname']] == "Y") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . gT("Yes") . "</option>\n" . "<option value='N'"; if ($idrow[$fname['fieldname']] == "N") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . gT("No") . "</option>\n" . "\t</select>\n"; break; case "A": //ARRAY (5 POINT CHOICE) radio-buttons $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while ($fname['qid'] == $thisqid) { $aDataentryoutput .= "\t<tr>\n" . "<td align='right'>{$fname['subquestion']}</td>\n" . "<td>\n"; for ($j = 1; $j <= 5; $j++) { $aDataentryoutput .= '<span class="five-point">'; $aDataentryoutput .= "\t<input type='radio' class='' name='{$fname['fieldname']}' id='5-point-radio-{$fname['fieldname']}' value='{$j}'"; if ($idrow[$fname['fieldname']] == $j) { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " /><label for='5-point-radio-{$fname['fieldname']}'>{$j}</label> \n"; $aDataentryoutput .= '</span>'; } $aDataentryoutput .= "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $aDataentryoutput .= "</table>\n"; $fname = prev($fnames); break; case "B": //ARRAY (10 POINT CHOICE) radio-buttons $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while ($fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td align='right'>{$fname['subquestion']}</td>\n" . "<td>\n"; for ($j = 1; $j <= 10; $j++) { $aDataentryoutput .= '<span class="ten-point">'; $aDataentryoutput .= "\t<input type='radio' class='' name='{$fname['fieldname']}' id='ten-point-{$fname['fieldname']}-{$j}' value='{$j}'"; if ($idrow[$fname['fieldname']] == $j) { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " /><label for='ten-point-{$fname['fieldname']}-{$j}'>{$j}</label> \n"; $aDataentryoutput .= '</span>'; } $aDataentryoutput .= "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case "C": //ARRAY (YES/UNCERTAIN/NO) radio-buttons $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while ($fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td align='right'>{$fname['subquestion']}</td>\n" . "<td>\n" . "\t<input type='radio' class='' name='{$fname['fieldname']}' value='Y'"; if ($idrow[$fname['fieldname']] == "Y") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />" . gT("Yes") . " \n" . "\t<input type='radio' class='' name='{$fname['fieldname']}' value='U'"; if ($idrow[$fname['fieldname']] == "U") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />" . gT("Uncertain") . " \n" . "\t<input type='radio' class='' name='{$fname['fieldname']}' value='N'"; if ($idrow[$fname['fieldname']] == "N") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />" . gT("No") . " \n" . "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case "E": //ARRAY (Increase/Same/Decrease) radio-buttons $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while ($fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td align='right'>{$fname['subquestion']}</td>\n" . "<td>\n" . "\t<input type='radio' class='' name='{$fname['fieldname']}' value='I'"; if ($idrow[$fname['fieldname']] == "I") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />Increase \n" . "\t<input type='radio' class='' name='{$fname['fieldname']}' value='S'"; if ($idrow[$fname['fieldname']] == "I") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />Same \n" . "\t<input type='radio' class='' name='{$fname['fieldname']}' value='D'"; if ($idrow[$fname['fieldname']] == "D") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />Decrease \n" . "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case "F": //ARRAY (Flexible Labels) //ARRAY (Flexible Labels) case "H": case "1": $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while (isset($fname['qid']) && $fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td>{$fname['subquestion']}"; if (isset($fname['scale'])) { $aDataentryoutput .= " (" . $fname['scale'] . ')'; } $aDataentryoutput .= "</td>\n"; $scale_id = 0; if (isset($fname['scale_id'])) { $scale_id = $fname['scale_id']; } $fquery = "SELECT * FROM {{answers}} WHERE qid='{$fname['qid']}' and scale_id={$scale_id} and language='{$sDataEntryLanguage}' order by sortorder, answer"; $fresult = dbExecuteAssoc($fquery); $aDataentryoutput .= "<td>\n"; foreach ($fresult->readAll() as $frow) { $aDataentryoutput .= "\t<input type='radio' class='' name='{$fname['fieldname']}' value='{$frow['code']}'"; if ($idrow[$fname['fieldname']] == $frow['code']) { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />" . $frow['answer'] . " \n"; } //Add 'No Answer' $aDataentryoutput .= "\t<input type='radio' class='' name='{$fname['fieldname']}' value=''"; if ($idrow[$fname['fieldname']] == '') { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />" . gT("No answer") . " \n"; $aDataentryoutput .= "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case ":": //ARRAY (Multi Flexi) (Numbers) $qidattributes = getQuestionAttributeValues($fname['qid']); if (trim($qidattributes['multiflexible_max']) != '' && trim($qidattributes['multiflexible_min']) == '') { $maxvalue = $qidattributes['multiflexible_max']; $minvalue = 1; } if (trim($qidattributes['multiflexible_min']) != '' && trim($qidattributes['multiflexible_max']) == '') { $minvalue = $qidattributes['multiflexible_min']; $maxvalue = $qidattributes['multiflexible_min'] + 10; } if (trim($qidattributes['multiflexible_min']) == '' && trim($qidattributes['multiflexible_max']) == '') { $minvalue = 1; $maxvalue = 10; } if (trim($qidattributes['multiflexible_min']) != '' && trim($qidattributes['multiflexible_max']) != '') { if ($qidattributes['multiflexible_min'] < $qidattributes['multiflexible_max']) { $minvalue = $qidattributes['multiflexible_min']; $maxvalue = $qidattributes['multiflexible_max']; } } if (trim($qidattributes['multiflexible_step']) != '') { $stepvalue = $qidattributes['multiflexible_step']; } else { $stepvalue = 1; } if ($qidattributes['multiflexible_checkbox'] != 0) { $minvalue = 0; $maxvalue = 1; $stepvalue = 1; } $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while (isset($fname['qid']) && $fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td>{$fname['subquestion1']}:{$fname['subquestion2']}</td>\n"; $aDataentryoutput .= "<td>\n"; if ($qidattributes['input_boxes'] != 0) { $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='"; if (!empty($idrow[$fname['fieldname']])) { $aDataentryoutput .= $idrow[$fname['fieldname']]; } $aDataentryoutput .= "' size=4 />"; } else { $aDataentryoutput .= "\t<select name='{$fname['fieldname']}' class='form-control'>\n"; $aDataentryoutput .= "<option value=''>...</option>\n"; for ($ii = $minvalue; $ii <= $maxvalue; $ii += $stepvalue) { $aDataentryoutput .= "<option value='{$ii}'"; if ($idrow[$fname['fieldname']] == $ii) { $aDataentryoutput .= " selected"; } $aDataentryoutput .= ">{$ii}</option>\n"; } } $aDataentryoutput .= "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case ";": //ARRAY (Multi Flexi) $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while (isset($fname['qid']) && $fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td>{$fname['subquestion1']}:{$fname['subquestion2']}</td>\n"; $aDataentryoutput .= "<td>\n"; $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='"; if (!empty($idrow[$fname['fieldname']])) { $aDataentryoutput .= $idrow[$fname['fieldname']]; } $aDataentryoutput .= "' /></td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case "token": if (Permission::model()->hasSurveyPermission($surveyid, 'tokens', 'update')) { $aDataentryoutput .= CHtml::textField($fname['fieldname'], $idrow[$fname['fieldname']]); } else { $aDataentryoutput .= CHtml::textField($fname['fieldname'], $idrow[$fname['fieldname']], array('disabled' => 'disabled')); } break; case "submitdate": case "startlanguage": default: $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='" . $idrow[$fname['fieldname']] . "' />\n"; break; } $aDataentryoutput .= " </td>\n </tr>\n"; } while ($fname = next($fnames)); } $aDataentryoutput .= "</table>\n" . "<p>\n"; $aData['sDataEntryLanguage'] = $sDataEntryLanguage; if (!Permission::model()->hasSurveyPermission($surveyid, 'responses', 'update')) { // if you are not survey owner or super admin you cannot modify responses $aDataentryoutput .= "<p><input type='button' value='" . gT("Save") . "' disabled='disabled'/></p>\n"; } elseif ($subaction == "edit" && Permission::model()->hasSurveyPermission($surveyid, 'responses', 'update')) { $aData['part'] = 'edit'; $aDataentryoutput .= $this->getController()->renderPartial('/admin/dataentry/edit', $aData, TRUE); } elseif ($subaction == "editsaved" && Permission::model()->hasSurveyPermission($surveyid, 'responses', 'update')) { $aData['part'] = 'editsaved'; $aDataentryoutput .= $this->getController()->renderPartial('/admin/dataentry/edit', $aData, TRUE); } $aDataentryoutput .= "</form>\n"; $aViewUrls['output'] = $aDataentryoutput; $aData['sidemenu']['state'] = false; $aData['menu']['edition'] = true; $aData['menu']['save'] = true; $aData['menu']['close'] = true; //$aData['menu']['savebutton'] = 'frmeditgroup'; $this->_renderWrappedTemplate('dataentry', $aViewUrls, $aData); } }
/** * dataentry::editdata() * Edit dataentry. * @param mixed $subaction * @param mixed $id * @param mixed $surveyid * @param mixed $language * @return */ public function editdata($subaction, $id, $surveyid, $language = '') { if ($language == '') { $language = Survey::model()->findByPk($surveyid)->language; } $surveyid = sanitize_int($surveyid); $id = sanitize_int($id); $aViewUrls = array(); if (!isset($sDataEntryLanguage)) { $sDataEntryLanguage = Survey::model()->findByPk($surveyid)->language; } $surveyinfo = getSurveyInfo($surveyid); if (hasSurveyPermission($surveyid, 'responses', 'update')) { $surveytable = "{{survey_" . $surveyid . '}}'; $aData['clang'] = $clang = $this->getController()->lang; $aData['display']['menu_bars']['browse'] = $clang->gT("Data entry"); Yii::app()->loadHelper('database'); //FIRST LETS GET THE NAMES OF THE QUESTIONS AND MATCH THEM TO THE FIELD NAMES FOR THE DATABASE $fnquery = "SELECT * FROM {{questions}}, {{groups}} g, {{surveys}} WHERE\n {{questions}}.gid=g.gid AND\n {{questions}}.language = '{$sDataEntryLanguage}' AND g.language = '{$sDataEntryLanguage}' AND\n {{questions}}.sid={{surveys}}.sid AND {{questions}}.sid='{$surveyid}'\n order by group_order, question_order"; $fnresult = dbExecuteAssoc($fnquery); $fnresult = $fnresult->readAll(); $fncount = count($fnresult); $fnrows = array(); //Create an empty array in case FetchRow does not return any rows foreach ($fnresult as $fnrow) { $fnrows[] = $fnrow; $private = $fnrow['anonymized']; $datestamp = $fnrow['datestamp']; $ipaddr = $fnrow['ipaddr']; } // Get table output into array // Perform a case insensitive natural sort on group name then question title of a multidimensional array // $fnames = (Field Name in Survey Table, Short Title of Question, Question Type, Field Name, Question Code, Predetermined Answers if exist) $fnames['completed'] = array('fieldname' => "completed", 'question' => $clang->gT("Completed"), 'type' => 'completed'); $fnames = array_merge($fnames, createFieldMap($surveyid, 'full', false, false, $sDataEntryLanguage)); $nfncount = count($fnames) - 1; //SHOW INDIVIDUAL RECORD if ($subaction == "edit" && hasSurveyPermission($surveyid, 'responses', 'update')) { $idquery = "SELECT * FROM {$surveytable} WHERE id={$id}"; $idresult = dbExecuteAssoc($idquery) or safeDie("Couldn't get individual record<br />{$idquery}<br />"); foreach ($idresult->readAll() as $idrow) { $results[] = $idrow; } } elseif ($subaction == "editsaved" && hasSurveyPermission($surveyid, 'responses', 'update')) { if (isset($_GET['public']) && $_GET['public'] == "true") { $password = md5(Yii::app()->request->getParam('accesscode')); } else { $password = Yii::app()->request->getParam('accesscode'); } $svresult = Saved_control::model()->findAllByAttributes(array('sid' => $surveyid, 'identifier' => Yii::app()->request->getParam('identifier'), 'access_code' => $password)); foreach ($svresult as $svrow) { $saver['email'] = $svrow['email']; $saver['scid'] = $svrow['scid']; $saver['ip'] = $svrow['ip']; } $svresult = Saved_control::model()->findAllByAttributes(array('scid' => $saver['scid'])); foreach ($svresult as $svrow) { $responses[$svrow['fieldname']] = $svrow['value']; } // while $fieldmap = createFieldMap($surveyid, 'full', false, false, getBaseLanguageFromSurveyID($surveyid)); foreach ($fieldmap as $fm) { if (isset($responses[$fm['fieldname']])) { $results1[$fm['fieldname']] = $responses[$fm['fieldname']]; } else { $results1[$fm['fieldname']] = ""; } } $results1['id'] = ""; $results1['datestamp'] = dateShift(date("Y-m-d H:i:s"), "Y-m-d H:i:s", Yii::app()->getConfig('timeadjust')); $results1['ipaddr'] = $saver['ip']; $results[] = $results1; } $aData = array('id' => $id, 'surveyid' => $surveyid, 'subaction' => $subaction, 'part' => 'header', 'clang' => $clang); $aViewUrls[] = 'dataentry_header_view'; $aViewUrls[] = 'edit'; $highlight = FALSE; unset($fnames['lastpage']); // unset timings foreach ($fnames as $fname) { if ($fname['type'] == "interview_time" || $fname['type'] == "page_time" || $fname['type'] == "answer_time") { unset($fnames[$fname['fieldname']]); $nfncount--; } } $aDataentryoutput = ''; foreach ($results as $idrow) { $fname = reset($fnames); do { if (isset($idrow[$fname['fieldname']])) { $answer = $idrow[$fname['fieldname']]; } $question = $fname['question']; $aDataentryoutput .= "\t<tr"; if ($highlight) { $aDataentryoutput .= " class='odd'"; } else { $aDataentryoutput .= " class='even'"; } $highlight = !$highlight; $aDataentryoutput .= ">\n" . "<td>" . "\n"; $aDataentryoutput .= stripJavaScript($question); $aDataentryoutput .= "</td>\n" . "<td>\n"; //$aDataentryoutput .= "\t-={$fname[3]}=-"; //Debugging info if (isset($fname['qid']) && isset($fname['type'])) { $qidattributes = getQuestionAttributeValues($fname['qid'], $fname['type']); } switch ($fname['type']) { case "completed": // First compute the submitdate if ($private == "Y") { // In case of anonymized responses survey with no datestamp // then the the answer submitdate gets a conventional timestamp // 1st Jan 1980 $mysubmitdate = date("Y-m-d H:i:s", mktime(0, 0, 0, 1, 1, 1980)); } else { $mysubmitdate = dateShift(date("Y-m-d H:i:s"), "Y-m-d H:i:s", Yii::app()->getConfig('timeadjust')); } $completedate = empty($idrow['submitdate']) ? $mysubmitdate : $idrow['submitdate']; $selected = empty($idrow['submitdate']) ? 'N' : $completedate; $select_options = array('N' => $clang->gT('No'), $completedate => $clang->gT('Yes')); $aDataentryoutput .= CHtml::dropDownList('completed', $selected, $select_options); break; case "X": //Boilerplate question $aDataentryoutput .= ""; break; case "Q": case "K": $aDataentryoutput .= $fname['subquestion'] . ' '; $aDataentryoutput .= CHtml::textField($fname['fieldname'], $idrow[$fname['fieldname']]); break; case "id": $aDataentryoutput .= CHtml::tag('span', array('style' => 'font-weight: bold;'), ' ' . $idrow[$fname['fieldname']]); break; case "5": //5 POINT CHOICE radio-buttons for ($i = 1; $i <= 5; $i++) { $checked = FALSE; if ($idrow[$fname['fieldname']] == $i) { $checked = TRUE; } $aDataentryoutput .= CHtml::radioButton($fname['fieldname'], $checked, array('class' => 'radiobtn', 'value' => $i)); $aDataentryoutput .= $i; } break; case "D": //DATE $thisdate = ''; $dateformatdetails = getDateFormatDataForQID($qidattributes, $surveyid); if ($idrow[$fname['fieldname']] != '') { $thisdate = DateTime::createFromFormat("Y-m-d H:i:s", $idrow[$fname['fieldname']])->format($dateformatdetails['phpdate']); } else { $thisdate = ''; } if (canShowDatePicker($dateformatdetails)) { $goodchars = str_replace(array("m", "d", "y", "H", "M"), "", $dateformatdetails['dateformat']); $goodchars = "0123456789" . $goodchars[0]; $aDataentryoutput .= CHtml::textField($fname['fieldname'], $thisdate, array('class' => 'popupdate', 'size' => '12', 'onkeypress' => 'return goodchars(event,\'' . $goodchars . '\')')); $aDataentryoutput .= CHtml::hiddenField('dateformat' . $fname['fieldname'], $dateformatdetails['jsdate'], array('id' => "dateformat{$fname['fieldname']}")); // $aDataentryoutput .= "\t<input type='text' class='popupdate' size='12' name='{$fname['fieldname']}' value='{$thisdate}' onkeypress=\"return goodchars(event,'".$goodchars."')\"/>\n"; // $aDataentryoutput .= "\t<input type='hidden' name='dateformat{$fname['fieldname']}' id='dateformat{$fname['fieldname']}' value='{$dateformatdetails['jsdate']}' />\n"; } else { $aDataentryoutput .= CHtml::textField($fname['fieldname'], $thisdate); } break; case "G": //GENDER drop-down list $select_options = array('' => $clang->gT("Please choose") . '...', 'F' => $clang->gT("Female"), 'G' => $clang->gT("Male")); $aDataentryoutput .= CHtml::listBox($fname['fieldname'], $idrow[$fname['fieldname']], $select_options); break; case "L": //LIST drop-down //LIST drop-down case "!": //List (Radio) $qidattributes = getQuestionAttributeValues($fname['qid']); if (isset($qidattributes['category_separator']) && trim($qidattributes['category_separator']) != '') { $optCategorySeparator = $qidattributes['category_separator']; } else { unset($optCategorySeparator); } if (substr($fname['fieldname'], -5) == "other") { $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' />\n"; } else { $lquery = "SELECT * FROM {{answers}} WHERE qid={$fname['qid']} AND language = '{$sDataEntryLanguage}' ORDER BY sortorder, answer"; $lresult = dbExecuteAssoc($lquery); $aDataentryoutput .= "\t<select name='{$fname['fieldname']}'>\n" . "<option value=''"; if ($idrow[$fname['fieldname']] == "") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . $clang->gT("Please choose") . "..</option>\n"; if (!isset($optCategorySeparator)) { foreach ($lresult->readAll() as $llrow) { $aDataentryoutput .= "<option value='{$llrow['code']}'"; if ($idrow[$fname['fieldname']] == $llrow['code']) { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">{$llrow['answer']}</option>\n"; } } else { $defaultopts = array(); $optgroups = array(); foreach ($lresult->readAll() as $llrow) { list($categorytext, $answertext) = explode($optCategorySeparator, $llrow['answer']); if ($categorytext == '') { $defaultopts[] = array('code' => $llrow['code'], 'answer' => $answertext); } else { $optgroups[$categorytext][] = array('code' => $llrow['code'], 'answer' => $answertext); } } foreach ($optgroups as $categoryname => $optionlistarray) { $aDataentryoutput .= "<optgroup class=\"dropdowncategory\" label=\"" . $categoryname . "\">\n"; foreach ($optionlistarray as $optionarray) { $aDataentryoutput .= "\t<option value='{$optionarray['code']}'"; if ($idrow[$fname['fieldname']] == $optionarray['code']) { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">{$optionarray['answer']}</option>\n"; } $aDataentryoutput .= "</optgroup>\n"; } foreach ($defaultopts as $optionarray) { $aDataentryoutput .= "<option value='{$optionarray['code']}'"; if ($idrow[$fname['fieldname']] == $optionarray['code']) { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">{$optionarray['answer']}</option>\n"; } } $oquery = "SELECT other FROM {{questions}} WHERE qid={$fname['qid']} AND {{questions}}.language = '{$sDataEntryLanguage}'"; $oresult = dbExecuteAssoc($oquery) or safeDie("Couldn't get other for list question<br />" . $oquery . "<br />"); foreach ($oresult->readAll() as $orow) { $fother = $orow['other']; } if ($fother == "Y") { $aDataentryoutput .= "<option value='-oth-'"; if ($idrow[$fname['fieldname']] == "-oth-") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . $clang->gT("Other") . "</option>\n"; } $aDataentryoutput .= "\t</select>\n"; } break; case "O": //LIST WITH COMMENT drop-down/radio-button list + textarea $lquery = "SELECT * FROM {{answers}} WHERE qid={$fname['qid']} AND language = '{$sDataEntryLanguage}' ORDER BY sortorder, answer"; $lresult = dbExecuteAssoc($lquery); $aDataentryoutput .= "\t<select name='{$fname['fieldname']}'>\n" . "<option value=''"; if ($idrow[$fname['fieldname']] == "") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . $clang->gT("Please choose") . "..</option>\n"; foreach ($lresult->readAll() as $llrow) { $aDataentryoutput .= "<option value='{$llrow['code']}'"; if ($idrow[$fname['fieldname']] == $llrow['code']) { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">{$llrow['answer']}</option>\n"; } $fname = next($fnames); $aDataentryoutput .= "\t</select>\n" . "\t<br />\n" . "\t<textarea cols='45' rows='5' name='{$fname['fieldname']}'>" . htmlspecialchars($idrow[$fname['fieldname']]) . "</textarea>\n"; break; case "R": //RANKING TYPE QUESTION $thisqid = $fname['qid']; $currentvalues = array(); $myfname = $fname['sid'] . 'X' . $fname['gid'] . 'X' . $fname['qid']; while (isset($fname['type']) && $fname['type'] == "R" && $fname['qid'] == $thisqid) { //Let's get all the existing values into an array if ($idrow[$fname['fieldname']]) { $currentvalues[] = $idrow[$fname['fieldname']]; } $fname = next($fnames); } $ansquery = "SELECT * FROM {{answers}} WHERE language = '{$sDataEntryLanguage}' AND qid={$thisqid} ORDER BY sortorder, answer"; $ansresult = dbExecuteAssoc($ansquery); $anscount = 0; $aDataentryoutput .= "\t<script type='text/javascript'>\n" . "\t<!--\n" . "function rankthis_{$thisqid}(\$code, \$value)\n" . "\t{\n" . "\t\$index=document.editresponse.CHOICES_{$thisqid}.selectedIndex;\n" . "\tfor (i=1; i<={$anscount}; i++)\n" . "{\n" . "\$b=i;\n" . "\$b += '';\n" . "\$inputname=\"RANK_{$thisqid}\"+\$b;\n" . "\$hiddenname=\"d{$myfname}\"+\$b;\n" . "\$cutname=\"cut_{$thisqid}\"+i;\n" . "document.getElementById(\$cutname).style.display='none';\n" . "if (!document.getElementById(\$inputname).value)\n" . "\t{\n" . "\tdocument.getElementById(\$inputname).value=\$value;\n" . "\tdocument.getElementById(\$hiddenname).value=\$code;\n" . "\tdocument.getElementById(\$cutname).style.display='';\n" . "\tfor (var b=document.getElementById('CHOICES_{$thisqid}').options.length-1; b>=0; b--)\n" . "{\n" . "if (document.getElementById('CHOICES_{$thisqid}').options[b].value == \$code)\n" . "\t{\n" . "\tdocument.getElementById('CHOICES_{$thisqid}').options[b] = null;\n" . "\t}\n" . "}\n" . "\ti={$anscount};\n" . "\t}\n" . "}\n" . "\tif (document.getElementById('CHOICES_{$thisqid}').options.length == 0)\n" . "{\n" . "document.getElementById('CHOICES_{$thisqid}').disabled=true;\n" . "}\n" . "\tdocument.editresponse.CHOICES_{$thisqid}.selectedIndex=-1;\n" . "\t}\n" . "function deletethis_{$thisqid}(\$text, \$value, \$name, \$thisname)\n" . "\t{\n" . "\tvar qid='{$thisqid}';\n" . "\tvar lngth=qid.length+4;\n" . "\tvar cutindex=\$thisname.substring(lngth, \$thisname.length);\n" . "\tcutindex=parseFloat(cutindex);\n" . "\tdocument.getElementById(\$name).value='';\n" . "\tdocument.getElementById(\$thisname).style.display='none';\n" . "\tif (cutindex > 1)\n" . "{\n" . "\$cut1name=\"cut_{$thisqid}\"+(cutindex-1);\n" . "\$cut2name=\"d{$myfname}\"+(cutindex);\n" . "document.getElementById(\$cut1name).style.display='';\n" . "document.getElementById(\$cut2name).value='';\n" . "}\n" . "\telse\n" . "{\n" . "\$cut2name=\"d{$myfname}\"+(cutindex);\n" . "document.getElementById(\$cut2name).value='';\n" . "}\n" . "\tvar i=document.getElementById('CHOICES_{$thisqid}').options.length;\n" . "\tdocument.getElementById('CHOICES_{$thisqid}').options[i] = new Option(\$text, \$value);\n" . "\tif (document.getElementById('CHOICES_{$thisqid}').options.length > 0)\n" . "{\n" . "document.getElementById('CHOICES_{$thisqid}').disabled=false;\n" . "}\n" . "\t}\n" . "\t//-->\n" . "\t</script>\n"; foreach ($ansresult->readAll() as $ansrow) { $answers[] = array($ansrow['code'], $ansrow['answer']); $anscount++; } //now find out how many existing values there are $chosen[] = ""; //create array if (!isset($ranklist)) { $ranklist = ""; } if (isset($currentvalues)) { $existing = count($currentvalues); } else { $existing = 0; } for ($j = 1; $j <= $anscount; $j++) { $k = $j - 1; if (isset($currentvalues) && isset($currentvalues[$k]) && $currentvalues[$k]) { foreach ($answers as $ans) { if ($ans[0] == $currentvalues[$k]) { $thiscode = $ans[0]; $thistext = $ans[1]; } } } $ranklist .= "{$j}: <input class='ranklist' id='RANK_{$thisqid}{$j}'"; if (isset($currentvalues) && isset($currentvalues[$k]) && $currentvalues[$k]) { $ranklist .= " value='" . $thistext . "'"; } $ranklist .= " onFocus=\"this.blur()\" />\n" . "<input type='hidden' id='d{$myfname}{$j}' name='{$myfname}{$j}' value='"; if (isset($currentvalues) && isset($currentvalues[$k]) && $currentvalues[$k]) { $ranklist .= $thiscode; $chosen[] = array($thiscode, $thistext); } $ranklist .= "' />\n" . "<img src='" . Yii::app()->getConfig('imageurl') . "/cut.gif' alt='" . $clang->gT("Remove this item") . "' title='" . $clang->gT("Remove this item") . "' "; if ($j != $existing) { $ranklist .= "style='display:none'"; } $ranklist .= " id='cut_{$thisqid}{$j}' onclick=\"deletethis_{$thisqid}(document.editresponse.RANK_{$thisqid}{$j}.value, document.editresponse.d{$myfname}{$j}.value, document.editresponse.RANK_{$thisqid}{$j}.id, this.id)\" /><br />\n\n"; } if (!isset($choicelist)) { $choicelist = ""; } $choicelist .= "<select class='choicelist' size='{$anscount}' name='CHOICES' id='CHOICES_{$thisqid}' onclick=\"rankthis_{$thisqid}(this.options[this.selectedIndex].value, this.options[this.selectedIndex].text)\" >\n"; foreach ($answers as $ans) { if (!in_array($ans, $chosen)) { $choicelist .= "\t<option value='{$ans[0]}'>{$ans[1]}</option>\n"; } } $choicelist .= "</select>\n"; $aDataentryoutput .= "\t<table>\n" . "<tr>\n" . "\t<td>\n" . "<strong>" . $clang->gT("Your Choices") . ":</strong><br />\n" . $choicelist . "\t</td>\n" . "\t<td align='left'>\n" . "<strong>" . $clang->gT("Your Ranking") . ":</strong><br />\n" . $ranklist . "\t</td>\n" . "</tr>\n" . "\t</table>\n" . "\t<input type='hidden' name='multi' value='{$anscount}' />\n" . "\t<input type='hidden' name='lastfield' value='"; if (isset($multifields)) { $aDataentryoutput .= $multifields; } $aDataentryoutput .= "' />\n"; $choicelist = ""; $ranklist = ""; unset($answers); $fname = prev($fnames); break; case "M": //Multiple choice checkbox $qidattributes = getQuestionAttributeValues($fname['qid']); if (trim($qidattributes['display_columns']) != '') { $dcols = $qidattributes['display_columns']; } else { $dcols = 0; } // while ($fname[3] == "M" && $question != "" && $question == $fname['type']) $thisqid = $fname['qid']; while ($fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); //$aDataentryoutput .= substr($fname['fieldname'], strlen($fname['fieldname'])-5, 5)."<br />\n"; if (substr($fname['fieldname'], -5) == "other") { $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' />\n"; } else { $aDataentryoutput .= "\t<input type='checkbox' class='checkboxbtn' name='{$fname['fieldname']}' value='Y'"; if ($idrow[$fname['fieldname']] == "Y") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />{$fname['subquestion']}<br />\n"; } $fname = next($fnames); } $fname = prev($fnames); break; case "I": //Language Switch $lquery = "SELECT * FROM {{answers}} WHERE qid={$fname['qid']} AND language = '{$sDataEntryLanguage}' ORDER BY sortorder, answer"; $lresult = dbExecuteAssoc($lquery); $slangs = Survey::model()->findByPk($surveyid)->additionalLanguages; $baselang = Survey::model()->findByPk($surveyid)->language; array_unshift($slangs, $baselang); $aDataentryoutput .= "<select name='{$fname['fieldname']}'>\n"; $aDataentryoutput .= "<option value=''"; if ($idrow[$fname['fieldname']] == "") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . $clang->gT("Please choose") . "..</option>\n"; foreach ($slangs as $lang) { $aDataentryoutput .= "<option value='{$lang}'"; if ($lang == $idrow[$fname['fieldname']]) { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . getLanguageNameFromCode($lang, false) . "</option>\n"; } $aDataentryoutput .= "</select>"; break; case "P": //Multiple choice with comments checkbox + text $aDataentryoutput .= "<table>\n"; while (isset($fname) && $fname['type'] == "P") { $thefieldname = $fname['fieldname']; if (substr($thefieldname, -7) == "comment") { $aDataentryoutput .= "<td><input type='text' name='{$fname['fieldname']}' size='50' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' /></td>\n" . "\t</tr>\n"; } elseif (substr($fname['fieldname'], -5) == "other") { $aDataentryoutput .= "\t<tr>\n" . "<td>\n" . "\t<input type='text' name='{$fname['fieldname']}' size='30' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' />\n" . "</td>\n" . "<td>\n"; $fname = next($fnames); $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' size='50' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' />\n" . "</td>\n" . "\t</tr>\n"; } else { $aDataentryoutput .= "\t<tr>\n" . "<td><input type='checkbox' class='checkboxbtn' name=\"{$fname['fieldname']}\" value='Y'"; if ($idrow[$fname['fieldname']] == "Y") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />{$fname['subquestion']}</td>\n"; } $fname = next($fnames); } $aDataentryoutput .= "</table>\n"; $fname = prev($fnames); break; case "|": //FILE UPLOAD $aDataentryoutput .= "<table>\n"; if ($fname['aid'] !== 'filecount' && isset($idrow[$fname['fieldname'] . '_filecount']) && $idrow[$fname['fieldname'] . '_filecount'] > 0) { //file metadata $metadata = json_decode($idrow[$fname['fieldname']], true); $qAttributes = getQuestionAttributeValues($fname['qid']); for ($i = 0; $i < $qAttributes['max_num_of_files'], isset($metadata[$i]); $i++) { if ($qAttributes['show_title']) { $aDataentryoutput .= '<tr><td>Title </td><td><input type="text" class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_title_' . $i . '" name="title" size=50 value="' . htmlspecialchars($metadata[$i]["title"]) . '" /></td></tr>'; } if ($qAttributes['show_comment']) { $aDataentryoutput .= '<tr><td >Comment </td><td><input type="text" class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_comment_' . $i . '" name="comment" size=50 value="' . htmlspecialchars($metadata[$i]["comment"]) . '" /></td></tr>'; } $aDataentryoutput .= '<tr><td> File name</td><td><input class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_name_' . $i . '" name="name" size=50 value="' . htmlspecialchars(rawurldecode($metadata[$i]["name"])) . '" /></td></tr>' . '<tr><td></td><td><input type="hidden" class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_size_' . $i . '" name="size" size=50 value="' . htmlspecialchars($metadata[$i]["size"]) . '" /></td></tr>' . '<tr><td></td><td><input type="hidden" class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_ext_' . $i . '" name="ext" size=50 value="' . htmlspecialchars($metadata[$i]["ext"]) . '" /></td></tr>' . '<tr><td></td><td><input type="hidden" class="' . $fname['fieldname'] . '" id="' . $fname['fieldname'] . '_filename_' . $i . '" name="filename" size=50 value="' . htmlspecialchars(rawurldecode($metadata[$i]["filename"])) . '" /></td></tr>'; } $aDataentryoutput .= '<tr><td></td><td><input type="hidden" id="' . $fname['fieldname'] . '" name="' . $fname['fieldname'] . '" size=50 value="' . htmlspecialchars($idrow[$fname['fieldname']]) . '" /></td></tr>'; $aDataentryoutput .= '</table>'; $aDataentryoutput .= '<script type="text/javascript"> $(function() { $(".' . $fname['fieldname'] . '").keyup(function() { var filecount = $("#' . $fname['fieldname'] . '_filecount").val(); var jsonstr = "["; var i; for (i = 0; i < filecount; i++) { if (i != 0) jsonstr += ","; jsonstr += \'{"title":"\'+$("#' . $fname['fieldname'] . '_title_"+i).val()+\'",\'; jsonstr += \'"comment":"\'+$("#' . $fname['fieldname'] . '_comment_"+i).val()+\'",\'; jsonstr += \'"size":"\'+$("#' . $fname['fieldname'] . '_size_"+i).val()+\'",\'; jsonstr += \'"ext":"\'+$("#' . $fname['fieldname'] . '_ext_"+i).val()+\'",\'; jsonstr += \'"filename":"\'+$("#' . $fname['fieldname'] . '_filename_"+i).val()+\'",\'; jsonstr += \'"name":"\'+encodeURIComponent($("#' . $fname['fieldname'] . '_name_"+i).val())+\'"}\'; } jsonstr += "]"; $("#' . $fname['fieldname'] . '").val(jsonstr); }); }); </script>'; } else { //file count $aDataentryoutput .= '<input readonly id="' . $fname['fieldname'] . '" name="' . $fname['fieldname'] . '" value ="' . htmlspecialchars($idrow[$fname['fieldname']]) . '" /></td></table>'; } break; case "N": //NUMERICAL TEXT $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='{$idrow[$fname['fieldname']]}' " . "onkeypress=\"return goodchars(event,'0123456789.,')\" />\n"; break; case "S": //SHORT FREE TEXT $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "' />\n"; break; case "T": //LONG FREE TEXT $aDataentryoutput .= "\t<textarea rows='5' cols='45' name='{$fname['fieldname']}'>" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "</textarea>\n"; break; case "U": //HUGE FREE TEXT $aDataentryoutput .= "\t<textarea rows='50' cols='70' name='{$fname['fieldname']}'>" . htmlspecialchars($idrow[$fname['fieldname']], ENT_QUOTES) . "</textarea>\n"; break; case "Y": //YES/NO radio-buttons $aDataentryoutput .= "\t<select name='{$fname['fieldname']}'>\n" . "<option value=''"; if ($idrow[$fname['fieldname']] == "") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . $clang->gT("Please choose") . "..</option>\n" . "<option value='Y'"; if ($idrow[$fname['fieldname']] == "Y") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . $clang->gT("Yes") . "</option>\n" . "<option value='N'"; if ($idrow[$fname['fieldname']] == "N") { $aDataentryoutput .= " selected='selected'"; } $aDataentryoutput .= ">" . $clang->gT("No") . "</option>\n" . "\t</select>\n"; break; case "A": //ARRAY (5 POINT CHOICE) radio-buttons $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while ($fname['qid'] == $thisqid) { $aDataentryoutput .= "\t<tr>\n" . "<td align='right'>{$fname['subquestion']}</td>\n" . "<td>\n"; for ($j = 1; $j <= 5; $j++) { $aDataentryoutput .= "\t<input type='radio' class='radiobtn' name='{$fname['fieldname']}' value='{$j}'"; if ($idrow[$fname['fieldname']] == $j) { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />{$j} \n"; } $aDataentryoutput .= "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $aDataentryoutput .= "</table>\n"; $fname = prev($fnames); break; case "B": //ARRAY (10 POINT CHOICE) radio-buttons $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while ($fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td align='right'>{$fname['subquestion']}</td>\n" . "<td>\n"; for ($j = 1; $j <= 10; $j++) { $aDataentryoutput .= "\t<input type='radio' class='radiobtn' name='{$fname['fieldname']}' value='{$j}'"; if ($idrow[$fname['fieldname']] == $j) { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />{$j} \n"; } $aDataentryoutput .= "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case "C": //ARRAY (YES/UNCERTAIN/NO) radio-buttons $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while ($fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td align='right'>{$fname['subquestion']}</td>\n" . "<td>\n" . "\t<input type='radio' class='radiobtn' name='{$fname['fieldname']}' value='Y'"; if ($idrow[$fname['fieldname']] == "Y") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />" . $clang->gT("Yes") . " \n" . "\t<input type='radio' class='radiobtn' name='{$fname['fieldname']}' value='U'"; if ($idrow[$fname['fieldname']] == "U") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />" . $clang->gT("Uncertain") . " \n" . "\t<input type='radio' class='radiobtn' name='{$fname['fieldname']}' value='N'"; if ($idrow[$fname['fieldname']] == "N") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />" . $clang->gT("No") . " \n" . "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case "E": //ARRAY (Increase/Same/Decrease) radio-buttons $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while ($fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td align='right'>{$fname['subquestion']}</td>\n" . "<td>\n" . "\t<input type='radio' class='radiobtn' name='{$fname['fieldname']}' value='I'"; if ($idrow[$fname['fieldname']] == "I") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />Increase \n" . "\t<input type='radio' class='radiobtn' name='{$fname['fieldname']}' value='S'"; if ($idrow[$fname['fieldname']] == "I") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />Same \n" . "\t<input type='radio' class='radiobtn' name='{$fname['fieldname']}' value='D'"; if ($idrow[$fname['fieldname']] == "D") { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />Decrease \n" . "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case "F": //ARRAY (Flexible Labels) //ARRAY (Flexible Labels) case "H": case "1": $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while (isset($fname['qid']) && $fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td>{$fname['subquestion']}"; if (isset($fname['scale'])) { $aDataentryoutput .= " (" . $fname['scale'] . ')'; } $aDataentryoutput .= "</td>\n"; $scale_id = 0; if (isset($fname['scale_id'])) { $scale_id = $fname['scale_id']; } $fquery = "SELECT * FROM {{answers}} WHERE qid='{$fname['qid']}' and scale_id={$scale_id} and language='{$sDataEntryLanguage}' order by sortorder, answer"; $fresult = dbExecuteAssoc($fquery); $aDataentryoutput .= "<td>\n"; foreach ($fresult->readAll() as $frow) { $aDataentryoutput .= "\t<input type='radio' class='radiobtn' name='{$fname['fieldname']}' value='{$frow['code']}'"; if ($idrow[$fname['fieldname']] == $frow['code']) { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />" . $frow['answer'] . " \n"; } //Add 'No Answer' $aDataentryoutput .= "\t<input type='radio' class='radiobtn' name='{$fname['fieldname']}' value=''"; if ($idrow[$fname['fieldname']] == '') { $aDataentryoutput .= " checked"; } $aDataentryoutput .= " />" . $clang->gT("No answer") . " \n"; $aDataentryoutput .= "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case ":": //ARRAY (Multi Flexi) (Numbers) $qidattributes = getQuestionAttributeValues($fname['qid']); if (trim($qidattributes['multiflexible_max']) != '' && trim($qidattributes['multiflexible_min']) == '') { $maxvalue = $qidattributes['multiflexible_max']; $minvalue = 1; } if (trim($qidattributes['multiflexible_min']) != '' && trim($qidattributes['multiflexible_max']) == '') { $minvalue = $qidattributes['multiflexible_min']; $maxvalue = $qidattributes['multiflexible_min'] + 10; } if (trim($qidattributes['multiflexible_min']) == '' && trim($qidattributes['multiflexible_max']) == '') { $minvalue = 1; $maxvalue = 10; } if (trim($qidattributes['multiflexible_min']) != '' && trim($qidattributes['multiflexible_max']) != '') { if ($qidattributes['multiflexible_min'] < $qidattributes['multiflexible_max']) { $minvalue = $qidattributes['multiflexible_min']; $maxvalue = $qidattributes['multiflexible_max']; } } if (trim($qidattributes['multiflexible_step']) != '') { $stepvalue = $qidattributes['multiflexible_step']; } else { $stepvalue = 1; } if ($qidattributes['multiflexible_checkbox'] != 0) { $minvalue = 0; $maxvalue = 1; $stepvalue = 1; } $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while (isset($fname['qid']) && $fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td>{$fname['subquestion1']}:{$fname['subquestion2']}</td>\n"; $aDataentryoutput .= "<td>\n"; if ($qidattributes['input_boxes'] != 0) { $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='"; if (!empty($idrow[$fname['fieldname']])) { $aDataentryoutput .= $idrow[$fname['fieldname']]; } $aDataentryoutput .= "' size=4 />"; } else { $aDataentryoutput .= "\t<select name='{$fname['fieldname']}'>\n"; $aDataentryoutput .= "<option value=''>...</option>\n"; for ($ii = $minvalue; $ii <= $maxvalue; $ii += $stepvalue) { $aDataentryoutput .= "<option value='{$ii}'"; if ($idrow[$fname['fieldname']] == $ii) { $aDataentryoutput .= " selected"; } $aDataentryoutput .= ">{$ii}</option>\n"; } } $aDataentryoutput .= "</td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; case ";": //ARRAY (Multi Flexi) $aDataentryoutput .= "<table>\n"; $thisqid = $fname['qid']; while (isset($fname['qid']) && $fname['qid'] == $thisqid) { $fieldn = substr($fname['fieldname'], 0, strlen($fname['fieldname'])); $aDataentryoutput .= "\t<tr>\n" . "<td>{$fname['subquestion1']}:{$fname['subquestion2']}</td>\n"; $aDataentryoutput .= "<td>\n"; $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='"; if (!empty($idrow[$fname['fieldname']])) { $aDataentryoutput .= $idrow[$fname['fieldname']]; } $aDataentryoutput .= "' /></td>\n" . "\t</tr>\n"; $fname = next($fnames); } $fname = prev($fnames); $aDataentryoutput .= "</table>\n"; break; default: //This really only applies to tokens for non-private surveys $aDataentryoutput .= "\t<input type='text' name='{$fname['fieldname']}' value='" . $idrow[$fname['fieldname']] . "' />\n"; break; } $aDataentryoutput .= "\t\t</td>\n </tr>\n"; } while ($fname = next($fnames)); } $aDataentryoutput .= "</table>\n" . "<p>\n"; $aData['sDataEntryLanguage'] = $sDataEntryLanguage; if (!hasSurveyPermission($surveyid, 'responses', 'update')) { // if you are not survey owner or super admin you cannot modify responses $aDataentryoutput .= "<p><input type='button' value='" . $clang->gT("Save") . "' disabled='disabled'/></p>\n"; } elseif ($subaction == "edit" && hasSurveyPermission($surveyid, 'responses', 'update')) { $aData['part'] = 'edit'; $aDataentryoutput .= $this->getController()->render('/admin/dataentry/edit', $aData, TRUE); } elseif ($subaction == "editsaved" && hasSurveyPermission($surveyid, 'responses', 'update')) { $aData['part'] = 'editsaved'; $aDataentryoutput .= $this->getController()->render('/admin/dataentry/edit', $aData, TRUE); } $aDataentryoutput .= "</form>\n"; $aViewUrls['output'] = $aDataentryoutput; $this->_renderWrappedTemplate('dataentry', $aViewUrls, $aData); } }
?> '><?php echo $x; ?> </option> <?php } ?> </select> <?php break; case "D": //DATE // $qidattributes = getQuestionAttributeValues($deqrow['qid'], $deqrow['type']); $dateformatdetails = getDateFormatDataForQID($qidattributes, $thissurvey); if (canShowDatePicker($dateformatdetails)) { $goodchars = str_replace(array("m", "d", "y", "H", "M"), "", $dateformatdetails['dateformat']); $goodchars = "0123456789" . $goodchars[0]; ?> <input type='text' class='popupdate' size='12' name='<?php echo $fieldname; ?> ' onkeypress="return goodchars(event,'<?php echo $goodchars; ?> ')"/> <input type='hidden' name='dateformat<?php echo $fieldname; ?> ' id='dateformat<?php echo $fieldname;