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 script lists all the instances of questionnaire in a particular course
*
* @package mod_questionnaire
* @copyright 2016 Mike Churchward (mike.churchward@poetopensource.org)
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once("../../config.php");
require_once($CFG->dirroot.'/mod/questionnaire/locallib.php');
$id = required_param('id', PARAM_INT);
$PAGE->set_url('/mod/questionnaire/index.php', array('id' => $id));
if (! $course = $DB->get_record('course', array('id' => $id))) {
throw new \moodle_exception('Filter has not been set.', 'mod_questionnaire');
}
$coursecontext = context_course::instance($id);
require_login($course->id);
$PAGE->set_pagelayout('incourse');
$event = \mod_questionnaire\event\course_module_instance_list_viewed::create(array(
'context' => context_course::instance($course->id)));
$event->trigger();
// Print the header.
$strquestionnaires = get_string("modulenameplural", "questionnaire");
$PAGE->navbar->add($strquestionnaires);
$PAGE->set_title("$course->shortname: $strquestionnaires");
$PAGE->set_heading(format_string($course->fullname));
echo $OUTPUT->header();
// Get all the appropriate data.
if (!$questionnaires = get_all_instances_in_course("questionnaire", $course)) {
notice(get_string('thereareno', 'moodle', $strquestionnaires), "../../course/view.php?id=$course->id");
die;
}
// Check if we need the closing date header.
$showclosingheader = false;
foreach ($questionnaires as $questionnaire) {
if ($questionnaire->closedate != 0) {
$showclosingheader = true;
}
if ($showclosingheader) {
break;
}
}
// Configure table for displaying the list of instances.
$headings = array(get_string('name'));
$align = array('left');
if ($showclosingheader) {
array_push($headings, get_string('questionnairecloses', 'questionnaire'));
array_push($align, 'left');
}
array_unshift($headings, get_string('sectionname', 'format_'.$course->format));
array_unshift($align, 'left');
$showing = '';
// Current user role == admin or teacher.
if (has_capability('mod/questionnaire:viewsingleresponse', $coursecontext)) {
array_push($headings, get_string('responses', 'questionnaire'));
array_push($align, 'center');
$showing = 'stats';
array_push($headings, get_string('realm', 'questionnaire'));
array_push($align, 'left');
// Current user role == student.
} else if (has_capability('mod/questionnaire:submit', $coursecontext)) {
array_push($headings, get_string('status'));
array_push($align, 'left');
$showing = 'responses';
}
$table = new html_table();
$table->head = $headings;
$table->align = $align;
// Populate the table with the list of instances.
$currentsection = '';
foreach ($questionnaires as $questionnaire) {
$cmid = $questionnaire->coursemodule;
$data = array();
$realm = $DB->get_field('questionnaire_survey', 'realm', array('id' => $questionnaire->sid));
// Template surveys should NOT be displayed as an activity to students.
if (!($realm == 'template' && !has_capability('mod/questionnaire:manage', context_module::instance($cmid)))) {
// Section number if necessary.
$strsection = '';
if ($questionnaire->section != $currentsection) {
$strsection = get_section_name($course, $questionnaire->section);
$currentsection = $questionnaire->section;
}
$data[] = $strsection;
// Show normal if the mod is visible.
$class = '';
if (!$questionnaire->visible) {
$class = ' class="dimmed"';
}
$data[] = "<a$class href=\"view.php?id=$cmid\">$questionnaire->name</a>";
// Close date.
if ($questionnaire->closedate) {
$data[] = userdate($questionnaire->closedate);
} else if ($showclosingheader) {
$data[] = '';
}
if ($showing == 'responses') {
$status = '';
if ($responses = questionnaire_get_user_responses($questionnaire->id, $USER->id, $complete = false)) {
foreach ($responses as $response) {
if ($response->complete == 'y') {
$status .= get_string('submitted', 'questionnaire').' '.userdate($response->submitted).'<br />';
} else {
$status .= get_string('attemptstillinprogress', 'questionnaire').' '.
userdate($response->submitted).'<br />';
}
}
}
$data[] = $status;
} else if ($showing == 'stats') {
$data[] = $DB->count_records('questionnaire_response', ['questionnaireid' => $questionnaire->id, 'complete' => 'y']);
if ($survey = $DB->get_record('questionnaire_survey', ['id' => $questionnaire->sid])) {
// For a public questionnaire, look for the original public questionnaire that it is based on.
if ($survey->realm == 'public') {
$strpreview = get_string('preview_questionnaire', 'questionnaire');
if ($survey->courseid != $course->id) {
$publicoriginal = '';
$originalcourse = $DB->get_record('course', ['id' => $survey->courseid]);
$originalcoursecontext = context_course::instance($survey->courseid);
$originalquestionnaire = $DB->get_record('questionnaire',
['sid' => $survey->id, 'course' => $survey->courseid]);
$cm = get_coursemodule_from_instance("questionnaire", $originalquestionnaire->id, $survey->courseid);
$context = context_course::instance($survey->courseid, MUST_EXIST);
$canvieworiginal = has_capability('mod/questionnaire:preview', $context, $USER->id, true);
// If current user can view questionnaires in original course,
// provide a link to the original public questionnaire.
if ($canvieworiginal) {
$publicoriginal = '<br />'.get_string('publicoriginal', 'questionnaire').' '.
'<a href="'.$CFG->wwwroot.'/mod/questionnaire/preview.php?id='.
$cm->id.'" title="'.$strpreview.']">'.$originalquestionnaire->name.' ['.
$originalcourse->fullname.']</a>';
} else {
// If current user is not enrolled as teacher in original course,
// only display the original public questionnaire's name and course name.
$publicoriginal = '<br />'.get_string('publicoriginal', 'questionnaire').' '.
$originalquestionnaire->name.' ['.$originalcourse->fullname.']';
}
$data[] = get_string($realm, 'questionnaire').' '.$publicoriginal;
} else {
// Original public questionnaire was created in current course.
// Find which courses it is used in.
$publiccopy = '';
$select = 'course != '.$course->id.' AND sid = '.$questionnaire->sid;
if ($copies = $DB->get_records_select('questionnaire', $select, null,
$sort = 'course ASC', $fields = 'id, course, name')) {
foreach ($copies as $copy) {
$copycourse = $DB->get_record('course', array('id' => $copy->course));
$select = 'course = '.$copycourse->id.' AND sid = '.$questionnaire->sid;
$copyquestionnaire = $DB->get_record('questionnaire',
array('id' => $copy->id, 'sid' => $survey->id, 'course' => $copycourse->id));
$cm = get_coursemodule_from_instance("questionnaire", $copyquestionnaire->id, $copycourse->id);
$context = context_course::instance($copycourse->id, MUST_EXIST);
$canviewcopy = has_capability('mod/questionnaire:view', $context, $USER->id, true);
if ($canviewcopy) {
$publiccopy .= '<br />'.get_string('publiccopy', 'questionnaire').' : '.
'<a href = "'.$CFG->wwwroot.'/mod/questionnaire/preview.php?id='.
$cm->id.'" title = "'.$strpreview.'">'.
$copyquestionnaire->name.' ['.$copycourse->fullname.']</a>';
} else {
// If current user does not have "view" capability in copy course,
// only display the copied public questionnaire's name and course name.
$publiccopy .= '<br />'.get_string('publiccopy', 'questionnaire').' : '.
$copyquestionnaire->name.' ['.$copycourse->fullname.']';
}
}
}
$data[] = get_string($realm, 'questionnaire').' '.$publiccopy;
}
} else {
$data[] = get_string($realm, 'questionnaire');
}
} else {
// If a questionnaire is a copy of a public questionnaire which has been deleted.
$data[] = get_string('removenotinuse', 'questionnaire');
}
}
}
$table->data[] = $data;
} // End of loop over questionnaire instances.
echo html_writer::table($table);
// Finish the page.
echo $OUTPUT->footer();