예제 #1
0
/**
* 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();
}
예제 #2
0
파일: lib.php 프로젝트: nuckey/moodle
 /**
  * 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);
 }
예제 #3
0
/**
 * 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);
}