PageRenderTime 34ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/mod/assignment/type/online/assignment.class.php

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