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*/class block_configurable_reports extends block_list {/*** Sets the block name and version number** @return void**/public function init() {$this->title = get_string('pluginname', 'block_configurable_reports');}/*** Act on instance data.*/public function specialization() {if ($this->config) {$this->title = $this->config->title ? $this->config->title : get_string('pluginname', 'block_configurable_reports');} else {$this->title = get_string('pluginname', 'block_configurable_reports');$this->config = new stdClass();$this->config->displayglobalreports = true;}}public function instance_allow_config() {return true;}/*** Where to add the block** @return boolean**/public function applicable_formats() {return array('site' => true, 'course' => true, 'my' => true);}/*** Global Config?** @return boolean**/public function has_config() {return true;}/*** More than one instance per page?** @return boolean**/public function instance_allow_multiple() {return false;}/*** Gets the contents of the block (course view)** @return object An object with the contents**/public function get_content() {global $DB, $USER, $CFG, $COURSE;if ($this->content !== null) {return $this->content;}$this->content = new stdClass;$this->content->footer = '';$this->content->icons = array();if (!isloggedin()) {return $this->content;}require_once($CFG->dirroot."/blocks/configurable_reports/locallib.php");$course = $DB->get_record('course', array('id' => $COURSE->id));if (!$course) {print_error('coursedoesnotexists');}if ($course->id == SITEID) {$context = context_system::instance();} else {$context = context_course::instance($course->id);}// Site (Shared) reports.if (!empty($this->config->displayglobalreports)) {$reports = $DB->get_records('block_configurable_reports', array('global' => 1), 'name ASC');if ($reports) {foreach ($reports as $report) {if ($report->visible && cr_check_report_permissions($report, $USER->id, $context)) {$rname = format_string($report->name);$params = ['id' => $report->id, 'courseid' => $course->id];$url = new \moodle_url('/blocks/configurable_reports/viewreport.php', $params);$attrs = ['alt' => $rname];$this->content->items[] = \html_writer::link($url, $rname, $attrs);}}if (!empty($this->content->items)) {$this->content->items[] = '========';}}}// Course reports.if (!property_exists($this, 'config')or !isset($this->config->displayreportslist)or $this->config->displayreportslist) {$reports = $DB->get_records('block_configurable_reports', array('courseid' => $course->id), 'name ASC');if ($reports) {foreach ($reports as $report) {if (!$report->global && $report->visible && cr_check_report_permissions($report, $USER->id, $context)) {$rname = format_string($report->name);$params = ['id' => $report->id, 'courseid' => $course->id];$url = new \moodle_url('/blocks/configurable_reports/viewreport.php', $params);$attrs = ['alt' => $rname];$this->content->items[] = \html_writer::link($url, $rname, $attrs);}}if (!empty($this->content->items)) {$this->content->items[] = '========';}}}if (has_capability('block/configurable_reports:managereports', $context)|| has_capability('block/configurable_reports:manageownreports', $context)) {$url = new \moodle_url('/blocks/configurable_reports/managereport.php', ['courseid' => $course->id]);$linktext = get_string('managereports', 'block_configurable_reports');$this->content->items[] = \html_writer::link($url, $linktext);}return $this->content;}public function cron() {global $CFG, $DB;$hour = get_config('block_configurable_reports', 'cron_hour');$min = get_config('block_configurable_reports', 'cron_minute');$date = usergetdate(time());$usertime = mktime($date['hours'], $date['minutes'], $date['seconds'], $date['mon'], $date['mday'], $date['year']);$crontime = mktime($hour, $min, $date['seconds'], $date['mon'], $date['mday'], $date['year']);if ( ($crontime - $usertime) < 0 ) {return false;}$lastcron = $DB->get_field('block', 'lastcron', array('name' => 'configurable_reports'));if (!$lastcron and ($lastcron + $this->cron < time()) ) {return false;}// Starting to run...require_once($CFG->dirroot."/blocks/configurable_reports/locallib.php");require_once($CFG->dirroot.'/blocks/configurable_reports/report.class.php');require_once($CFG->dirroot.'/blocks/configurable_reports/reports/sql/report.class.php');mtrace("\nConfigurable report (block)");$reports = $DB->get_records('block_configurable_reports');if ($reports) {foreach ($reports as $report) {// Running only SQL reports. $report->type == 'sql'.if ($report->type == 'sql' AND (!empty($report->cron) AND $report->cron == '1')) {$reportclass = new report_sql($report);// Execute it using $remotedb.$starttime = microtime(true);mtrace("\nExecuting query '$report->name'");$components = cr_unserialize($reportclass->config->components);$config = (isset($components['customsql']['config'])) ? $components['customsql']['config'] : new \stdclass;$sql = $reportclass->prepare_sql($config->querysql);$sqlqueries = explode(';', $sql);foreach ($sqlqueries as $sql) {mtrace(substr($sql, 0, 60)); // Show some SQL.$results = $reportclass->execute_query($sql);if ($results == 1) {mtrace('...OK time='.round((microtime(true) - $starttime) * 1000).'mSec');} else {mtrace('Some SQL Error'.'\n');}}unset($reportclass);}}}return true; // Finished OK.}}