Changeset 32 for Dev


Ignore:
Timestamp:
07/21/11 18:24:53 (14 years ago)
Author:
fpvanagthoven
Message:

Survey now gets fully rebuilt. Minor user interaction issues.

Location:
Dev/trunk
Files:
3 edited

Legend:

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

    r29 r32  
    1515    public $type;
    1616    public $description;
    17     public $answers;
     17    public $answers; // format answers['#']
    1818   
    1919    public function __construct($title, $type, $description = null)
  • Dev/trunk/classes/SurveyCreationTool.php

    r30 r32  
    1616        $this->timeStamp = $timeStamp;
    1717
    18         if( isset($this->survey->id))
     18        if (isset($this->survey->id))
    1919            SurveyCreationTool::javascript($this->survey->id);
    2020        else
     
    3838            /* autosave every 3 minutes */
    3939            setTimeout("save('<?php echo $id; ?>')", 180000);
    40                                                                            
     40                                                                                                                                                   
    4141            var questionCount = 1;         
    42                                                                                                                                                                                                                    
     42                                                                                                                                                                                                                                                                                           
    4343            function getNewQuestion(title, description)
    4444            {
     
    4747                else
    4848                    var title = 'Untitled Question';
    49                
     49                                                                                       
    5050                if (description != null)
    5151                    var description = description;
    5252                else
    5353                    var description = 'Write a question description here.';
    54                                    
     54                                                                                                           
    5555                var questionDiv = document.createElement("div");
    5656                var htmlStr =
     
    7373                    "<div id='answersDiv" + questionCount + "' class='answersDiv'></div>" +
    7474                    "</div>";
    75                                                                                                                                                                                                                
     75                                                                                                                                                                                                                                                                                       
    7676                questionDiv.innerHTML = htmlStr;
    77                                                                                                                                                                                                                
     77                                                                                                                                                                                                                                                                                       
    7878                return questionDiv;
    7979            }
    80                                                                                                                                                                                                                    
     80                                                                                                                                                                                                                                                                                           
    8181            function handleFocus(input)
    8282            {
     
    8888                }
    8989            }
    90                                                                                                                                                                                                                                                    
     90                                                                                                                                                                                                                                                                                                                           
    9191            function handleBlur(input)
    9292            {       
    9393                var surveyTitle = document.getElementById('surveyTitle');
    9494                var surveyDescription = document.getElementById('surveyDescription');
    95                                                                                                                                                                                                                                    
     95                                                                                                                                                                                                                                                                                                           
    9696                if (input.value == "")
    9797                {
    9898                    input.style.color = "gray";
    9999                    input.clicked = null;
    100                                                                                                                                                                                                                                                            
     100                                                                                                                                                                                                                                                                                                                                   
    101101                    if (input == surveyTitle)
    102102                    {
     
    109109                }                           
    110110            }
    111                                                                                                                                                                                                    
    112             function handleType(select)
    113             {
     111                                                                                                                                                                                                                                                                           
     112            function handleType(select, answers)
     113            {
     114                var numQ = select.id; // questionNumber
    114115                var type = select.valueOf().value;
    115                 var answersDiv = document.getElementById("answersDiv" +  select.id);
     116                var answersDiv = document.getElementById("answersDiv" + numQ );
    116117                answersDiv.answerCount = 1;
    117118                answersDiv.clicked = null;
    118                                                                                                                                                        
     119                                                                                                                                                                                                                               
    119120                switch (type) {
    120121                    case 'mc':
    121122                        answersDiv.innerHTML = "";
    122                         addOption(select.id);
    123                                                                                                                                                                                        
     123                        if (answers != null)
     124                        {
     125                            for (var i = 1; i < answers.length; i++)
     126                            {
     127                                addOption(numQ, answers[i]);
     128                            }
     129                        }
     130                        else
     131                            addOption(numQ);
     132                                                                                                                                                                                                                                                               
    124133                        break;
    125134                    case 'text':
     
    128137                    case 'int':   
    129138                        answersDiv.innerHTML = "";
     139                                                                                       
    130140                        //min max
    131                         minMax(select.id);
     141                        if (answers != null)
     142                            minMax(numQ, answers[1], answers[2]);
     143                        else
     144                            minMax(numQ);
    132145                        break;
    133146                    case 'checkboxes':
    134                         answersDiv.innerHTML = ""; 
    135                         addOption(select.id);
     147                        answersDiv.innerHTML = "";
     148                        if (answers != null)
     149                        {
     150                            for (var i = 1; i < answers.length; i++)
     151                            {
     152                                addOption(numQ, answers[i]);
     153                            }
     154                        }
     155                        else
     156                            addOption(numQ);
    136157                        break;
    137158                    case 'scale':
    138159                        answersDiv.innerHTML = "";
    139160                        //what scale (min max incr)
    140                         minMaxIncr(select.id);
     161                        if (answers != null)
     162                            minMaxIncr(numQ, answers[1], answers[2], answers[3]);
     163                        else
     164                            minMaxIncr(numQ);
    141165                        break;
    142166                    default:
     
    145169
    146170            }
    147                                                                                                                                                                                    
    148                                                                                                                                                                            
    149             function addOption(questionNumber)
     171                                                                                                                                                                                                                                                           
     172                                                                                                                                                                                                                                                   
     173            function addOption(questionNumber, optionStr)
    150174            {       
    151175                var answersDiv = document.getElementById("answersDiv" + questionNumber);
    152176                var answerCount = answersDiv.answerCount;
    153177                var answerDiv = document.createElement("div");
     178                       
     179                if (optionStr == null)
     180                    var optionStr = "Option " + answerCount;
     181                       
     182                       
    154183                answerDiv.className = "answerDiv";
    155                                                                                                                                                                                
     184                                                                                                                                                                                                                                                       
    156185                var htmlStr = "<input type='text' name='q" +
    157                     questionNumber + "ans" + answerCount + "' value='Option " + answerCount + "' />";
    158                                                                                                                                                        
     186                    questionNumber + "ans" + answerCount + "' value='" + optionStr + "' />";
     187                                                                                                                                                                                                                               
    159188                if (answersDiv.clicked == null)
    160189                {
     
    162191                        + " class='surveyButton' onclick='addOption(" + questionNumber + ")' value='Add Option' />" +
    163192                        "<input type='button' class='surveyButton' onclick='removeOption(" + questionNumber + ")' value='x' />";
    164                                                                                                                            
     193                                                                                                                                                                                                   
    165194                    answersDiv.clicked = true;
    166195                }
    167                                                                                                                                                                                        
     196                                                                                                                                                                                                                                                              
    168197                answerDiv.innerHTML = htmlStr;
    169                                                                                                                        
     198                                                                                                                                                                                               
    170199                answerDiv.prev = answersDiv.lastAnswer; //singly linked list
    171200                answersDiv.lastAnswer = answerDiv;
    172                                                                                                                                                                                        
     201                                                                                                                                                                                                                                                              
    173202                answersDiv.appendChild(answerDiv);
    174203                answersDiv.answerCount++;
    175204            }
    176                                                                                                                    
     205                                                                                                                                                                                           
    177206            function removeOption(questionNumber)
    178207            {
    179208                var answersDiv = document.getElementById("answersDiv" + questionNumber);
    180                                                                                                                        
     209                                                                                                                                                                                              
    181210                if (answersDiv.lastAnswer.prev != null)
    182211                {
     
    186215                }
    187216            }
    188                                                                                                                                            
    189             function minMax(questionNumber)
    190             {
     217                                                                                                                                                                                                                   
     218            function minMax(questionNumber, min, max)
     219            {
     220                if (min == null)
     221                    var min = '';
     222                if (max == null)
     223                    var max = '';
     224                                                                               
    191225                var answersDiv = document.getElementById("answersDiv" + questionNumber);
    192                                                                                                                                                
     226                                                                                                                                                                                                                      
    193227                var answerDiv = document.createElement("div");
    194                                                                                                                
     228                                                                                                                                                                                       
    195229                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                                                                                                                                            
     230                answerDiv.innerHTML = "<label for='min'>Min</label><input type='text' value='" + min + "' name='q" + questionNumber + "ans1' />" +
     231                    "<label for='max'>Max</label><input type='text' value='" + max + "' name='q" + questionNumber + "ans2' />";
     232                                                                                                                                                                                                                  
    199233                answersDiv.appendChild(answerDiv);
    200234            } 
    201                                                                                                                                            
    202             function minMaxIncr(questionNumber)
    203             {
     235                                                                                                                                                                                                                   
     236            function minMaxIncr(questionNumber, left, right, incr)
     237            {
     238                if (left == null)
     239                    var left = '';
     240                if (right == null)
     241                    var right = '';
     242                if (incr == null)
     243                    var incr = '';
     244                               
    204245                var answersDiv = document.getElementById("answersDiv" + questionNumber);
    205                                                                                                                                                
     246                                                                                                                                                                                                                      
    206247                var answerDiv = document.createElement("div");
    207248                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' />" +
     249                answerDiv.innerHTML = "<label>Left label</label><input type='text' value='" + left + "' name='q" + questionNumber + "ans1' />" +
     250                    "<label>Right label</label><input type='text' value='" + right + "' name='q" + questionNumber + "ans2' />" +
     251                    "<label>Scale count</label><input type='text' value='" + incr + "' name='q" + questionNumber + "ans3' />" +
    211252                    "<div id='inputCheckFeedback'" + questionNumber + "";
    212                                                                                                                                            
     253                                                                                                                                                                                                                  
    213254                answersDiv.appendChild(answerDiv);
    214255            }         
    215                                                                                                                                                                                                  
    216                                                                                                                                                                                                          
     256                                                                                                                                                                                                                                                                        
     257                                                                                                                                                                                                                                                                                
    217258            function addQuestion(title, description)
    218259            {
    219260                var questionsDiv = document.getElementById('questionsDiv');
    220261                var newQuestion = getNewQuestion(title, description);
    221                                                                                                                                        
     262                                                                                                                                                                                                               
    222263
    223264                newQuestion.prev = document.lastQuestion;
     
    227268                questionCount++;
    228269            }
    229                                                                                                                                    
     270                                                                                                                                                                                                           
    230271            function removeLastQuestion()
    231272            {
    232273                var questionsDiv = document.getElementById('questionsDiv');
    233                                                                                                                                        
     274                                                                                                                                                                                                               
    234275                if (document.lastQuestion.prev != null)
    235276                {
     
    243284                }               
    244285            }
    245                                                                                                              
     286                                                                                                                                                                                    
    246287            function save(surveyID)
    247288            {
     
    249290                var questionsDiv = document.getElementById('questionsDiv');
    250291                form.action = "surveycreation.php";
    251                                                                                
     292                                                                                                                                                       
    252293                /* extra time stamp */
    253294                var date = new Date();
     
    260301                timeStampInput.value = timeStamp;
    261302                timeStampInput.type = "hidden";
    262                                    
     303                                                                                                           
    263304                var surveyIDInput = document.createElement("input");
    264305                surveyIDInput.name = "surveyID";
    265306                surveyIDInput.value = surveyID;
    266307                surveyIDInput.type = "hidden";
    267                                                              
     308                                                                                                                                    
    268309                questionsDiv.appendChild(timeStampInput);
    269310                questionsDiv.appendChild(surveyIDInput);
    270311                form.submit();
    271312            }
    272                                                                                                                                            
    273                                                                                                                                                                                                                                                                                                                            
     313                                                                                                                                                                                                                   
     314                                                                                                                                                                                                                                                                                                                                                                                                   
    274315        </script>
    275316        <?php
     
    324365        <?php
    325366        if (isset($this->survey)) {
    326             foreach ($this->survey->questions as $question) {
     367            foreach ($this->survey->questions as $numQ => $question) {
    327368                ?>
    328                 <script type="text/javascript"> addQuestion('<?php echo $question->title; ?>', '<?php echo $question->description; ?>');
     369                <script type="text/javascript">
     370                    var answers = new Array();
     371                <?php
     372                /* Put all answers in js array */
     373                foreach ($question->answers as $numA => $answer) {
     374                    echo "answers[" . $numA . "] = '" . $answer . "'; ";
     375                }
     376                ?>
     377                                                   
     378                    addQuestion('<?php echo $question->title; ?>', '<?php echo $question->description; ?>');
     379                                                                                                                                                   
     380                    var select = document.getElementById('<?php echo $numQ; ?>');
     381                    var type = '<?php echo $question->type; ?>';
     382
     383                    for (var i = 0; i < select.options.length; i++) {
     384                        if (select.options[i].value == type)
     385                        {
     386                            select.options[i].selected = true;
     387                            handleType(select, answers)
     388                            break;
     389                        }
     390                    }                                                                                                                   
     391
    329392                </script>
    330393                <?php
  • Dev/trunk/surveycreation.php

    r29 r32  
    88    $timeStamp = $_POST['timeStamp'];
    99       
    10         var_dump($_POST);
    11         echo '<br/><br/>';
     10//      var_dump($_POST);
     11//      echo '<br/><br/>';
    1212        $surveyDBI =  new SurveyDatabaseInterface();
    1313        $surveyDBI->setSurveyInfo($_POST);
    1414        $info = $surveyDBI->getSurveyInfo();
    15         echo '<br/><br/>';
    16         var_dump($info);
     15//      echo '<br/><br/>';
     16//      var_dump($info);
    1717       
    1818        $savedSurvey = Survey::getSurvey($info);
Note: See TracChangeset for help on using the changeset viewer.