$current_tab = 'analysis';
-$id = required_param('id', PARAM_INT); //the POST dominated the GET
-$courseid = optional_param('courseid', false, PARAM_INT);
+$id = required_param('id', PARAM_INT); // Course module id.
$url = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id));
-if ($courseid !== false) {
- $url->param('courseid', $courseid);
-}
$PAGE->set_url($url);
-if (! $cm = get_coursemodule_from_id('feedback', $id)) {
- print_error('invalidcoursemodule');
-}
-
-if (! $course = $DB->get_record("course", array("id"=>$cm->course))) {
- print_error('coursemisconf');
-}
+list($course, $cm) = get_course_and_cm_from_cmid($id, 'feedback');
+require_course_login($course, true, $cm);
-if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) {
- print_error('invalidcoursemodule');
-}
+$feedback = $PAGE->activityrecord;
$context = context_module::instance($cm->id);
-if ($course->id == SITEID) {
- require_login($course, true);
-} else {
- require_login($course, true, $cm);
-}
-
-//check whether the given courseid exists
-if ($courseid AND $courseid != SITEID) {
- if ($course2 = $DB->get_record('course', array('id'=>$courseid))) {
- require_course_login($course2); //this overwrites the object $course :-(
- $course = $DB->get_record("course", array("id"=>$cm->course)); // the workaround
- } else {
- print_error('invalidcourseid');
- }
-}
-
-if ( !( ((intval($feedback->publish_stats) == 1) AND
- has_capability('mod/feedback:viewanalysepage', $context)) OR
- has_capability('mod/feedback:viewreports', $context))) {
+if (!feedback_can_view_analysis($feedback, $context)) {
print_error('error');
}
$gonextpage = $gopreviouspage = false;
}
-if (! $cm = get_coursemodule_from_id('feedback', $id)) {
- print_error('invalidcoursemodule');
-}
-
-if (! $course = $DB->get_record("course", array("id"=>$cm->course))) {
- print_error('coursemisconf');
-}
-
-if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) {
- print_error('invalidcoursemodule');
-}
+list($course, $cm) = get_course_and_cm_from_cmid($id, 'feedback');
+$feedback = $DB->get_record("feedback", array("id" => $cm->instance), '*', MUST_EXIST);
$context = context_module::instance($cm->id);
$feedback_complete_cap = true;
}
+if (!empty($CFG->feedback_allowfullanonymous)
+ AND $course->id == SITEID
+ AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES
+ AND (!isloggedin() OR isguestuser())) {
+ // Guests are allowed to complete fully anonymous feedback without having 'mod/feedback:complete' capability.
+ $feedback_complete_cap = true;
+}
+
//check whether the feedback is located and! started from the mainsite
if ($course->id == SITEID AND !$courseid) {
$courseid = SITEID;
}
}
-if ($feedback->anonymous != FEEDBACK_ANONYMOUS_YES) {
- if ($course->id == SITEID) {
- require_login($course, true);
- } else {
- require_login($course, true, $cm);
- }
-} else {
- if ($course->id == SITEID) {
- require_course_login($course, true);
- } else {
- require_course_login($course, true, $cm);
- }
-}
+require_course_login($course, true, $cm);
+$PAGE->set_activity_record($feedback);
//check whether the given courseid exists
if ($courseid AND $courseid != SITEID) {
// Mark activity viewed for completion-tracking
$completion = new completion_info($course);
-$completion->set_module_viewed($cm);
+if (isloggedin() && !isguestuser()) {
+ $completion->set_module_viewed($cm);
+}
/// Print the page header
$strfeedbacks = get_string("modulenameplural", "feedback");
$PAGE->set_title($feedback->name);
echo $OUTPUT->header();
-//ishidden check.
-//feedback in courses
-if ((empty($cm->visible) AND
- !has_capability('moodle/course:viewhiddenactivities', $context)) AND
- $course->id != SITEID) {
- notice(get_string("activityiscurrentlyhidden"));
-}
-
-//ishidden check.
-//feedback on mainsite
-if ((empty($cm->visible) AND
- !has_capability('moodle/course:viewhiddenactivities', $context)) AND
- $courseid == SITEID) {
- notice(get_string("activityiscurrentlyhidden"));
-}
-
//check, if the feedback is open (timeopen, timeclose)
$checktime = time();
$feedback_is_closed = ($feedback->timeopen > $checktime) ||
// Check if all required items have a value.
if (feedback_check_values($startitempos, $lastitempos)) {
$userid = $USER->id; //arb
- if ($completedid = feedback_save_values($USER->id, true)) {
+ if (isloggedin() && !isguestuser()) {
+ $completedid = feedback_save_values($USER->id, true);
+ } else {
+ $completedid = feedback_save_guest_values(sesskey());
+ }
+ if ($completedid) {
if (!$gonextpage AND !$gopreviouspage) {
$preservevalues = false;// It can be stored.
}
} else {
feedback_send_email_anonym($cm, $feedback, $course, $userid);
}
- //tracking the submit
- $tracking = new stdClass();
- $tracking->userid = $USER->id;
- $tracking->feedback = $feedback->id;
- $tracking->completed = $new_completed_id;
- $DB->insert_record('feedback_tracking', $tracking);
+ if (isloggedin() && !isguestuser()) {
+ // Tracking the submit.
+ $tracking = new stdClass();
+ $tracking->userid = $USER->id;
+ $tracking->feedback = $feedback->id;
+ $tracking->completed = $new_completed_id;
+ $DB->insert_record('feedback_tracking', $tracking);
+ }
unset($SESSION->feedback->is_started);
// Update completion state
$completion = new completion_info($course);
- if ($completion->is_enabled($cm) && $feedback->completionsubmit) {
+ if (isloggedin() && !isguestuser() && $completion->is_enabled($cm) && $feedback->completionsubmit) {
$completion->update_state($cm, COMPLETION_COMPLETE);
}
$feedbackcompletedtmp = feedback_set_tmp_values($feedbackcompleted);
}
}
- } else {
+ } else if (isloggedin() && !isguestuser()) {
$feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid);
+ } else {
+ $feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid, sesskey());
}
/// Print the main part of the page
}
echo $OUTPUT->heading(format_string($feedback->name));
- if ( (intval($feedback->publish_stats) == 1) AND
- ( has_capability('mod/feedback:viewanalysepage', $context)) AND
- !( has_capability('mod/feedback:viewreports', $context)) ) {
-
- $params = array('userid' => $USER->id, 'feedback' => $feedback->id);
- if ($multiple_count = $DB->count_records('feedback_tracking', $params)) {
- echo $OUTPUT->box_start('mdl-align');
- echo '<a href="'.$analysisurl->out().'">';
- echo get_string('completed_feedbacks', 'feedback').'</a>';
- echo $OUTPUT->box_end();
- }
- }
-
if (isset($savereturn) && $savereturn == 'saved') {
if ($feedback->page_after_submit) {
echo get_string('entries_saved', 'feedback');
echo '</font></b>';
echo '</p>';
- if ( intval($feedback->publish_stats) == 1) {
- echo '<p align="center"><a href="'.$analysisurl->out().'">';
- echo get_string('completed_feedbacks', 'feedback').'</a>';
- echo '</p>';
- }
+ }
+ if (feedback_can_view_analysis($feedback, $context, $courseid)) {
+ echo '<p align="center"><a href="'.$analysisurl->out().'">';
+ echo get_string('completed_feedbacks', 'feedback').'</a>';
+ echo '</p>';
}
if ($feedback->site_after_submit) {
echo $OUTPUT->box_start('feedback_form');
echo '<form action="complete.php" class="feedback_complete" method="post">';
echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
- echo $OUTPUT->box_start('feedback_anonymousinfo');
+ $anonymousmodeinfo = '';
switch ($feedback->anonymous) {
case FEEDBACK_ANONYMOUS_YES:
echo '<input type="hidden" name="anonymous" value="1" />';
$inputvalue = 'value="'.FEEDBACK_ANONYMOUS_YES.'"';
echo '<input type="hidden" name="anonymous_response" '.$inputvalue.' />';
- echo get_string('mode', 'feedback').': '.get_string('anonymous', 'feedback');
+ $anonymousmodeinfo = get_string('anonymous', 'feedback');
break;
case FEEDBACK_ANONYMOUS_NO:
echo '<input type="hidden" name="anonymous" value="0" />';
$inputvalue = 'value="'.FEEDBACK_ANONYMOUS_NO.'"';
echo '<input type="hidden" name="anonymous_response" '.$inputvalue.' />';
- echo get_string('mode', 'feedback').': ';
- echo get_string('non_anonymous', 'feedback');
+ $anonymousmodeinfo = get_string('non_anonymous', 'feedback');
break;
}
- echo $OUTPUT->box_end();
+ if (isloggedin() && !isguestuser()) {
+ echo $OUTPUT->box(get_string('mode', 'feedback') . ': ' . $anonymousmodeinfo, 'feedback_anonymousinfo');
+ }
//check, if there exists required-elements
$params = array('feedback' => $feedback->id, 'required' => 1);
$countreq = $DB->count_records('feedback_item', $params);
*/
require_once("../../config.php");
-require_once("lib.php");
-feedback_init_feedback_session();
-
-$id = required_param('id', PARAM_INT);
-$completedid = optional_param('completedid', false, PARAM_INT);
-$preservevalues = optional_param('preservevalues', 0, PARAM_INT);
-$courseid = optional_param('courseid', false, PARAM_INT);
-$gopage = optional_param('gopage', -1, PARAM_INT);
-$lastpage = optional_param('lastpage', false, PARAM_INT);
-$startitempos = optional_param('startitempos', 0, PARAM_INT);
-$lastitempos = optional_param('lastitempos', 0, PARAM_INT);
-
-$url = new moodle_url('/mod/feedback/complete_guest.php', array('id'=>$id));
-if ($completedid !== false) {
- $url->param('completedid', $completedid);
-}
-if ($preservevalues !== 0) {
- $url->param('preservevalues', $preservevalues);
-}
-if ($courseid !== false) {
- $url->param('courseid', $courseid);
-}
-if ($gopage !== -1) {
- $url->param('gopage', $gopage);
-}
-if ($lastpage !== false) {
- $url->param('lastpage', $lastpage);
-}
-if ($startitempos !== 0) {
- $url->param('startitempos', $startitempos);
-}
-if ($lastitempos !== 0) {
- $url->param('lastitempos', $lastitempos);
-}
-$PAGE->set_url($url);
-
-$highlightrequired = false;
-
-if (($formdata = data_submitted()) AND !confirm_sesskey()) {
- print_error('invalidsesskey');
-}
-
-//if the use hit enter into a textfield so the form should not submit
-if (isset($formdata->sesskey) AND
- !isset($formdata->savevalues) AND
- !isset($formdata->gonextpage) AND
- !isset($formdata->gopreviouspage)) {
-
- $gopage = (int) $formdata->lastpage;
-}
-if (isset($formdata->savevalues)) {
- $savevalues = true;
-} else {
- $savevalues = false;
-}
-
-if ($gopage < 0 AND !$savevalues) {
- if (isset($formdata->gonextpage)) {
- $gopage = $lastpage + 1;
- $gonextpage = true;
- $gopreviouspage = false;
- } else if (isset($formdata->gopreviouspage)) {
- $gopage = $lastpage - 1;
- $gonextpage = false;
- $gopreviouspage = true;
- } else {
- print_error('parameters_missing', 'feedback');
- }
-} else {
- $gonextpage = $gopreviouspage = false;
-}
-
-if (! $cm = get_coursemodule_from_id('feedback', $id)) {
- print_error('invalidcoursemodule');
-}
-
-if (! $course = $DB->get_record("course", array("id"=>$cm->course))) {
- print_error('coursemisconf');
-}
-
-if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) {
- print_error('invalidcoursemodule');
-}
-
-$context = context_module::instance($cm->id);
-
-$feedback_complete_cap = false;
-
-if (isset($CFG->feedback_allowfullanonymous)
- AND $CFG->feedback_allowfullanonymous
- AND $course->id == SITEID
- AND (!$courseid OR $courseid == SITEID)
- AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES ) {
- $feedback_complete_cap = true;
-}
-
-//check whether the feedback is anonymous
-if (isset($CFG->feedback_allowfullanonymous)
- AND $CFG->feedback_allowfullanonymous
- AND $feedback->anonymous == FEEDBACK_ANONYMOUS_YES
- AND $course->id == SITEID ) {
- $feedback_complete_cap = true;
-}
-if ($feedback->anonymous != FEEDBACK_ANONYMOUS_YES) {
- print_error('feedback_is_not_for_anonymous', 'feedback');
-}
-
-//check whether the user has a session
-// there used to be a sesskey test - this could not work - sorry
-
-//check whether the feedback is located and! started from the mainsite
-if ($course->id == SITEID AND !$courseid) {
- $courseid = SITEID;
-}
-
-require_course_login($course);
-
-if ($courseid AND $courseid != SITEID) {
- $course2 = $DB->get_record('course', array('id'=>$courseid));
- require_course_login($course2); //this overwrites the object $course :-(
- $course = $DB->get_record("course", array("id"=>$cm->course)); // the workaround
-}
-
-if (!$feedback_complete_cap) {
- print_error('error');
-}
-
-
-/// Print the page header
-$strfeedbacks = get_string("modulenameplural", "feedback");
-$strfeedback = get_string("modulename", "feedback");
-
-$PAGE->set_cm($cm, $course); // set's up global $COURSE
-$PAGE->set_pagelayout('incourse');
-
-$urlparams = array('id'=>$course->id);
-$PAGE->navbar->add($strfeedbacks, new moodle_url('/mod/feedback/index.php', $urlparams));
-$PAGE->navbar->add(format_string($feedback->name));
-$PAGE->set_heading($course->fullname);
-$PAGE->set_title($feedback->name);
-echo $OUTPUT->header();
-
-//ishidden check.
-//hidden feedbacks except feedbacks on mainsite are only accessible with related capabilities
-if ((empty($cm->visible) AND
- !has_capability('moodle/course:viewhiddenactivities', $context)) AND
- $course->id != SITEID) {
- notice(get_string("activityiscurrentlyhidden"));
-}
-
-//check, if the feedback is open (timeopen, timeclose)
-$checktime = time();
-
-$feedback_is_closed = ($feedback->timeopen > $checktime) ||
- ($feedback->timeclose < $checktime &&
- $feedback->timeclose > 0);
-
-if ($feedback_is_closed) {
- echo $OUTPUT->box_start('generalbox boxaligncenter');
- echo $OUTPUT->notification(get_string('feedback_is_not_open', 'feedback'));
- echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id);
- echo $OUTPUT->box_end();
- echo $OUTPUT->footer();
- exit;
-}
-
-//additional check for multiple-submit (prevent browsers back-button).
-//the main-check is in view.php
-$feedback_can_submit = true;
-if ($feedback->multiple_submit == 0 ) {
- if (feedback_is_already_submitted($feedback->id, $courseid)) {
- $feedback_can_submit = false;
- }
+// This file is no longer used, however it will remain here to redirect existing links to complete.php.
+$url = new moodle_url('/mod/feedback/complete.php');
+foreach ($_GET as $key => $value) {
+ $url->param($key, $value);
}
-if ($feedback_can_submit) {
- //preserving the items
- if ($preservevalues == 1) {
- if (!$SESSION->feedback->is_started == true) {
- print_error('error', 'error', $CFG->wwwroot.'/course/view.php?id='.$course->id);
- }
- //check, if all required items have a value
- if (feedback_check_values($startitempos, $lastitempos)) {
- $userid = $USER->id; //arb
- if ($completedid = feedback_save_guest_values(sesskey())) {
- //now it can be saved
- if (!$gonextpage AND !$gopreviouspage) {
- $preservevalues = false;
- }
-
- } else {
- $savereturn = 'failed';
- if (isset($lastpage)) {
- $gopage = $lastpage;
- } else {
- print_error('parameters_missing', 'feedback');
- }
- }
- } else {
- $savereturn = 'missing';
- $highlightrequired = true;
- if (isset($lastpage)) {
- $gopage = $lastpage;
- } else {
- print_error('parameters_missing', 'feedback');
- }
- }
- }
-
- //saving the items
- if ($savevalues AND !$preservevalues) {
- //exists there any pagebreak, so there are values in the feedback_valuetmp
- //arb changed from 0 to $USER->id
- //no strict anonymous feedbacks
- //if it is a guest taking it then I want to know that it was
- //a guest (at least in the data saved in the feedback tables)
- $userid = $USER->id;
-
- $params = array('id'=>$completedid);
- $feedbackcompletedtmp = $DB->get_record('feedback_completedtmp', $params);
-
- //fake saving for switchrole
- $is_switchrole = feedback_check_is_switchrole();
- if ($is_switchrole) {
- $savereturn = 'saved';
- feedback_delete_completedtmp($completedid);
- } else {
- $new_completed_id = feedback_save_tmp_values($feedbackcompletedtmp, false, $userid);
- if ($new_completed_id) {
- $savereturn = 'saved';
- feedback_send_email_anonym($cm, $feedback, $course, $userid);
- unset($SESSION->feedback->is_started);
-
- } else {
- $savereturn = 'failed';
- }
- }
- }
-
- if ($allbreaks = feedback_get_all_break_positions($feedback->id)) {
- if ($gopage <= 0) {
- $startposition = 0;
- } else {
- if (!isset($allbreaks[$gopage - 1])) {
- $gopage = count($allbreaks);
- }
- $startposition = $allbreaks[$gopage - 1];
- }
- $ispagebreak = true;
- } else {
- $startposition = 0;
- $newpage = 0;
- $ispagebreak = false;
- }
-
- //get the feedbackitems after the last shown pagebreak
- $select = 'feedback = ? AND position > ?';
- $params = array($feedback->id, $startposition);
- $feedbackitems = $DB->get_records_select('feedback_item', $select, $params, 'position');
-
- //get the first pagebreak
- $params = array('feedback'=>$feedback->id, 'typ'=>'pagebreak');
- if ($pagebreaks = $DB->get_records('feedback_item', $params, 'position')) {
- $pagebreaks = array_values($pagebreaks);
- $firstpagebreak = $pagebreaks[0];
- } else {
- $firstpagebreak = false;
- }
- $maxitemcount = $DB->count_records('feedback_item', array('feedback'=>$feedback->id));
- $feedbackcompletedtmp = feedback_get_current_completed($feedback->id,
- true,
- $courseid,
- sesskey());
-
- // Print the main part of the page.
- $analysisurl = new moodle_url('/mod/feedback/analysis.php', array('id'=>$id));
- if ($courseid > 0) {
- $analysisurl->param('courseid', $courseid);
- }
- echo $OUTPUT->heading(format_string($feedback->name));
-
- if ( (intval($feedback->publish_stats) == 1) AND
- ( has_capability('mod/feedback:viewanalysepage', $context)) AND
- !( has_capability('mod/feedback:viewreports', $context)) ) {
- echo $OUTPUT->box_start('mdl-align');
- echo '<a href="'.$analysisurl->out().'">';
- echo get_string('completed_feedbacks', 'feedback');
- echo '</a>';
- echo $OUTPUT->box_end();
- }
-
- if (isset($savereturn) && $savereturn == 'saved') {
- if ($feedback->page_after_submit) {
- require_once($CFG->libdir . '/filelib.php');
-
- $page_after_submit_output = file_rewrite_pluginfile_urls($feedback->page_after_submit,
- 'pluginfile.php',
- $context->id,
- 'mod_feedback',
- 'page_after_submit',
- 0);
-
- echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide');
- echo format_text($page_after_submit_output,
- $feedback->page_after_submitformat,
- array('overflowdiv' => true));
- echo $OUTPUT->box_end();
- } else {
- echo '<p align="center"><b><font color="green">';
- echo get_string('entries_saved', 'feedback');
- echo '</font></b></p>';
- if ( intval($feedback->publish_stats) == 1) {
- echo '<p align="center"><a href="'.$analysisurl->out().'">';
- echo get_string('completed_feedbacks', 'feedback').'</a>';
- echo '</p>';
- }
- }
- if ($feedback->site_after_submit) {
- $url = feedback_encode_target_url($feedback->site_after_submit);
- } else {
- if ($courseid) {
- if ($courseid == SITEID) {
- $url = $CFG->wwwroot;
- } else {
- $url = $CFG->wwwroot.'/course/view.php?id='.$courseid;
- }
- } else {
- if ($course->id == SITEID) {
- $url = $CFG->wwwroot;
- } else {
- $url = $CFG->wwwroot.'/course/view.php?id='.$course->id;
- }
- }
- }
- echo $OUTPUT->continue_button($url);
- } else {
- if (isset($savereturn) && $savereturn == 'failed') {
- echo $OUTPUT->box_start('mform');
- echo '<span class="error">'.get_string('saving_failed', 'feedback').'</span>';
- echo $OUTPUT->box_end();
- }
-
- if (isset($savereturn) && $savereturn == 'missing') {
- echo $OUTPUT->box_start('mform');
- echo '<span class="error">'.get_string('saving_failed_because_missing_or_false_values', 'feedback').'</span>';
- echo $OUTPUT->box_end();
- }
-
- //print the items
- if (is_array($feedbackitems)) {
- echo $OUTPUT->box_start('feedback_form');
- echo '<form action="complete_guest.php" class="mform" method="post" onsubmit=" ">';
- echo '<fieldset>';
- echo '<input type="hidden" name="anonymous" value="0" />';
- $inputvalue = 'value="'.FEEDBACK_ANONYMOUS_YES.'"';
- echo '<input type="hidden" name="anonymous_response" '.$inputvalue.' />';
- echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
- //check, if there exists required-elements
- $params = array('feedback'=>$feedback->id, 'required'=>1);
- $countreq = $DB->count_records('feedback_item', $params);
- if ($countreq > 0) {
- echo '<div class="fdescription required">';
- echo get_string('somefieldsrequired', 'form', '<img alt="'.get_string('requiredelement', 'form').
- '" src="'.$OUTPUT->pix_url('req') .'" class="req" />');
- echo '</div>';
- }
- echo $OUTPUT->box_start('feedback_items');
-
- $startitem = null;
- $select = 'feedback = ? AND hasvalue = 1 AND position < ?';
- $params = array($feedback->id, $startposition);
- $itemnr = $DB->count_records_select('feedback_item', $select, $params);
- $lastbreakposition = 0;
- $align = right_to_left() ? 'right' : 'left';
-
- foreach ($feedbackitems as $feedbackitem) {
- if (!isset($startitem)) {
- //avoid showing double pagebreaks
- if ($feedbackitem->typ == 'pagebreak') {
- continue;
- }
- $startitem = $feedbackitem;
- }
-
- if ($feedbackitem->dependitem > 0) {
- //chech if the conditions are ok
- $fb_compare_value = feedback_compare_item_value($feedbackcompletedtmp->id,
- $feedbackitem->dependitem,
- $feedbackitem->dependvalue,
- true);
- if (!isset($feedbackcompletedtmp->id) OR !$fb_compare_value) {
- $lastitem = $feedbackitem;
- $lastbreakposition = $feedbackitem->position;
- continue;
- }
- }
-
- if ($feedbackitem->dependitem > 0) {
- $dependstyle = ' feedback_complete_depend';
- } else {
- $dependstyle = '';
- }
-
- echo $OUTPUT->box_start('feedback_item_box_'.$align.$dependstyle);
- $value = '';
- //get the value
- $frmvaluename = $feedbackitem->typ . '_'. $feedbackitem->id;
- if (isset($savereturn)) {
- $value = isset($formdata->{$frmvaluename}) ? $formdata->{$frmvaluename} : null;
- $value = feedback_clean_input_value($feedbackitem, $value);
- } else {
- if (isset($feedbackcompletedtmp->id)) {
- $value = feedback_get_item_value($feedbackcompletedtmp->id,
- $feedbackitem->id,
- sesskey());
- }
- }
- if ($feedbackitem->hasvalue == 1 AND $feedback->autonumbering) {
- $itemnr++;
- echo $OUTPUT->box_start('feedback_item_number_'.$align);
- echo $itemnr;
- echo $OUTPUT->box_end();
- }
- if ($feedbackitem->typ != 'pagebreak') {
- echo $OUTPUT->box_start('box generalbox boxalign_'.$align);
- feedback_print_item_complete($feedbackitem, $value, $highlightrequired);
- echo $OUTPUT->box_end();
- }
-
- echo $OUTPUT->box_end();
-
- $lastbreakposition = $feedbackitem->position; //last item-pos (item or pagebreak)
- if ($feedbackitem->typ == 'pagebreak') {
- break;
- } else {
- $lastitem = $feedbackitem;
- }
- }
- echo $OUTPUT->box_end();
- echo '<input type="hidden" name="id" value="'.$id.'" />';
- echo '<input type="hidden" name="feedbackid" value="'.$feedback->id.'" />';
- echo '<input type="hidden" name="lastpage" value="'.$gopage.'" />';
- if (isset($feedbackcompletedtmp->id)) {
- $inputvalue = 'value="'.$feedbackcompletedtmp->id;
- } else {
- $inputvalue = 'value=""';
- }
- echo '<input type="hidden" name="completedid" '.$inputvalue.' />';
- echo '<input type="hidden" name="courseid" value="'. $courseid . '" />';
- echo '<input type="hidden" name="preservevalues" value="1" />';
- if (isset($startitem)) {
- echo '<input type="hidden" name="startitempos" value="'.$startitem->position.'" />';
- echo '<input type="hidden" name="lastitempos" value="'.$lastitem->position.'" />';
- }
-
- if ($ispagebreak AND $lastbreakposition > $firstpagebreak->position) {
- $inputvalue = 'value="'.get_string('previous_page', 'feedback').'"';
- echo '<input name="gopreviouspage" type="submit" '.$inputvalue.' />';
- }
- if ($lastbreakposition < $maxitemcount) {
- $inputvalue = 'value="'.get_string('next_page', 'feedback').'"';
- echo '<input name="gonextpage" type="submit" '.$inputvalue.' />';
- }
- if ($lastbreakposition >= $maxitemcount) { //last page
- $inputvalue = 'value="'.get_string('save_entries', 'feedback').'"';
- echo '<input name="savevalues" type="submit" '.$inputvalue.' />';
- }
-
- echo '</form>';
- echo $OUTPUT->box_end();
-
- echo $OUTPUT->box_start('feedback_complete_cancel');
- if ($courseid) {
- $action = 'action="'.$CFG->wwwroot.'/course/view.php?id='.$courseid.'"';
- } else {
- if ($course->id == SITEID) {
- $action = 'action="'.$CFG->wwwroot.'"';
- } else {
- $action = 'action="'.$CFG->wwwroot.'/course/view.php?id='.$course->id.'"';
- }
- }
- echo '<form '.$action.' method="post" onsubmit=" ">';
- echo '<input type="hidden" name="sesskey" value="'.sesskey().'" />';
- echo '<input type="hidden" name="courseid" value="'. $courseid . '" />';
- echo '<button type="submit">'.get_string('cancel').'</button>';
- echo '</form>';
- echo $OUTPUT->box_end();
- $SESSION->feedback->is_started = true;
- }
- }
-} else {
- echo $OUTPUT->box_start('generalbox boxaligncenter');
- echo $OUTPUT->notification(get_string('this_feedback_is_already_submitted', 'feedback'));
- echo $OUTPUT->continue_button($CFG->wwwroot.'/course/view.php?id='.$course->id);
- echo $OUTPUT->box_end();
-}
-/// Finish the page
-///////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
-
-echo $OUTPUT->footer();
-
+redirect($url);
}
return $result;
}
+
+/**
+ * Checks if current user is able to view feedback on this course.
+ *
+ * @param stdClass $feedback
+ * @param context_module $context
+ * @param int $courseid
+ * @return bool
+ */
+function feedback_can_view_analysis($feedback, $context, $courseid = false) {
+ if (has_capability('mod/feedback:viewreports', $context)) {
+ return true;
+ }
+
+ if (intval($feedback->publish_stats) != 1 ||
+ !has_capability('mod/feedback:viewanalysepage', $context)) {
+ return false;
+ }
+
+ if (!isloggedin() || isguestuser()) {
+ // There is no tracking for the guests, assume that they can view analysis if condition above is satisfied.
+ return $feedback->course == SITEID;
+ }
+
+ return feedback_is_already_submitted($feedback->id, $courseid);
+}
require_once("lib.php");
$id = required_param('id', PARAM_INT);
+$courseid = optional_param('courseid', false, PARAM_INT); // Course where this feedback is mapped to - used for return link.
$PAGE->set_url('/mod/feedback/print.php', array('id'=>$id));
-if (! $cm = get_coursemodule_from_id('feedback', $id)) {
- print_error('invalidcoursemodule');
-}
-
-if (! $course = $DB->get_record("course", array("id"=>$cm->course))) {
- print_error('coursemisconf');
-}
-
-if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) {
- print_error('invalidcoursemodule');
-}
-
-$context = context_module::instance($cm->id);
+list($course, $cm) = get_course_and_cm_from_cmid($id, 'feedback');
+require_course_login($course, true, $cm);
-require_login($course, true, $cm);
+$feedback = $PAGE->activityrecord;
-require_capability('mod/feedback:view', $context);
$PAGE->set_pagelayout('embedded');
/// Print the page header
///////////////////////////////////////////////////////////////////////////
echo $OUTPUT->heading(format_text($feedback->name));
+$continueurl = new moodle_url('/mod/feedback/view.php', array('id' => $id));
+if ($courseid) {
+ $continueurl->param('courseid', $courseid);
+}
+
$feedbackitems = $DB->get_records('feedback_item', array('feedback'=>$feedback->id), 'position');
echo $OUTPUT->box_start('generalbox boxaligncenter boxwidthwide');
-echo $OUTPUT->continue_button('view.php?id='.$id);
+echo $OUTPUT->continue_button($continueurl);
if (is_array($feedbackitems)) {
$itemnr = 0;
$align = right_to_left() ? 'right' : 'left';
echo $OUTPUT->box(get_string('no_items_available_yet', 'feedback'),
'generalbox boxaligncenter boxwidthwide');
}
-echo $OUTPUT->continue_button('view.php?id='.$id);
+echo $OUTPUT->continue_button($continueurl);
echo $OUTPUT->box_end();
/// Finish the page
///////////////////////////////////////////////////////////////////////////
$feedback_completeds_count = $DB->count_records('feedback_completed', $params);
print_string('anonymous_entries', 'feedback');
- echo ' ('.$feedback_completeds_count.')';
+ echo ' ('.$feedback_completeds_count.')';
?>
</td>
<td align="right">
--- /dev/null
+@mod @mod_feedback
+Feature: Anonymous feedback
+ In order to collect feedbacks
+ As an admin
+ I need to be able to allow anonymous feedbacks
+
+ Background:
+ Given the following "users" exist:
+ | username | firstname | lastname |
+ | user1 | Username | 1 |
+ | user2 | Username | 2 |
+ | teacher | Teacher | 3 |
+ | manager | Manager | 4 |
+ And the following "courses" exist:
+ | fullname | shortname |
+ | Course 1 | C1 |
+ And the following "course enrolments" exist:
+ | user | course | role |
+ | user1 | C1 | student |
+ | user2 | C1 | student |
+ | teacher | C1 | editingteacher |
+ And the following "system role assigns" exist:
+ | user | course | role |
+ | manager | Acceptance test site | manager |
+ And I log in as "admin"
+ And I navigate to "Manage activities" node in "Site administration > Plugins > Activity modules"
+ And I click on "Show" "link" in the "Feedback" "table_row"
+ And I log out
+ And the following "activities" exist:
+ | activity | name | course | idnumber | anonymous | publish_stats |
+ | feedback | Site feedback | Acceptance test site | feedback0 | 1 | 1 |
+ | feedback | Course feedback | C1 | feedback1 | 1 | 1 |
+ When I log in as "manager"
+ And I am on site homepage
+ And I follow "Site feedback"
+ And I follow "Edit questions"
+ And I add a "Multiple choice" question to the feedback with:
+ | Question | Do you like our site? |
+ | Label | multichoice2 |
+ | Multiple choice type | Multiple choice - single answer |
+ | Hide the "Not selected" option | Yes |
+ | Multiple choice values | Yes\nNo\nI don't know |
+ And I log out
+
+ Scenario: Guests can see anonymous feedback on front page but can not complete
+ When I follow "Site feedback"
+ Then I should not see "Answer the questions..."
+ And I follow "Preview"
+ And I should see "Do you like our site?"
+ And I press "Continue"
+
+ Scenario: Complete anonymous feedback on the front page as an authenticated user
+ And I log in as "admin"
+ And I set the following system permissions of "Authenticated user" role:
+ | capability | permission |
+ | mod/feedback:view | Allow |
+ | mod/feedback:complete | Allow |
+ And I log out
+ And I log in as "user1"
+ And I am on site homepage
+ When I follow "Site feedback"
+ And I follow "Preview"
+ And I should see "Do you like our site?"
+ And I press "Continue"
+ And I follow "Answer the questions..."
+ And I should see "Do you like our site?"
+ And I set the following fields to these values:
+ | Yes | 1 |
+ And I press "Submit your answers"
+ And I should not see "Submitted answers"
+ And I press "Continue"
+
+ Scenario: Complete anonymous feedback and view analysis on the front page as an authenticated user
+ And I log in as "admin"
+ And I set the following system permissions of "Authenticated user on frontpage" role:
+ | capability | permission |
+ | mod/feedback:view | Allow |
+ | mod/feedback:complete | Allow |
+ | mod/feedback:viewanalysepage | Allow |
+ And I log out
+ And I log in as "user1"
+ And I am on site homepage
+ When I follow "Site feedback"
+ And I follow "Preview"
+ And I should see "Do you like our site?"
+ And I press "Continue"
+ And I follow "Answer the questions..."
+ And I should see "Do you like our site?"
+ And I set the following fields to these values:
+ | Yes | 1 |
+ And I press "Submit your answers"
+ And I log out
+ And I log in as "user2"
+ And I am on site homepage
+ When I follow "Site feedback"
+ And I follow "Preview"
+ And I should see "Do you like our site?"
+ And I press "Continue"
+ And I follow "Answer the questions..."
+ And I set the following fields to these values:
+ | No | 1 |
+ And I press "Submit your answers"
+ And I follow "Submitted answers"
+ And I should see "Submitted answers: 2"
+ And I should see "Questions: 1"
+ # And I should not see "multichoice2" # TODO MDL-29303 do not show labels to users who can not edit feedback
+ And I should see "Do you like our site?"
+ And I should see "1 (50.00 %)" in the "Yes:" "table_row"
+ And I should see "1 (50.00 %)" in the "No:" "table_row"
+ And I log out
+ And I log in as "manager"
+ And I am on site homepage
+ And I follow "Site feedback"
+ And I follow "Show responses"
+ And I should not see "Username"
+ And I should see "Anonymous entries (2)"
+ And I press "Show responses"
+ And I should not see "Username"
+ And I click on "Show response" "link" in the "Response number: 1" "table_row"
+ And I should not see "Username"
+ And I should see "Response number: 1 (Anonymous)"
+ And I log out
+
+ Scenario: Complete fully anonymous feedback on the front page as a guest
+ And I log in as "admin"
+ And I set the following administration settings values:
+ | feedback_allowfullanonymous | 1 |
+ And I log out
+ When I follow "Site feedback"
+ And I follow "Preview"
+ And I should see "Do you like our site?"
+ And I press "Continue"
+ And I follow "Answer the questions..."
+ And I should see "Do you like our site?"
+ And I set the following fields to these values:
+ | Yes | 1 |
+ And I press "Submit your answers"
+ And I should not see "Submitted answers"
+ And I press "Continue"
+
+ Scenario: Complete fully anonymous feedback and view analyze on the front page as a guest
+ And I log in as "admin"
+ And I set the following administration settings values:
+ | feedback_allowfullanonymous | 1 |
+ And I set the following system permissions of "Guest" role:
+ | capability | permission |
+ | mod/feedback:viewanalysepage | Allow |
+ And I log out
+ When I follow "Site feedback"
+ And I follow "Preview"
+ And I should see "Do you like our site?"
+ And I press "Continue"
+ And I follow "Answer the questions..."
+ And I should see "Do you like our site?"
+ And I set the following fields to these values:
+ | Yes | 1 |
+ And I press "Submit your answers"
+ And I press "Continue"
+ # Starting new feedback
+ When I follow "Site feedback"
+ And I follow "Preview"
+ And I should see "Do you like our site?"
+ And I press "Continue"
+ And I follow "Answer the questions..."
+ And I should see "Do you like our site?"
+ And I set the following fields to these values:
+ | No | 1 |
+ And I press "Submit your answers"
+ And I follow "Submitted answers"
+ And I should see "Submitted answers: 2"
+ And I should see "Questions: 1"
+ # And I should not see "multichoice2" # TODO MDL-29303
+ And I should see "Do you like our site?"
+ And I should see "1 (50.00 %)" in the "Yes:" "table_row"
+ And I should see "1 (50.00 %)" in the "No:" "table_row"
+ And I log in as "manager"
+ And I am on site homepage
+ And I follow "Site feedback"
+ And I follow "Show responses"
+ And I should see "Anonymous entries (2)"
+ And I press "Show responses"
+ And I click on "Show response" "link" in the "Response number: 1" "table_row"
+ And I should see "Response number: 1 (Anonymous)"
+ And I log out
+
+ Scenario: Anonymous feedback in a course
+ # Teacher can not
+ When I log in as "teacher"
+ And I follow "Course 1"
+ And I follow "Course feedback"
+ And I follow "Edit questions"
+ And I add a "Multiple choice" question to the feedback with:
+ | Question | Do you like this course? |
+ | Label | multichoice1 |
+ | Multiple choice type | Multiple choice - single answer |
+ | Hide the "Not selected" option | Yes |
+ | Multiple choice values | Yes\nNo\nI don't know |
+ And I log out
+ And I log in as "user1"
+ And I follow "Course 1"
+ And I follow "Course feedback"
+ And I follow "Preview"
+ Then I should see "Do you like this course?"
+ And I press "Continue"
+ And I follow "Answer the questions..."
+ And I should see "Do you like this course?"
+ And I set the following fields to these values:
+ | Yes | 1 |
+ And I press "Submit your answers"
+ And I log out
+ And I log in as "user2"
+ And I follow "Course 1"
+ And I follow "Course feedback"
+ And I follow "Preview"
+ And I should see "Do you like this course?"
+ And I press "Continue"
+ And I follow "Answer the questions..."
+ And I should see "Do you like this course?"
+ And I set the following fields to these values:
+ | No | 1 |
+ And I press "Submit your answers"
+ And I follow "Submitted answers"
+ And I should see "Submitted answers: 2"
+ And I should see "Questions: 1"
+ # And I should not see "multichoice2" # TODO MDL-29303
+ And I should see "Do you like this course?"
+ And I should see "1 (50.00 %)" in the "Yes:" "table_row"
+ And I should see "1 (50.00 %)" in the "No:" "table_row"
+ And I log out
+ And I log in as "teacher"
+ And I follow "Course 1"
+ And I follow "Course feedback"
+ And I follow "Preview"
+ And I should see "Do you like this course?"
+ And I press "Continue"
+ And I should not see "Answer the questions..."
+ And I follow "Show responses"
+ And I should not see "Username"
+ And I should see "Anonymous entries (2)"
+ And I press "Show responses"
+ And I should not see "Username"
+ And I click on "Show response" "link" in the "Response number: 1" "table_row"
+ And I should not see "Username"
+ And I should see "Response number: 1 (Anonymous)"
+ And I log out
\ No newline at end of file
$courseid = SITEID;
}
-if ($feedback->anonymous != FEEDBACK_ANONYMOUS_YES) {
- if ($course->id == SITEID) {
- require_login($course, true);
- } else {
- require_login($course, true, $cm);
- }
-} else {
- if ($course->id == SITEID) {
- require_course_login($course, true);
- } else {
- require_course_login($course, true, $cm);
- }
-}
+require_course_login($course, true, $cm);
if ($course->id == SITEID) {
$PAGE->set_context($context);
$strfeedback = get_string("modulename", "feedback");
echo $OUTPUT->header();
-//ishidden check.
-//feedback in courses
-$cap_viewhiddenactivities = has_capability('moodle/course:viewhiddenactivities', $context);
-if ((empty($cm->visible) and !$cap_viewhiddenactivities) AND $course->id != SITEID) {
- notice(get_string("activityiscurrentlyhidden"));
-}
-
-//ishidden check.
-//feedback on mainsite
-if ((empty($cm->visible) and !$cap_viewhiddenactivities) AND $courseid == SITEID) {
- notice(get_string("activityiscurrentlyhidden"));
-}
-
/// Print the main part of the page
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
$previewimg = $OUTPUT->pix_icon('t/preview', get_string('preview'));
$previewlnk = new moodle_url('/mod/feedback/print.php', array('id' => $id));
+if ($courseid) {
+ $previewlnk->param('courseid', $courseid);
+}
$preview = html_writer::link($previewlnk, $previewimg);
echo $OUTPUT->heading(format_string($feedback->name) . $preview);
if ($feedback_can_submit) {
//if the user is not known so we cannot save the values temporarly
if (!isloggedin() or isguestuser()) {
- $completefile = 'complete_guest.php';
$guestid = sesskey();
} else {
- $completefile = 'complete.php';
$guestid = false;
}
$url_params = array('id'=>$id, 'courseid'=>$courseid, 'gopage'=>0);
- $completeurl = new moodle_url('/mod/feedback/'.$completefile, $url_params);
+ $completeurl = new moodle_url('/mod/feedback/complete.php', $url_params);
$feedbackcompletedtmp = feedback_get_current_completed($feedback->id, true, $courseid, $guestid);
if ($feedbackcompletedtmp) {