Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • Dev/trunk/classes/SurveyCreationTool.php

    r30 r20  
    99class SurveyCreationTool {
    1010
    11     private $survey;
    12     private $timeStamp;
    13 
    14     public function __construct($survey = null, $timeStamp = null) {
    15         $this->survey = $survey;
    16         $this->timeStamp = $timeStamp;
    17 
    18         if( isset($this->survey->id))
    19             SurveyCreationTool::javascript($this->survey->id);
    20         else
    21             SurveyCreationTool::javascript();
    22         ?>
    23 
    24         <div id="surveyCreation"><form id="survey" action="submitsurvey.php" method="post">
     11    public function __construct() {
     12        SurveyCreationTool::javascript();
     13        ?>
     14
     15        <div id="surveyCreation"><form action="submitsurvey.php" method="post">
    2516                <?php
    26                 $this->surveyHead();
    27                 $this->questionCreationForm();
     17                SurveyCreationTool::titleBox();
     18                SurveyCreationTool::descriptionBox();
     19                SurveyCreationTool::questionCreationForm();
    2820                SurveyCreationTool::addQuestionButton();
    2921                SurveyCreationTool::removeLastQuestionButton();
     
    3325    }
    3426
    35     private static function javascript($id = null) {
     27    private static function javascript() {
    3628        ?>
    3729        <script type="text/javascript">
    38             /* autosave every 3 minutes */
    39             setTimeout("save('<?php echo $id; ?>')", 180000);
    40                                                                            
    41             var questionCount = 1;         
    42                                                                                                                                                                                                                    
    43             function getNewQuestion(title, description)
    44             {
    45                 if (title != null)
    46                     var title = title;
    47                 else
    48                     var title = 'Untitled Question';
    49                
    50                 if (description != null)
    51                     var description = description;
    52                 else
    53                     var description = 'Write a question description here.';
    54                                    
     30            var questionCount = 1;           
     31                                                                                                                   
     32            function getNewQuestion()
     33            {
    5534                var questionDiv = document.createElement("div");
    5635                var htmlStr =
     
    5938                    "<th>Question " + questionCount + "</th>" +
    6039                    "<tr><td><label for='questionTitle'>Title</label></td>" +
    61                     "<td><input type='text' class='questionTitle' name='questionTitle" + questionCount + "' onfocus='handleFocus(this)' size='30' value='" + title + "' /></td></tr>" +
     40                    "<td><input type='text' class='questionTitle' name='questionTitle" + questionCount + "' size='30' value='Untitled Question' /></td></tr>" +
    6241                    "<tr><td><label for='questionDescription'>Description</label></td>" +
    63                     "<td><input type='text' class='questionDescription' name='questionDescription" + questionCount + "' onfocus='handleFocus(this)' size='60' value='" + description + "' /></td>" +
     42                    "<td><input type='text' class='questionDescription' name='questionDescription" + questionCount + "' size='60' value='Write a question description here.' /></td>" +
    6443                    "<tr><td><label for='questionType'>Answer type</label></td>" +
    6544                    "<td><select id='" + questionCount + "' name='questionType" + questionCount + "' onchange='handleType(this)'><br />"+
     
    7150                    "</select></td></tr>" +
    7251                    "</table>" +
    73                     "<div id='answersDiv" + questionCount + "' class='answersDiv'></div>" +
     52                    "<div id='answersDiv" + questionCount + "'></div>" +
    7453                    "</div>";
    75                                                                                                                                                                                                                
     54                                                                                                               
    7655                questionDiv.innerHTML = htmlStr;
    77                                                                                                                                                                                                                
     56                                                                                                               
    7857                return questionDiv;
    7958            }
    80                                                                                                                                                                                                                    
     59                                                                                                                   
    8160            function handleFocus(input)
    8261            {
     
    8867                }
    8968            }
    90                                                                                                                                                                                                                                                    
     69                                                                                                                                                   
    9170            function handleBlur(input)
    9271            {       
    9372                var surveyTitle = document.getElementById('surveyTitle');
    9473                var surveyDescription = document.getElementById('surveyDescription');
    95                                                                                                                                                                                                                                    
     74                                                                                                                                   
    9675                if (input.value == "")
    9776                {
    9877                    input.style.color = "gray";
    9978                    input.clicked = null;
    100                                                                                                                                                                                                                                                            
     79                                                                                                                                                           
    10180                    if (input == surveyTitle)
    10281                    {
     
    10988                }                           
    11089            }
    111                                                                                                                                                                                                    
     90                                                                                                   
    11291            function handleType(select)
    11392            {
     
    11695                answersDiv.answerCount = 1;
    11796                answersDiv.clicked = null;
    118                                                                                                                                                        
     97                                                       
    11998                switch (type) {
    12099                    case 'mc':
    121100                        answersDiv.innerHTML = "";
    122101                        addOption(select.id);
    123                                                                                                                                                                                        
     102                                                                                       
    124103                        break;
    125104                    case 'text':
     
    145124
    146125            }
    147                                                                                                                                                                                    
    148                                                                                                                                                                            
     126                                                                                   
     127                                                                           
    149128            function addOption(questionNumber)
    150129            {       
     
    153132                var answerDiv = document.createElement("div");
    154133                answerDiv.className = "answerDiv";
    155                                                                                                                                                                                
     134                                                                               
    156135                var htmlStr = "<input type='text' name='q" +
    157136                    questionNumber + "ans" + answerCount + "' value='Option " + answerCount + "' />";
    158                                                                                                                                                        
     137                                                       
    159138                if (answersDiv.clicked == null)
    160139                {
     
    162141                        + " class='surveyButton' onclick='addOption(" + questionNumber + ")' value='Add Option' />" +
    163142                        "<input type='button' class='surveyButton' onclick='removeOption(" + questionNumber + ")' value='x' />";
    164                                                                                                                            
     143                           
    165144                    answersDiv.clicked = true;
    166145                }
    167                                                                                                                                                                                       
     146                                                                                       
    168147                answerDiv.innerHTML = htmlStr;
    169                                                                                                                        
     148                       
    170149                answerDiv.prev = answersDiv.lastAnswer; //singly linked list
    171150                answersDiv.lastAnswer = answerDiv;
    172                                                                                                                                                                                       
     151                                                                                       
    173152                answersDiv.appendChild(answerDiv);
    174153                answersDiv.answerCount++;
    175154            }
    176                                                                                                                    
     155                   
    177156            function removeOption(questionNumber)
    178157            {
    179158                var answersDiv = document.getElementById("answersDiv" + questionNumber);
    180                                                                                                                       
     159                       
    181160                if (answersDiv.lastAnswer.prev != null)
    182161                {
     
    186165                }
    187166            }
    188                                                                                                                                            
     167                                           
    189168            function minMax(questionNumber)
    190169            {
    191170                var answersDiv = document.getElementById("answersDiv" + questionNumber);
    192                                                                                                                                               
     171                                               
    193172                var answerDiv = document.createElement("div");
    194                                                                                                                
    195173                answerDiv.className = "answerDiv";
    196                 answerDiv.innerHTML = "<label for='min'>Min</label><input type='text' name='q" + questionNumber + "ans1' />" +
    197                     "<label for='max'>Max</label><input type='text' name='q" + questionNumber + "ans2' />";
    198                                                                                                                                           
     174                answerDiv.innerHTML = "<label for='min'>Min</label><input type='text' name='min" + questionNumber + "' />" +
     175                    "<label for='max'>Max</label><input type='text' name='max" + questionNumber + "' />";
     176                                           
    199177                answersDiv.appendChild(answerDiv);
    200178            } 
    201                                                                                                                                            
     179                                           
    202180            function minMaxIncr(questionNumber)
    203181            {
    204                 var answersDiv = document.getElementById("answersDiv" + questionNumber);
    205                                                                                                                                                
     182                minMax(questionNumber);
     183                var answersDiv = document.getElementById("answersDiv" + questionNumber);
     184                                               
    206185                var answerDiv = document.createElement("div");
    207186                answerDiv.className = "answerDiv";
    208                 answerDiv.innerHTML = "<label>Left label</label><input type='text' name='q" + questionNumber + "ans1' />" +
    209                     "<label>Right label</label><input type='text' name='q" + questionNumber + "ans2' />" +
    210                     "<label>Scale count</label><input type='text' name='q" + questionNumber + "ans3' />" +
    211                     "<div id='inputCheckFeedback'" + questionNumber + "";
    212                                                                                                                                            
     187                answerDiv.innerHTML = "<label for='incr'>Increment by</label><input type='text' name='incr" + questionNumber + "' />";
     188                                           
    213189                answersDiv.appendChild(answerDiv);
    214190            }         
    215                                                                                                                                                                                                 
    216                                                                                                                                                                                                         
    217             function addQuestion(title, description)
     191                                                                                                 
     192                                                                                                         
     193            function addQuestion()
    218194            {
    219195                var questionsDiv = document.getElementById('questionsDiv');
    220                 var newQuestion = getNewQuestion(title, description);
    221                                                                                                                                        
     196                var newQuestion = getNewQuestion();
     197                                       
    222198
    223199                newQuestion.prev = document.lastQuestion;
     
    227203                questionCount++;
    228204            }
    229                                                                                                                                    
     205                                   
    230206            function removeLastQuestion()
    231207            {
    232208                var questionsDiv = document.getElementById('questionsDiv');
    233                                                                                                                                        
     209                                       
    234210                if (document.lastQuestion.prev != null)
    235211                {
     
    243219                }               
    244220            }
    245                                                                                                              
    246             function save(surveyID)
    247             {
    248                 var form = document.getElementById('survey');
    249                 var questionsDiv = document.getElementById('questionsDiv');
    250                 form.action = "surveycreation.php";
    251                                                                                
    252                 /* extra time stamp */
    253                 var date = new Date();
    254                 var minutes = date.getUTCMinutes();
    255                 if (minutes < 10)
    256                     minutes = "0" + minutes;
    257                 var timeStamp = date.getHours() + ":" + minutes;
    258                 var timeStampInput = document.createElement("input");
    259                 timeStampInput.name = "timeStamp";
    260                 timeStampInput.value = timeStamp;
    261                 timeStampInput.type = "hidden";
    262                                    
    263                 var surveyIDInput = document.createElement("input");
    264                 surveyIDInput.name = "surveyID";
    265                 surveyIDInput.value = surveyID;
    266                 surveyIDInput.type = "hidden";
    267                                                              
    268                 questionsDiv.appendChild(timeStampInput);
    269                 questionsDiv.appendChild(surveyIDInput);
    270                 form.submit();
    271             }
    272                                                                                                                                            
    273                                                                                                                                                                                                                                                                                                                            
     221                                 
     222                                           
     223                                                                                                                                                                                                                           
    274224        </script>
    275225        <?php
    276226    }
    277227
    278     private function surveyHead() {
    279         ?><div id="surveyHead">
    280         <?php
    281         $this->titleBox();
    282         $this->saveSurvey();
    283         $this->descriptionBox();
    284         ?></div>
    285         <?php
    286     }
    287 
    288     private function titleBox() {
    289         if (isset($this->survey->title))
    290             $value = $this->survey->title;
    291         else
    292             $value = 'Untitled Survey';
    293         ?>
    294         <input type="text" id="surveyTitle" name="surveyTitle" value="<?php echo $value ?>" onblur="handleBlur(this)" onfocus="handleFocus(this)" />
    295         <?php
    296     }
    297 
    298     private function saveSurvey() {
    299         if (isset($this->timeStamp))
    300             echo "<div id='timeStamp'>Last saved " . $this->timeStamp . '</div>';
    301         if (isset($this->survey->id))
    302             $id = $this->survey->id;
    303         else
    304             $id = null;
    305         ?>
    306         <input id="surveySaveButton" type="button" onclick="save('<?php echo $id; ?>')" class='surveyButton' value='Save' />
    307         <?php
    308     }
    309 
    310     private function descriptionBox() {
    311         if (isset($this->survey->description))
    312             $value = $this->survey->description;
    313         else
    314             $value = 'Write a helpful description for this survey here.';
    315         ?>
    316         <textarea id="surveyDescription" name="surveyDescription" onblur="handleBlur(this)" onfocus="handleFocus(this)"><?php echo $value; ?></textarea>
    317         <?php
    318     }
    319 
    320     private function questionCreationForm() {
     228    private static function titleBox() {
     229        ?>
     230        <input type="text" id="surveyTitle" name="surveyTitle" value="Untitled Survey" size="30" onblur="handleBlur(this)" onfocus="handleFocus(this)" />
     231        <?php
     232    }
     233
     234    private static function descriptionBox() {
     235        ?>
     236        <textarea id="surveyDescription" rows="3" cols="80" name="surveyDescription" onblur="handleBlur(this)" onfocus="handleFocus(this)">Write a helpful description for this survey here.</textarea>
     237        <?php
     238    }
     239
     240    private static function questionCreationForm() {
    321241        ?>
    322242        <div id='questionsDiv'>
    323243        </div>
    324         <?php
    325         if (isset($this->survey)) {
    326             foreach ($this->survey->questions as $question) {
    327                 ?>
    328                 <script type="text/javascript"> addQuestion('<?php echo $question->title; ?>', '<?php echo $question->description; ?>');
    329                 </script>
    330                 <?php
    331             }
    332         } else {
    333             ?>
    334             <script type="text/javascript"> addQuestion();</script>
    335             <?php
    336         }
     244        <script type="text/javascript"> addQuestion(); </script>
     245        <?php
    337246    }
    338247
Note: See TracChangeset for help on using the changeset viewer.