[ Index ]

PHP Cross Reference of Moodle 1.9.3 [Build 15-Oct-2008]

title

Body

[close]

/mod/assignment/type/online/ -> assignment.class.php (source)

   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.'&amp;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.'&amp;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  ?>


Generated: Wed Jan 14 11:33:29 2009 Cross-referenced by PHPXref 0.7