[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.2 - (view) (download)

1 : dservos 1.1 <?php
2 :     require_once $CFG->dirroot . '/grade/report/visual/visualizations/visualization.php';
3 :    
4 :     class grade_distribution extends visualization {
5 :     const RANGE = 10;
6 :    
7 : dservos 1.2 public $percent = true;
8 :    
9 : dservos 1.1 public $colorencodernode;
10 :    
11 :     public $colorencoderedge;
12 :    
13 :     public $shapeencodernode;
14 :    
15 :     public $shapeencoderedge;
16 :    
17 :     public $grouplegend;
18 :    
19 :     public $itemlegend;
20 :    
21 :     public function __construct() {
22 :     parent::__construct(get_string('gradedistribution', 'gradereport_visual'));
23 :    
24 :     $this->layout = visualization::LAYOUT_AXIS;
25 :     $this->layoutsettings = null;//array('false', 'true');
26 :     //$this->nodeshape = visualization::SHAPE_VERTICAL_BAR;
27 :     //$this->edgeshape = visualization::SHAPE_BEZIER;
28 :    
29 :     $this->edges = array(new edge('grade', array('item', 'group')));
30 :    
31 :     $this->xaxis = 'grade';
32 :     $this->yaxis = 'students';
33 :     $this->xaxislabelformat = '0\\%';
34 : dservos 1.2
35 :     if($this->percent) {
36 :     $this->yaxislabelformat = '0\\%';
37 :     $this->yaxislabel = get_string('percentstudents', 'gradereport_visual');
38 :     } else {
39 :     $this->yaxislabel = get_string('numberstudents', 'gradereport_visual');
40 :     }
41 :    
42 : dservos 1.1 //$this->xaxismax = 100 + grade_distribution::RANGE;
43 :     //$this->xaxismin = grade_distribution::RANGE;
44 :     $this->xaxisxoffset = -27;
45 :    
46 :     $this->xaxislabel = get_string('grade', 'gradereport_visual');
47 :     $this->title = get_string('gradedistribution:title', 'gradereport_visual');
48 :    
49 :     $this->capabilities = null;
50 :    
51 :     $this->colorencoderedge = new encoder(encoder::ENCODER_COLOR, 'item', array(2));
52 :     $this->colorencodernode = new encoder(encoder::ENCODER_COLOR, 'item', array(1));
53 :     //$this->shapeencoderedge = new encoder(encoder::ENCODER_SHAPE, 'group', array(2));
54 :     $this->shapeencodernode = new encoder(encoder::ENCODER_SHAPE, 'group', array(1));
55 :     $this->encoders = array($this->colorencodernode, $this->colorencoderedge, $this->shapeencodernode);
56 :    
57 : dservos 1.2 $this->grouplegend = new legend($this->shapeencodernode, array(get_string('allgroups', 'gradereport_visual')));
58 :     $this->itemlegend = new legend($this->colorencodernode, array(get_string('coursetotal', 'grades')));
59 : dservos 1.1 $this->legends = array($this->itemlegend, $this->grouplegend);
60 :     }
61 :    
62 :     public function report_data($visualreport) {
63 :     $data = array();
64 :     $data['header'] = array();
65 :     $data['header']['students'] = 'students';
66 :     // $data['header']['gradelevel'] = 'gradelevel';
67 :     $data['header']['grade'] = 'grade';
68 :     $data['header']['item'] = 'item';
69 :     $data['header']['group'] = 'group';
70 :     //$data['header']['range'] = 'range';
71 :    
72 :     $rawdata = array();
73 :     $counters = array();
74 :     $rangesize = round(100 / grade_distribution::RANGE);
75 :    
76 :     foreach($visualreport->grades as $itemkey=>$itemgrades) {
77 :     foreach($itemgrades as $studentkey=>$studentdata) {
78 :     if($studentdata != null && $studentdata->finalgrade != null) {
79 :     foreach(groups_get_user_groups($visualreport->courseid, $studentkey) as $grouping) {
80 :     $gradelevel = floor(round($studentdata->standardise_score($studentdata->finalgrade, $visualreport->gtree->items[$itemkey]->grademin, $visualreport->gtree->items[$itemkey]->grademax, 0, 100)) / grade_distribution::RANGE);
81 : dservos 1.2 //if($gradelevel == $rangesize) {
82 :     // $gradelevel = $rangesize - 1;
83 :     //}
84 : dservos 1.1
85 :     if(count($grouping) > 0) {
86 :     foreach($grouping as $group) {
87 :     if(isset($rawdata[$gradelevel][$itemkey][$group])) {
88 :     $rawdata[$gradelevel][$itemkey][$group] += 1;
89 :     } else {
90 :     $rawdata[$gradelevel][$itemkey][$group] = 1;
91 :     }
92 :    
93 :     if(isset($counters[$itemkey][$group])) {
94 :     $counters[$itemkey][$group] += 1;
95 :     } else {
96 :     $counters[$itemkey][$group] = 1;
97 :     }
98 :     }
99 :     } else {
100 :     if(isset($rawdata[$gradelevel][$itemkey]['ng'])) {
101 :     $rawdata[$gradelevel][$itemkey]['ng'] += 1;
102 :     } else {
103 :     $rawdata[$gradelevel][$itemkey]['ng'] = 1;
104 :     }
105 :    
106 :     if(isset($counters[$itemkey]['ng'])) {
107 :     $counters[$itemkey]['ng'] += 1;
108 :     } else {
109 :     $counters[$itemkey]['ng'] = 1;
110 :     }
111 :     }
112 :    
113 :     if(isset($rawdata[$gradelevel][$itemkey]['ag'])) {
114 :     $rawdata[$gradelevel][$itemkey]['ag'] += 1;
115 :     } else {
116 :     $rawdata[$gradelevel][$itemkey]['ag'] = 1;
117 :     }
118 :    
119 :     if(isset($counters[$itemkey]['ag'])) {
120 :     $counters[$itemkey]['ag'] += 1;
121 :     } else {
122 :     $counters[$itemkey]['ag'] = 1;
123 :     }
124 :     }
125 :     }
126 :     }
127 :    
128 : dservos 1.2 for($i = 0; $i <= $rangesize; $i++) {
129 : dservos 1.1 foreach(groups_get_all_groups($visualreport->courseid) as $group) {
130 :     if(!isset($rawdata[$i][$itemkey][$group->id])) {
131 :     $rawdata[$i][$itemkey][$group->id] = 0;
132 :     }
133 :     }
134 :    
135 :     if(!isset($rawdata[$i][$itemkey]['ng'])) {
136 :     $rawdata[$i][$itemkey]['ng'] = 0;
137 :     }
138 :    
139 :     if(!isset($rawdata[$i][$itemkey]['ag'])) {
140 :     $rawdata[$i][$itemkey]['ag'] = 0;
141 :     }
142 :     }
143 :     }
144 :    
145 :    
146 :     $i = 0;
147 :    
148 :     foreach($rawdata as $gradelevel=>$items) {
149 :     foreach($items as $itemkey=>$groups) {
150 :     foreach($groups as $groupkey=>$students) {
151 :     $index = $gradelevel * 10000 + $i;
152 : dservos 1.2
153 : dservos 1.1 //$data[$index]['gradelevel'] = $gradelevel;
154 : dservos 1.2
155 :     if($this->percent) {
156 :     $data[$index]['students'] = ($students / $counters[$itemkey][$groupkey]) * 100;
157 :     } else {
158 :     $data[$index]['students'] = $students;
159 :     }
160 :    
161 : dservos 1.1 $data[$index]['grade'] = $gradelevel * grade_distribution::RANGE; //($gradelevel * grade_distribution::RANGE) . '% - ' . (($gradelevel + 1) * grade_distribution::RANGE - 1) . '%';
162 : dservos 1.2
163 : dservos 1.1 $data[$index]['item'] = $visualreport->gtree->items[$itemkey]->get_name();
164 :     if($groupkey == 'ng') {
165 :     $data[$index]['group'] = get_string('nogroup', 'gradereport_visual');
166 :     } else if($groupkey == 'ag'){
167 :     $data[$index]['group'] = get_string('allgroups', 'gradereport_visual');
168 :     } else {
169 :     $data[$index]['group'] = groups_get_group_name($groupkey);
170 :     }
171 :     //$data[$index]['range'] = grade_distribution::RANGE;
172 :    
173 :     $i++;
174 :     }
175 :     }
176 :     }
177 :    
178 :     // ksort($data);
179 :    
180 :     return $data;
181 :     }
182 :     }
183 :     ?>

Moodle CVS Admin
ViewVC Help
Powered by ViewVC 1.0.7