diff --git a/mod/feedback/analysis.php b/mod/feedback/analysis.php index 6fa61e59342..928ad4362ad 100644 --- a/mod/feedback/analysis.php +++ b/mod/feedback/analysis.php @@ -27,48 +27,19 @@ require_once("lib.php"); $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'); -} +list($course, $cm) = get_course_and_cm_from_cmid($id, 'feedback'); +require_course_login($course, true, $cm); -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'); -} +$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'); } diff --git a/mod/feedback/complete.php b/mod/feedback/complete.php index 07319070527..c9f6825e93a 100644 --- a/mod/feedback/complete.php +++ b/mod/feedback/complete.php @@ -75,17 +75,8 @@ if ($gopage < 0 AND !$savevalues) { $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); @@ -95,6 +86,14 @@ if (has_capability('mod/feedback:complete', $context)) { $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; @@ -110,19 +109,8 @@ if ($course->id == SITEID AND !has_capability('mod/feedback:edititems', $context } } -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) { @@ -140,7 +128,9 @@ if (!$feedback_complete_cap) { // 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"); @@ -158,22 +148,6 @@ $PAGE->set_heading($course->fullname); $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) || @@ -207,7 +181,12 @@ if ($feedback_can_submit) { // 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. } @@ -260,17 +239,19 @@ if ($feedback_can_submit) { } 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); } @@ -326,8 +307,10 @@ if ($feedback_can_submit) { $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 @@ -340,19 +323,6 @@ if ($feedback_can_submit) { } 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 ''; - echo get_string('completed_feedbacks', 'feedback').''; - echo $OUTPUT->box_end(); - } - } - if (isset($savereturn) && $savereturn == 'saved') { if ($feedback->page_after_submit) { @@ -376,11 +346,11 @@ if ($feedback_can_submit) { echo get_string('entries_saved', 'feedback'); echo ''; echo '
'; - if ( intval($feedback->publish_stats) == 1) { - echo ''; - echo get_string('completed_feedbacks', 'feedback').''; - echo '
'; - } + } + if (feedback_can_view_analysis($feedback, $context, $courseid)) { + echo ''; + echo get_string('completed_feedbacks', 'feedback').''; + echo '
'; } if ($feedback->site_after_submit) { @@ -419,23 +389,24 @@ if ($feedback_can_submit) { echo $OUTPUT->box_start('feedback_form'); echo ''; - 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 ''; - 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); diff --git a/mod/feedback/lib.php b/mod/feedback/lib.php index a81a54ad756..f28d769bb13 100644 --- a/mod/feedback/lib.php +++ b/mod/feedback/lib.php @@ -3220,3 +3220,29 @@ function feedback_ajax_saveitemorder($itemlist, $feedback) { } 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); +} diff --git a/mod/feedback/print.php b/mod/feedback/print.php index d5dfd817913..9a79dcfb3e7 100644 --- a/mod/feedback/print.php +++ b/mod/feedback/print.php @@ -26,26 +26,15 @@ require_once("../../config.php"); 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'); -} +list($course, $cm) = get_course_and_cm_from_cmid($id, 'feedback'); +require_course_login($course, true, $cm); -if (! $course = $DB->get_record("course", array("id"=>$cm->course))) { - print_error('coursemisconf'); -} +$feedback = $PAGE->activityrecord; -if (! $feedback = $DB->get_record("feedback", array("id"=>$cm->instance))) { - print_error('invalidcoursemodule'); -} - -$context = context_module::instance($cm->id); - -require_login($course, true, $cm); - -require_capability('mod/feedback:view', $context); $PAGE->set_pagelayout('embedded'); /// Print the page header @@ -66,9 +55,14 @@ echo $OUTPUT->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'; @@ -111,7 +105,7 @@ if (is_array($feedbackitems)) { 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 /////////////////////////////////////////////////////////////////////////// diff --git a/mod/feedback/show_entries.php b/mod/feedback/show_entries.php index c31bddf7b31..ee1a6b69664 100644 --- a/mod/feedback/show_entries.php +++ b/mod/feedback/show_entries.php @@ -277,7 +277,7 @@ if ($do_show == 'showentries') { $feedback_completeds_count = $DB->count_records('feedback_completed', $params); print_string('anonymous_entries', 'feedback'); - echo ' ('.$feedback_completeds_count.')'; + echo ' ('.$feedback_completeds_count.')'; ?>