diff --git a/application/controllers/admin/DataEntry.php b/application/controllers/admin/DataEntry.php index b78c00bf284..7d45fa79153 100644 --- a/application/controllers/admin/DataEntry.php +++ b/application/controllers/admin/DataEntry.php @@ -615,31 +615,43 @@ public function editdata($subaction, $id, $surveyid) $nfncount--; } } + + $questionTypes = QuestionType::modelsAttributes(); $aDataentryoutput = ''; foreach ($results as $idrow) { $fname = reset($fnames); do { $question = $fname['question']; + $questionTypeClass = isset($questionTypes[$fname['type']]) ? $questionTypes[$fname['type']]['class'] : ''; $aDataentryoutput .= "\t" - . "\n"; + $aDataentryoutput .= ">\n"; + // First column (Question) + $aDataentryoutput .= ""; $aDataentryoutput .= stripJavaScript($question); - $aDataentryoutput .= "\n" - . "\n"; + $aDataentryoutput .= "\n"; + // Second column (Answer) + $aDataentryoutput .= "\n"; //$aDataentryoutput .= "\t-={$fname[3]}=-"; //Debugging info $qidattributes = []; if (isset($fname['qid']) && isset($fname['type'])) { $qidattributes = QuestionAttribute::model()->getQuestionAttributes($fname['qid']); } - switch ($fname['type']) { + /** @var array */ + $questionInputs = []; + /** @var array "Unseen" status for each field. */ + $unseenStatus = [ + $fname['fieldname'] => !isset($idrow[$fname['fieldname']]) + ]; + $answerWrapperClass = ''; + $fieldType = $fname['type']; + switch ($fieldType) { case "completed": $selected = (empty($idrow['submitdate'])) ? 'N' : 'Y'; $select_options = array( @@ -651,20 +663,25 @@ public function editdata($subaction, $id, $surveyid) break; case Question::QT_X_TEXT_DISPLAY: //Boilerplate question - $aDataentryoutput .= ""; + // We add an empty entry here so the "Unseen" checkbox is displayed. + // Although a value can't be entered, there is still a difference between + // Text Display questions shown and not shown. + $questionInputs[$fname['fieldname']] = ""; break; case Question::QT_Q_MULTIPLE_SHORT_TEXT: - $aDataentryoutput .= $fname['subquestion'] . ' '; - $aDataentryoutput .= CHtml::textField($fname['fieldname'], $idrow[$fname['fieldname']]); + $questionInput = $fname['subquestion'] . ' '; + $questionInput .= CHtml::textField($fname['fieldname'], $idrow[$fname['fieldname']]); + $questionInputs[$fname['fieldname']] = $questionInput; break; case Question::QT_K_MULTIPLE_NUMERICAL: - $aDataentryoutput .= $fname['subquestion'] . ' '; + $questionInput = $fname['subquestion'] . ' '; /* Fix DB DECIMAL type */ $value = $idrow[$fname['fieldname']]; if (strpos((string) $value, ".")) { $value = rtrim(rtrim((string) $value, "0"), "."); } - $aDataentryoutput .= CHtml::textField($fname['fieldname'], $value, array('pattern' => "[-]?([0-9]{0,20}([\.][0-9]{0,10})?)?",'title' => gT("Only numbers may be entered in this field."))); + $questionInput .= CHtml::textField($fname['fieldname'], $value, array('pattern' => "[-]?([0-9]{0,20}([\.][0-9]{0,10})?)?",'title' => gT("Only numbers may be entered in this field."))); + $questionInputs[$fname['fieldname']] = $questionInput; break; case "id": $aDataentryoutput .= CHtml::tag('span', array('style' => 'font-weight: bold;'), ' ' . $idrow[$fname['fieldname']]); @@ -673,16 +690,24 @@ public function editdata($subaction, $id, $surveyid) $aDataentryoutput .= CHtml::tag('span', array(), ' ' . $idrow[$fname['fieldname']]); break; case Question::QT_5_POINT_CHOICE: //5 POINT CHOICE radio-buttons + $questionInput = ''; for ($i = 1; $i <= 5; $i++) { $checked = false; if ($idrow[$fname['fieldname']] == $i) { $checked = true; } - $aDataentryoutput .= ''; - $aDataentryoutput .= CHtml::radioButton($fname['fieldname'], $checked, array('class' => '', 'value' => $i, 'id' => '5-point-choice-' . $i)); - $aDataentryoutput .= ''; - $aDataentryoutput .= ''; + $questionInput .= ''; + $questionInput .= CHtml::radioButton($fname['fieldname'], $checked, array('class' => '', 'value' => $i, 'id' => '5-point-choice-' . $i)); + $questionInput .= ''; + $questionInput .= ' '; + } + //Add 'No Answer' + $questionInput .= " 'return window.LS.goodchars(event,\'' . $goodchars . '\')' ) ); - $aDataentryoutput .= CHtml::hiddenField( + $questionInput .= CHtml::hiddenField( 'dateformat' . $fname['fieldname'], $dateformatdetails['jsdate'], array('id' => "dateformat{$fname['fieldname']}") ); + $questionInputs[$fname['fieldname']] = $questionInput; } else { if ($datetimeobj) { $thisdate = $datetimeobj->format("Y-m-d\TH:i"); } - $aDataentryoutput .= CHtml::dateTimeLocalField($fname['fieldname'], $thisdate); + $questionInputs[$fname['fieldname']] = CHtml::dateTimeLocalField($fname['fieldname'], $thisdate); } break; case Question::QT_G_GENDER: //GENDER drop-down list @@ -728,7 +754,7 @@ public function editdata($subaction, $id, $surveyid) 'F' => gT("Female"), 'M' => gT("Male") ); - $aDataentryoutput .= CHtml::listBox($fname['fieldname'], $idrow[$fname['fieldname']], $select_options); + $questionInputs[$fname['fieldname']] = CHtml::listBox($fname['fieldname'], $idrow[$fname['fieldname']], $select_options); break; case Question::QT_L_LIST: //LIST drop-down case Question::QT_EXCLAMATION_LIST_DROPDOWN: //List (Radio) @@ -740,23 +766,24 @@ public function editdata($subaction, $id, $surveyid) } if (substr((string) $fname['fieldname'], -5) == "other") { - $aDataentryoutput .= "\t\n"; } else { $lresult = Answer::model()->with('answerl10ns')->findAll(array('condition' => 'qid =:qid AND language = :language', 'params' => array('qid' => $fname['qid'], 'language' => $sDataEntryLanguage))); - $aDataentryoutput .= "\t\n"; + $questionInput .= "\t\n"; + $questionInputs[$fname['fieldname']] = $questionInput; } break; case Question::QT_O_LIST_WITH_COMMENT: //LIST WITH COMMENT drop-down/radio-button list + textarea $lresult = Answer::model()->findAll("qid={$fname['qid']}"); - $aDataentryoutput .= "\t\n" . "\n"; foreach ($lresult as $llrow) { - $aDataentryoutput .= "