See Release Notes
Long Term Support Release
<?php> // This file is part of Moodle - http://moodle.org/ require_once("../../config.php"); > // require_once("$CFG->libdir/graphlib.php"); > // Moodle is free software: you can redistribute it and/or modify require_once("lib.php"); > // it under the terms of the GNU General Public License as published by > // the Free Software Foundation, either version 3 of the License, or $id = required_param('id', PARAM_INT); // Course Module ID > // (at your option) any later version. $type = required_param('type', PARAM_FILE); // Graph Type > // $group = optional_param('group', 0, PARAM_INT); // Group ID > // Moodle is distributed in the hope that it will be useful, $sid = optional_param('sid', false, PARAM_INT); // Student ID > // but WITHOUT ANY WARRANTY; without even the implied warranty of $qid = optional_param('qid', 0, PARAM_INT); // Group ID > // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > // GNU General Public License for more details. $url = new moodle_url('/mod/survey/graph.php', array('id'=>$id, 'type'=>$type)); > // if ($group !== 0) { > // You should have received a copy of the GNU General Public License $url->param('group', $group); > // along with Moodle. If not, see <http://www.gnu.org/licenses/>. } > if ($sid !== false) { > /** $url->param('sid', $sid); > * This file is responsible for producing the graph for survey reports } > * if ($qid !== 0) { > * @package mod_survey $url->param('qid', $qid); > * @copyright 2021 Sujith Haridasan <sujith@moodle.com> } > * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later $PAGE->set_url($url); > */ >< $id = required_param('id', PARAM_INT); // Course Module ID < $type = required_param('type', PARAM_FILE); // Graph Type < $group = optional_param('group', 0, PARAM_INT); // Group ID < $sid = optional_param('sid', false, PARAM_INT); // Student ID < $qid = optional_param('qid', 0, PARAM_INT); // Group ID> $id = required_param('id', PARAM_INT); // Course Module ID. > $type = required_param('type', PARAM_FILE); // Graph Type. > $group = optional_param('group', 0, PARAM_INT); // Group ID. > $sid = optional_param('sid', false, PARAM_INT); // Student ID. > $qid = optional_param('qid', 0, PARAM_INT); // Group ID.< print_error('invalidcoursemodule');> throw new \moodle_exception('invalidcoursemodule');< print_error('coursemisconf');> throw new \moodle_exception('coursemisconf');if ($sid) { if (!$user = $DB->get_record("user", array("id"=>$sid))) {< print_error('invaliduserid');> throw new \moodle_exception('invaliduserid');} } require_login($course, false, $cm);< $groupmode = groups_get_activity_groupmode($cm); // Groups are being used> $groupmode = groups_get_activity_groupmode($cm); // Groups are being used.$context = context_module::instance($cm->id); if (!has_capability('mod/survey:readresponses', $context)) { if ($type != "student.png" or $sid != $USER->id ) {< print_error('nopermissiontoshow');> throw new \moodle_exception('nopermissiontoshow');} else if ($groupmode and !groups_is_member($group)) {< print_error('nopermissiontoshow');> throw new \moodle_exception('nopermissiontoshow');} } if (! $survey = $DB->get_record("survey", array("id"=>$cm->instance))) {< print_error('invalidsurveyid', 'survey');> throw new \moodle_exception('invalidsurveyid', 'survey');}< /// Check to see if groups are being used in this survey> // Check to see if groups are being used in this survey.if ($group) { $users = get_users_by_capability($context, 'mod/survey:participate', '', '', '', '', $group, null, false); } else if (!empty($cm->groupingid)) { $groups = groups_get_all_groups($courseid, 0, $cm->groupingid); $groups = array_keys($groups); $users = get_users_by_capability($context, 'mod/survey:participate', '', '', '', '', $groups, null, false); } else { $users = get_users_by_capability($context, 'mod/survey:participate', '', '', '', '', '', null, false); $group = false; } $stractual = get_string("actual", "survey"); $stractualclass = get_string("actualclass", "survey"); $strpreferred = get_string("preferred", "survey"); $strpreferredclass = get_string("preferredclass", "survey"); if ($sid || isset($user)) { $stractualstudent = get_string("actualstudent", "survey", fullname($user)); $strpreferredstudent = get_string("preferredstudent", "survey", fullname($user)); }< $virtualscales = false; //set default value for case clauses> $virtualscales = false; // Set default value for case clauses.switch ($type) { case "question.png": $question = $DB->get_record("survey_questions", array("id"=>$qid)); $question->text = wordwrap(get_string($question->text, "survey"), SURVEY_QLENGTH_WRAP); $question->options = get_string($question->options, "survey"); $options = explode(",",$question->options); foreach ($options as $key => $unused) { $buckets1[$key] = 0; $buckets2[$key] = 0; } if ($aaa = $DB->get_records('survey_answers', array('survey'=>$cm->instance, 'question'=>$qid))) { foreach ($aaa as $aa) { if (!$group or isset($users[$aa->userid])) { if ($a1 = $aa->answer1) { $buckets1[$a1 - 1]++; } if ($a2 = $aa->answer2) { $buckets2[$a2 - 1]++; } } } }<$maxbuckets1 = max($buckets1); $maxbuckets2 = max($buckets2); $maxbuckets = ($maxbuckets1 > $maxbuckets2) ? $maxbuckets1 : $maxbuckets2; $graph = new graph($SURVEY_GWIDTH,$SURVEY_GHEIGHT); $graph->parameter['title'] = "$question->text"; $graph->x_data = $options; $graph->y_data['answers1'] = $buckets1; $graph->y_format['answers1'] = array('colour' => 'ltblue','bar' => 'fill','legend' =>$stractual,'bar_size' => 0.4); $graph->y_data['answers2'] = $buckets2; $graph->y_format['answers2'] = array('colour' =>'ltorange','bar' => 'fill','legend' =>$strpreferred,'bar_size' => 0.2); $graph->parameter['legend'] = 'outside-top'; $graph->parameter['legend_border'] = 'black'; $graph->parameter['legend_offset'] = 4; if (($maxbuckets1 > 0.0) && ($maxbuckets2 > 0.0)) { $graph->y_order = array('answers1', 'answers2'); } else if ($maxbuckets1 > 0.0) { $graph->y_order = array('answers1'); } else { $graph->y_order = array('answers2'); } $graph->parameter['y_axis_gridlines']= $maxbuckets + 1; $graph->parameter['y_resolution_left']= 1; $graph->parameter['y_decimal_left'] = 0; $graph->parameter['x_axis_angle'] = 20; $graph->parameter['shadow'] = 'none'; $graph->y_tick_labels = null; $graph->offset_relation = null; $graph->draw_stack(); break;< <case "multiquestion.png": $question = $DB->get_record("survey_questions", array("id"=>$qid)); $question->text = get_string($question->text, "survey"); $question->options = get_string($question->options, "survey"); $options = explode(",",$question->options); $questionorder = explode( ",", $question->multi); $qqq = $DB->get_records_list("survey_questions", "id", explode(',',$question->multi)); foreach ($questionorder as $i => $val) { $names[$i] = get_string($qqq["$val"]->shorttext, "survey"); $buckets1[$i] = 0; $buckets2[$i] = 0; $count1[$i] = 0; $count2[$i] = 0; $indexof[$val] = $i; $stdev1[$i] = 0; $stdev2[$i] = 0; }< $aaa = $DB->get_records_select("survey_answers", "((survey = ?) AND (question in ($question->multi)))", array($cm->instance));> $aaa = $DB->get_records_select("survey_answers", "((survey = ?) AND (question in ($question->multi)))", > array($cm->instance));if ($aaa) { foreach ($aaa as $a) { if (!$group or isset($users[$a->userid])) { $index = $indexof[$a->question]; if ($a->answer1) { $buckets1[$index] += $a->answer1; $count1[$index]++; } if ($a->answer2) { $buckets2[$index] += $a->answer2; $count2[$index]++; } } } } foreach ($questionorder as $i => $val) { if ($count1[$i]) { $buckets1[$i] = (float)$buckets1[$i] / (float)$count1[$i]; } if ($count2[$i]) { $buckets2[$i] = (float)$buckets2[$i] / (float)$count2[$i]; } } if ($aaa) { foreach ($aaa as $a) { if (!$group or isset($users[$a->userid])) { $index = $indexof[$a->question]; if ($a->answer1) { $difference = (float) ($a->answer1 - $buckets1[$index]); $stdev1[$index] += ($difference * $difference); } if ($a->answer2) { $difference = (float) ($a->answer2 - $buckets2[$index]); $stdev2[$index] += ($difference * $difference); } } } } foreach ($questionorder as $i => $val) { if ($count1[$i]) { $stdev1[$i] = sqrt( (float)$stdev1[$i] / ((float)$count1[$i])); } if ($count2[$i]) { $stdev2[$i] = sqrt( (float)$stdev2[$i] / ((float)$count2[$i])); } $buckets1[$i] = $buckets1[$i] - 1; $buckets2[$i] = $buckets2[$i] - 1; }< <$maxbuckets1 = max($buckets1); $maxbuckets2 = max($buckets2);<$graph = new graph($SURVEY_GWIDTH,$SURVEY_GHEIGHT); $graph->parameter['title'] = "$question->text"; $graph->x_data = $names; $graph->y_data['answers1'] = $buckets1; $graph->y_format['answers1'] = array('colour' => 'ltblue', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 4, 'legend' => $stractual); $graph->y_data['answers2'] = $buckets2; $graph->y_format['answers2'] = array('colour' => 'ltorange', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 4, 'legend' => $strpreferred); $graph->y_data['stdev1'] = $stdev1; $graph->y_format['stdev1'] = array('colour' => 'ltltblue', 'bar' => 'fill', 'shadow_offset' => '4', 'legend' => 'none', 'bar_size' => 0.3); $graph->y_data['stdev2'] = $stdev2; $graph->y_format['stdev2'] = array('colour' => 'ltltorange', 'bar' => 'fill', 'shadow_offset' => '4', 'legend' => 'none', 'bar_size' => 0.2); $graph->offset_relation['stdev1'] = 'answers1'; $graph->offset_relation['stdev2'] = 'answers2'; $graph->parameter['bar_size'] = 0.15; $graph->parameter['legend'] = 'outside-top'; $graph->parameter['legend_border'] = 'black'; $graph->parameter['legend_offset'] = 4; $graph->y_tick_labels = $options; if (($maxbuckets1 > 0.0) && ($maxbuckets2 > 0.0)) { $graph->y_order = array('stdev1', 'answers1', 'stdev2', 'answers2'); } else if ($maxbuckets1 > 0.0) { $graph->y_order = array('stdev1', 'answers1'); } else { $graph->y_order = array('stdev2', 'answers2'); } $graph->parameter['y_max_left']= count($options) - 1; $graph->parameter['y_axis_gridlines']= count($options); $graph->parameter['y_resolution_left']= 1; $graph->parameter['y_decimal_left']= 1; $graph->parameter['x_axis_angle'] = 20; $graph->draw(); break;< <case "overall.png": $qqq = $DB->get_records_list("survey_questions", "id", explode(',', $survey->questions));<foreach ($qqq as $key => $qq) { if ($qq->multi) { $qqq[$key]->text = get_string($qq->text, "survey"); $qqq[$key]->options = get_string($qq->options, "survey"); if ($qq->type < 0) { $virtualscales = true; } } }< foreach ($qqq as $qq) { // if any virtual, then use JUST virtual, else use JUST nonvirtual> foreach ($qqq as $qq) { // If any virtual, then use JUST virtual, else use JUST nonvirtual.if ($qq->multi) { if ($virtualscales && $qq->type < 0) { $question[] = $qq; } else if (!$virtualscales && $qq->type > 0) { $question[] = $qq; } } } $numquestions = count($question); $options = explode(",",$question[0]->options); $numoptions = count($options); for ($i=0; $i<$numquestions; $i++) { $names[$i] = $question[$i]->text; $buckets1[$i] = 0.0; $buckets2[$i] = 0.0; $stdev1[$i] = 0.0; $stdev2[$i] = 0.0; $count1[$i] = 0; $count2[$i] = 0;< $subquestions = $question[$i]->multi; // otherwise next line doesn't work < $aaa = $DB->get_records_select("survey_answers", "((survey = ?) AND (question in ($subquestions)))", array($cm->instance));> $subquestions = $question[$i]->multi; // Otherwise next line doesn't work. > $aaa = $DB->get_records_select("survey_answers", "((survey = ?) AND (question in ($subquestions)))", > array($cm->instance));if ($aaa) { foreach ($aaa as $a) { if (!$group or isset($users[$a->userid])) { if ($a->answer1) { $buckets1[$i] += $a->answer1; $count1[$i]++; } if ($a->answer2) { $buckets2[$i] += $a->answer2; $count2[$i]++; } } } } if ($count1[$i]) { $buckets1[$i] = (float)$buckets1[$i] / (float)$count1[$i]; } if ($count2[$i]) { $buckets2[$i] = (float)$buckets2[$i] / (float)$count2[$i]; }< // Calculate the standard devaiations> // Calculate the standard devaiations.if ($aaa) { foreach ($aaa as $a) { if (!$group or isset($users[$a->userid])) { if ($a->answer1) { $difference = (float) ($a->answer1 - $buckets1[$i]); $stdev1[$i] += ($difference * $difference); } if ($a->answer2) { $difference = (float) ($a->answer2 - $buckets2[$i]); $stdev2[$i] += ($difference * $difference); } } } } if ($count1[$i]) { $stdev1[$i] = sqrt( (float)$stdev1[$i] / ((float)$count1[$i])); } if ($count2[$i]) { $stdev2[$i] = sqrt( (float)$stdev2[$i] / ((float)$count2[$i])); } $buckets1[$i] = $buckets1[$i] - 1; // Hack because there should not be ANY 0 values in the data. $buckets2[$i] = $buckets2[$i] - 1; } $maxbuckets1 = max($buckets1); $maxbuckets2 = max($buckets2);<$graph = new graph($SURVEY_GWIDTH,$SURVEY_GHEIGHT); $graph->parameter['title'] = strip_tags(format_string($survey->name,true)); $graph->x_data = $names; $graph->y_data['answers1'] = $buckets1; $graph->y_format['answers1'] = array('colour' => 'ltblue', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 4, 'legend' => $stractual); $graph->y_data['answers2'] = $buckets2; $graph->y_format['answers2'] = array('colour' => 'ltorange', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 4, 'legend' => $strpreferred); $graph->y_data['stdev1'] = $stdev1; $graph->y_format['stdev1'] = array('colour' => 'ltltblue', 'bar' => 'fill', 'shadow_offset' => '4', 'legend' => 'none', 'bar_size' => 0.3); $graph->y_data['stdev2'] = $stdev2; $graph->y_format['stdev2'] = array('colour' => 'ltltorange', 'bar' => 'fill', 'shadow_offset' => '4', 'legend' => 'none', 'bar_size' => 0.2); $graph->offset_relation['stdev1'] = 'answers1'; $graph->offset_relation['stdev2'] = 'answers2'; $graph->parameter['legend'] = 'outside-top'; $graph->parameter['legend_border'] = 'black'; $graph->parameter['legend_offset'] = 4; $graph->y_tick_labels = $options; if (($maxbuckets1 > 0.0) && ($maxbuckets2 > 0.0)) { $graph->y_order = array('stdev1', 'answers1', 'stdev2', 'answers2'); } else if ($maxbuckets1 > 0.0) { $graph->y_order = array('stdev1', 'answers1'); } else { $graph->y_order = array('stdev2', 'answers2'); } $graph->parameter['y_max_left']= $numoptions - 1; $graph->parameter['y_axis_gridlines']= $numoptions; $graph->parameter['y_resolution_left']= 1; $graph->parameter['y_decimal_left']= 1; $graph->parameter['x_axis_angle'] = 0; $graph->parameter['x_inner_padding'] = 6; $graph->draw(); break;< <case "student.png": $qqq = $DB->get_records_list("survey_questions", "id", explode(',', $survey->questions)); foreach ($qqq as $key => $qq) { if ($qq->multi) { $qqq[$key]->text = get_string($qq->text, "survey"); $qqq[$key]->options = get_string($qq->options, "survey"); if ($qq->type < 0) { $virtualscales = true; } } }< foreach ($qqq as $qq) { // if any virtual, then use JUST virtual, else use JUST nonvirtual> foreach ($qqq as $qq) { // If any virtual, then use JUST virtual, else use JUST nonvirtual.if ($qq->multi) { if ($virtualscales && $qq->type < 0) { $question[] = $qq; } else if (!$virtualscales && $qq->type > 0) { $question[] = $qq; } } } $numquestions= count($question); $options = explode(",",$question[0]->options); $numoptions = count($options); for ($i=0; $i<$numquestions; $i++) { $names[$i] = $question[$i]->text; $buckets1[$i] = 0.0; $buckets2[$i] = 0.0; $count1[$i] = 0; $count2[$i] = 0; $studbuckets1[$i] = 0.0; $studbuckets2[$i] = 0.0; $studcount1[$i] = 0; $studcount2[$i] = 0; $stdev1[$i] = 0.0; $stdev2[$i] = 0.0;< $subquestions = $question[$i]->multi; // otherwise next line doesn't work < $aaa = $DB->get_records_select("survey_answers","((survey = ?) AND (question in ($subquestions)))", array($cm->instance));> $subquestions = $question[$i]->multi; // Otherwise next line doesn't work. > $aaa = $DB->get_records_select("survey_answers", "((survey = ?) AND (question in ($subquestions)))", > array($cm->instance));if ($aaa) { foreach ($aaa as $a) { if (!$group or isset($users[$a->userid])) { if ($a->userid == $sid) { if ($a->answer1) { $studbuckets1[$i] += $a->answer1; $studcount1[$i]++; } if ($a->answer2) { $studbuckets2[$i] += $a->answer2; $studcount2[$i]++; } } if ($a->answer1) { $buckets1[$i] += $a->answer1; $count1[$i]++; } if ($a->answer2) { $buckets2[$i] += $a->answer2; $count2[$i]++; } } } } if ($count1[$i]) { $buckets1[$i] = (float)$buckets1[$i] / (float)$count1[$i]; } if ($count2[$i]) { $buckets2[$i] = (float)$buckets2[$i] / (float)$count2[$i]; } if ($studcount1[$i]) { $studbuckets1[$i] = (float)$studbuckets1[$i] / (float)$studcount1[$i]; } if ($studcount2[$i]) { $studbuckets2[$i] = (float)$studbuckets2[$i] / (float)$studcount2[$i]; }< // Calculate the standard devaiations> // Calculate the standard devaiations.foreach ($aaa as $a) { if (!$group or isset($users[$a->userid])) { if ($a->answer1) { $difference = (float) ($a->answer1 - $buckets1[$i]); $stdev1[$i] += ($difference * $difference); } if ($a->answer2) { $difference = (float) ($a->answer2 - $buckets2[$i]); $stdev2[$i] += ($difference * $difference); } } } if ($count1[$i]) { $stdev1[$i] = sqrt( (float)$stdev1[$i] / ((float)$count1[$i])); } if ($count2[$i]) { $stdev2[$i] = sqrt( (float)$stdev2[$i] / ((float)$count2[$i])); } $buckets1[$i] = $buckets1[$i] - 1; // Hack because there should not be ANY 0 values in the data. $buckets2[$i] = $buckets2[$i] - 1; $studbuckets1[$i] = $studbuckets1[$i] - 1; $studbuckets2[$i] = $studbuckets2[$i] - 1; } $maxbuckets1 = max($buckets1); $maxbuckets2 = max($buckets2);<$graph = new graph($SURVEY_GWIDTH,$SURVEY_GHEIGHT); $graph->parameter['title'] = strip_tags(format_string($survey->name,true)); $graph->x_data = $names; $graph->y_data['answers1'] = $buckets1; $graph->y_format['answers1'] = array('colour' => 'ltblue', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 0.1, 'legend' => $stractualclass); $graph->y_data['answers2'] = $buckets2; $graph->y_format['answers2'] = array('colour' => 'ltorange', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 0.1, 'legend' => $strpreferredclass); $graph->y_data['studanswers1'] = $studbuckets1; $graph->y_format['studanswers1'] = array('colour' => 'blue', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 4, 'legend' => $stractualstudent); $graph->y_data['studanswers2'] = $studbuckets2; $graph->y_format['studanswers2'] = array('colour' => 'orange', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 4, 'legend' => $strpreferredstudent); $graph->y_data['stdev1'] = $stdev1; $graph->y_format['stdev1'] = array('colour' => 'ltltblue', 'bar' => 'fill', 'shadow_offset' => 0.1, 'legend' => 'none', 'bar_size' => 0.3); $graph->y_data['stdev2'] = $stdev2; $graph->y_format['stdev2'] = array('colour' => 'ltltorange', 'bar' => 'fill', 'shadow_offset' => 0.1, 'legend' => 'none', 'bar_size' => 0.2); $graph->offset_relation['stdev1'] = 'answers1'; $graph->offset_relation['stdev2'] = 'answers2'; $graph->y_tick_labels = $options; $graph->parameter['bar_size'] = 0.15; $graph->parameter['legend'] = 'outside-top'; $graph->parameter['legend_border'] = 'black'; $graph->parameter['legend_offset'] = 4; if (($maxbuckets1 > 0.0) && ($maxbuckets2 > 0.0)) { $graph->y_order = array('stdev1', 'stdev2', 'answers1', 'answers2', 'studanswers1', 'studanswers2'); } else if ($maxbuckets1 > 0.0) { $graph->y_order = array('stdev1', 'answers1', 'studanswers1'); } else { $graph->y_order = array('stdev2', 'answers2', 'studanswers2'); } $graph->parameter['y_max_left']= $numoptions - 1; $graph->parameter['y_axis_gridlines']= $numoptions; $graph->parameter['y_resolution_left']= 1; $graph->parameter['y_decimal_left']= 1; $graph->parameter['x_axis_angle'] = 20; $graph->draw(); break;< <case "studentmultiquestion.png": $question = $DB->get_record("survey_questions", array("id"=>$qid)); $question->text = get_string($question->text, "survey"); $question->options = get_string($question->options, "survey"); $options = explode(",",$question->options); $questionorder = explode( ",", $question->multi); $qqq = $DB->get_records_list("survey_questions", "id", explode(',', $question->multi)); foreach ($questionorder as $i => $val) { $names[$i] = get_string($qqq[$val]->shorttext, "survey"); $buckets1[$i] = 0; $buckets2[$i] = 0; $count1[$i] = 0; $count2[$i] = 0; $indexof[$val] = $i; $studbuckets1[$i] = 0.0; $studbuckets2[$i] = 0.0; $studcount1[$i] = 0; $studcount2[$i] = 0; $stdev1[$i] = 0.0; $stdev2[$i] = 0.0; }< $aaa = $DB->get_records_select("survey_answers", "((survey = ?) AND (question in ($question->multi)))", array($cm->instance));> $aaa = $DB->get_records_select("survey_answers", "((survey = ?) AND (question in ($question->multi)))", > array($cm->instance));if ($aaa) { foreach ($aaa as $a) { if (!$group or isset($users[$a->userid])) { $index = $indexof[$a->question]; if ($a->userid == $sid) { if ($a->answer1) { $studbuckets1[$index] += $a->answer1; $studcount1[$index]++; } if ($a->answer2) { $studbuckets2[$index] += $a->answer2; $studcount2[$index]++; } } if ($a->answer1) { $buckets1[$index] += $a->answer1; $count1[$index]++; } if ($a->answer2) { $buckets2[$index] += $a->answer2; $count2[$index]++; } } } } foreach ($questionorder as $i => $val) { if ($count1[$i]) { $buckets1[$i] = (float)$buckets1[$i] / (float)$count1[$i]; } if ($count2[$i]) { $buckets2[$i] = (float)$buckets2[$i] / (float)$count2[$i]; } if ($studcount1[$i]) { $studbuckets1[$i] = (float)$studbuckets1[$i] / (float)$studcount1[$i]; } if ($studcount2[$i]) { $studbuckets2[$i] = (float)$studbuckets2[$i] / (float)$studcount2[$i]; } } foreach ($aaa as $a) { if (!$group or isset($users[$a->userid])) { $index = $indexof[$a->question]; if ($a->answer1) { $difference = (float) ($a->answer1 - $buckets1[$index]); $stdev1[$index] += ($difference * $difference); } if ($a->answer2) { $difference = (float) ($a->answer2 - $buckets2[$index]); $stdev2[$index] += ($difference * $difference); } } } foreach ($questionorder as $i => $val) { if ($count1[$i]) { $stdev1[$i] = sqrt( (float)$stdev1[$i] / ((float)$count1[$i])); } if ($count2[$i]) { $stdev2[$i] = sqrt( (float)$stdev2[$i] / ((float)$count2[$i])); } $buckets1[$i] = $buckets1[$i] - 1; // Hack because there should not be ANY 0 values in the data. $buckets2[$i] = $buckets2[$i] - 1; $studbuckets1[$i] = $studbuckets1[$i] - 1; $studbuckets2[$i] = $studbuckets2[$i] - 1; }< <$maxbuckets1 = max($buckets1); $maxbuckets2 = max($buckets2);<$graph = new graph($SURVEY_GWIDTH,$SURVEY_GHEIGHT); $graph->parameter['title'] = "$question->text"; $graph->x_data = $names; $graph->y_data['answers1'] = $buckets1; $graph->y_format['answers1'] = array('colour' => 'ltblue', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 0.1, 'legend' => $stractualclass); $graph->y_data['answers2'] = $buckets2; $graph->y_format['answers2'] = array('colour' => 'ltorange', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 0.1, 'legend' => $strpreferredclass); $graph->y_data['studanswers1'] = $studbuckets1; $graph->y_format['studanswers1'] = array('colour' => 'blue', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 4, 'legend' => $stractualstudent); $graph->y_data['studanswers2'] = $studbuckets2; $graph->y_format['studanswers2'] = array('colour' => 'orange', 'line' => 'line', 'point' => 'square', 'shadow_offset' => 4, 'legend' => $strpreferredstudent); $graph->y_data['stdev1'] = $stdev1; $graph->y_format['stdev1'] = array('colour' => 'ltltblue', 'bar' => 'fill', 'shadow_offset' => 0.1, 'legend' => 'none', 'bar_size' => 0.3); $graph->y_data['stdev2'] = $stdev2; $graph->y_format['stdev2'] = array('colour' => 'ltltorange', 'bar' => 'fill', 'shadow_offset' => 0.1, 'legend' => 'none', 'bar_size' => 0.2); $graph->offset_relation['stdev1'] = 'answers1'; $graph->offset_relation['stdev2'] = 'answers2'; $graph->parameter['bar_size'] = 0.15; $graph->parameter['legend'] = 'outside-top'; $graph->parameter['legend_border'] = 'black'; $graph->parameter['legend_offset'] = 4; $graph->y_tick_labels = $options; if (($maxbuckets1 > 0.0) && ($maxbuckets2 > 0.0)) { $graph->y_order = array('stdev1', 'stdev2', 'answers1', 'answers2', 'studanswers1', 'studanswers2'); } else if ($maxbuckets1 > 0.0) { $graph->y_order = array('stdev1', 'answers1', 'studanswers1'); } else { $graph->y_order = array('stdev2', 'answers2', 'studanswers2'); } $graph->parameter['y_max_left']= count($options)-1; $graph->parameter['y_axis_gridlines']= count($options); $graph->parameter['y_resolution_left']= 1; $graph->parameter['y_decimal_left']= 1; $graph->parameter['x_axis_angle'] = 20; $graph->draw(); break; default: break; } exit;< < <