Proyectos de Subversion Moodle

Rev

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 block_configurable_reports
 * @author David Pesce <davidpesce@gmail.com>
 * @date 2019
 */

require_once($CFG->dirroot.'/blocks/configurable_reports/plugin.class.php');

class plugin_percent extends plugin_base {

        public function init() {
                $this->form = true;
                $this->unique = false;
                $this->fullname = get_string('percent','block_configurable_reports');
                $this->reporttypes = array('courses','users','sql','timeline','categories');
        }

        public function summary($data) {
                global $CFG;

                if ($this->report->type != 'sql') {
                        $components = cr_unserialize($this->report->components);
                        if (!is_array($components) || empty($components['columns']['elements'])) {
                                print_error('nocolumns');
                        }

                        $columns = $components['columns']['elements'];
                        $i = 0;
                        foreach ($columns as $c) {
                                if ($i == $data->column) {
                                        return $c['summary'];
                                }
                                $i++;
                        }
                } else {
                        require_once($CFG->dirroot.'/blocks/configurable_reports/report.class.php');
                        require_once($CFG->dirroot.'/blocks/configurable_reports/reports/'.$this->report->type.'/report.class.php');

                        $reportclassname = 'report_'.$this->report->type;
                        $reportclass = new $reportclassname($this->report);

                        $components = cr_unserialize($this->report->components);
                        $config = (isset($components['customsql']['config']))? $components['customsql']['config'] : new stdclass;

                        if (isset($config->querysql)) {
                                $sql =$config->querysql;
                                $sql = $reportclass->prepare_sql($sql);
                                if ($rs = $reportclass->execute_query($sql)) {
                                        foreach ($rs as $row) {
                                                $i = 0;
                                                foreach ($row as $colname=>$value) {
                                                        if ($i == $data->column) {
                                                                return str_replace('_', ' ', $colname);
                                                        }
                                                        $i++;
                                                }
                                                break;
                                        }
                                        $rs->close();
                                }
                        }
                }

                return '';
        }

        public function execute($rows) {
                $result = 0;
                $totalrows = 0;
                $resultrows = 0;
                foreach ($rows as $r) {
                        $r = (is_numeric($r)) ? $r : 0;
                        if ($r >= 1) {
                            $resultrows++;
                        }
                        $totalrows++;
                }
                if ($totalrows > 0) {
                        $result = round(($resultrows / $totalrows) * 100, 2);
                }
                return $result . ' %';
        }
}