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/>./*** This page shows results of a questionnaire to a student.** @package mod_questionnaire* @copyright 2016 Mike Churchward (mike.churchward@poetgroup.org)* @author Mike Churchward* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later**/require_once("../../config.php");require_once($CFG->dirroot.'/mod/questionnaire/questionnaire.class.php');$instance = required_param('instance', PARAM_INT); // Questionnaire ID.$userid = optional_param('user', $USER->id, PARAM_INT);$rid = optional_param('rid', null, PARAM_INT);$byresponse = optional_param('byresponse', 0, PARAM_INT);$action = optional_param('action', 'summary', PARAM_ALPHA);$currentgroupid = optional_param('group', 0, PARAM_INT); // Groupid.if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $instance))) {throw new \moodle_exception('incorrectquestionnaire', 'mod_questionnaire');}if (! $course = $DB->get_record("course", array("id" => $questionnaire->course))) {throw new \moodle_exception('coursemisconf', 'mod_questionnaire');}if (! $cm = get_coursemodule_from_instance("questionnaire", $questionnaire->id, $course->id)) {throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire');}require_course_login($course, true, $cm);$context = context_module::instance($cm->id);$questionnaire->canviewallgroups = has_capability('moodle/site:accessallgroups', $context);// Should never happen, unless called directly by a snoop...if ( !has_capability('mod/questionnaire:readownresponses', $context)|| $userid != $USER->id) {throw new \moodle_exception('nopermissions', 'mod_questionnaire');}$url = new moodle_url($CFG->wwwroot.'/mod/questionnaire/myreport.php', array('instance' => $instance));if (isset($userid)) {$url->param('userid', $userid);}if (isset($byresponse)) {$url->param('byresponse', $byresponse);}if (isset($currentgroupid)) {$url->param('group', $currentgroupid);}if (isset($action)) {$url->param('action', $action);}$PAGE->set_url($url);$PAGE->set_context($context);$PAGE->set_title(get_string('questionnairereport', 'questionnaire'));$PAGE->set_heading(format_string($course->fullname));$questionnaire = new questionnaire($course, $cm, 0, $questionnaire);// Add renderer and page objects to the questionnaire object for display use.$questionnaire->add_renderer($PAGE->get_renderer('mod_questionnaire'));$questionnaire->add_page(new \mod_questionnaire\output\reportpage());$sid = $questionnaire->survey->id;$courseid = $course->id;// Tab setup.if (!isset($SESSION->questionnaire)) {$SESSION->questionnaire = new stdClass();}$SESSION->questionnaire->current_tab = 'myreport';switch ($action) {case 'summary':if (empty($questionnaire->survey)) {throw new \moodle_exception('surveynotexists', 'mod_questionnaire');}$SESSION->questionnaire->current_tab = 'mysummary';$resps = $questionnaire->get_responses($userid);$rids = array_keys($resps);if (count($resps) > 1) {$titletext = get_string('myresponsetitle', 'questionnaire', count($resps));} else {$titletext = get_string('yourresponse', 'questionnaire');}// Print the page header.echo $questionnaire->renderer->header();// Print the tabs.include('tabs.php');$questionnaire->page->add_to_page('myheaders', $titletext);$questionnaire->survey_results($rids, $USER->id);echo $questionnaire->renderer->render($questionnaire->page);// Finish the page.echo $questionnaire->renderer->footer($course);break;case 'vall':if (empty($questionnaire->survey)) {throw new \moodle_exception('surveynotexists', 'mod_questionnaire');}$SESSION->questionnaire->current_tab = 'myvall';$questionnaire->add_user_responses($userid);$titletext = get_string('myresponses', 'questionnaire');// Print the page header.echo $questionnaire->renderer->header();// Print the tabs.include('tabs.php');$questionnaire->page->add_to_page('myheaders', $titletext);$questionnaire->view_all_responses();echo $questionnaire->renderer->render($questionnaire->page);// Finish the page.echo $questionnaire->renderer->footer($course);break;case 'vresp':if (empty($questionnaire->survey)) {throw new \moodle_exception('surveynotexists', 'mod_questionnaire');}$SESSION->questionnaire->current_tab = 'mybyresponse';$usergraph = get_config('questionnaire', 'usergraph');if ($usergraph) {$charttype = $questionnaire->survey->chart_type;if ($charttype) {$PAGE->requires->js('/mod/questionnaire/javascript/RGraph/RGraph.common.core.js');switch ($charttype) {case 'bipolar':$PAGE->requires->js('/mod/questionnaire/javascript/RGraph/RGraph.bipolar.js');break;case 'hbar':$PAGE->requires->js('/mod/questionnaire/javascript/RGraph/RGraph.hbar.js');break;case 'radar':$PAGE->requires->js('/mod/questionnaire/javascript/RGraph/RGraph.radar.js');break;case 'rose':$PAGE->requires->js('/mod/questionnaire/javascript/RGraph/RGraph.rose.js');break;case 'vprogress':$PAGE->requires->js('/mod/questionnaire/javascript/RGraph/RGraph.vprogress.js');break;}}}$resps = $questionnaire->get_responses($userid);// All participants.$respsallparticipants = $questionnaire->get_responses();$respsuser = $questionnaire->get_responses($userid);$SESSION->questionnaire->numrespsallparticipants = count($respsallparticipants);$SESSION->questionnaire->numselectedresps = $SESSION->questionnaire->numrespsallparticipants;$iscurrentgroupmember = false;// Available group modes (0 = no groups; 1 = separate groups; 2 = visible groups).$groupmode = groups_get_activity_groupmode($cm, $course);if ($groupmode > 0) {// Check if current user is member of any group.$usergroups = groups_get_user_groups($courseid, $userid);$isgroupmember = count($usergroups[0]) > 0;// Check if current user is member of current group.$iscurrentgroupmember = groups_is_member($currentgroupid, $userid);if ($groupmode == 1) {$questionnairegroups = groups_get_all_groups($course->id, $userid);}if ($groupmode == 2 || $questionnaire->canviewallgroups) {$questionnairegroups = groups_get_all_groups($course->id);}if (!empty($questionnairegroups)) {$groupscount = count($questionnairegroups);foreach ($questionnairegroups as $key) {$firstgroupid = $key->id;break;}if ($groupscount === 0 && $groupmode == 1) {$currentgroupid = 0;}if ($groupmode == 1 && !$questionnaire->canviewallgroups && $currentgroupid == 0) {$currentgroupid = $firstgroupid;}// If currentgroup is All Participants, current user is of course member of that "group"!if ($currentgroupid == 0) {$iscurrentgroupmember = true;}// Current group members.$currentgroupresps = $questionnaire->get_responses(false, $currentgroupid);} else {// Groupmode = separate groups but user is not member of any group// and does not have moodle/site:accessallgroups capability -> refuse view responses.if (!$questionnaire->canviewallgroups) {$currentgroupid = 0;}}if ($currentgroupid > 0) {$groupname = get_string('group').' <strong>'.groups_get_group_name($currentgroupid).'</strong>';} else {$groupname = '<strong>'.get_string('allparticipants').'</strong>';}}$rids = array_keys($resps);if (!$rid) {// If more than one response for this respondent, display most recent response.$rid = end($rids);}$numresp = count($rids);if ($numresp > 1) {$titletext = get_string('myresponsetitle', 'questionnaire', $numresp);} else {$titletext = get_string('yourresponse', 'questionnaire');}$compare = false;// Print the page header.echo $questionnaire->renderer->header();// Print the tabs.include('tabs.php');$questionnaire->page->add_to_page('myheaders', $titletext);if (count($resps) > 1) {$userresps = $resps;$questionnaire->survey_results_navbar_student ($rid, $userid, $instance, $userresps);}$resps = array();// Determine here which "global" responses should get displayed for comparison with current user.// Current user is viewing his own group's results.if (isset($currentgroupresps)) {$resps = $currentgroupresps;}// Current user is viewing another group's results so we must add their own results to that group's results.if (!$iscurrentgroupmember) {$resps += $respsuser;}// No groups.if ($groupmode == 0 || $currentgroupid == 0) {$resps = $respsallparticipants;}$compare = true;$questionnaire->view_response($rid, null, $resps, $compare, $iscurrentgroupmember, false, $currentgroupid);// Finish the page.echo $questionnaire->renderer->render($questionnaire->page);echo $questionnaire->renderer->footer($course);break;case get_string('return', 'questionnaire'):default:redirect('view.php?id='.$cm->id);}