| [ Index ] |
PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008] |
[Summary view] [Print] [Text view]
1 <?php // $Id: assignment.class.php,v 1.46.2.8 2008/07/24 11:11:58 skodak Exp $ 2 require_once($CFG->libdir.'/formslib.php'); 3 4 /** 5 * Extend the base assignment class for assignments where you upload a single file 6 * 7 */ 8 class assignment_online extends assignment_base { 9 10 function assignment_online($cmid='staticonly', $assignment=NULL, $cm=NULL, $course=NULL) { 11 parent::assignment_base($cmid, $assignment, $cm, $course); 12 $this->type = 'online'; 13 } 14 15 function view() { 16 17 global $USER; 18 19 $edit = optional_param('edit', 0, PARAM_BOOL); 20 $saved = optional_param('saved', 0, PARAM_BOOL); 21 22 $context = get_context_instance(CONTEXT_MODULE, $this->cm->id); 23 require_capability('mod/assignment:view', $context); 24 25 $submission = $this->get_submission(); 26 27 //Guest can not submit nor edit an assignment (bug: 4604) 28 if (!has_capability('mod/assignment:submit', $context)) { 29 $editable = null; 30 } else { 31 $editable = $this->isopen() && (!$submission || $this->assignment->resubmit || !$submission->timemarked); 32 } 33 $editmode = ($editable and $edit); 34 35 if ($editmode) { 36 //guest can not edit or submit assignment 37 if (!has_capability('mod/assignment:submit', $context)) { 38 print_error('guestnosubmit', 'assignment'); 39 } 40 } 41 42 add_to_log($this->course->id, "assignment", "view", "view.php?id={$this->cm->id}", $this->assignment->id, $this->cm->id); 43 44 /// prepare form and process submitted data 45 $mform = new mod_assignment_online_edit_form(); 46 47 $defaults = new object(); 48 $defaults->id = $this->cm->id; 49 if (!empty($submission)) { 50 if ($this->usehtmleditor) { 51 $options = new object(); 52 $options->smiley = false; 53 $options->filter = false; 54 55 $defaults->text = format_text($submission->data1, $submission->data2, $options); 56 $defaults->format = FORMAT_HTML; 57 } else { 58 $defaults->text = $submission->data1; 59 $defaults->format = $submission->data2; 60 } 61 } 62 $mform->set_data($defaults); 63 64 if ($mform->is_cancelled()) { 65 redirect('view.php?id='.$this->cm->id); 66 } 67 68 if ($data = $mform->get_data()) { // No incoming data? 69 if ($editable && $this->update_submission($data)) { 70 //TODO fix log actions - needs db upgrade 71 $submission = $this->get_submission(); 72 add_to_log($this->course->id, 'assignment', 'upload', 73 'view.php?a='.$this->assignment->id, $this->assignment->id, $this->cm->id); 74 $this->email_teachers($submission); 75 //redirect to get updated submission date and word count 76 redirect('view.php?id='.$this->cm->id.'&saved=1'); 77 } else { 78 // TODO: add better error message 79 notify(get_string("error")); //submitting not allowed! 80 } 81 } 82 83 /// print header, etc. and display form if needed 84 if ($editmode) { 85 $this->view_header(get_string('editmysubmission', 'assignment')); 86 } else { 87 $this->view_header(); 88 } 89 90 $this->view_intro(); 91 92 $this->view_dates(); 93 94 if ($saved) { 95 notify(get_string('submissionsaved', 'assignment'), 'notifysuccess'); 96 } 97 98 if (has_capability('mod/assignment:submit', $context)) { 99 if ($editmode) { 100 print_box_start('generalbox', 'online'); 101 $mform->display(); 102 } else { 103 print_box_start('generalbox boxwidthwide boxaligncenter', 'online'); 104 if ($submission) { 105 echo format_text($submission->data1, $submission->data2); 106 } else if (!has_capability('mod/assignment:submit', $context)) { //fix for #4604 107 echo '<div style="text-align:center">'. get_string('guestnosubmit', 'assignment').'</div>'; 108 } else if ($this->isopen()){ //fix for #4206 109 echo '<div style="text-align:center">'.get_string('emptysubmission', 'assignment').'</div>'; 110 } 111 } 112 print_box_end(); 113 if (!$editmode && $editable) { 114 echo "<div style='text-align:center'>"; 115 print_single_button('view.php', array('id'=>$this->cm->id,'edit'=>'1'), 116 get_string('editmysubmission', 'assignment')); 117 echo "</div>"; 118 } 119 120 } 121 122 $this->view_feedback(); 123 124 $this->view_footer(); 125 } 126 127 /* 128 * Display the assignment dates 129 */ 130 function view_dates() { 131 global $USER, $CFG; 132 133 if (!$this->assignment->timeavailable && !$this->assignment->timedue) { 134 return; 135 } 136 137 print_simple_box_start('center', '', '', 0, 'generalbox', 'dates'); 138 echo '<table>'; 139 if ($this->assignment->timeavailable) { 140 echo '<tr><td class="c0">'.get_string('availabledate','assignment').':</td>'; 141 echo ' <td class="c1">'.userdate($this->assignment->timeavailable).'</td></tr>'; 142 } 143 if ($this->assignment->timedue) { 144 echo '<tr><td class="c0">'.get_string('duedate','assignment').':</td>'; 145 echo ' <td class="c1">'.userdate($this->assignment->timedue).'</td></tr>'; 146 } 147 $submission = $this->get_submission($USER->id); 148 if ($submission) { 149 echo '<tr><td class="c0">'.get_string('lastedited').':</td>'; 150 echo ' <td class="c1">'.userdate($submission->timemodified); 151 /// Decide what to count 152 if ($CFG->assignment_itemstocount == ASSIGNMENT_COUNT_WORDS) { 153 echo ' ('.get_string('numwords', '', count_words(format_text($submission->data1, $submission->data2))).')</td></tr>'; 154 } else if ($CFG->assignment_itemstocount == ASSIGNMENT_COUNT_LETTERS) { 155 echo ' ('.get_string('numletters', '', count_letters(format_text($submission->data1, $submission->data2))).')</td></tr>'; 156 } 157 } 158 echo '</table>'; 159 print_simple_box_end(); 160 } 161 162 function update_submission($data) { 163 global $CFG, $USER; 164 165 $submission = $this->get_submission($USER->id, true); 166 167 $update = new object(); 168 $update->id = $submission->id; 169 $update->data1 = $data->text; 170 $update->data2 = $data->format; 171 $update->timemodified = time(); 172 173 if (!update_record('assignment_submissions', $update)) { 174 return false; 175 } 176 177 $submission = $this->get_submission($USER->id); 178 $this->update_grade($submission); 179 return true; 180 } 181 182 183 function print_student_answer($userid, $return=false){ 184 global $CFG; 185 if (!$submission = $this->get_submission($userid)) { 186 return ''; 187 } 188 $output = '<div class="files">'. 189 '<img src="'.$CFG->pixpath.'/f/html.gif" class="icon" alt="html" />'. 190 link_to_popup_window ('/mod/assignment/type/online/file.php?id='.$this->cm->id.'&userid='. 191 $submission->userid, 'file'.$userid, shorten_text(trim(strip_tags(format_text($submission->data1,$submission->data2))), 15), 450, 580, 192 get_string('submission', 'assignment'), 'none', true). 193 '</div>'; 194 return $output; 195 } 196 197 function print_user_files($userid, $return=false) { 198 global $CFG; 199 200 if (!$submission = $this->get_submission($userid)) { 201 return ''; 202 } 203 204 $output = '<div class="files">'. 205 '<img align="middle" src="'.$CFG->pixpath.'/f/html.gif" height="16" width="16" alt="html" />'. 206 link_to_popup_window ('/mod/assignment/type/online/file.php?id='.$this->cm->id.'&userid='. 207 $submission->userid, 'file'.$userid, shorten_text(trim(strip_tags(format_text($submission->data1,$submission->data2))), 15), 450, 580, 208 get_string('submission', 'assignment'), 'none', true). 209 '</div>'; 210 211 ///Stolen code from file.php 212 213 print_simple_box_start('center', '', '', 0, 'generalbox', 'wordcount'); 214 /// Decide what to count 215 if ($CFG->assignment_itemstocount == ASSIGNMENT_COUNT_WORDS) { 216 echo ' ('.get_string('numwords', '', count_words(format_text($submission->data1, $submission->data2))).')'; 217 } else if ($CFG->assignment_itemstocount == ASSIGNMENT_COUNT_LETTERS) { 218 echo ' ('.get_string('numletters', '', count_letters(format_text($submission->data1, $submission->data2))).')'; 219 } 220 print_simple_box_end(); 221 print_simple_box(format_text($submission->data1, $submission->data2), 'center', '100%'); 222 223 ///End of stolen code from file.php 224 225 if ($return) { 226 //return $output; 227 } 228 //echo $output; 229 } 230 231 function preprocess_submission(&$submission) { 232 if ($this->assignment->var1 && empty($submission->submissioncomment)) { // comment inline 233 if ($this->usehtmleditor) { 234 // Convert to html, clean & copy student data to teacher 235 $submission->submissioncomment = format_text($submission->data1, $submission->data2); 236 $submission->format = FORMAT_HTML; 237 } else { 238 // Copy student data to teacher 239 $submission->submissioncomment = $submission->data1; 240 $submission->format = $submission->data2; 241 } 242 } 243 } 244 245 function setup_elements(&$mform) { 246 global $CFG, $COURSE; 247 248 $ynoptions = array( 0 => get_string('no'), 1 => get_string('yes')); 249 250 $mform->addElement('select', 'resubmit', get_string("allowresubmit", "assignment"), $ynoptions); 251 $mform->setHelpButton('resubmit', array('resubmit', get_string('allowresubmit', 'assignment'), 'assignment')); 252 $mform->setDefault('resubmit', 0); 253 254 $mform->addElement('select', 'emailteachers', get_string("emailteachers", "assignment"), $ynoptions); 255 $mform->setHelpButton('emailteachers', array('emailteachers', get_string('emailteachers', 'assignment'), 'assignment')); 256 $mform->setDefault('emailteachers', 0); 257 258 $mform->addElement('select', 'var1', get_string("commentinline", "assignment"), $ynoptions); 259 $mform->setHelpButton('var1', array('commentinline', get_string('commentinline', 'assignment'), 'assignment')); 260 $mform->setDefault('var1', 0); 261 262 } 263 264 } 265 266 class mod_assignment_online_edit_form extends moodleform { 267 function definition() { 268 $mform =& $this->_form; 269 270 // visible elements 271 $mform->addElement('htmleditor', 'text', get_string('submission', 'assignment'), array('cols'=>60, 'rows'=>30)); 272 $mform->setType('text', PARAM_RAW); // to be cleaned before display 273 $mform->setHelpButton('text', array('reading', 'writing', 'richtext'), false, 'editorhelpbutton'); 274 $mform->addRule('text', get_string('required'), 'required', null, 'client'); 275 276 $mform->addElement('format', 'format', get_string('format')); 277 $mform->setHelpButton('format', array('textformat', get_string('helpformatting'))); 278 279 // hidden params 280 $mform->addElement('hidden', 'id', 0); 281 $mform->setType('id', PARAM_INT); 282 283 // buttons 284 $this->add_action_buttons(); 285 } 286 } 287 288 ?>
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Wed Jan 14 11:33:29 2009 | Cross-referenced by PHPXref 0.7 |