Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.10.x will end 8 November 2021 (12 months).
  • Bug fixes for security issues in 3.10.x will end 9 May 2022 (18 months).
  • PHP version: minimum PHP 7.2.0 Note: minimum PHP version has increased since Moodle 3.8. PHP 7.3.x and 7.4.x are supported too.

Differences Between: [Versions 310 and 311] [Versions 310 and 400] [Versions 310 and 401] [Versions 310 and 402] [Versions 310 and 403]

   1  <?php
   2  
   3      require_once("../../config.php");
   4      require_once("$CFG->libdir/graphlib.php");
   5      require_once ("lib.php");
   6  
   7      $id    = required_param('id', PARAM_INT);    // Course Module ID
   8      $type  = required_param('type', PARAM_FILE);  // Graph Type
   9      $group = optional_param('group', 0, PARAM_INT);  // Group ID
  10      $sid   = optional_param('sid', false, PARAM_INT);  // Student ID
  11      $qid   = optional_param('qid', 0, PARAM_INT);  // Group ID
  12  
  13      $url = new moodle_url('/mod/survey/graph.php', array('id'=>$id, 'type'=>$type));
  14      if ($group !== 0) {
  15          $url->param('group', $group);
  16      }
  17      if ($sid !== false) {
  18          $url->param('sid', $sid);
  19      }
  20      if ($qid !== 0) {
  21          $url->param('qid', $qid);
  22      }
  23      $PAGE->set_url($url);
  24  
  25      if (! $cm = get_coursemodule_from_id('survey', $id)) {
  26          print_error('invalidcoursemodule');
  27      }
  28  
  29      if (! $course = $DB->get_record("course", array("id"=>$cm->course))) {
  30          print_error('coursemisconf');
  31      }
  32  
  33      if ($sid) {
  34          if (!$user = $DB->get_record("user", array("id"=>$sid))) {
  35              print_error('invaliduserid');
  36          }
  37      }
  38  
  39      require_login($course, false, $cm);
  40  
  41      $groupmode = groups_get_activity_groupmode($cm);   // Groups are being used
  42      $context = context_module::instance($cm->id);
  43  
  44      if (!has_capability('mod/survey:readresponses', $context)) {
  45          if ($type != "student.png" or $sid != $USER->id ) {
  46              print_error('nopermissiontoshow');
  47          } else if ($groupmode and !groups_is_member($group)) {
  48              print_error('nopermissiontoshow');
  49          }
  50      }
  51  
  52      if (! $survey = $DB->get_record("survey", array("id"=>$cm->instance))) {
  53          print_error('invalidsurveyid', 'survey');
  54      }
  55  
  56  /// Check to see if groups are being used in this survey
  57      if ($group) {
  58          $users = get_users_by_capability($context, 'mod/survey:participate', '', '', '', '', $group, null, false);
  59      } else if (!empty($cm->groupingid)) {
  60          $groups = groups_get_all_groups($courseid, 0, $cm->groupingid);
  61          $groups = array_keys($groups);
  62          $users = get_users_by_capability($context, 'mod/survey:participate', '', '', '', '', $groups, null, false);
  63      } else {
  64          $users = get_users_by_capability($context, 'mod/survey:participate', '', '', '', '', '', null, false);
  65          $group = false;
  66      }
  67  
  68      $stractual = get_string("actual", "survey");
  69      $stractualclass = get_string("actualclass", "survey");
  70  
  71      $strpreferred = get_string("preferred", "survey");
  72      $strpreferredclass = get_string("preferredclass", "survey");
  73  
  74      if ($sid || isset($user)) {
  75          $stractualstudent = get_string("actualstudent", "survey", fullname($user));
  76          $strpreferredstudent = get_string("preferredstudent", "survey", fullname($user));
  77      }
  78  
  79      $virtualscales = false; //set default value for case clauses
  80  
  81      switch ($type) {
  82  
  83       case "question.png":
  84  
  85         $question = $DB->get_record("survey_questions", array("id"=>$qid));
  86         $question->text = get_string($question->text, "survey");
  87         $question->options = get_string($question->options, "survey");
  88  
  89         $options = explode(",",$question->options);
  90  
  91         foreach ($options as $key => $unused) {
  92             $buckets1[$key] = 0;
  93             $buckets2[$key] = 0;
  94         }
  95  
  96         if ($aaa = $DB->get_records('survey_answers', array('survey'=>$cm->instance, 'question'=>$qid))) {
  97             foreach ($aaa as $aa) {
  98                 if (!$group or isset($users[$aa->userid])) {
  99                     if ($a1 = $aa->answer1) {
 100                         $buckets1[$a1 - 1]++;
 101                     }
 102                     if ($a2 = $aa->answer2) {
 103                         $buckets2[$a2 - 1]++;
 104                     }
 105                 }
 106             }
 107         }
 108  
 109  
 110         $maxbuckets1 = max($buckets1);
 111         $maxbuckets2 = max($buckets2);
 112         $maxbuckets = ($maxbuckets1 > $maxbuckets2) ? $maxbuckets1 : $maxbuckets2;
 113  
 114         $graph = new graph($SURVEY_GWIDTH,$SURVEY_GHEIGHT);
 115         $graph->parameter['title'] = "$question->text";
 116  
 117         $graph->x_data               = $options;
 118  
 119         $graph->y_data['answers1']   = $buckets1;
 120         $graph->y_format['answers1'] = array('colour' => 'ltblue','bar' => 'fill','legend' =>$stractual,'bar_size' => 0.4);
 121         $graph->y_data['answers2']   = $buckets2;
 122         $graph->y_format['answers2'] = array('colour' =>'ltorange','bar' => 'fill','legend' =>$strpreferred,'bar_size' => 0.2);
 123  
 124         $graph->parameter['legend']        = 'outside-top';
 125         $graph->parameter['legend_border'] = 'black';
 126         $graph->parameter['legend_offset'] = 4;
 127  
 128         if (($maxbuckets1 > 0.0) && ($maxbuckets2 > 0.0)) {
 129             $graph->y_order = array('answers1', 'answers2');
 130         } else if ($maxbuckets1 > 0.0) {
 131             $graph->y_order = array('answers1');
 132         } else {
 133             $graph->y_order = array('answers2');
 134         }
 135  
 136         $graph->parameter['y_axis_gridlines']= $maxbuckets + 1;
 137         $graph->parameter['y_resolution_left']= 1;
 138         $graph->parameter['y_decimal_left']  = 0;
 139         $graph->parameter['x_axis_angle']    = 20;
 140         $graph->parameter['shadow']          = 'none';
 141  
 142         $graph->y_tick_labels = null;
 143         $graph->offset_relation = null;
 144  
 145         $graph->draw_stack();
 146  
 147         break;
 148  
 149  
 150  
 151       case "multiquestion.png":
 152  
 153         $question  = $DB->get_record("survey_questions", array("id"=>$qid));
 154         $question->text = get_string($question->text, "survey");
 155         $question->options = get_string($question->options, "survey");
 156  
 157         $options = explode(",",$question->options);
 158         $questionorder = explode( ",", $question->multi);
 159  
 160         $qqq = $DB->get_records_list("survey_questions", "id", explode(',',$question->multi));
 161  
 162         foreach ($questionorder as $i => $val) {
 163             $names[$i] = get_string($qqq["$val"]->shorttext, "survey");
 164             $buckets1[$i] = 0;
 165             $buckets2[$i] = 0;
 166             $count1[$i] = 0;
 167             $count2[$i] = 0;
 168             $indexof[$val] = $i;
 169             $stdev1[$i] = 0;
 170             $stdev2[$i] = 0;
 171         }
 172  
 173         $aaa = $DB->get_records_select("survey_answers", "((survey = ?) AND (question in ($question->multi)))", array($cm->instance));
 174  
 175         if ($aaa) {
 176             foreach ($aaa as $a) {
 177                 if (!$group or isset($users[$a->userid])) {
 178                     $index = $indexof[$a->question];
 179                     if ($a->answer1) {
 180                         $buckets1[$index] += $a->answer1;
 181                         $count1[$index]++;
 182                     }
 183                     if ($a->answer2) {
 184                         $buckets2[$index] += $a->answer2;
 185                         $count2[$index]++;
 186                     }
 187                 }
 188             }
 189         }
 190  
 191         foreach ($questionorder as $i => $val) {
 192             if ($count1[$i]) {
 193                 $buckets1[$i] = (float)$buckets1[$i] / (float)$count1[$i];
 194             }
 195             if ($count2[$i]) {
 196                 $buckets2[$i] = (float)$buckets2[$i] / (float)$count2[$i];
 197             }
 198         }
 199  
 200         if ($aaa) {
 201             foreach ($aaa as $a) {
 202                 if (!$group or isset($users[$a->userid])) {
 203                     $index = $indexof[$a->question];
 204                     if ($a->answer1) {
 205                         $difference = (float) ($a->answer1 - $buckets1[$index]);
 206                         $stdev1[$index] += ($difference * $difference);
 207                     }
 208                     if ($a->answer2) {
 209                         $difference = (float) ($a->answer2 - $buckets2[$index]);
 210                         $stdev2[$index] += ($difference * $difference);
 211                     }
 212                 }
 213             }
 214         }
 215  
 216         foreach ($questionorder as $i => $val) {
 217             if ($count1[$i]) {
 218                 $stdev1[$i] = sqrt( (float)$stdev1[$i] / ((float)$count1[$i]));
 219             }
 220             if ($count2[$i]) {
 221                 $stdev2[$i] = sqrt( (float)$stdev2[$i] / ((float)$count2[$i]));
 222             }
 223             $buckets1[$i] = $buckets1[$i] - 1;
 224             $buckets2[$i] = $buckets2[$i] - 1;
 225         }
 226  
 227  
 228  
 229         $maxbuckets1 = max($buckets1);
 230         $maxbuckets2 = max($buckets2);
 231  
 232  
 233         $graph = new graph($SURVEY_GWIDTH,$SURVEY_GHEIGHT);
 234         $graph->parameter['title'] = "$question->text";
 235  
 236         $graph->x_data               = $names;
 237         $graph->y_data['answers1']   = $buckets1;
 238         $graph->y_format['answers1'] = array('colour' => 'ltblue', 'line' => 'line',  'point' => 'square',
 239                                              'shadow_offset' => 4, 'legend' => $stractual);
 240         $graph->y_data['answers2']   = $buckets2;
 241         $graph->y_format['answers2'] = array('colour' => 'ltorange', 'line' => 'line', 'point' => 'square',
 242                                                  'shadow_offset' => 4, 'legend' => $strpreferred);
 243         $graph->y_data['stdev1']   = $stdev1;
 244         $graph->y_format['stdev1'] = array('colour' => 'ltltblue', 'bar' => 'fill',
 245                                              'shadow_offset' => '4', 'legend' => 'none', 'bar_size' => 0.3);
 246         $graph->y_data['stdev2']   = $stdev2;
 247         $graph->y_format['stdev2'] = array('colour' => 'ltltorange', 'bar' => 'fill',
 248                                              'shadow_offset' => '4', 'legend' => 'none', 'bar_size' => 0.2);
 249         $graph->offset_relation['stdev1'] = 'answers1';
 250         $graph->offset_relation['stdev2'] = 'answers2';
 251  
 252         $graph->parameter['bar_size']    = 0.15;
 253  
 254         $graph->parameter['legend']        = 'outside-top';
 255         $graph->parameter['legend_border'] = 'black';
 256         $graph->parameter['legend_offset'] = 4;
 257  
 258         $graph->y_tick_labels = $options;
 259  
 260         if (($maxbuckets1 > 0.0) && ($maxbuckets2 > 0.0)) {
 261                $graph->y_order = array('stdev1', 'answers1', 'stdev2', 'answers2');
 262         } else if ($maxbuckets1 > 0.0) {
 263             $graph->y_order = array('stdev1', 'answers1');
 264         } else {
 265             $graph->y_order = array('stdev2', 'answers2');
 266         }
 267  
 268         $graph->parameter['y_max_left']= count($options) - 1;
 269         $graph->parameter['y_axis_gridlines']= count($options);
 270         $graph->parameter['y_resolution_left']= 1;
 271         $graph->parameter['y_decimal_left']= 1;
 272         $graph->parameter['x_axis_angle']  = 20;
 273  
 274         $graph->draw();
 275  
 276         break;
 277  
 278  
 279  
 280       case "overall.png":
 281  
 282         $qqq = $DB->get_records_list("survey_questions", "id", explode(',', $survey->questions));
 283  
 284  
 285         foreach ($qqq as $key => $qq) {
 286             if ($qq->multi) {
 287                 $qqq[$key]->text = get_string($qq->text, "survey");
 288                 $qqq[$key]->options = get_string($qq->options, "survey");
 289                 if ($qq->type < 0) {
 290                     $virtualscales = true;
 291                 }
 292             }
 293         }
 294         foreach ($qqq as $qq) {         // if any virtual, then use JUST virtual, else use JUST nonvirtual
 295             if ($qq->multi) {
 296                 if ($virtualscales && $qq->type < 0) {
 297                     $question[] = $qq;
 298                 } else if (!$virtualscales && $qq->type > 0) {
 299                     $question[] = $qq;
 300                 }
 301             }
 302         }
 303         $numquestions = count($question);
 304  
 305         $options = explode(",",$question[0]->options);
 306         $numoptions = count($options);
 307  
 308         for ($i=0; $i<$numquestions; $i++) {
 309             $names[$i] = $question[$i]->text;
 310             $buckets1[$i] = 0.0;
 311             $buckets2[$i] = 0.0;
 312             $stdev1[$i] = 0.0;
 313             $stdev2[$i] = 0.0;
 314             $count1[$i] = 0;
 315             $count2[$i] = 0;
 316             $subquestions = $question[$i]->multi;   // otherwise next line doesn't work
 317             $aaa = $DB->get_records_select("survey_answers", "((survey = ?) AND (question in ($subquestions)))", array($cm->instance));
 318  
 319             if ($aaa) {
 320                 foreach ($aaa as $a) {
 321                     if (!$group or isset($users[$a->userid])) {
 322                         if ($a->answer1) {
 323                             $buckets1[$i] += $a->answer1;
 324                             $count1[$i]++;
 325                         }
 326                         if ($a->answer2) {
 327                             $buckets2[$i] += $a->answer2;
 328                             $count2[$i]++;
 329                         }
 330                     }
 331                 }
 332             }
 333  
 334             if ($count1[$i]) {
 335                 $buckets1[$i] = (float)$buckets1[$i] / (float)$count1[$i];
 336             }
 337             if ($count2[$i]) {
 338                 $buckets2[$i] = (float)$buckets2[$i] / (float)$count2[$i];
 339             }
 340  
 341             // Calculate the standard devaiations
 342             if ($aaa) {
 343                 foreach ($aaa as $a) {
 344                     if (!$group or isset($users[$a->userid])) {
 345                         if ($a->answer1) {
 346                             $difference = (float) ($a->answer1 - $buckets1[$i]);
 347                             $stdev1[$i] += ($difference * $difference);
 348                         }
 349                         if ($a->answer2) {
 350                             $difference = (float) ($a->answer2 - $buckets2[$i]);
 351                             $stdev2[$i] += ($difference * $difference);
 352                         }
 353                     }
 354                 }
 355             }
 356  
 357             if ($count1[$i]) {
 358                 $stdev1[$i] = sqrt( (float)$stdev1[$i] / ((float)$count1[$i]));
 359             }
 360             if ($count2[$i]) {
 361                 $stdev2[$i] = sqrt( (float)$stdev2[$i] / ((float)$count2[$i]));
 362             }
 363  
 364             $buckets1[$i] = $buckets1[$i] - 1;         // Hack because there should not be ANY 0 values in the data.
 365             $buckets2[$i] = $buckets2[$i] - 1;
 366  
 367         }
 368  
 369         $maxbuckets1 = max($buckets1);
 370         $maxbuckets2 = max($buckets2);
 371  
 372  
 373         $graph = new graph($SURVEY_GWIDTH,$SURVEY_GHEIGHT);
 374         $graph->parameter['title'] = strip_tags(format_string($survey->name,true));
 375  
 376         $graph->x_data               = $names;
 377  
 378         $graph->y_data['answers1']   = $buckets1;
 379         $graph->y_format['answers1'] = array('colour' => 'ltblue', 'line' => 'line',  'point' => 'square',
 380                                              'shadow_offset' => 4, 'legend' => $stractual);
 381         $graph->y_data['answers2']   = $buckets2;
 382         $graph->y_format['answers2'] = array('colour' => 'ltorange', 'line' => 'line', 'point' => 'square',
 383                                                  'shadow_offset' => 4, 'legend' => $strpreferred);
 384  
 385         $graph->y_data['stdev1']   = $stdev1;
 386         $graph->y_format['stdev1'] = array('colour' => 'ltltblue', 'bar' => 'fill',
 387                                              'shadow_offset' => '4', 'legend' => 'none', 'bar_size' => 0.3);
 388         $graph->y_data['stdev2']   = $stdev2;
 389         $graph->y_format['stdev2'] = array('colour' => 'ltltorange', 'bar' => 'fill',
 390                                              'shadow_offset' => '4', 'legend' => 'none', 'bar_size' => 0.2);
 391         $graph->offset_relation['stdev1'] = 'answers1';
 392         $graph->offset_relation['stdev2'] = 'answers2';
 393  
 394         $graph->parameter['legend']        = 'outside-top';
 395         $graph->parameter['legend_border'] = 'black';
 396         $graph->parameter['legend_offset'] = 4;
 397  
 398         $graph->y_tick_labels = $options;
 399  
 400         if (($maxbuckets1 > 0.0) && ($maxbuckets2 > 0.0)) {
 401                $graph->y_order = array('stdev1', 'answers1', 'stdev2', 'answers2');
 402         } else if ($maxbuckets1 > 0.0) {
 403             $graph->y_order = array('stdev1', 'answers1');
 404         } else {
 405             $graph->y_order = array('stdev2', 'answers2');
 406         }
 407  
 408         $graph->parameter['y_max_left']= $numoptions - 1;
 409         $graph->parameter['y_axis_gridlines']= $numoptions;
 410         $graph->parameter['y_resolution_left']= 1;
 411         $graph->parameter['y_decimal_left']= 1;
 412         $graph->parameter['x_axis_angle']  = 0;
 413         $graph->parameter['x_inner_padding']  = 6;
 414  
 415         $graph->draw();
 416  
 417         break;
 418  
 419  
 420  
 421       case "student.png":
 422  
 423         $qqq = $DB->get_records_list("survey_questions", "id", explode(',', $survey->questions));
 424  
 425         foreach ($qqq as $key => $qq) {
 426             if ($qq->multi) {
 427                 $qqq[$key]->text = get_string($qq->text, "survey");
 428                 $qqq[$key]->options = get_string($qq->options, "survey");
 429                 if ($qq->type < 0) {
 430                     $virtualscales = true;
 431                 }
 432             }
 433         }
 434         foreach ($qqq as $qq) {         // if any virtual, then use JUST virtual, else use JUST nonvirtual
 435             if ($qq->multi) {
 436                 if ($virtualscales && $qq->type < 0) {
 437                     $question[] = $qq;
 438                 } else if (!$virtualscales && $qq->type > 0) {
 439                     $question[] = $qq;
 440                 }
 441             }
 442         }
 443         $numquestions= count($question);
 444  
 445         $options = explode(",",$question[0]->options);
 446         $numoptions = count($options);
 447  
 448         for ($i=0; $i<$numquestions; $i++) {
 449             $names[$i] = $question[$i]->text;
 450             $buckets1[$i] = 0.0;
 451             $buckets2[$i] = 0.0;
 452             $count1[$i] = 0;
 453             $count2[$i] = 0;
 454             $studbuckets1[$i] = 0.0;
 455             $studbuckets2[$i] = 0.0;
 456             $studcount1[$i] = 0;
 457             $studcount2[$i] = 0;
 458             $stdev1[$i] = 0.0;
 459             $stdev2[$i] = 0.0;
 460  
 461             $subquestions = $question[$i]->multi;   // otherwise next line doesn't work
 462             $aaa = $DB->get_records_select("survey_answers","((survey = ?) AND (question in ($subquestions)))", array($cm->instance));
 463  
 464             if ($aaa) {
 465                 foreach ($aaa as $a) {
 466                     if (!$group or isset($users[$a->userid])) {
 467                         if ($a->userid == $sid) {
 468                             if ($a->answer1) {
 469                                 $studbuckets1[$i] += $a->answer1;
 470                                 $studcount1[$i]++;
 471                             }
 472                             if ($a->answer2) {
 473                                 $studbuckets2[$i] += $a->answer2;
 474                                 $studcount2[$i]++;
 475                             }
 476                         }
 477                         if ($a->answer1) {
 478                             $buckets1[$i] += $a->answer1;
 479                             $count1[$i]++;
 480                         }
 481                         if ($a->answer2) {
 482                             $buckets2[$i] += $a->answer2;
 483                             $count2[$i]++;
 484                         }
 485                     }
 486                 }
 487             }
 488  
 489             if ($count1[$i]) {
 490                 $buckets1[$i] = (float)$buckets1[$i] / (float)$count1[$i];
 491             }
 492             if ($count2[$i]) {
 493                 $buckets2[$i] = (float)$buckets2[$i] / (float)$count2[$i];
 494             }
 495             if ($studcount1[$i]) {
 496                 $studbuckets1[$i] = (float)$studbuckets1[$i] / (float)$studcount1[$i];
 497             }
 498             if ($studcount2[$i]) {
 499                 $studbuckets2[$i] = (float)$studbuckets2[$i] / (float)$studcount2[$i];
 500             }
 501  
 502             // Calculate the standard devaiations
 503             foreach ($aaa as $a) {
 504                 if (!$group or isset($users[$a->userid])) {
 505                     if ($a->answer1) {
 506                         $difference = (float) ($a->answer1 - $buckets1[$i]);
 507                         $stdev1[$i] += ($difference * $difference);
 508                     }
 509                     if ($a->answer2) {
 510                         $difference = (float) ($a->answer2 - $buckets2[$i]);
 511                         $stdev2[$i] += ($difference * $difference);
 512                     }
 513                 }
 514             }
 515  
 516             if ($count1[$i]) {
 517                 $stdev1[$i] = sqrt( (float)$stdev1[$i] / ((float)$count1[$i]));
 518             }
 519             if ($count2[$i]) {
 520                 $stdev2[$i] = sqrt( (float)$stdev2[$i] / ((float)$count2[$i]));
 521             }
 522  
 523             $buckets1[$i] = $buckets1[$i] - 1;         // Hack because there should not be ANY 0 values in the data.
 524             $buckets2[$i] = $buckets2[$i] - 1;
 525             $studbuckets1[$i] = $studbuckets1[$i] - 1;
 526             $studbuckets2[$i] = $studbuckets2[$i] - 1;
 527  
 528         }
 529  
 530         $maxbuckets1 = max($buckets1);
 531         $maxbuckets2 = max($buckets2);
 532  
 533  
 534         $graph = new graph($SURVEY_GWIDTH,$SURVEY_GHEIGHT);
 535         $graph->parameter['title'] = strip_tags(format_string($survey->name,true));
 536  
 537         $graph->x_data               = $names;
 538  
 539         $graph->y_data['answers1']   = $buckets1;
 540         $graph->y_format['answers1'] = array('colour' => 'ltblue', 'line' => 'line',  'point' => 'square',
 541                                              'shadow_offset' => 0.1, 'legend' => $stractualclass);
 542         $graph->y_data['answers2']   = $buckets2;
 543         $graph->y_format['answers2'] = array('colour' => 'ltorange', 'line' => 'line', 'point' => 'square',
 544                                                  'shadow_offset' => 0.1, 'legend' => $strpreferredclass);
 545         $graph->y_data['studanswers1']   = $studbuckets1;
 546         $graph->y_format['studanswers1'] = array('colour' => 'blue', 'line' => 'line',  'point' => 'square',
 547                                              'shadow_offset' => 4, 'legend' => $stractualstudent);
 548         $graph->y_data['studanswers2']   = $studbuckets2;
 549         $graph->y_format['studanswers2'] = array('colour' => 'orange', 'line' => 'line', 'point' => 'square',
 550                                                  'shadow_offset' => 4, 'legend' => $strpreferredstudent);
 551         $graph->y_data['stdev1']   = $stdev1;
 552         $graph->y_format['stdev1'] = array('colour' => 'ltltblue', 'bar' => 'fill',
 553                                              'shadow_offset' => 0.1, 'legend' => 'none', 'bar_size' => 0.3);
 554         $graph->y_data['stdev2']   = $stdev2;
 555         $graph->y_format['stdev2'] = array('colour' => 'ltltorange', 'bar' => 'fill',
 556                                              'shadow_offset' => 0.1, 'legend' => 'none', 'bar_size' => 0.2);
 557         $graph->offset_relation['stdev1'] = 'answers1';
 558         $graph->offset_relation['stdev2'] = 'answers2';
 559  
 560         $graph->y_tick_labels = $options;
 561  
 562         $graph->parameter['bar_size']    = 0.15;
 563  
 564         $graph->parameter['legend']        = 'outside-top';
 565         $graph->parameter['legend_border'] = 'black';
 566         $graph->parameter['legend_offset'] = 4;
 567  
 568         if (($maxbuckets1 > 0.0) && ($maxbuckets2 > 0.0)) {
 569                $graph->y_order = array('stdev1', 'stdev2', 'answers1', 'answers2', 'studanswers1', 'studanswers2');
 570         } else if ($maxbuckets1 > 0.0) {
 571             $graph->y_order = array('stdev1', 'answers1', 'studanswers1');
 572         } else {
 573             $graph->y_order = array('stdev2', 'answers2', 'studanswers2');
 574         }
 575  
 576         $graph->parameter['y_max_left']= $numoptions - 1;
 577         $graph->parameter['y_axis_gridlines']= $numoptions;
 578         $graph->parameter['y_resolution_left']= 1;
 579         $graph->parameter['y_decimal_left']= 1;
 580         $graph->parameter['x_axis_angle']  = 20;
 581  
 582         $graph->draw();
 583         break;
 584  
 585  
 586  
 587       case "studentmultiquestion.png":
 588  
 589         $question  = $DB->get_record("survey_questions", array("id"=>$qid));
 590         $question->text = get_string($question->text, "survey");
 591         $question->options = get_string($question->options, "survey");
 592  
 593         $options = explode(",",$question->options);
 594         $questionorder = explode( ",", $question->multi);
 595  
 596         $qqq = $DB->get_records_list("survey_questions", "id", explode(',', $question->multi));
 597  
 598         foreach ($questionorder as $i => $val) {
 599             $names[$i] = get_string($qqq[$val]->shorttext, "survey");
 600             $buckets1[$i] = 0;
 601             $buckets2[$i] = 0;
 602             $count1[$i] = 0;
 603             $count2[$i] = 0;
 604             $indexof[$val] = $i;
 605             $studbuckets1[$i] = 0.0;
 606             $studbuckets2[$i] = 0.0;
 607             $studcount1[$i] = 0;
 608             $studcount2[$i] = 0;
 609             $stdev1[$i] = 0.0;
 610             $stdev2[$i] = 0.0;
 611         }
 612  
 613         $aaa = $DB->get_records_select("survey_answers", "((survey = ?) AND (question in ($question->multi)))", array($cm->instance));
 614  
 615         if ($aaa) {
 616             foreach ($aaa as $a) {
 617                 if (!$group or isset($users[$a->userid])) {
 618                     $index = $indexof[$a->question];
 619                         if ($a->userid == $sid) {
 620                             if ($a->answer1) {
 621                                 $studbuckets1[$index] += $a->answer1;
 622                                 $studcount1[$index]++;
 623                             }
 624                             if ($a->answer2) {
 625                                 $studbuckets2[$index] += $a->answer2;
 626                                 $studcount2[$index]++;
 627                             }
 628                         }
 629                     if ($a->answer1) {
 630                         $buckets1[$index] += $a->answer1;
 631                         $count1[$index]++;
 632                     }
 633                     if ($a->answer2) {
 634                         $buckets2[$index] += $a->answer2;
 635                         $count2[$index]++;
 636                     }
 637                 }
 638             }
 639         }
 640  
 641         foreach ($questionorder as $i => $val) {
 642             if ($count1[$i]) {
 643                 $buckets1[$i] = (float)$buckets1[$i] / (float)$count1[$i];
 644             }
 645             if ($count2[$i]) {
 646                 $buckets2[$i] = (float)$buckets2[$i] / (float)$count2[$i];
 647             }
 648             if ($studcount1[$i]) {
 649                 $studbuckets1[$i] = (float)$studbuckets1[$i] / (float)$studcount1[$i];
 650             }
 651             if ($studcount2[$i]) {
 652                 $studbuckets2[$i] = (float)$studbuckets2[$i] / (float)$studcount2[$i];
 653             }
 654         }
 655  
 656         foreach ($aaa as $a) {
 657             if (!$group or isset($users[$a->userid])) {
 658                 $index = $indexof[$a->question];
 659                 if ($a->answer1) {
 660                     $difference = (float) ($a->answer1 - $buckets1[$index]);
 661                     $stdev1[$index] += ($difference * $difference);
 662                 }
 663                 if ($a->answer2) {
 664                     $difference = (float) ($a->answer2 - $buckets2[$index]);
 665                     $stdev2[$index] += ($difference * $difference);
 666                 }
 667             }
 668         }
 669  
 670         foreach ($questionorder as $i => $val) {
 671             if ($count1[$i]) {
 672                 $stdev1[$i] = sqrt( (float)$stdev1[$i] / ((float)$count1[$i]));
 673             }
 674             if ($count2[$i]) {
 675                 $stdev2[$i] = sqrt( (float)$stdev2[$i] / ((float)$count2[$i]));
 676             }
 677             $buckets1[$i] = $buckets1[$i] - 1;         // Hack because there should not be ANY 0 values in the data.
 678             $buckets2[$i] = $buckets2[$i] - 1;
 679             $studbuckets1[$i] = $studbuckets1[$i] - 1;
 680             $studbuckets2[$i] = $studbuckets2[$i] - 1;
 681         }
 682  
 683  
 684  
 685         $maxbuckets1 = max($buckets1);
 686         $maxbuckets2 = max($buckets2);
 687  
 688  
 689         $graph = new graph($SURVEY_GWIDTH,$SURVEY_GHEIGHT);
 690         $graph->parameter['title'] = "$question->text";
 691  
 692         $graph->x_data               = $names;
 693         $graph->y_data['answers1']   = $buckets1;
 694         $graph->y_format['answers1'] = array('colour' => 'ltblue', 'line' => 'line',  'point' => 'square',
 695                                              'shadow_offset' => 0.1, 'legend' => $stractualclass);
 696         $graph->y_data['answers2']   = $buckets2;
 697         $graph->y_format['answers2'] = array('colour' => 'ltorange', 'line' => 'line', 'point' => 'square',
 698                                                  'shadow_offset' => 0.1, 'legend' => $strpreferredclass);
 699         $graph->y_data['studanswers1']   = $studbuckets1;
 700         $graph->y_format['studanswers1'] = array('colour' => 'blue', 'line' => 'line',  'point' => 'square',
 701                                              'shadow_offset' => 4, 'legend' => $stractualstudent);
 702         $graph->y_data['studanswers2']   = $studbuckets2;
 703         $graph->y_format['studanswers2'] = array('colour' => 'orange', 'line' => 'line', 'point' => 'square',
 704                                                  'shadow_offset' => 4, 'legend' => $strpreferredstudent);
 705         $graph->y_data['stdev1']   = $stdev1;
 706         $graph->y_format['stdev1'] = array('colour' => 'ltltblue', 'bar' => 'fill',
 707                                              'shadow_offset' => 0.1, 'legend' => 'none', 'bar_size' => 0.3);
 708         $graph->y_data['stdev2']   = $stdev2;
 709         $graph->y_format['stdev2'] = array('colour' => 'ltltorange', 'bar' => 'fill',
 710                                              'shadow_offset' => 0.1, 'legend' => 'none', 'bar_size' => 0.2);
 711         $graph->offset_relation['stdev1'] = 'answers1';
 712         $graph->offset_relation['stdev2'] = 'answers2';
 713  
 714         $graph->parameter['bar_size']    = 0.15;
 715  
 716         $graph->parameter['legend']        = 'outside-top';
 717         $graph->parameter['legend_border'] = 'black';
 718         $graph->parameter['legend_offset'] = 4;
 719  
 720         $graph->y_tick_labels = $options;
 721  
 722         if (($maxbuckets1 > 0.0) && ($maxbuckets2 > 0.0)) {
 723             $graph->y_order = array('stdev1', 'stdev2', 'answers1', 'answers2', 'studanswers1', 'studanswers2');
 724         } else if ($maxbuckets1 > 0.0) {
 725             $graph->y_order = array('stdev1', 'answers1', 'studanswers1');
 726         } else {
 727             $graph->y_order = array('stdev2', 'answers2', 'studanswers2');
 728         }
 729  
 730         $graph->parameter['y_max_left']= count($options)-1;
 731         $graph->parameter['y_axis_gridlines']= count($options);
 732         $graph->parameter['y_resolution_left']= 1;
 733         $graph->parameter['y_decimal_left']= 1;
 734         $graph->parameter['x_axis_angle']  = 20;
 735  
 736         $graph->draw();
 737  
 738         break;
 739  
 740       default:
 741         break;
 742     }
 743  
 744     exit;
 745  
 746  
 747