/mod/assignment/type/online/assignment.class.php
PHP | 290 lines | 212 code | 53 blank | 25 comment | 51 complexity | d6c7ac5a6dff8c4dc2f430a55a48d978 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, GPL-3.0, BSD-3-Clause, LGPL-2.0
- <?php // $Id: assignment.class.php,v 1.46.2.10 2010/09/16 05:45:42 samhemelryk Exp $
- require_once($CFG->libdir.'/formslib.php');
- /**
- * Extend the base assignment class for assignments where you upload a single file
- *
- */
- class assignment_online extends assignment_base {
- function assignment_online($cmid='staticonly', $assignment=NULL, $cm=NULL, $course=NULL) {
- parent::assignment_base($cmid, $assignment, $cm, $course);
- $this->type = 'online';
- }
- function view() {
- global $USER;
- $edit = optional_param('edit', 0, PARAM_BOOL);
- $saved = optional_param('saved', 0, PARAM_BOOL);
- $context = get_context_instance(CONTEXT_MODULE, $this->cm->id);
- require_capability('mod/assignment:view', $context);
- $submission = $this->get_submission();
- //Guest can not submit nor edit an assignment (bug: 4604)
- if (!has_capability('mod/assignment:submit', $context)) {
- $editable = null;
- } else {
- $editable = $this->isopen() && (!$submission || $this->assignment->resubmit || !$submission->timemarked);
- }
- $editmode = ($editable and $edit);
- if ($editmode) {
- //guest can not edit or submit assignment
- if (!has_capability('mod/assignment:submit', $context)) {
- print_error('guestnosubmit', 'assignment');
- }
- }
- add_to_log($this->course->id, "assignment", "view", "view.php?id={$this->cm->id}", $this->assignment->id, $this->cm->id);
- /// prepare form and process submitted data
- $mform = new mod_assignment_online_edit_form();
- $defaults = new object();
- $defaults->id = $this->cm->id;
- if (!empty($submission)) {
- if ($this->usehtmleditor) {
- $options = new object();
- $options->smiley = false;
- $options->filter = false;
- $defaults->text = format_text($submission->data1, $submission->data2, $options);
- $defaults->format = FORMAT_HTML;
- } else {
- $defaults->text = clean_text($submission->data1, $submission->data2);
- $defaults->format = $submission->data2;
- }
- }
- $mform->set_data($defaults);
- if ($mform->is_cancelled()) {
- redirect('view.php?id='.$this->cm->id);
- }
- if ($data = $mform->get_data()) { // No incoming data?
- if ($editable && $this->update_submission($data)) {
- //TODO fix log actions - needs db upgrade
- $submission = $this->get_submission();
- add_to_log($this->course->id, 'assignment', 'upload',
- 'view.php?a='.$this->assignment->id, $this->assignment->id, $this->cm->id);
- $this->email_teachers($submission);
- //redirect to get updated submission date and word count
- redirect('view.php?id='.$this->cm->id.'&saved=1');
- } else {
- // TODO: add better error message
- notify(get_string("error")); //submitting not allowed!
- }
- }
- /// print header, etc. and display form if needed
- if ($editmode) {
- $this->view_header(get_string('editmysubmission', 'assignment'));
- } else {
- $this->view_header(get_string('viewsubmissions', 'assignment'));
- }
- $this->view_intro();
- $this->view_dates();
- if ($saved) {
- notify(get_string('submissionsaved', 'assignment'), 'notifysuccess');
- }
- if ($editmode) {
- print_box_start('generalbox', 'online');
- $mform->display();
- print_box_end();
- } else {
- print_box_start('generalbox boxwidthwide boxaligncenter', 'online');
- if ($submission) {
- echo format_text($submission->data1, $submission->data2);
- } else if (!has_capability('mod/assignment:submit', $context)) { //fix for #4604
- if (isguest()) {
- echo '<div style="text-align:center">'. get_string('guestnosubmit', 'assignment').'</div>';
- } else {
- echo '<div style="text-align:center">'. get_string('usernosubmit', 'assignment').'</div>';
- }
- } else if ($this->isopen()){ //fix for #4206
- echo '<div style="text-align:center">'.get_string('emptysubmission', 'assignment').'</div>';
- }
- print_box_end();
- if ($editable) {
- echo "<div style='text-align:center'>";
- print_single_button('view.php', array('id'=>$this->cm->id,'edit'=>'1'),
- get_string('editmysubmission', 'assignment'));
- echo "</div>";
- }
- }
- $this->view_feedback();
- $this->view_footer();
- }
- /*
- * Display the assignment dates
- */
- function view_dates() {
- global $USER, $CFG;
- if (!$this->assignment->timeavailable && !$this->assignment->timedue) {
- return;
- }
- print_simple_box_start('center', '', '', 0, 'generalbox', 'dates');
- echo '<table>';
- if ($this->assignment->timeavailable) {
- echo '<tr><td class="c0">'.get_string('availabledate','assignment').':</td>';
- echo ' <td class="c1">'.userdate($this->assignment->timeavailable).'</td></tr>';
- }
- if ($this->assignment->timedue) {
- echo '<tr><td class="c0">'.get_string('duedate','assignment').':</td>';
- echo ' <td class="c1">'.userdate($this->assignment->timedue).'</td></tr>';
- }
- $submission = $this->get_submission($USER->id);
- if ($submission) {
- echo '<tr><td class="c0">'.get_string('lastedited').':</td>';
- echo ' <td class="c1">'.userdate($submission->timemodified);
- /// Decide what to count
- if ($CFG->assignment_itemstocount == ASSIGNMENT_COUNT_WORDS) {
- echo ' ('.get_string('numwords', '', count_words(format_text($submission->data1, $submission->data2))).')</td></tr>';
- } else if ($CFG->assignment_itemstocount == ASSIGNMENT_COUNT_LETTERS) {
- echo ' ('.get_string('numletters', '', count_letters(format_text($submission->data1, $submission->data2))).')</td></tr>';
- }
- }
- echo '</table>';
- print_simple_box_end();
- }
- function update_submission($data) {
- global $CFG, $USER;
- $submission = $this->get_submission($USER->id, true);
- $update = new object();
- $update->id = $submission->id;
- $update->data1 = $data->text;
- $update->data2 = $data->format;
- $update->timemodified = time();
- if (!update_record('assignment_submissions', $update)) {
- return false;
- }
- $submission = $this->get_submission($USER->id);
- $this->update_grade($submission);
- return true;
- }
- function print_student_answer($userid, $return=false){
- global $CFG;
- if (!$submission = $this->get_submission($userid)) {
- return '';
- }
- $output = '<div class="files">'.
- '<img src="'.$CFG->pixpath.'/f/html.gif" class="icon" alt="html" />'.
- link_to_popup_window ('/mod/assignment/type/online/file.php?id='.$this->cm->id.'&userid='.
- $submission->userid, 'file'.$userid, shorten_text(trim(strip_tags(format_text($submission->data1,$submission->data2))), 15), 450, 580,
- get_string('submission', 'assignment'), 'none', true).
- '</div>';
- return $output;
- }
- function print_user_files($userid, $return=false) {
- global $CFG;
- if (!$submission = $this->get_submission($userid)) {
- return '';
- }
- $output = '<div class="files">'.
- '<img align="middle" src="'.$CFG->pixpath.'/f/html.gif" height="16" width="16" alt="html" />'.
- link_to_popup_window ('/mod/assignment/type/online/file.php?id='.$this->cm->id.'&userid='.
- $submission->userid, 'file'.$userid, shorten_text(trim(strip_tags(format_text($submission->data1,$submission->data2))), 15), 450, 580,
- get_string('submission', 'assignment'), 'none', true).
- '</div>';
- ///Stolen code from file.php
- print_simple_box_start('center', '', '', 0, 'generalbox', 'wordcount');
- /// Decide what to count
- if ($CFG->assignment_itemstocount == ASSIGNMENT_COUNT_WORDS) {
- echo ' ('.get_string('numwords', '', count_words(format_text($submission->data1, $submission->data2))).')';
- } else if ($CFG->assignment_itemstocount == ASSIGNMENT_COUNT_LETTERS) {
- echo ' ('.get_string('numletters', '', count_letters(format_text($submission->data1, $submission->data2))).')';
- }
- print_simple_box_end();
- print_simple_box(format_text($submission->data1, $submission->data2), 'center', '100%');
- ///End of stolen code from file.php
- if ($return) {
- //return $output;
- }
- //echo $output;
- }
- function preprocess_submission(&$submission) {
- if ($this->assignment->var1 && empty($submission->submissioncomment)) { // comment inline
- if ($this->usehtmleditor) {
- // Convert to html, clean & copy student data to teacher
- $submission->submissioncomment = format_text($submission->data1, $submission->data2);
- $submission->format = FORMAT_HTML;
- } else {
- // Copy student data to teacher
- $submission->submissioncomment = $submission->data1;
- $submission->format = $submission->data2;
- }
- }
- }
- function setup_elements(&$mform) {
- global $CFG, $COURSE;
- $ynoptions = array( 0 => get_string('no'), 1 => get_string('yes'));
- $mform->addElement('select', 'resubmit', get_string("allowresubmit", "assignment"), $ynoptions);
- $mform->setHelpButton('resubmit', array('resubmit', get_string('allowresubmit', 'assignment'), 'assignment'));
- $mform->setDefault('resubmit', 0);
- $mform->addElement('select', 'emailteachers', get_string("emailteachers", "assignment"), $ynoptions);
- $mform->setHelpButton('emailteachers', array('emailteachers', get_string('emailteachers', 'assignment'), 'assignment'));
- $mform->setDefault('emailteachers', 0);
- $mform->addElement('select', 'var1', get_string("commentinline", "assignment"), $ynoptions);
- $mform->setHelpButton('var1', array('commentinline', get_string('commentinline', 'assignment'), 'assignment'));
- $mform->setDefault('var1', 0);
- }
- }
- class mod_assignment_online_edit_form extends moodleform {
- function definition() {
- $mform =& $this->_form;
- // visible elements
- $mform->addElement('htmleditor', 'text', get_string('submission', 'assignment'), array('cols'=>60, 'rows'=>30));
- $mform->setType('text', PARAM_RAW); // to be cleaned before display
- $mform->setHelpButton('text', array('reading', 'writing', 'richtext'), false, 'editorhelpbutton');
- $mform->addRule('text', get_string('required'), 'required', null, 'client');
- $mform->addElement('format', 'format', get_string('format'));
- $mform->setHelpButton('format', array('textformat', get_string('helpformatting')));
- // hidden params
- $mform->addElement('hidden', 'id', 0);
- $mform->setType('id', PARAM_INT);
- // buttons
- $this->add_action_buttons();
- }
- }
- ?>