Merge remote branch 'origin/xorg/maint' into xorg/master
[platal.git] / modules / survey / multiple.inc.php
1 <?php
2 /***************************************************************************
3 * Copyright (C) 2003-2011 Polytechnique.org *
4 * http://opensource.polytechnique.org/ *
5 * *
6 * This program is free software; you can redistribute it and/or modify *
7 * it under the terms of the GNU General Public License as published by *
8 * the Free Software Foundation; either version 2 of the License, or *
9 * (at your option) any later version. *
10 * *
11 * This program is distributed in the hope that it will be useful, *
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
14 * GNU General Public License for more details. *
15 * *
16 * You should have received a copy of the GNU General Public License *
17 * along with this program; if not, write to the Free Software *
18 * Foundation, Inc., *
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA *
20 ***************************************************************************/
21
22 class SurveyQuestionMultiple extends SurveyQuestion
23 {
24 public function __construct(Survey $survey)
25 {
26 parent::__construct($survey);
27 $this->type = "multiple";
28 }
29
30 protected function buildAnswer(SurveyAnswer $answer, PlDict $data)
31 {
32 $content = $data->v($this->qid);
33 $value = $content['answers'];
34 if (empty($value)) {
35 $answer->answer = null;
36 return true;
37 }
38 if ($this->parameters['subtype'] == 'radio') {
39 if (count($value) > 1) {
40 throw new Exception("You cannot select more than one answer");
41 }
42 }
43 $answers = array();
44 $answers['answers'] = array();
45 foreach ($value as $key=>$text) {
46 if (can_convert_to_integer($key)) {
47 $key = to_integer($key);
48 if ($text != $this->parameters['answers'][$key]) {
49 throw new Exception("Answer text does not match");
50 }
51 $answers['answers'][] = $key;
52 } else if ($key != 'other') {
53 throw new Exception("Unsupported answer id $key");
54 } else if (!$this->parameters['allow_other']) {
55 throw new Exception("Got 'Other' answer while not supported");
56 } else if (!isset($content['other'])) {
57 $answers['other'] = '';
58 } else {
59 $answers['other'] = $content['other'];
60 }
61 }
62 if (empty($value)) {
63 $answer->answer = null;
64 return false;
65 } else {
66 $answer->answer = $answers;
67 }
68 return true;
69 }
70 }
71
72 ?>