mirror of
https://github.com/moodle/moodle.git
synced 2025-08-09 02:46:40 +02:00
MDL-31987 Assignment module: Assignment count submissions correctly.
For advanced upload assignment, store file count of each submission into assignment_submissions.numfiles When counting submissions, if the assignment is open and tracking drafts, only submissions which has send for marking are counted. Otherwise, submissions which has numfiles > 0 are counted. Also change a hardcoded 'submitted' to ASSIGNMENT_STATUS_SUBMITTED. This patch was originally written by: Sunner Sun <sunner@gmail.com>. I made some modifation to fixed count_real_submissions() query (ref: MDL-32207) in /mod/assignment/type/upload/assignment.class.php file
This commit is contained in:
parent
1494f20da3
commit
45353da409
3 changed files with 49 additions and 6 deletions
|
@ -32,6 +32,42 @@ function xmldb_assignment_upgrade($oldversion) {
|
||||||
// Moodle v2.3.0 release upgrade line
|
// Moodle v2.3.0 release upgrade line
|
||||||
// Put any upgrade step following this
|
// Put any upgrade step following this
|
||||||
|
|
||||||
|
if ($oldversion < 2012062800) {
|
||||||
|
// Fixed/updated numfiles field in assignment_submissions table to count the actual
|
||||||
|
// number of files has been uploaded.
|
||||||
|
upgrade_set_timeout(600); // increase excution time for in large sites
|
||||||
|
$fs = get_file_storage();
|
||||||
|
|
||||||
|
$selectcount = 'SELECT COUNT(s.id), cm.id AS cmid';
|
||||||
|
$select = 'SELECT s.id, cm.id AS cmid';
|
||||||
|
$query = " FROM {assignment_submissions} s
|
||||||
|
INNER JOIN {course_modules} cm
|
||||||
|
ON s.assignment = cm.instance
|
||||||
|
JOIN {assignment} a
|
||||||
|
ON a.id = s.assignment
|
||||||
|
WHERE a.assignmenttype in ('upload', 'uploadsingle') AND
|
||||||
|
cm.module = (SELECT id
|
||||||
|
FROM {modules}
|
||||||
|
WHERE name = 'assignment')";
|
||||||
|
|
||||||
|
$countsubmissions = $DB->count_records_sql($selectcount. $query);
|
||||||
|
$submissions = $DB->get_recordset_sql($select. $query);
|
||||||
|
|
||||||
|
$pbar = new progress_bar('assignmentupgradenumfiles', 500, true);
|
||||||
|
$i = 0;
|
||||||
|
foreach ($submissions as $sub) {
|
||||||
|
$i++;
|
||||||
|
if ($context = context_module::instance($sub->cmid)) {
|
||||||
|
$sub->numfiles = count($fs->get_area_files($context->id, 'mod_assignment', 'submission', $sub->id, 'sortorder', false));
|
||||||
|
$DB->update_record('assignment_submissions', $sub);
|
||||||
|
}
|
||||||
|
$pbar->update($i, $countsubmissions, "Counting files of submissions ($i/$countsubmissions)");
|
||||||
|
}
|
||||||
|
$submissions->close();
|
||||||
|
|
||||||
|
// assignment savepoint reached
|
||||||
|
upgrade_mod_savepoint(true, 2012062800, 'assignment');
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -395,8 +395,8 @@ class assignment_upload extends assignment_base {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Counts all complete (real) assignment submissions by enrolled students. This overrides assignment_base::count_real_submissions().
|
* Counts all complete (real) assignment submissions by enrolled students. This overrides assignment_base::count_real_submissions().
|
||||||
* This is necessary for advanced file uploads where we need to check that the data2 field is equal to "submitted" to determine
|
* This is necessary for tracked advanced file uploads where we need to check that the data2 field is equal to ASSIGNMENT_STATUS_SUBMITTED
|
||||||
* if a submission is complete.
|
* to determine if a submission is complete.
|
||||||
*
|
*
|
||||||
* @param int $groupid (optional) If nonzero then count is restricted to this group
|
* @param int $groupid (optional) If nonzero then count is restricted to this group
|
||||||
* @return int The number of submissions
|
* @return int The number of submissions
|
||||||
|
@ -411,13 +411,19 @@ class assignment_upload extends assignment_base {
|
||||||
list($enroledsql, $params) = get_enrolled_sql($context, 'mod/assignment:view', $groupid);
|
list($enroledsql, $params) = get_enrolled_sql($context, 'mod/assignment:view', $groupid);
|
||||||
$params['assignmentid'] = $this->cm->instance;
|
$params['assignmentid'] = $this->cm->instance;
|
||||||
|
|
||||||
// Get ids of users enrolled in the given course.
|
$query = '';
|
||||||
|
if ($this->drafts_tracked() and $this->isopen()) {
|
||||||
|
$query = ' AND ' . $DB->sql_compare_text('s.data2') . " = '" . ASSIGNMENT_STATUS_SUBMITTED . "'";
|
||||||
|
} else {
|
||||||
|
// Count on submissions with files actually uploaded
|
||||||
|
$query = " AND s.numfiles > 0";
|
||||||
|
}
|
||||||
return $DB->count_records_sql("SELECT COUNT('x')
|
return $DB->count_records_sql("SELECT COUNT('x')
|
||||||
FROM {assignment_submissions} s
|
FROM {assignment_submissions} s
|
||||||
LEFT JOIN {assignment} a ON a.id = s.assignment
|
LEFT JOIN {assignment} a ON a.id = s.assignment
|
||||||
INNER JOIN ($enroledsql) u ON u.id = s.userid
|
INNER JOIN ($enroledsql) u ON u.id = s.userid
|
||||||
WHERE s.assignment = :assignmentid AND
|
WHERE s.assignment = :assignmentid" .
|
||||||
s.data2 = 'submitted'", $params);
|
$query, $params);
|
||||||
}
|
}
|
||||||
|
|
||||||
function print_responsefiles($userid, $return=false) {
|
function print_responsefiles($userid, $return=false) {
|
||||||
|
@ -581,6 +587,7 @@ class assignment_upload extends assignment_base {
|
||||||
$formdata = file_postupdate_standard_filemanager($formdata, 'files', $options, $this->context, 'mod_assignment', 'submission', $submission->id);
|
$formdata = file_postupdate_standard_filemanager($formdata, 'files', $options, $this->context, 'mod_assignment', 'submission', $submission->id);
|
||||||
$updates = new stdClass();
|
$updates = new stdClass();
|
||||||
$updates->id = $submission->id;
|
$updates->id = $submission->id;
|
||||||
|
$updates->numfiles = count($fs->get_area_files($this->context->id, 'mod_assignment', 'submission', $submission->id, 'sortorder', false));
|
||||||
$updates->timemodified = time();
|
$updates->timemodified = time();
|
||||||
$DB->update_record('assignment_submissions', $updates);
|
$DB->update_record('assignment_submissions', $updates);
|
||||||
add_to_log($this->course->id, 'assignment', 'upload',
|
add_to_log($this->course->id, 'assignment', 'upload',
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
|
|
||||||
defined('MOODLE_INTERNAL') || die();
|
defined('MOODLE_INTERNAL') || die();
|
||||||
|
|
||||||
$module->version = 2012061700; // The current module version (Date: YYYYMMDDXX)
|
$module->version = 2012062800; // The current module version (Date: YYYYMMDDXX)
|
||||||
$module->requires = 2012061700; // Requires this Moodle version
|
$module->requires = 2012061700; // Requires this Moodle version
|
||||||
$module->component = 'mod_assignment'; // Full name of the plugin (used for diagnostics)
|
$module->component = 'mod_assignment'; // Full name of the plugin (used for diagnostics)
|
||||||
$module->cron = 60;
|
$module->cron = 60;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue