AutorÃa | Ultima modificación | Ver Log |
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Configurable Reports
* A Moodle block for creating customizable reports
* @package blocks
* @author: Juan leyva <http://www.twitter.com/jleyvadelgado>
* @date: 2009
*/
require_once($CFG->dirroot.'/blocks/configurable_reports/plugin.class.php');
class plugin_pie extends plugin_base{
public function init() {
$this->fullname = get_string('pie', 'block_configurable_reports');
$this->form = true;
$this->ordering = true;
$this->reporttypes = array('courses', 'sql', 'users', 'timeline', 'categories');
}
public function summary($data) {
return get_string('piesummary', 'block_configurable_reports');
}
// Data -> Plugin configuration data.
public function execute($id, $data, $finalreport) {
global $DB, $CFG;
$series = array();
if ($finalreport) {
foreach ($finalreport as $r) {
if ($data->areaname == $data->areavalue) {
$hash = md5(strtolower($r[$data->areaname]));
if (isset($series[0][$hash])) {
$series[1][$hash] += 1;
} else {
$series[0][$hash] = str_replace(',', '', $r[$data->areaname]);
$series[1][$hash] = 1;
}
} else if (!isset($data->group) || ! $data->group) {
$series[0][] = str_replace(',', '', $r[$data->areaname]);
$series[1][] = (isset($r[$data->areavalue]) && is_numeric($r[$data->areavalue])) ? $r[$data->areavalue] : 0;
} else {
$hash = md5(strtolower($r[$data->areaname]));
if (isset($series[0][$hash])) {
$series[1][$hash] += (isset($r[$data->areavalue]) && is_numeric($r[$data->areavalue])) ? $r[$data->areavalue] : 0;
} else {
$series[0][$hash] = str_replace(',', '', $r[$data->areaname]);
$series[1][$hash] = (isset($r[$data->areavalue]) && is_numeric($r[$data->areavalue])) ? $r[$data->areavalue] : 0;
}
}
}
}
// Custom sort.
$colors = [];
$mappedcolors = [];
$unmappedcolors = [];
if (!empty($data->{'piechart_label'})) {
$length = count($data->{'piechart_label'});
for ($i = 0; $i < $length; $i++) {
if (!empty($data->{'piechart_label'}[$i])) {
$key = $data->{'piechart_label'}[$i];
$colorcode = ltrim($data->{'piechart_label_color'}[$i], '#');
$mappedcolors[$key] = $colorcode;
}
}
}
$mappedcolorkeys = array_keys($mappedcolors);
if (!empty($data->{'generalcolorpalette'})) {
$rawunmappedcolors = explode(PHP_EOL, $data->{'generalcolorpalette'});
foreach ($rawunmappedcolors as $rawcolor) {
if (!empty($rawcolor)) {
$unmappedcolors[] = ltrim(trim($rawcolor), '#');
}
}
}
$serie0sorted = [];
$serie1sorted = [];
$i = 0;
$unmappedindex = 0;
$unmappedcolorcount = count($unmappedcolors);
foreach ($series[0] as $index => $serie) {
$serie = strip_tags($serie);
$serie0sorted[] = $serie;
$serie1sorted[] = $series[1][$index];
if (in_array($serie, $mappedcolorkeys)) {
$colors[$i] = $this->parse_color($mappedcolors[$serie]);
} else if ($unmappedindex < $unmappedcolorcount) {
$colors[$i] = $this->parse_color($unmappedcolors[$unmappedindex]);
$unmappedindex++;
} else {
$colors[$i] = '';
}
$i++;
}
$serie0 = base64_encode(strip_tags(implode(',', $serie0sorted)));
$serie1 = base64_encode(implode(',', $serie1sorted));
$colorpalette = base64_encode(implode(',', $colors));
return $CFG->wwwroot.'/blocks/configurable_reports/components/plot/pie/graph.php?reportid='.$this->report->id.'&id='.$id.'&serie0='.$serie0.'&serie1='.$serie1.'&colorpalette='.$colorpalette;
}
public function get_series($data) {
$serie0 = required_param('serie0', PARAM_RAW);
$serie1 = required_param('serie1', PARAM_RAW);
return array(explode(',', base64_decode($serie0)), explode(',', base64_decode($serie1)));
}
public function get_color_palette($data) {
if ($colorpalette = optional_param('colorpalette', '', PARAM_RAW)) {
$colorpalette = explode(',', base64_decode($colorpalette));
foreach ($colorpalette as $index => $item) {
if (!empty($item)) {
$colorpalette[$index] = explode('|', $item);
} else {
unset($colorpalette[$index]);
}
}
return $colorpalette;
}
return null;
}
public function parse_color($colorcode) {
return implode('|', array_map(
function ($c) {
return hexdec(str_pad($c, 2, $c));
}, str_split($colorcode, strlen($colorcode) > 4 ? 2 : 1)));
}
}