From a3f2fa69b01051b125cc4c64b580274e48ff6a69 Mon Sep 17 00:00:00 2001 From: Sam Hemelryk Date: Thu, 16 Sep 2010 05:45:40 +0000 Subject: [PATCH] mod-assignment MDL-23848 Users can now view previously submit assignments if they no longer have the submit capability --- lang/en_utf8/assignment.php | 1 + mod/assignment/lib.php | 70 +++++++++++-------- .../type/online/assignment.class.php | 30 ++++---- .../type/upload/assignment.class.php | 56 +++++++-------- 4 files changed, 85 insertions(+), 72 deletions(-) diff --git a/lang/en_utf8/assignment.php b/lang/en_utf8/assignment.php index 39a08892476..84be54a6be5 100644 --- a/lang/en_utf8/assignment.php +++ b/lang/en_utf8/assignment.php @@ -135,6 +135,7 @@ $string['uploadfiletoobig'] = 'Sorry, but that file is too big (limit is $a byte $string['uploadnofilefound'] = 'No file was found - are you sure you selected one to upload?'; $string['uploadnotregistered'] = '\'$a\' was uploaded OK but submission did not register!'; $string['uploadsuccess'] = 'Uploaded \'$a\' successfully'; +$string['usernosubmit'] = 'Sorry, you are not allowed to submit an assignment.'; $string['viewfeedback'] = 'View assignment grades and feedback'; $string['viewsubmissions'] = 'View $a submitted assignments'; $string['yoursubmission'] = 'Your submission'; diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php index 3ae433cf164..59e0d1b94d0 100644 --- a/mod/assignment/lib.php +++ b/mod/assignment/lib.php @@ -209,13 +209,18 @@ class assignment_base { global $USER, $CFG; require_once($CFG->libdir.'/gradelib.php'); - if (!has_capability('mod/assignment:submit', $this->context, $USER->id, false)) { - // can not submit assignments -> no feedback - return; + if (!$submission) { /// Get submission for this assignment + $submission = $this->get_submission($USER->id, false); } - if (!$submission) { /// Get submission for this assignment - $submission = $this->get_submission($USER->id); + // Check the user can submit + $cansubmit = has_capability('mod/assignment:submit', $this->context, $USER->id, false); + // If not then check if ther user still has the view cap and has a previous submission + $cansubmit = $cansubmit || (!empty($submission) && has_capability('mod/assignment:view', $this->context, $USER->id, false)); + + if (!$cansubmit) { + // can not submit assignments -> no feedback + return; } $grading_info = grade_get_grades($this->course->id, 'mod', 'assignment', $this->assignment->id, $USER->id); @@ -809,14 +814,16 @@ class assignment_base { /// Get all ppl that can submit assignments $currentgroup = groups_get_activity_group($cm); - if ($users = get_users_by_capability($context, 'mod/assignment:submit', 'u.id', '', '', '', $currentgroup, '', false)) { - $users = array_keys($users); - } - // if groupmembersonly used, remove users who are not in any group - if ($users and !empty($CFG->enablegroupings) and $cm->groupmembersonly) { - if ($groupingusers = groups_get_grouping_members($cm->groupingid, 'u.id', 'u.id')) { - $users = array_intersect($users, array_keys($groupingusers)); + $gradebookroles = explode(",", $CFG->gradebookroles); + $users = get_role_users($gradebookroles, $context, true); + if ($users) { + $users = array_keys($users); + // if groupmembersonly used, remove users who are not in any group + if (!empty($CFG->enablegroupings) and $cm->groupmembersonly) { + if ($groupingusers = groups_get_grouping_members($cm->groupingid, 'u.id', 'u.id')) { + $users = array_intersect($users, array_keys($groupingusers)); + } } } @@ -1067,15 +1074,15 @@ class assignment_base { $currentgroup = groups_get_activity_group($cm, true); groups_print_activity_menu($cm, $CFG->wwwroot . '/mod/assignment/submissions.php?id=' . $this->cm->id); - /// Get all ppl that are allowed to submit assignments - if ($users = get_users_by_capability($context, 'mod/assignment:submit', 'u.id', '', '', '', $currentgroup, '', false)) { + $gradebookroles = explode(",", $CFG->gradebookroles); + $users = get_role_users($gradebookroles, $context, true); + if ($users) { $users = array_keys($users); - } - - // if groupmembersonly used, remove users who are not in any group - if ($users and !empty($CFG->enablegroupings) and $cm->groupmembersonly) { - if ($groupingusers = groups_get_grouping_members($cm->groupingid, 'u.id', 'u.id')) { - $users = array_intersect($users, array_keys($groupingusers)); + if (!empty($CFG->enablegroupings) and $cm->groupmembersonly) { + $groupingusers = groups_get_grouping_members($cm->groupingid, 'u.id', 'u.id'); + if ($groupingusers) { + $users = array_intersect($users, array_keys($groupingusers)); + } } } @@ -2776,18 +2783,19 @@ function assignment_count_real_submissions($cm, $groupid=0) { $context = get_context_instance(CONTEXT_MODULE, $cm->id); - // this is all the users with this capability set, in this context or higher - if ($users = get_users_by_capability($context, 'mod/assignment:submit', 'u.id', '', '', '', $groupid, '', false)) { + $gradebookroles = explode(",", $CFG->gradebookroles); + $users = get_role_users($gradebookroles, $context, true); + if ($users) { $users = array_keys($users); - } - - // if groupmembersonly used, remove users who are not in any group - if ($users and !empty($CFG->enablegroupings) and $cm->groupmembersonly) { - if ($groupingusers = groups_get_grouping_members($cm->groupingid, 'u.id', 'u.id')) { - $users = array_intersect($users, array_keys($groupingusers)); + // if groupmembersonly used, remove users who are not in any group + if (!empty($CFG->enablegroupings) and $cm->groupmembersonly) { + $groupingusers = groups_get_grouping_members($cm->groupingid, 'u.id', 'u.id'); + if ($groupingusers) { + $users = array_intersect($users, array_keys($groupingusers)); + } } } - + if (empty($users)) { return 0; } @@ -3005,7 +3013,9 @@ function assignment_print_overview($courses, &$htmlarray) { // count how many people can submit $submissions = 0; // init - if ($students = get_users_by_capability($context, 'mod/assignment:submit', 'u.id', '', '', '', 0, '', false)) { + $gradebookroles = explode(",", $CFG->gradebookroles); + $students = get_role_users($gradebookroles, $context, true); + if ($students) { foreach($students as $student){ if(isset($unmarkedsubmissions[$assignment->id][$student->id])){ $submissions++; diff --git a/mod/assignment/type/online/assignment.class.php b/mod/assignment/type/online/assignment.class.php index 09fb8fca0b3..515f0a3cd5a 100644 --- a/mod/assignment/type/online/assignment.class.php +++ b/mod/assignment/type/online/assignment.class.php @@ -84,7 +84,7 @@ class assignment_online extends assignment_base { if ($editmode) { $this->view_header(get_string('editmysubmission', 'assignment')); } else { - $this->view_header(); + $this->view_header(get_string('viewsubmissions', 'assignment')); } $this->view_intro(); @@ -95,28 +95,30 @@ class assignment_online extends assignment_base { notify(get_string('submissionsaved', 'assignment'), 'notifysuccess'); } - if (has_capability('mod/assignment:submit', $context)) { - if ($editmode) { - print_box_start('generalbox', 'online'); - $mform->display(); - } else { - print_box_start('generalbox boxwidthwide boxaligncenter', 'online'); - if ($submission) { - echo format_text($submission->data1, $submission->data2); - } else if (!has_capability('mod/assignment:submit', $context)) { //fix for #4604 + if ($editmode) { + print_box_start('generalbox', 'online'); + $mform->display(); + print_box_end(); + } else { + print_box_start('generalbox boxwidthwide boxaligncenter', 'online'); + if ($submission) { + echo format_text($submission->data1, $submission->data2); + } else if (!has_capability('mod/assignment:submit', $context)) { //fix for #4604 + if (isguest()) { echo '
'. get_string('guestnosubmit', 'assignment').'
'; - } else if ($this->isopen()){ //fix for #4206 - echo '
'.get_string('emptysubmission', 'assignment').'
'; + } else { + echo '
'. get_string('usernosubmit', 'assignment').'
'; } + } else if ($this->isopen()){ //fix for #4206 + echo '
'.get_string('emptysubmission', 'assignment').'
'; } print_box_end(); - if (!$editmode && $editable) { + if ($editable) { echo "
"; print_single_button('view.php', array('id'=>$this->cm->id,'edit'=>'1'), get_string('editmysubmission', 'assignment')); echo "
"; } - } $this->view_feedback(); diff --git a/mod/assignment/type/upload/assignment.class.php b/mod/assignment/type/upload/assignment.class.php index 3489b8cb23d..40f943b847c 100644 --- a/mod/assignment/type/upload/assignment.class.php +++ b/mod/assignment/type/upload/assignment.class.php @@ -36,37 +36,37 @@ class assignment_upload extends assignment_base { $this->view_dates(); - if (has_capability('mod/assignment:submit', $this->context)) { - $filecount = $this->count_user_files($USER->id); - $submission = $this->get_submission($USER->id); + $filecount = $this->count_user_files($USER->id); + $submission = $this->get_submission($USER->id); - $this->view_feedback(); + $this->view_feedback(); - if (!$this->drafts_tracked() or !$this->isopen() or $this->is_finalized($submission)) { - print_heading(get_string('submission', 'assignment'), '', 3); - } else { - print_heading(get_string('submissiondraft', 'assignment'), '', 3); - } - - if ($filecount and $submission) { - print_simple_box($this->print_user_files($USER->id, true), 'center'); - } else { - if (!$this->isopen() or $this->is_finalized($submission)) { - print_simple_box(get_string('nofiles', 'assignment'), 'center'); - } else { - print_simple_box(get_string('nofilesyet', 'assignment'), 'center'); - } - } - - $this->view_upload_form(); - - if ($this->notes_allowed()) { - print_heading(get_string('notes', 'assignment'), '', 3); - $this->view_notes(); - } - - $this->view_final_submission(); + if (!$this->drafts_tracked() or !$this->isopen() or $this->is_finalized($submission)) { + print_heading(get_string('submission', 'assignment'), '', 3); + } else { + print_heading(get_string('submissiondraft', 'assignment'), '', 3); } + + if ($filecount and $submission) { + print_simple_box($this->print_user_files($USER->id, true), 'center'); + } else { + if (!$this->isopen() or $this->is_finalized($submission)) { + print_simple_box(get_string('nofiles', 'assignment'), 'center'); + } else { + print_simple_box(get_string('nofilesyet', 'assignment'), 'center'); + } + } + + if (has_capability('mod/assignment:submit', $this->context)) { + $this->view_upload_form(); + } + + if ($this->notes_allowed()) { + print_heading(get_string('notes', 'assignment'), '', 3); + $this->view_notes(); + } + + $this->view_final_submission(); $this->view_footer(); }