diff --git a/lang/en/assignment.php b/lang/en/assignment.php
index 9745b20d314..bc2bfa9b9a9 100644
--- a/lang/en/assignment.php
+++ b/lang/en/assignment.php
@@ -6,5 +6,18 @@ $string[modulenameplural] = "Assignments";
#------------------------------------------------------------
+$string[assignmentdetails] = "Assignment details";
+$string[duedate] = "Assignment due";
+$string[early] = "\$a early";
+$string[late] = "\$a late";
+$string[notsubmittedyet] = "Not submitted yet";
+$string[overwritewarning] = "Warning: uploading again will REPLACE your current submission";
+$string[submissionfeedback] = "Submission feedback";
+$string[submissions] = "Submissions";
+$string[failedupdatefeedback] = "Failed to update submission feedback for user \$a";
+$string[feedbackupdated] = "Submissions feedback updated for \$a people";
+$string[viewsubmissions] = "View \$a submitted assignments";
+$string[yoursubmission] = "Your submission";
+
?>
diff --git a/lang/en/moodle.php b/lang/en/moodle.php
index ec942b167ae..2c1e62f44bb 100644
--- a/lang/en/moodle.php
+++ b/lang/en/moodle.php
@@ -40,6 +40,7 @@ $string[deletecourse] = "Delete a course";
$string[deleted] = "Deleted";
$string[deletedcourse] = "\$a has been completely deleted";
$string[deletingcourse] = "Deleting \$a";
+$string[description] = "Description";
$string[edit] = "Edit \$a";
$string[editcoursesettings] = "Edit course settings";
$string[editmyprofile] = "Edit my profile";
@@ -84,6 +85,7 @@ $string[format] = "Format";
$string[fulllistofcourses] = "Full list of courses";
$string[fullprofile] = "Full profile";
$string[fullname] = "Full name";
+$string[grade] = "Grade";
$string[guestsno] = "No, do not allow guests in";
$string[guestsyes] = "Yes, allow 'guest' student in";
$string[helppicture] = "How to upload a picture";
@@ -96,6 +98,7 @@ $string[idnumber] = "ID number";
$string[invalidlogin] = "Invalid login, please try again";
$string[invalidemail] = "Invalid email address";
$string[lastaccess] = "Last access";
+$string[lastmodified] = "Last modified";
$string[lastname] = "Last name";
$string[location] = "Location";
$string[loggedinas] = "You are logged in as \$a.";
@@ -127,6 +130,7 @@ $string[loginsteps] = "Hi! For full access to courses you'll need to take
$string[logout] = "Logout";
$string[mainmenu] = "Main menu";
$string[maximumchars] = "Maximum of \$a characters";
+$string[maximumgrade] = "Maximum grade";
$string[missingcategory] = "You need to choose a category";
$string[missingcity] = "Missing city/town";
$string[missingcountry] = "Missing country";
@@ -172,8 +176,12 @@ $string[newsitem] = "news item";
$string[newsitems] = "news items";
$string[newsitemsnumber] = "News items to show";
$string[no] = "No";
+$string[nograde] = "No grade";
+$string[nostudentsyet] = "No students enrolled in this course yet";
+$string[noteachersyet] = "No teachers in this course yet";
$string[nosuchemail] = "No such email address";
$string[notenrolled] = "\$a is not enrolled in this course.";
+$string[now] = "now";
$string[numberweeks] = "Number of weeks/topics";
$string[ok] = "OK";
$string[opentoguests] = "Open to guests?";
@@ -220,6 +228,8 @@ $string[unenrolme] = "Unenrol me from \$a";
$string[update] = "Update";
$string[updatemyprofile] = "Update my profile";
$string[updatethiscourse] = "Update this course";
+$string[upload] = "Upload";
+$string[uploadthisfile] = "Upload this file";
$string[userdescription] = "Description";
$string[username] = "Username";
$string[usernameexists] = "This username already exists, choose another";
diff --git a/mod/assignment/README b/mod/assignment/README
deleted file mode 100644
index 0e47ab9707c..00000000000
--- a/mod/assignment/README
+++ /dev/null
@@ -1,6 +0,0 @@
-Describes the assignment (eg an essay) that needs to be completed
-then collects and datestamps it. Later, shows the grade.
-
-Teacher view, show class list, allows download and grades.
-
-
diff --git a/mod/assignment/db/mysql.sql b/mod/assignment/db/mysql.sql
index e69de29bb2d..cd9e2c818d3 100644
--- a/mod/assignment/db/mysql.sql
+++ b/mod/assignment/db/mysql.sql
@@ -0,0 +1,45 @@
+#
+# Table structure for table `assignment`
+#
+
+CREATE TABLE `assignment` (
+ `id` int(10) unsigned NOT NULL auto_increment,
+ `course` int(10) unsigned NOT NULL default '0',
+ `name` varchar(255) NOT NULL default '',
+ `description` text NOT NULL,
+ `type` int(10) unsigned NOT NULL default '1',
+ `maxbytes` int(10) unsigned NOT NULL default '100000',
+ `timedue` int(10) unsigned NOT NULL default '0',
+ `grade` int(10) NOT NULL default '0',
+ `timemodified` int(10) unsigned NOT NULL default '0',
+ PRIMARY KEY (`id`)
+) COMMENT='Defines assignments';
+# --------------------------------------------------------
+
+#
+# Table structure for table `assignment_submissions`
+#
+
+CREATE TABLE `assignment_submissions` (
+ `id` int(10) unsigned NOT NULL default '0',
+ `assignment` int(10) unsigned NOT NULL default '0',
+ `user` int(10) unsigned NOT NULL default '0',
+ `timecreated` int(10) unsigned NOT NULL default '0',
+ `timemodified` int(10) unsigned NOT NULL default '0',
+ `numfiles` int(10) unsigned NOT NULL default '0',
+ `grade` int(11) NOT NULL default '0',
+ `comment` text NOT NULL,
+ `teacher` int(10) unsigned NOT NULL default '0',
+ `timemarked` int(10) unsigned NOT NULL default '0',
+ `mailed` tinyint(1) unsigned NOT NULL default '0',
+ PRIMARY KEY (`id`)
+) COMMENT='Info about submitted assignments';
+# --------------------------------------------------------
+
+
+INSERT INTO log_display VALUES ('assignment', 'view', 'assignment', 'name');
+INSERT INTO log_display VALUES ('assignment', 'add', 'assignment', 'name');
+INSERT INTO log_display VALUES ('assignment', 'update', 'assignment', 'name');
+INSERT INTO log_display VALUES ('assignment', 'view submissions', 'assignment', 'name');
+INSERT INTO log_display VALUES ('assignment', 'upload', 'assignment', 'name');
+
diff --git a/mod/assignment/icon.gif b/mod/assignment/icon.gif
new file mode 100755
index 00000000000..fa433fae376
Binary files /dev/null and b/mod/assignment/icon.gif differ
diff --git a/mod/assignment/index.php b/mod/assignment/index.php
new file mode 100644
index 00000000000..ad036ea3fb3
--- /dev/null
+++ b/mod/assignment/index.php
@@ -0,0 +1,67 @@
+id);
+ add_to_log($course->id, "assignment", "view all", "index.php?id=$course->id", "");
+
+ if ($course->category) {
+ $navigation = "id\">$course->shortname ->";
+ }
+
+ $strassignments = get_string("modulenameplural", "assignment");
+ $strassignment = get_string("modulename", "assignment");
+
+ print_header("$course->shortname: $strassignments", "$course->fullname", "$navigation $strassignments", "");
+
+ if (! $assignments = get_all_instances_in_course("assignment", $course->id, "cw.section ASC")) {
+ notice("There are no assignments", "../../course/view.php?id=$course->id");
+ die;
+ }
+
+ $timenow = time();
+
+ if ($course->format == "weeks") {
+ $table->head = array ("Week", "Name", "Due", "Submitted");
+ $table->align = array ("CENTER", "LEFT", "LEFT", "LEFT");
+ } else if ($course->format == "topics") {
+ $table->head = array ("Topic", "Name", "Due", "Submitted");
+ $table->align = array ("CENTER", "LEFT", "LEFT", "LEFT");
+ } else {
+ $table->head = array ("Name", "Due", "Submitted");
+ $table->align = array ("LEFT", "LEFT", "LEFT");
+ }
+
+ foreach ($assignments as $assignment) {
+ if ($submission = assignment_get_submission($assignment->id, $USER->id)) {
+ if ($submission->timemodified <= $assignment->timedue) {
+ $submitted = userdate($submission->timemodified);
+ } else {
+ $submitted = "".userdate($submission->timemodified)."";
+ }
+ } else {
+ $submitted = get_string("no");
+ }
+ $due = userdate($assignment->timedue);
+ $link = "coursemodule\">$assignment->name";
+
+ if ($course->format == "weeks" or $course->format == "topics") {
+ $table->data[] = array ($assignment->section, $link, $due, $submitted);
+ } else {
+ $table->data[] = array ($link, $due, $submitted);
+ }
+ }
+
+ echo "
";
+
+ print_table($table);
+
+ print_footer($course);
+?>
diff --git a/mod/assignment/lib.php b/mod/assignment/lib.php
index 6a8c9958c72..e5e23c9f27f 100644
--- a/mod/assignment/lib.php
+++ b/mod/assignment/lib.php
@@ -1,5 +1,9 @@
dirroot/files/mimetypes.php");
+
+
+
function assignment_add_instance($assignment) {
// Given an object containing all the necessary data,
// (defined by the form in mod.html) this function
@@ -7,6 +11,9 @@ function assignment_add_instance($assignment) {
// of the new instance.
$assignment->timemodified = time();
+
+ $assignment->timedue = make_timestamp($assignment->dueyear, $assignment->duemonth, $assignment->dueday,
+ $assignment->duehour, $assignment->dueminute);
return insert_record("assignment", $assignment);
}
@@ -18,6 +25,8 @@ function assignment_update_instance($assignment) {
// will update an existing instance with new data.
$assignment->timemodified = time();
+ $assignment->timedue = make_timestamp($assignment->dueyear, $assignment->duemonth, $assignment->dueday,
+ $assignment->duehour, $assignment->dueminute);
$assignment->id = $assignment->instance;
return update_record("assignment", $assignment);
@@ -46,5 +55,248 @@ function assignment_delete_instance($id) {
return $result;
}
+function assignment_cron () {
+// Function to be run periodically according to the moodle cron
+// Finds all assignment notifications that have yet to be mailed out, and mails them
+
+ global $CFG;
+
+ $cutofftime = time() - $CFG->maxeditingtime;
+
+ if ($submissions = get_records_sql("SELECT s.*, a.course, a.name
+ FROM assignment_submissions s, assignment a
+ WHERE s.mailed = '0'
+ AND s.timemarked < '$cutofftime' AND s.timemarked > 0
+ AND s.assignment = a.id")) {
+ $timenow = time();
+
+ foreach ($submissions as $submission) {
+
+ echo "Processing assignment submission $submission->id\n";
+
+ if (! $user = get_record("user", "id", "$submission->user")) {
+ echo "Could not find user $post->user\n";
+ continue;
+ }
+
+ if (! $course = get_record("course", "id", "$submission->course")) {
+ echo "Could not find course $submission->course\n";
+ continue;
+ }
+
+ if (! isstudent($course->id, $user->id) and !isteacher($course->id, $user->id)) {
+ continue; // Not an active participant
+ }
+
+ if (! $teacher = get_record("user", "id", "$submission->teacher")) {
+ echo "Could not find teacher $submission->teacher\n";
+ continue;
+ }
+
+ if (! $mod = get_coursemodule_from_instance("assignment", $submission->assignment, $course->id)) {
+ echo "Could not find course module for assignment id $submission->assignment\n";
+ continue;
+ }
+
+ $strassignments = get_string("modulenameplural", "assignment");
+ $strassignment = get_string("modulename", "assignment");
+
+ $postsubject = "$course->shortname: $strassignments: $submission->name";
+ $posttext = "$course->shortname -> $strassignments -> $submission->name\n";
+ $posttext .= "---------------------------------------------------------------------\n";
+ $posttext .= "$teacher->firstname $teacher->lastname has posted some feedback on your\n";
+ $posttext .= "assignment submission for '$submission->name'\n\n";
+ $posttext .= "You can see it appended to your assignment submission:\n";
+ $posttext .= " $CFG->wwwroot/mod/assignment/view.php?id=$mod->id\n";
+ $posttext .= "---------------------------------------------------------------------\n";
+ if ($user->mailformat == 1) { // HTML
+ $posthtml = "
". + "wwwroot/course/view.php?id=$course->id\">$course->shortname ->". + "wwwroot/mod/assignment/index.php?id=$course->id\">$strassignments ->". + "wwwroot/mod/assignment/view.php?id=$mod->id\">$submission->name
"; + $posthtml .= "$teacher->firstname $teacher->lastname has posted some feedback on your"; + $posthtml .= " assignment submission for '$submission->name'
"; + $posthtml .= "You can see it wwwroot/mod/assignment/view.php?id=$mod->id\">"; + $posthtml .= "appended to your assignment submission.
| body\" WIDTH=35 VALIGN=TOP>"; + print_user_picture($user->id, $assignment->course, $user->picture); + echo " | "; + echo "cellheading\">$user->firstname $user->lastname"; + if ($submission) { + echo " ".get_string("lastmodified").": "; + echo userdate($submission->timemodified); + echo assignment_print_difference($assignment->timedue - $submission->timemodified); + echo ""; + } + echo " |
| cellcontent\">"; + if ($submission) { + assignment_print_user_files($assignment, $user); + } else { + print_string("notsubmittedyet", "assignment"); + } + echo " | |
| "; + if (!$submission->teacher) { + $submission->teacher = $USER->id; + } + print_user_picture($submission->teacher, $assignment->course, $teachers[$submission->teacher]->picture); + echo " | cellheading\">Teacher Feedback:";
+ choose_from_menu($grades, "g$submission->id", $submission->grade, get_string("grade")."...");
+ if ($submission->timemarked) {
+ echo " ".userdate($submission->timemarked)."";
+ }
+ echo " "; + echo " |
| body\" WIDTH=35 VALIGN=TOP>"; + print_user_picture($teacher->id, $course->id, $teacher->picture); + echo " | "; + echo "cellheading\">$teacher->firstname $teacher->lastname"; + echo " ".userdate($submission->timemarked).""; + echo " |
| cellcontent\">";
+
+ echo " "; + if ($submission->grade) { + echo get_string("grade").": $submission->grade"; + } else { + echo get_string("nograde"); + } + echo " "; + + echo text_to_html($submission->comment); + echo " |
Assignment Type:
Maximum grade:
Maximum size:
Due date:
id\">". + get_string("viewsubmissions", "assignment", $count)."
"; + } + + $strdifference = format_time($assignment->timedue - time()); + $strduedate = userdate($assignment->timedue)." ($strdifference)"; + + print_simple_box_start("CENTER"); + print_heading(get_string("assignmentdetails", "assignment").":", "CENTER"); + print_simple_box_start("CENTER"); + echo "".get_string("duedate", "assignment").": $strduedate".get_string("lastmodified").": ".userdate($submission->timemodified)."
"; + assignment_print_user_files($assignment, $USER); + print_simple_box_end(); + } else { + print_heading(get_string("notsubmittedyet","assignment")); + } + + echo "".get_string("overwritewarning", "assignment")."
"; + } + assignment_print_upload_form($assignment); + } + } + + print_footer($course); + +?>