[moodle] / contrib / plugins / grade / report / visual / visualizations / visual_grade_distribution.php Repository:

Annotation of /contrib/plugins/grade/report/visual/visualizations/visual_grade_distribution.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (view) (download)

1 : dservos 1.1 <?php
2 : dservos 1.3 ///////////////////////////////////////////////////////////////////////////
3 :     // //
4 :     // NOTICE OF COPYRIGHT //
5 :     // //
6 :     // Moodle - Modular Object-Oriented Dynamic Learning Environment //
7 :     // http://moodle.org //
8 :     // //
9 :     // Copyright (C) 1999 onwards Martin Dougiamas http://moodle.com //
10 :     // //
11 :     // This program is free software; you can redistribute it and/or modify //
12 :     // it under the terms of the GNU General Public License as published by //
13 :     // the Free Software Foundation; either version 2 of the License, or //
14 :     // (at your option) any later version. //
15 :     // //
16 :     // This program is distributed in the hope that it will be useful, //
17 :     // but WITHOUT ANY WARRANTY; without even the implied warranty of //
18 :     // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
19 :     // GNU General Public License for more details: //
20 :     // //
21 :     // http://www.gnu.org/copyleft/gpl.html //
22 :     // //
23 :     ///////////////////////////////////////////////////////////////////////////
24 :    
25 : dservos 1.1 require_once $CFG->dirroot . '/grade/report/visual/visualizations/visualization.php';
26 :    
27 :     class grade_distribution extends visualization {
28 :     const RANGE = 10;
29 :    
30 : dservos 1.2 public $percent = true;
31 :    
32 : dservos 1.1 public $colorencodernode;
33 :    
34 :     public $colorencoderedge;
35 :    
36 :     public $shapeencodernode;
37 :    
38 :     public $shapeencoderedge;
39 :    
40 :     public $grouplegend;
41 :    
42 :     public $itemlegend;
43 :    
44 :     public function __construct() {
45 :     parent::__construct(get_string('gradedistribution', 'gradereport_visual'));
46 :    
47 :     $this->layout = visualization::LAYOUT_AXIS;
48 :     $this->layoutsettings = null;//array('false', 'true');
49 :     //$this->nodeshape = visualization::SHAPE_VERTICAL_BAR;
50 :     //$this->edgeshape = visualization::SHAPE_BEZIER;
51 :    
52 : dservos 1.3 $this->edges = array(new edge('grade', array('group', 'item')));
53 : dservos 1.1
54 :     $this->xaxis = 'grade';
55 :     $this->yaxis = 'students';
56 :     $this->xaxislabelformat = '0\\%';
57 : dservos 1.2
58 :     if($this->percent) {
59 :     $this->yaxislabelformat = '0\\%';
60 :     $this->yaxislabel = get_string('percentstudents', 'gradereport_visual');
61 :     } else {
62 :     $this->yaxislabel = get_string('numberstudents', 'gradereport_visual');
63 :     }
64 :    
65 : dservos 1.1 //$this->xaxismax = 100 + grade_distribution::RANGE;
66 :     //$this->xaxismin = grade_distribution::RANGE;
67 :     $this->xaxisxoffset = -27;
68 :    
69 :     $this->xaxislabel = get_string('grade', 'gradereport_visual');
70 :     $this->title = get_string('gradedistribution:title', 'gradereport_visual');
71 :    
72 : dservos 1.3 $this->capability = 'gradereport/visual:vis:grade_distribution';
73 : dservos 1.1
74 :     $this->colorencoderedge = new encoder(encoder::ENCODER_COLOR, 'item', array(2));
75 :     $this->colorencodernode = new encoder(encoder::ENCODER_COLOR, 'item', array(1));
76 :     //$this->shapeencoderedge = new encoder(encoder::ENCODER_SHAPE, 'group', array(2));
77 :     $this->shapeencodernode = new encoder(encoder::ENCODER_SHAPE, 'group', array(1));
78 :     $this->encoders = array($this->colorencodernode, $this->colorencoderedge, $this->shapeencodernode);
79 :    
80 : dservos 1.2 $this->grouplegend = new legend($this->shapeencodernode, array(get_string('allgroups', 'gradereport_visual')));
81 :     $this->itemlegend = new legend($this->colorencodernode, array(get_string('coursetotal', 'grades')));
82 : dservos 1.1 $this->legends = array($this->itemlegend, $this->grouplegend);
83 :     }
84 :    
85 :     public function report_data($visualreport) {
86 :     $data = array();
87 :     $data['header'] = array();
88 :     $data['header']['students'] = 'students';
89 :     // $data['header']['gradelevel'] = 'gradelevel';
90 :     $data['header']['grade'] = 'grade';
91 :     $data['header']['item'] = 'item';
92 :     $data['header']['group'] = 'group';
93 :     //$data['header']['range'] = 'range';
94 :    
95 :     $rawdata = array();
96 :     $counters = array();
97 :     $rangesize = round(100 / grade_distribution::RANGE);
98 :    
99 :     foreach($visualreport->grades as $itemkey=>$itemgrades) {
100 :     foreach($itemgrades as $studentkey=>$studentdata) {
101 :     if($studentdata != null && $studentdata->finalgrade != null) {
102 :     foreach(groups_get_user_groups($visualreport->courseid, $studentkey) as $grouping) {
103 :     $gradelevel = floor(round($studentdata->standardise_score($studentdata->finalgrade, $visualreport->gtree->items[$itemkey]->grademin, $visualreport->gtree->items[$itemkey]->grademax, 0, 100)) / grade_distribution::RANGE);
104 : dservos 1.2 //if($gradelevel == $rangesize) {
105 :     // $gradelevel = $rangesize - 1;
106 :     //}
107 : dservos 1.1
108 :     if(count($grouping) > 0) {
109 :     foreach($grouping as $group) {
110 :     if(isset($rawdata[$gradelevel][$itemkey][$group])) {
111 :     $rawdata[$gradelevel][$itemkey][$group] += 1;
112 :     } else {
113 :     $rawdata[$gradelevel][$itemkey][$group] = 1;
114 :     }
115 :    
116 :     if(isset($counters[$itemkey][$group])) {
117 :     $counters[$itemkey][$group] += 1;
118 :     } else {
119 :     $counters[$itemkey][$group] = 1;
120 :     }
121 :     }
122 :     } else {
123 :     if(isset($rawdata[$gradelevel][$itemkey]['ng'])) {
124 :     $rawdata[$gradelevel][$itemkey]['ng'] += 1;
125 :     } else {
126 :     $rawdata[$gradelevel][$itemkey]['ng'] = 1;
127 :     }
128 :    
129 :     if(isset($counters[$itemkey]['ng'])) {
130 :     $counters[$itemkey]['ng'] += 1;
131 :     } else {
132 :     $counters[$itemkey]['ng'] = 1;
133 :     }
134 :     }
135 :    
136 :     if(isset($rawdata[$gradelevel][$itemkey]['ag'])) {
137 :     $rawdata[$gradelevel][$itemkey]['ag'] += 1;
138 :     } else {
139 :     $rawdata[$gradelevel][$itemkey]['ag'] = 1;
140 :     }
141 :    
142 :     if(isset($counters[$itemkey]['ag'])) {
143 :     $counters[$itemkey]['ag'] += 1;
144 :     } else {
145 :     $counters[$itemkey]['ag'] = 1;
146 :     }
147 :     }
148 :     }
149 :     }
150 :    
151 : dservos 1.2 for($i = 0; $i <= $rangesize; $i++) {
152 : dservos 1.1 foreach(groups_get_all_groups($visualreport->courseid) as $group) {
153 :     if(!isset($rawdata[$i][$itemkey][$group->id])) {
154 :     $rawdata[$i][$itemkey][$group->id] = 0;
155 :     }
156 :     }
157 :    
158 :     if(!isset($rawdata[$i][$itemkey]['ng'])) {
159 :     $rawdata[$i][$itemkey]['ng'] = 0;
160 :     }
161 :    
162 :     if(!isset($rawdata[$i][$itemkey]['ag'])) {
163 :     $rawdata[$i][$itemkey]['ag'] = 0;
164 :     }
165 :     }
166 :     }
167 :    
168 :    
169 :     $i = 0;
170 :    
171 :     foreach($rawdata as $gradelevel=>$items) {
172 :     foreach($items as $itemkey=>$groups) {
173 :     foreach($groups as $groupkey=>$students) {
174 :     $index = $gradelevel * 10000 + $i;
175 : dservos 1.2
176 : dservos 1.1 //$data[$index]['gradelevel'] = $gradelevel;
177 : dservos 1.2
178 :     if($this->percent) {
179 :     $data[$index]['students'] = ($students / $counters[$itemkey][$groupkey]) * 100;
180 :     } else {
181 :     $data[$index]['students'] = $students;
182 :     }
183 :    
184 : dservos 1.1 $data[$index]['grade'] = $gradelevel * grade_distribution::RANGE; //($gradelevel * grade_distribution::RANGE) . '% - ' . (($gradelevel + 1) * grade_distribution::RANGE - 1) . '%';
185 : dservos 1.2
186 : dservos 1.1 $data[$index]['item'] = $visualreport->gtree->items[$itemkey]->get_name();
187 :     if($groupkey == 'ng') {
188 :     $data[$index]['group'] = get_string('nogroup', 'gradereport_visual');
189 :     } else if($groupkey == 'ag'){
190 :     $data[$index]['group'] = get_string('allgroups', 'gradereport_visual');
191 :     } else {
192 :     $data[$index]['group'] = groups_get_group_name($groupkey);
193 :     }
194 :     //$data[$index]['range'] = grade_distribution::RANGE;
195 :    
196 :     $i++;
197 :     }
198 :     }
199 :     }
200 :    
201 :     // ksort($data);
202 :    
203 :     return $data;
204 :     }
205 :     }
206 :     ?>

Moodle CVS Admin
ViewVC Help
Powered by ViewVC 1.0.7