assignment.class.php

来自「很棒的在线教学系统」· PHP 代码 · 共 1,080 行 · 第 1/3 页

PHP
1,080
字号
                foreach ($files as $key => $file) {                    $icon = mimeinfo('icon', $file);                    $ffurl = get_file_url("$filearea/$file");                    $output .= '<a href="'.$ffurl.'" ><img src="'.$CFG->pixpath.'/f/'.$icon.'" class="icon" alt="'.$icon.'" />'.$file.'</a>';                    if ($candelete) {                        $delurl  = "$CFG->wwwroot/mod/assignment/delete.php?id={$this->cm->id}&amp;file=$file&amp;userid={$submission->userid}&amp;mode=$mode&amp;offset=$offset";                        $output .= '<a href="'.$delurl.'">&nbsp;'                                  .'<img title="'.$strdelete.'" src="'.$CFG->pixpath.'/t/delete.gif" class="iconsmall" alt="" /></a> ';                    }                    $output .= '<br />';                }            }        }        if ($this->drafts_tracked() and $this->isopen() and has_capability('mod/assignment:grade', $this->context) and $mode != '') { // we do not want it on view.php page            if ($this->can_unfinalize($submission)) {                $options = array ('id'=>$this->cm->id, 'userid'=>$userid, 'action'=>'unfinalize', 'mode'=>$mode, 'offset'=>$offset);                $output .= print_single_button('upload.php', $options, get_string('unfinalize', 'assignment'), 'post', '_self', true);            } else if ($this->can_finalize($submission)) {                $options = array ('id'=>$this->cm->id, 'userid'=>$userid, 'action'=>'finalizeclose', 'mode'=>$mode, 'offset'=>$offset);                $output .= print_single_button('upload.php', $options, get_string('finalize', 'assignment'), 'post', '_self', true);            }        }        $output = '<div class="files">'.$output.'</div>';        if ($return) {            return $output;        }        echo $output;    }    function print_responsefiles($userid, $return=false) {        global $CFG, $USER;        $mode    = optional_param('mode', '', PARAM_ALPHA);        $offset  = optional_param('offset', 0, PARAM_INT);        $filearea = $this->file_area_name($userid).'/responses';        $output = '';        $candelete = $this->can_manage_responsefiles();        $strdelete   = get_string('delete');        if ($basedir = $this->file_area($userid)) {            $basedir .= '/responses';            if ($files = get_directory_list($basedir)) {                require_once($CFG->libdir.'/filelib.php');                foreach ($files as $key => $file) {                    $icon = mimeinfo('icon', $file);                    $ffurl = get_file_url("$filearea/$file");                    $output .= '<a href="'.$ffurl.'" ><img src="'.$CFG->pixpath.'/f/'.$icon.'" alt="'.$icon.'" />'.$file.'</a>';                    if ($candelete) {                        $delurl  = "$CFG->wwwroot/mod/assignment/delete.php?id={$this->cm->id}&amp;file=$file&amp;userid=$userid&amp;mode=$mode&amp;offset=$offset&amp;action=response";                        $output .= '<a href="'.$delurl.'">&nbsp;'                                  .'<img title="'.$strdelete.'" src="'.$CFG->pixpath.'/t/delete.gif" class="iconsmall" alt=""/></a> ';                    }                    $output .= '&nbsp;';                }            }            $output = '<div class="responsefiles">'.$output.'</div>';        }        if ($return) {            return $output;        }        echo $output;    }    function upload() {        $action = required_param('action', PARAM_ALPHA);        switch ($action) {            case 'finalize':                $this->finalize();                break;            case 'finalizeclose':                $this->finalizeclose();                break;            case 'unfinalize':                $this->unfinalize();                break;            case 'uploadresponse':                $this->upload_responsefile();                break;            case 'uploadfile':                $this->upload_file();            case 'savenotes':            case 'editnotes':                $this->upload_notes();            default:                error('Error: Unknow upload action ('.$action.').');        }    }    function upload_notes() {        global $CFG, $USER;        $action = required_param('action', PARAM_ALPHA);        $returnurl = 'view.php?id='.$this->cm->id;        $mform = new mod_assignment_upload_notes_form();        $defaults = new object();        $defaults->id = $this->cm->id;        if ($submission = $this->get_submission($USER->id)) {            $defaults->text = $submission->data1;        } else {            $defaults->text = '';        }        $mform->set_data($defaults);        if ($mform->is_cancelled()) {            redirect('view.php?id='.$this->cm->id);        }        if (!$this->can_update_notes($submission)) {            $this->view_header(get_string('upload'));            notify(get_string('uploaderror', 'assignment'));            print_continue($returnurl);            $this->view_footer();            die;        }        if ($data = $mform->get_data() and $action == 'savenotes') {            $submission = $this->get_submission($USER->id, true); // get or create submission            $updated = new object();            $updated->id           = $submission->id;            $updated->timemodified = time();            $updated->data1        = $data->text;            if (update_record('assignment_submissions', $updated)) {                add_to_log($this->course->id, 'assignment', 'upload', 'view.php?a='.$this->assignment->id, $this->assignment->id, $this->cm->id);                redirect($returnurl);                $submission = $this->get_submission($USER->id);                $this->update_grade($submission);            } else {                $this->view_header(get_string('notes', 'assignment'));                notify(get_string('notesupdateerror', 'assignment'));                print_continue($returnurl);                $this->view_footer();                die;            }        }        /// show notes edit form        $this->view_header(get_string('notes', 'assignment'));        print_heading(get_string('notes', 'assignment'), '');        $mform->display();        $this->view_footer();        die;    }    function upload_responsefile() {        global $CFG;        $userid = required_param('userid', PARAM_INT);        $mode   = required_param('mode', PARAM_ALPHA);        $offset = required_param('offset', PARAM_INT);        $returnurl = "submissions.php?id={$this->cm->id}&amp;userid=$userid&amp;mode=$mode&amp;offset=$offset";        if (data_submitted('nomatch') and $this->can_manage_responsefiles()) {            $dir = $this->file_area_name($userid).'/responses';            check_dir_exists($CFG->dataroot.'/'.$dir, true, true);            require_once($CFG->dirroot.'/lib/uploadlib.php');            $um = new upload_manager('newfile',false,true,$this->course,false,0,true);            if (!$um->process_file_uploads($dir)) {                print_header(get_string('upload'));                notify(get_string('uploaderror', 'assignment'));                echo $um->get_errors();                print_continue($returnurl);                print_footer('none');                die;            }        }        redirect($returnurl);    }    function upload_file() {        global $CFG, $USER;        $mode   = optional_param('mode', '', PARAM_ALPHA);        $offset = optional_param('offset', 0, PARAM_INT);        $returnurl = 'view.php?id='.$this->cm->id;        $filecount = $this->count_user_files($USER->id);        $submission = $this->get_submission($USER->id);        if (!$this->can_upload_file($submission)) {            $this->view_header(get_string('upload'));            notify(get_string('uploaderror', 'assignment'));            print_continue($returnurl);            $this->view_footer();            die;        }        $dir = $this->file_area_name($USER->id);        check_dir_exists($CFG->dataroot.'/'.$dir, true, true); // better to create now so that student submissions do not block it later        require_once($CFG->dirroot.'/lib/uploadlib.php');        $um = new upload_manager('newfile',false,true,$this->course,false,$this->assignment->maxbytes,true);        if ($um->process_file_uploads($dir)) {            $submission = $this->get_submission($USER->id, true); //create new submission if needed            $updated = new object();            $updated->id           = $submission->id;            $updated->timemodified = time();            if (update_record('assignment_submissions', $updated)) {                add_to_log($this->course->id, 'assignment', 'upload',                        'view.php?a='.$this->assignment->id, $this->assignment->id, $this->cm->id);                $submission = $this->get_submission($USER->id);                $this->update_grade($submission);                if (!$this->drafts_tracked()) {                    $this->email_teachers($submission);                }            } else {                $new_filename = $um->get_new_filename();                $this->view_header(get_string('upload'));                notify(get_string('uploadnotregistered', 'assignment', $new_filename));                print_continue($returnurl);                $this->view_footer();                die;            }            redirect('view.php?id='.$this->cm->id);        }        $this->view_header(get_string('upload'));        notify(get_string('uploaderror', 'assignment'));        echo $um->get_errors();        print_continue($returnurl);        $this->view_footer();        die;    }    function finalize() {        global $USER;        $confirm    = optional_param('confirm', 0, PARAM_BOOL);        $returnurl  = 'view.php?id='.$this->cm->id;        $submission = $this->get_submission($USER->id);        if (!$this->can_finalize($submission)) {            redirect($returnurl); // probably already graded, redirect to assignment page, the reason should be obvious        }        if (!data_submitted() or !$confirm) {            $optionsno = array('id'=>$this->cm->id);            $optionsyes = array ('id'=>$this->cm->id, 'confirm'=>1, 'action'=>'finalize');            $this->view_header(get_string('submitformarking', 'assignment'));            print_heading(get_string('submitformarking', 'assignment'));            notice_yesno(get_string('onceassignmentsent', 'assignment'), 'upload.php', 'view.php', $optionsyes, $optionsno, 'post', 'get');            $this->view_footer();            die;        }        $updated = new object();        $updated->id           = $submission->id;        $updated->data2        = ASSIGNMENT_STATUS_SUBMITTED;        $updated->timemodified = time();        if (update_record('assignment_submissions', $updated)) {            add_to_log($this->course->id, 'assignment', 'upload', //TODO: add finalize action to log                    'view.php?a='.$this->assignment->id, $this->assignment->id, $this->cm->id);            $submission = $this->get_submission($USER->id);            $this->update_grade($submission);            $this->email_teachers($submission);        } else {            $this->view_header(get_string('submitformarking', 'assignment'));            notify(get_string('finalizeerror', 'assignment'));            print_continue($returnurl);            $this->view_footer();            die;        }        redirect($returnurl);    }    function finalizeclose() {        $userid    = optional_param('userid', 0, PARAM_INT);        $mode      = required_param('mode', PARAM_ALPHA);        $offset    = required_param('offset', PARAM_INT);        $returnurl = "submissions.php?id={$this->cm->id}&amp;userid=$userid&amp;mode=$mode&amp;offset=$offset&amp;forcerefresh=1";        // create but do not add student submission date        $submission = $this->get_submission($userid, true, true);        if (!data_submitted() or !$this->can_finalize($submission)) {            redirect($returnurl); // probably closed already        }        $updated = new object();        $updated->id    = $submission->id;        $updated->data2 = ASSIGNMENT_STATUS_CLOSED;        if (update_record('assignment_submissions', $updated)) {            add_to_log($this->course->id, 'assignment', 'upload', //TODO: add finalize action to log                    'view.php?a='.$this->assignment->id, $this->assignment->id, $this->cm->id);            $submission = $this->get_submission($userid, false, true);            $this->update_grade($submission);        }        redirect($returnurl);    }    function unfinalize() {        $userid = required_param('userid', PARAM_INT);        $mode   = required_param('mode', PARAM_ALPHA);        $offset = required_param('offset', PARAM_INT);        $returnurl = "submissions.php?id={$this->cm->id}&amp;userid=$userid&amp;mode=$mode&amp;offset=$offset&amp;forcerefresh=1";        if (data_submitted('nomatch')          and $submission = $this->get_submission($userid)          and $this->can_unfinalize($submission)) {            $updated = new object();            $updated->id = $submission->id;            $updated->data2 = '';            if (update_record('assignment_submissions', $updated)) {                //TODO: add unfinalize action to log                add_to_log($this->course->id, 'assignment', 'view submission', 'submissions.php?id='.$this->assignment->id, $this->assignment->id, $this->cm->id);                $submission = $this->get_submission($userid);                $this->update_grade($submission);            } else {                $this->view_header(get_string('submitformarking', 'assignment'));                notify(get_string('unfinalizeerror', 'assignment'));                print_continue($returnurl);                $this->view_footer();                die;            }        }        redirect($returnurl);    }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?