/editreport.php
PHP | 261 lines | 181 code | 57 blank | 23 comment | 46 complexity | 6954e9ced811a5285118ebe6adc2ad49 MD5 | raw file
- <?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 Configurable Reports
- * @package blocks
- * @author: Juan leyva <http://www.twitter.com/jleyvadelgado>
- * @date: 2009
- */
- require_once("../../config.php");
- require_once($CFG->dirroot."/blocks/configurable_reports/locallib.php");
- $id = optional_param('id', 0,PARAM_INT);
- $courseid = optional_param('courseid',SITEID,PARAM_INT);
- $delete = optional_param('delete', 0,PARAM_BOOL);
- $confirm = optional_param('confirm', 0,PARAM_BOOL);
- $show = optional_param('show', 0,PARAM_BOOL);
- $hide = optional_param('hide', 0,PARAM_BOOL);
- $duplicate = optional_param('duplicate', 0,PARAM_BOOL);
- $report = null;
- if (! $course = $DB->get_record("course",array( "id" => $courseid)) ) {
- print_error("nosuchcourseid",'block_configurable_reports');
- }
- // Force user login in course (SITE or Course)
- if ($course->id == SITEID){
- require_login();
- $context = context_system::instance();
- } else {
- require_login($course->id);
- $context = context_course::instance($course->id);
- }
- if(! has_capability('block/configurable_reports:managereports', $context) && ! has_capability('block/configurable_reports:manageownreports', $context))
- print_error('badpermissions','block_configurable_reports');
- $PAGE->set_context($context);
- $PAGE->set_pagelayout('incourse');
- if($id){
- if(! $report = $DB->get_record('block_configurable_reports',array('id' => $id)))
- print_error('reportdoesnotexists','block_configurable_reports');
- if(! has_capability('block/configurable_reports:managereports', $context) && $report->ownerid != $USER->id)
- print_error('badpermissions','block_configurable_reports');
- $title = format_string($report->name);
- $courseid = $report->courseid;
- if (! $course = $DB->get_record("course",array( "id" => $courseid)) ) {
- print_error("nosuchcourseid",'block_configurable_reports');
- }
- require_once($CFG->dirroot.'/blocks/configurable_reports/report.class.php');
- require_once($CFG->dirroot.'/blocks/configurable_reports/reports/'.$report->type.'/report.class.php');
- $reportclassname = 'report_'.$report->type;
- $reportclass = new $reportclassname($report->id);
- $PAGE->set_url('/blocks/configurable_reports/editreport.php', array('id'=>$id));
- } else {
- $title = get_string('newreport','block_configurable_reports');
- $PAGE->set_url('/blocks/configurable_reports/editreport.php', null);
- }
- if($report)
- $title = format_string($report->name);
- else
- $title = get_string('report','block_configurable_reports');
- $courseurl = new moodle_url($CFG->wwwroot.'/course/view.php',array('id'=>$courseid));
- $PAGE->navbar->add($course->shortname, $courseurl);
- if (!empty($report->courseid)) {
- $params = array('courseid'=>$report->courseid);
- } else {
- $params = array('courseid'=>$courseid);
- }
- $managereporturl = new moodle_url($CFG->wwwroot.'/blocks/configurable_reports/managereport.php', $params);
- $PAGE->navbar->add(get_string('managereports','block_configurable_reports'), $managereporturl);
- $PAGE->navbar->add($title);
- // Common actions
- if(($show || $hide) && confirm_sesskey()){
- $visible = ($show)? 1 : 0;
- if(!$DB->set_field('block_configurable_reports','visible',$visible,array('id' => $report->id)))
- print_error('cannotupdatereport','block_configurable_reports');
- $action = ($visible)? 'showed' : 'hidden';
- cr_add_to_log($report->courseid, 'configurable_reports', 'report '.$action, '/block/configurable_reports/editreport.php?id='.$report->id, $report->id);
- header("Location: $CFG->wwwroot/blocks/configurable_reports/managereport.php?courseid=$courseid");
- die;
- }
- if($duplicate && confirm_sesskey()){
- $newreport = new stdclass();
- $newreport = $report;
- unset($newreport->id);
- $newreport->name = get_string('copyasnoun').' '.$newreport->name;
- $newreport->summary = $newreport->summary;
- if(! $newreportid = $DB->insert_record('block_configurable_reports',$newreport))
- print_error('cannotduplicate','block_configurable_reports');
- cr_add_to_log($newreport->courseid, 'configurable_reports', 'report duplicated', '/block/configurable_reports/editreport.php?id='.$newreportid, $id);
- header("Location: $CFG->wwwroot/blocks/configurable_reports/managereport.php?courseid=$courseid");
- die;
- }
- if($delete && confirm_sesskey()){
- if(!$confirm){
- $PAGE->set_title($title);
- $PAGE->set_heading( $title);
- $PAGE->set_cacheable( true);
- echo $OUTPUT->header();
- $message = get_string('confirmdeletereport','block_configurable_reports');
- $optionsyes = array('id'=>$report->id, 'delete'=>$delete, 'sesskey'=>sesskey(), 'confirm'=>1);
- $optionsno = array();
- $buttoncontinue = new single_button(new moodle_url('editreport.php', $optionsyes), get_string('yes'), 'get');
- $buttoncancel = new single_button(new moodle_url('managereport.php', $optionsno), get_string('no'), 'get');
- echo $OUTPUT->confirm($message, $buttoncontinue, $buttoncancel);
- echo $OUTPUT->footer();
- exit;
- }
- else{
- if($DB->delete_records('block_configurable_reports',array('id'=>$report->id)))
- cr_add_to_log($report->courseid, 'configurable_reports', 'report deleted', '/block/configurable_reports/editreport.php?id='.$report->id, $report->id);
- header("Location: $CFG->wwwroot/blocks/configurable_reports/managereport.php?courseid=$courseid");
- die;
- }
- }
- require_once('editreport_form.php');
- if(!empty($report))
- $editform = new report_edit_form('editreport.php',compact('report','courseid','context'));
- else
- $editform = new report_edit_form('editreport.php',compact('courseid','context'));
- if(!empty($report)){
- $export = explode(',',$report->export);
- if(!empty($export)){
- foreach($export as $e)
- $report->{'export_'.$e} = 1;
- }
- $editform->set_data($report);
- }
- if($editform->is_cancelled()){
- if(!empty($report))
- redirect($CFG->wwwroot.'/blocks/configurable_reports/editreport.php?id='.$report->id);
- else
- redirect($CFG->wwwroot.'/blocks/configurable_reports/editreport.php');
- }
- else if ($data = $editform->get_data()) {
- require_once($CFG->dirroot.'/blocks/configurable_reports/report.class.php');
- require_once($CFG->dirroot.'/blocks/configurable_reports/reports/'.$data->type.'/report.class.php');
- if(empty($report))
- $reportclassname = 'report_'.$data->type;
- else
- $reportclassname = 'report_'.$report->type;
- $arraydata = (array) $data;
- $data->export = '';
- foreach($arraydata as $key=>$d){
- if(strpos($key,'export_') !== false){
- $data->export .= str_replace('export_','',$key).',';
- }
- }
- if(!isset($data->global)) {
- $data->global = 0;
- }
- if(!isset($data->jsordering)) {
- $data->jsordering = 0;
- }
- if(!isset($data->remote)) {
- $data->remote = 0;
- }
- if(empty($report)){
- $data->ownerid = $USER->id;
- $data->courseid = $courseid;
- $data->visible = 1;
- $data->components = '';
- // extra check
- if($data->type == 'sql' && !has_capability('block/configurable_reports:managesqlreports',$context))
- print_error('nosqlpermissions');
- if(! $lastid = $DB->insert_record('block_configurable_reports',$data)){
- print_error('errorsavingreport','block_configurable_reports');
- }else{
- cr_add_to_log($courseid, 'configurable_reports', 'report created', '/block/configurable_reports/editreport.php?id='.$lastid, $data->name);
- $reportclass = new $reportclassname($lastid);
- redirect($CFG->wwwroot.'/blocks/configurable_reports/editcomp.php?id='.$lastid.'&comp='.$reportclass->components[0]);
- }
- }
- else{
- cr_add_to_log($report->courseid, 'configurable_reports', 'edit', '/block/configurable_reports/editreport.php?id='.$id, $report->name);
- $reportclass = new $reportclassname($data->id);
- $data->type = $report->type;
- if(! $DB->update_record('block_configurable_reports',$data)){
- print_error('errorsavingreport','block_configurable_reports');
- }else{
- redirect($CFG->wwwroot.'/blocks/configurable_reports/editcomp.php?id='.$data->id.'&comp='.$reportclass->components[0]);
- }
- }
- }
- $PAGE->set_context($context);
- $PAGE->set_pagelayout('incourse');
- $PAGE->set_title($title);
- $PAGE->set_heading( $title);
- $PAGE->set_cacheable( true);
- echo $OUTPUT->header();
- if($id){
- $currenttab = 'report';
- include('tabs.php');
- }
- $editform->display();
- echo $OUTPUT->footer();