dirroot/files/mimetypes.php");
define("OFFLINE", "0");
define("UPLOADSINGLE", "1");
$ASSIGNMENT_TYPE = array (OFFLINE => get_string("typeoffline", "assignment"),
UPLOADSINGLE => get_string("typeuploadsingle", "assignment") );
if (!isset($CFG->assignment_maxbytes)) {
set_config("assignment_maxbytes", 1024000); // Default maximum size for all assignments
}
function assignment_add_instance($assignment) {
// Given an object containing all the necessary data,
// (defined by the form in mod.html) this function
// will create a new instance and return the id number
// of the new instance.
$assignment->timemodified = time();
$assignment->timedue = make_timestamp($assignment->dueyear, $assignment->duemonth, $assignment->dueday,
$assignment->duehour, $assignment->dueminute);
if ($returnid = insert_record("assignment", $assignment)) {
$event = NULL;
$event->name = $assignment->name;
$event->description = $assignment->description;
$event->courseid = $assignment->course;
$event->groupid = 0;
$event->userid = 0;
$event->modulename = 'assignment';
$event->instance = $returnid;
$event->eventtype = 'due';
$event->timestart = $assignment->timedue;
$event->timeduration = 0;
add_event($event);
}
return $returnid;
}
function assignment_update_instance($assignment) {
// Given an object containing all the necessary data,
// (defined by the form in mod.html) this function
// 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;
if ($returnid = update_record("assignment", $assignment)) {
$event = NULL;
if ($event->id = get_field('event', 'id', 'modulename', 'assignment', 'instance', $assignment->id)) {
$event->name = $assignment->name;
$event->description = $assignment->description;
$event->timestart = $assignment->timedue;
update_event($event);
}
}
return $returnid;
}
function assignment_delete_instance($id) {
// Given an ID of an instance of this module,
// this function will permanently delete the instance
// and any data that depends on it.
if (! $assignment = get_record("assignment", "id", "$id")) {
return false;
}
$result = true;
if (! delete_records("assignment_submissions", "assignment", "$assignment->id")) {
$result = false;
}
if (! delete_records("assignment", "id", "$assignment->id")) {
$result = false;
}
if (! delete_records('event', 'modulename', 'assignment', 'instance', $assignment->id)) {
$result = false;
}
return $result;
}
function assignment_refresh_events($courseid = 0) {
// This standard function will check all instances of this module
// and make sure there are up-to-date events created for each of them.
// If courseid = 0, then every assignment event in the site is checked, else
// only assignment events belonging to the course specified are checked.
// This function is used, in its new format, by restore_refresh_events()
if ($courseid == 0) {
if (! $assignments = get_records("assignment")) {
return true;
}
} else {
if (! $assignments = get_records("assignment", "course", $courseid)) {
return true;
}
}
$moduleid = get_field('modules', 'id', 'name', 'assignment');
foreach ($assignments as $assignment) {
$event = NULL;
$event->name = addslashes($assignment->name);
$event->description = addslashes($assignment->description);
$event->timestart = $assignment->timedue;
if ($event->id = get_field('event', 'id', 'modulename', 'assignment', 'instance', $assignment->id)) {
update_event($event);
} else {
$event->courseid = $assignment->course;
$event->groupid = 0;
$event->userid = 0;
$event->modulename = 'assignment';
$event->instance = $assignment->id;
$event->eventtype = 'due';
$event->timeduration = 0;
$event->visible = get_field('course_modules', 'visible', 'module', $moduleid, 'instance', $assignment->id);
add_event($event);
}
}
return true;
}
function assignment_user_outline($course, $user, $mod, $assignment) {
if ($submission = assignment_get_submission($assignment, $user)) {
if ($submission->grade) {
$result->info = get_string("grade").": $submission->grade";
}
$result->time = $submission->timemodified;
return $result;
}
return NULL;
}
function assignment_user_complete($course, $user, $mod, $assignment) {
if ($submission = assignment_get_submission($assignment, $user)) {
if ($basedir = assignment_file_area($assignment, $user)) {
if ($files = get_directory_list($basedir)) {
$countfiles = count($files)." ".get_string("uploadedfiles", "assignment");
foreach ($files as $file) {
$countfiles .= "; $file";
}
}
}
print_simple_box_start();
echo get_string("lastmodified").": ";
echo userdate($submission->timemodified);
echo assignment_print_difference($assignment->timedue - $submission->timemodified);
assignment_print_user_files($assignment, $user);
echo "
";
if (empty($submission->timemarked)) {
print_string("notgradedyet", "assignment");
} else {
assignment_print_feedback($course, $submission, $assignment);
}
print_simple_box_end();
} else {
print_string("notsubmittedyet", "assignment");
}
}
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, $USER;
/// Notices older than 1 day will not be mailed. This is to avoid the problem where
/// cron has not been running for a long time, and then suddenly people are flooded
/// with mail from the past few weeks or months
$timenow = time();
$endtime = $timenow - $CFG->maxeditingtime;
$starttime = $endtime - 24 * 3600; /// One day earlier
if ($submissions = assignment_get_unmailed_submissions($starttime, $endtime)) {
foreach ($submissions as $key => $submission) {
if (! set_field("assignment_submissions", "mailed", "1", "id", "$submission->id")) {
echo "Could not update the mailed field for id $submission->id. Not mailed.\n";
unset($submissions[$key]);
}
}
$timenow = time();
foreach ($submissions as $submission) {
echo "Processing assignment submission $submission->id\n";
if (! $user = get_record("user", "id", "$submission->userid")) {
echo "Could not find user $post->userid\n";
continue;
}
$USER->lang = $user->lang;
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)) {
echo fullname($user)." not an active participant in $course->shortname\n";
continue;
}
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;
}
if (! $mod->visible) { /// Hold mail notification for hidden assignments until later
continue;
}
$strassignments = get_string("modulenameplural", "assignment");
$strassignment = get_string("modulename", "assignment");
unset($assignmentinfo);
$assignmentinfo->teacher = fullname($teacher);
$assignmentinfo->assignment = "$submission->name";
$assignmentinfo->url = "$CFG->wwwroot/mod/assignment/view.php?id=$mod->id";
$postsubject = "$course->shortname: $strassignments: $submission->name";
$posttext = "$course->shortname -> $strassignments -> $submission->name\n";
$posttext .= "---------------------------------------------------------------------\n";
$posttext .= get_string("assignmentmail", "assignment", $assignmentinfo);
$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 .= "".get_string("assignmentmailhtml", "assignment", $assignmentinfo)."
"; $posthtml .= "| body\" width=\"35\" valign=\"top\">"; } else { echo "\n | body\" width=\"35\" valign=\"top\">"; } print_user_picture($user->id, $assignment->course, $user->picture); echo " | "; echo "cellheading\">".fullname($user, true); if ($assignment->type != OFFLINE and $submission->timemodified) { echo " ".get_string("lastmodified").": "; echo userdate($submission->timemodified); echo assignment_print_difference($assignment->timedue - $submission->timemodified); } echo " | \n"; echo "
| cellcontent\">"; if ($submission->timemodified) { 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 " | \n"; if ($submission->timemodified > $submission->timemarked) { echo "cellheading2\">"; } else { echo " | cellheading\">";
}
if (!$submission->grade and !$submission->timemarked) {
$submission->grade = -1; /// Hack to stop zero being selected on the menu below (so it shows 'no grade')
}
echo get_string("feedback", "assignment").":";
choose_from_menu($grades, "g$submission->id", $submission->grade, get_string("nograde"));
if ($submission->timemarked) {
echo " ".userdate($submission->timemarked);
}
echo " "; echo " |
";
echo "\n
|
| cellcontent2\" class=\"forumpostpicture\" width=\"35\" valign=\"top\">"; print_user_picture($activity->user->userid, $course, $activity->user->picture); echo " | ";
if ($detail) {
echo " "; } echo "wwwroot/user/view.php?id=" . $activity->user->userid . "&course=$course\">" . $activity->user->fullname . " "; echo " - " . userdate($activity->timestamp); echo " |
". "wwwroot/course/view.php?id=$course->id\">$course->shortname ->". "wwwroot/mod/assignment/index.php?id=$course->id\">$strassignments ->". "wwwroot/mod/assignment/view.php?id=$cm->id\">$assignment->name
"; $posthtml .= "".get_string("emailteachermailhtml", "assignment", $info)."
"; $posthtml .= "