Save answers.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Sun, 30 Jan 2011 15:54:16 +0000 (16:54 +0100)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Sun, 30 Jan 2011 15:54:16 +0000 (16:54 +0100)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
modules/survey.php
modules/survey/multiple.inc.php
templates/survey/edit.questions.tpl
templates/survey/vote.questions.tpl

index 5a6069f..66b65c4 100644 (file)
@@ -57,6 +57,8 @@ class SurveyModule extends PLModule
         $this->setup_page($page);
         $page->changeTpl('survey/vote.tpl');
 
+        XDB::execute('delete from survey_votes');
+        XDB::execute('delete from survey_voters');
         $survey = Survey::get($name);
         if (is_null($survey)) {
             return PL_NOT_FOUND;
index e9ce0fb..c073da7 100644 (file)
@@ -30,26 +30,40 @@ class SurveyQuestionMultiple extends SurveyQuestion
     protected function buildAnswer(SurveyAnswer $answer, PlDict $data)
     {
         $content = $data->v($this->qid);
-        $value   = $content['answer'];
+        $value   = $content['answers'];
         if (empty($value)) {
             $answer->answer = null;
             return true;
         }
-        $id = to_integer($value);
-        if ($id === false) {
-            if ($value != 'other') {
-                $answer->answers = null;
-                return false;
+        if ($this->parameters['subtype'] == 'radio') {
+            if (count($value) > 1) {
+                throw new Exception("You cannot select more than one answer");
             }
-            if (@$this->parameters['allow_other']) {
-                $answer->answer = array('other' => $content['text']);
+        }
+        $answers = array();
+        $answers['answers'] = array();
+        foreach ($value as $key=>$text) {
+            if (can_convert_to_integer($key)) {
+                $key = to_integer($key);
+                if ($text != $this->parameters['answers'][$key]) {
+                    throw new Exception("Answer text does not match");
+                }
+                $answers['answers'][] = $key;
+            } else if ($key != 'other') {
+                throw new Exception("Unsupported answer id $key");
+            } else if (!$this->parameters['allow_other']) {
+                throw new Exception("Got 'Other' answer while not supported");
+            } else if (!isset($content['other'])) {
+                $answers['other'] = '';
+            } else {
+                $answers['other'] = $content['other'];
             }
+        }
+        if (empty($value)) {
+            $answer->answer = null;
+            return false;
         } else {
-            if ($id >= count($this->parameters['answers'])) {
-                $answer->answers = null;
-                return false;
-            }
-            $answer->answer = array('answer' => $id);
+            $answer->answer = $answers;
         }
         return true;
     }
index 0c3fba9..cb225ee 100644 (file)
     <div>
       Permettre la sélection de plusieurs réponses ?
       <select name="q_edit[${qid}][subtype]">
-        <option value="checkbox">Oui</option>
-        <option value="radio" selected="selected">Non</option>
+        <option value="checkbox" {{if subtype}}{{if subtype == 'checkbox'}}selected="selected"{{/if}}{{/if}}>
+          Oui
+        </option>
+        <option value="radio" {{if subtype}}{{if subtype == 'radio'}}selected="selected"{{/if}}{{/if}}>
+          Non
+        </option>
       </select>
     </div>
     <div class="add_answer">
index e8ca444..a7ad4e1 100644 (file)
   <div>
     <div><strong>${label}</strong></div>
     {{each answers}}
-      <input type="${subtype}" name="qid[${qid}][]" value="${$index}" /> ${$value}<br />
+      <input type="${subtype}" name="qid[${qid}][answers][${$index}]" value="${$value}" /> ${$value}<br />
     {{/each}}
     {{if allow_other}}
-      <input type="${subtype}" name="qid[${qid}][other][checked]" value="1" /> Autre, préciser&nbsp;:
-      <input type="text" name="qid[${qid}][other][text]" />
+      <input type="${subtype}" name="qid[${qid}][answers][other]" value="other" /> Autre, préciser&nbsp;:
+      <input type="text" name="qid[${qid}][other]" />
     {{/if}}
   </div>
 </script>