source: Dev/trunk/classes/SurveyCreationTool.php @ 23

Last change on this file since 23 was 23, checked in by fpvanagthoven, 14 years ago

Scale fixed.

File size: 12.4 KB
Line 
1<?php
2
3/**
4 * Description of SurveyTool
5 *
6 * SurveyTool is where the survey can be created.
7 *
8 */
9class SurveyCreationTool {
10
11    public function __construct() {
12        SurveyCreationTool::javascript();
13        ?>
14
15        <div id="surveyCreation"><form action="submitsurvey.php" method="post">
16                <?php
17                SurveyCreationTool::titleBox();
18                SurveyCreationTool::descriptionBox();
19                SurveyCreationTool::questionCreationForm();
20                SurveyCreationTool::addQuestionButton();
21                SurveyCreationTool::removeLastQuestionButton();
22                SurveyCreationTool::submitButton();
23                ?></form></div>
24        <?php
25    }
26
27    private static function javascript() {
28        ?>
29        <script type="text/javascript">
30            var questionCount = 1;           
31                                                                                                                   
32            function getNewQuestion()
33            {
34                var questionDiv = document.createElement("div");
35                var htmlStr =
36                    "<div id='question" + questionCount + "' class='question'>" +
37                    "<table class='questionTable'>" +
38                    "<th>Question " + questionCount + "</th>" +
39                    "<tr><td><label for='questionTitle'>Title</label></td>" +
40                    "<td><input type='text' class='questionTitle' name='questionTitle" + questionCount + "' onfocus='handleFocus(this)' size='30' value='Untitled Question' /></td></tr>" +
41                    "<tr><td><label for='questionDescription'>Description</label></td>" +
42                    "<td><input type='text' class='questionDescription' name='questionDescription" + questionCount + "' onfocus='handleFocus(this)' size='60' value='Write a question description here.' /></td>" +
43                    "<tr><td><label for='questionType'>Answer type</label></td>" +
44                    "<td><select id='" + questionCount + "' name='questionType" + questionCount + "' onchange='handleType(this)'><br />"+
45                    "<option value='text' selected='selected'>Text</option>" +
46                    "<option value='int'>Integer</option>" +
47                    "<option value='mc'>Multiple choice</option>" +
48                    "<option value='checkboxes'>Checkboxes</option>" +
49                    "<option value='scale'>Scale</option>" +
50                    "</select></td></tr>" +
51                    "</table>" +
52                    "<div id='answersDiv" + questionCount + "' class='answersDiv'></div>" +
53                    "</div>";
54                                                                                                               
55                questionDiv.innerHTML = htmlStr;
56                                                                                                               
57                return questionDiv;
58            }
59                                                                                                                   
60            function handleFocus(input)
61            {
62                if (input.clicked == null)
63                {
64                    input.value = "";
65                    input.style.color = "black";   
66                    input.clicked = true;
67                }
68            }
69                                                                                                                                                   
70            function handleBlur(input)
71            {       
72                var surveyTitle = document.getElementById('surveyTitle');
73                var surveyDescription = document.getElementById('surveyDescription');
74                                                                                                                                   
75                if (input.value == "")
76                {
77                    input.style.color = "gray";
78                    input.clicked = null;
79                                                                                                                                                           
80                    if (input == surveyTitle)
81                    {
82                        input.value = "Untitled Survey";
83                    }
84                    else if (input == surveyDescription)
85                    {
86                        input.value = "Write a helpful description for this survey here.";
87                    }
88                }                           
89            }
90                                                                                                   
91            function handleType(select)
92            {
93                var type = select.valueOf().value;
94                var answersDiv = document.getElementById("answersDiv" +  select.id);
95                answersDiv.answerCount = 1;
96                answersDiv.clicked = null;
97                                                       
98                switch (type) {
99                    case 'mc':
100                        answersDiv.innerHTML = "";
101                        addOption(select.id);
102                                                                                       
103                        break;
104                    case 'text':
105                        answersDiv.innerHTML = "";
106                        break;
107                    case 'int':   
108                        answersDiv.innerHTML = "";
109                        //min max
110                        minMax(select.id);
111                        break;
112                    case 'checkboxes':
113                        answersDiv.innerHTML = ""; 
114                        addOption(select.id);
115                        break;
116                    case 'scale':
117                        answersDiv.innerHTML = "";
118                        //what scale (min max incr)
119                        minMaxIncr(select.id);
120                        break;
121                    default:
122                        break;
123                }
124
125            }
126                                                                                   
127                                                                           
128            function addOption(questionNumber)
129            {       
130                var answersDiv = document.getElementById("answersDiv" + questionNumber);
131                var answerCount = answersDiv.answerCount;
132                var answerDiv = document.createElement("div");
133                answerDiv.className = "answerDiv";
134                                                                               
135                var htmlStr = "<input type='text' name='q" +
136                    questionNumber + "ans" + answerCount + "' value='Option " + answerCount + "' />";
137                                                       
138                if (answersDiv.clicked == null)
139                {
140                    htmlStr += "<input type='button' id='addOpt'"
141                        + " class='surveyButton' onclick='addOption(" + questionNumber + ")' value='Add Option' />" +
142                        "<input type='button' class='surveyButton' onclick='removeOption(" + questionNumber + ")' value='x' />";
143                           
144                    answersDiv.clicked = true;
145                }
146                                                                                       
147                answerDiv.innerHTML = htmlStr;
148                       
149                answerDiv.prev = answersDiv.lastAnswer; //singly linked list
150                answersDiv.lastAnswer = answerDiv;
151                                                                                       
152                answersDiv.appendChild(answerDiv);
153                answersDiv.answerCount++;
154            }
155                   
156            function removeOption(questionNumber)
157            {
158                var answersDiv = document.getElementById("answersDiv" + questionNumber);
159                       
160                if (answersDiv.lastAnswer.prev != null)
161                {
162                    answersDiv.removeChild(answersDiv.lastAnswer);
163                    answersDiv.lastAnswer = answersDiv.lastAnswer.prev;
164                    answersDiv.answerCount--;
165                }
166            }
167                                           
168            function minMax(questionNumber)
169            {
170                var answersDiv = document.getElementById("answersDiv" + questionNumber);
171                                               
172                var answerDiv = document.createElement("div");
173               
174                answerDiv.className = "answerDiv";
175                answerDiv.innerHTML = "<label for='min'>Min</label><input type='text' name='q" + questionNumber + "ans1' />" +
176                    "<label for='max'>Max</label><input type='text' name='q" + questionNumber + "ans2' />";
177                                           
178                answersDiv.appendChild(answerDiv);
179            } 
180                                           
181            function minMaxIncr(questionNumber)
182            {
183                var answersDiv = document.getElementById("answersDiv" + questionNumber);
184                                               
185                var answerDiv = document.createElement("div");
186                answerDiv.className = "answerDiv";
187                answerDiv.innerHTML = "<label>Left label</label><input type='text' name='q" + questionNumber + "ans1' />" +
188                    "<label>Right label</label><input type='text' name='q" + questionNumber + "ans2' />" +
189                    "<label>Scale count</label><input type='text' name='q" + questionNumber + "ans3' />";
190                                           
191                answersDiv.appendChild(answerDiv);
192            }         
193                                                                                                 
194                                                                                                         
195            function addQuestion()
196            {
197                var questionsDiv = document.getElementById('questionsDiv');
198                var newQuestion = getNewQuestion();
199                                       
200
201                newQuestion.prev = document.lastQuestion;
202                document.lastQuestion = newQuestion;
203
204                questionsDiv.appendChild(newQuestion);
205                questionCount++;
206            }
207                                   
208            function removeLastQuestion()
209            {
210                var questionsDiv = document.getElementById('questionsDiv');
211                                       
212                if (document.lastQuestion.prev != null)
213                {
214                    questionsDiv.removeChild(document.lastQuestion);
215                    document.lastQuestion = document.lastQuestion.prev;
216                    questionCount--; 
217                }
218                else
219                {
220                    // do nothing
221                }               
222            }
223                                 
224                                           
225                                                                                                                                                                                                                           
226        </script>
227        <?php
228    }
229
230    private static function titleBox() {
231        ?>
232        <input type="text" id="surveyTitle" name="surveyTitle" value="Untitled Survey" size="30" onblur="handleBlur(this)" onfocus="handleFocus(this)" />
233        <?php
234    }
235
236    private static function descriptionBox() {
237        ?>
238        <textarea id="surveyDescription" rows="3" cols="80" name="surveyDescription" onblur="handleBlur(this)" onfocus="handleFocus(this)">Write a helpful description for this survey here.</textarea>
239        <?php
240    }
241
242    private static function questionCreationForm() {
243        ?>
244        <div id='questionsDiv'>
245        </div>
246        <script type="text/javascript"> addQuestion(); </script>
247        <?php
248    }
249
250    private static function addQuestionButton() {
251        ?>
252        <input id="addQuestionButton" type="button" onclick="addQuestion()" value="Add New Question" class="surveyButton" />
253        <?php
254    }
255
256    private static function removeLastQuestionButton() {
257        ?>
258        <input type="button" onclick="removeLastQuestion()" value="x" class="surveyButton" />
259        <?php
260    }
261
262    private static function submitbutton() {
263        ?>
264        <input type="submit" name="submitSurvey"
265               value="Submit Survey!" class="surveyButton" id="submitSurvey"/>
266        <?php
267    }
268
269}
270?>
Note: See TracBrowser for help on using the repository browser.