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}&file=$file&userid={$submission->userid}&mode=$mode&offset=$offset"; $output .= '<a href="'.$delurl.'"> ' .'<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}&file=$file&userid=$userid&mode=$mode&offset=$offset&action=response"; $output .= '<a href="'.$delurl.'"> ' .'<img title="'.$strdelete.'" src="'.$CFG->pixpath.'/t/delete.gif" class="iconsmall" alt=""/></a> '; } $output .= ' '; } } $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}&userid=$userid&mode=$mode&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}&userid=$userid&mode=$mode&offset=$offset&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}&userid=$userid&mode=$mode&offset=$offset&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 + -
显示快捷键?