/** * part of search engine API * @uses $CFG, $DB * */ function assignment_get_content_for_index(&$assignment) { global $CFG, $DB; $documents = array(); $course = $DB->get_record('course', array('id' => $assignment->course)); $coursemodule = $DB->get_field('modules', 'id', array('name' => 'assignment')); $cm = $DB->get_record('course_modules', array('course' => $assignment->course, 'module' => $coursemodule, 'instance' => $assignment->id)); if ($cm) { $context = get_context_instance(CONTEXT_MODULE, $cm->id); $assignment = assignment_add_document_fields($assignment); $documents[] = new AssignmentSearchDocument(get_object_vars($assignment), $cm->id, 'intro', $assignment->course, null, $context->id); $submissions = assignment_get_all_submissions($assignment); if ($submissions) { $submissionoffset = -1; foreach ($submissions as $submission) { $submissionoffset++; $submission = assignment_submission_add_document_fields($assignment, $submission); if (file_exists("{$CFG->dirroot}/mod/assignment/type/{$assignment->assignmenttype}/searchlib.php")) { include_once "{$CFG->dirroot}/mod/assignment/type/{$assignment->assignmenttype}/searchlib.php"; if (function_exists('assignment_get_submission_location')) { $submitted = assignment_get_submission_location($assignment, $submission); } } if (empty($submitted)) { // this is for moodle legacy types that would need not to be patched for searchlib.php switch ($assignment->assignmenttype) { case 'online': $submitted->source = 'text'; $submitted->data = $submission->data1; break; case 'uploadsingle': case 'upload': $submitted->source = 'files'; $submitted->data = "{$assignment->course}/moddata/assignment/{$assignment->id}/{$submission->userid}"; break; case 'offline': continue; // cannot index, no content in Moodle !! } } if (empty($submitted)) { continue; } // ignoring if ($submitted->source = 'text') { $submission->description = $submitted->data; $submission->description = preg_replace("/<[^>]*>/", '', $submission->description); // stip all tags $documents[] = new AssignmentSearchDocument(get_object_vars($submission), $cm->id, 'submission', $assignment->course, $submission->userid, $context->id, $submissionoffset); mtrace("finished online submission for {$submission->authors} in assignment {$assignment->name}"); } elseif ($submitted->source = 'files') { $SUBMITTED = opendir($submitted->path); while ($entry = readdir($SUBMITTED)) { if (preg_match("/^\\./", $entry)) { continue; } // exclude hidden and dirs . and .. $path = "{$submitted->path}/{$entry}"; $documents[] = assignment_get_physical_file($submission, $assignment, $cm, $path, $context_id, $documents); mtrace("finished attachement {$path} for {$submission->authors} in assignment {$assignment->name}"); } closedir($submission->path); } } } mtrace("finished assignment {$assignment->name}"); return $documents; } return array(); }
/** * Return all assignment submissions by ENROLLED students (even empty) * * @param string $sort optional field names for the ORDER BY in the sql query * @param string $dir optional specifying the sort direction, defaults to DESC * @return array The submission objects indexed by id */ function get_submissions($sort='', $dir='DESC') { return assignment_get_all_submissions($this->assignment, $sort, $dir); }
/** * Trigger assessable_file_uploaded and assessable_files_done events of specified assignment. * * @param int $cmid * @param bool $trigger_done whether trigger assessable_files_done event. Advanced upload assignment only. * @return number of submissions found, or false on failed */ function moss_trigger_assignment_events($cmid, $trigger_done = true) { global $DB, $CFG; require_once($CFG->dirroot.'/mod/assignment/lib.php'); $cm = get_coursemodule_from_id('assignment', $cmid); if (empty($cm)) { return false; } $context = get_context_instance(CONTEXT_MODULE, $cmid); $fs = get_file_storage(); $assignment = $DB->get_record('assignment', array('id' => $cm->instance), '*', MUST_EXIST); $submissions = assignment_get_all_submissions($assignment); foreach ($submissions as $submission) { $files = $fs->get_area_files($context->id, 'mod_assignment', 'submission', $submission->id, "timemodified", false); $eventdata = new stdClass(); $eventdata->modulename = 'assignment'; $eventdata->cmid = $cmid; $eventdata->itemid = $submission->id; $eventdata->courseid = $cm->course; $eventdata->userid = $submission->userid; if ($files) { if ($assignment->assignmenttype == 'upload') { $eventdata->files = $files; } else { // uploadsingle $eventdata->file = current($files); } } events_trigger('assessable_file_uploaded', $eventdata); if ($trigger_done and $assignment->assignmenttype == 'upload') { unset($eventdata->files); events_trigger('assessable_files_done', $eventdata); } } return count($submissions); }