|
By dservos:
CONTRIB-497
*Added more visualizations
*Added selector UI Widget for flex/flare visualization
*Refactored some of flex actionscript code.
*Added defaults for selected group and items in visualizations.
*Improved removal of nodes and edges when an item or group is deselected in a legend.
*Fixed a memory leak realting to the removal and addtion of nodes.
*Added more options for and control of the flex/flare based visualization from the Moodle back end.
|
| 4 |
class grade_distribution extends visualization { |
class grade_distribution extends visualization { |
| 5 |
const RANGE = 10; |
const RANGE = 10; |
| 6 |
|
|
| 7 |
|
public $percent = true; |
| 8 |
|
|
| 9 |
public $colorencodernode; |
public $colorencodernode; |
| 10 |
|
|
| 11 |
public $colorencoderedge; |
public $colorencoderedge; |
| 31 |
$this->xaxis = 'grade'; |
$this->xaxis = 'grade'; |
| 32 |
$this->yaxis = 'students'; |
$this->yaxis = 'students'; |
| 33 |
$this->xaxislabelformat = '0\\%'; |
$this->xaxislabelformat = '0\\%'; |
| 34 |
|
|
| 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 |
//$this->xaxismax = 100 + grade_distribution::RANGE; |
//$this->xaxismax = 100 + grade_distribution::RANGE; |
| 43 |
//$this->xaxismin = grade_distribution::RANGE; |
//$this->xaxismin = grade_distribution::RANGE; |
| 44 |
$this->xaxisxoffset = -27; |
$this->xaxisxoffset = -27; |
| 45 |
|
|
| 46 |
$this->xaxislabel = get_string('grade', 'gradereport_visual'); |
$this->xaxislabel = get_string('grade', 'gradereport_visual'); |
|
$this->yaxislabel = get_string('numberstudents', 'gradereport_visual'); |
|
| 47 |
$this->title = get_string('gradedistribution:title', 'gradereport_visual'); |
$this->title = get_string('gradedistribution:title', 'gradereport_visual'); |
| 48 |
|
|
| 49 |
$this->capabilities = null; |
$this->capabilities = null; |
| 54 |
$this->shapeencodernode = new encoder(encoder::ENCODER_SHAPE, 'group', array(1)); |
$this->shapeencodernode = new encoder(encoder::ENCODER_SHAPE, 'group', array(1)); |
| 55 |
$this->encoders = array($this->colorencodernode, $this->colorencoderedge, $this->shapeencodernode); |
$this->encoders = array($this->colorencodernode, $this->colorencoderedge, $this->shapeencodernode); |
| 56 |
|
|
| 57 |
$this->grouplegend = new legend($this->shapeencodernode); |
$this->grouplegend = new legend($this->shapeencodernode, array(get_string('allgroups', 'gradereport_visual'))); |
| 58 |
$this->itemlegend = new legend($this->colorencodernode); |
$this->itemlegend = new legend($this->colorencodernode, array(get_string('coursetotal', 'grades'))); |
| 59 |
$this->legends = array($this->itemlegend, $this->grouplegend); |
$this->legends = array($this->itemlegend, $this->grouplegend); |
| 60 |
} |
} |
| 61 |
|
|
| 78 |
if($studentdata != null && $studentdata->finalgrade != null) { |
if($studentdata != null && $studentdata->finalgrade != null) { |
| 79 |
foreach(groups_get_user_groups($visualreport->courseid, $studentkey) as $grouping) { |
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); |
$gradelevel = floor(round($studentdata->standardise_score($studentdata->finalgrade, $visualreport->gtree->items[$itemkey]->grademin, $visualreport->gtree->items[$itemkey]->grademax, 0, 100)) / grade_distribution::RANGE); |
| 81 |
if($gradelevel == $rangesize) { |
//if($gradelevel == $rangesize) { |
| 82 |
$gradelevel = $rangesize - 1; |
// $gradelevel = $rangesize - 1; |
| 83 |
} |
//} |
| 84 |
|
|
| 85 |
if(count($grouping) > 0) { |
if(count($grouping) > 0) { |
| 86 |
foreach($grouping as $group) { |
foreach($grouping as $group) { |
| 125 |
} |
} |
| 126 |
} |
} |
| 127 |
|
|
| 128 |
for($i = 0; $i < $rangesize; $i++) { |
for($i = 0; $i <= $rangesize; $i++) { |
| 129 |
foreach(groups_get_all_groups($visualreport->courseid) as $group) { |
foreach(groups_get_all_groups($visualreport->courseid) as $group) { |
| 130 |
if(!isset($rawdata[$i][$itemkey][$group->id])) { |
if(!isset($rawdata[$i][$itemkey][$group->id])) { |
| 131 |
$rawdata[$i][$itemkey][$group->id] = 0; |
$rawdata[$i][$itemkey][$group->id] = 0; |
| 149 |
foreach($items as $itemkey=>$groups) { |
foreach($items as $itemkey=>$groups) { |
| 150 |
foreach($groups as $groupkey=>$students) { |
foreach($groups as $groupkey=>$students) { |
| 151 |
$index = $gradelevel * 10000 + $i; |
$index = $gradelevel * 10000 + $i; |
| 152 |
$data[$index]['students'] = $students; |
|
| 153 |
//$data[$index]['gradelevel'] = $gradelevel; |
//$data[$index]['gradelevel'] = $gradelevel; |
| 154 |
|
|
| 155 |
|
if($this->percent) { |
| 156 |
|
$data[$index]['students'] = ($students / $counters[$itemkey][$groupkey]) * 100; |
| 157 |
|
} else { |
| 158 |
|
$data[$index]['students'] = $students; |
| 159 |
|
} |
| 160 |
|
|
| 161 |
$data[$index]['grade'] = $gradelevel * grade_distribution::RANGE; //($gradelevel * grade_distribution::RANGE) . '% - ' . (($gradelevel + 1) * grade_distribution::RANGE - 1) . '%'; |
$data[$index]['grade'] = $gradelevel * grade_distribution::RANGE; //($gradelevel * grade_distribution::RANGE) . '% - ' . (($gradelevel + 1) * grade_distribution::RANGE - 1) . '%'; |
| 162 |
|
|
| 163 |
$data[$index]['item'] = $visualreport->gtree->items[$itemkey]->get_name(); |
$data[$index]['item'] = $visualreport->gtree->items[$itemkey]->get_name(); |
| 164 |
if($groupkey == 'ng') { |
if($groupkey == 'ng') { |
| 165 |
$data[$index]['group'] = get_string('nogroup', 'gradereport_visual'); |
$data[$index]['group'] = get_string('nogroup', 'gradereport_visual'); |