Merge branch 'MDL40479_Grading_alert_colour' of https://github.com/Dave-B/moodle
[moodle.git] / mod / assign / renderable.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * This file contains the definition for the renderable classes for the assignment
19  *
20  * @package   mod_assign
21  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 /**
28  * This class wraps the submit for grading confirmation page
29  * @package   mod_assign
30  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
31  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
32  */
33 class assign_submit_for_grading_page implements renderable {
34     /** @var array $notifications is a list of notification messages returned from the plugins */
35     public $notifications = array();
36     /** @var int $coursemoduleid */
37     public $coursemoduleid = 0;
38     /** @var moodleform $confirmform */
39     public $confirmform = null;
41     /**
42      * Constructor
43      * @param string $notifications - Any mesages to display
44      * @param int $coursemoduleid
45      * @param moodleform $confirmform
46      */
47     public function __construct($notifications, $coursemoduleid, $confirmform) {
48         $this->notifications = $notifications;
49         $this->coursemoduleid = $coursemoduleid;
50         $this->confirmform = $confirmform;
51     }
53 }
55 /**
56  * Implements a renderable message notification
57  * @package   mod_assign
58  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
59  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
60  */
61 class assign_gradingmessage implements renderable {
62     /** @var string $heading is the heading to display to the user */
63     public $heading = '';
64     /** @var string $message is the message to display to the user */
65     public $message = '';
66     /** @var int $coursemoduleid */
67     public $coursemoduleid = 0;
68     /** @var int $gradingerror should be set true if there was a problem grading */
69     public $gradingerror = null;
71     /**
72      * Constructor
73      * @param string $heading This is the heading to display
74      * @param string $message This is the message to display
75      * @param bool $gradingerror Set to true to display the message as an error.
76      * @param int $coursemoduleid
77      */
78     public function __construct($heading, $message, $coursemoduleid, $gradingerror = false) {
79         $this->heading = $heading;
80         $this->message = $message;
81         $this->coursemoduleid = $coursemoduleid;
82         $this->gradingerror = $gradingerror;
83     }
85 }
87 /**
88  * Implements a renderable grading options form
89  * @package   mod_assign
90  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
91  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
92  */
93 class assign_form implements renderable {
94     /** @var moodleform $form is the edit submission form */
95     public $form = null;
96     /** @var string $classname is the name of the class to assign to the container */
97     public $classname = '';
98     /** @var string $jsinitfunction is an optional js function to add to the page requires */
99     public $jsinitfunction = '';
101     /**
102      * Constructor
103      * @param string $classname This is the class name for the container div
104      * @param moodleform $form This is the moodleform
105      * @param string $jsinitfunction This is an optional js function to add to the page requires
106      */
107     public function __construct($classname, moodleform $form, $jsinitfunction = '') {
108         $this->classname = $classname;
109         $this->form = $form;
110         $this->jsinitfunction = $jsinitfunction;
111     }
115 /**
116  * Implements a renderable user summary
117  * @package   mod_assign
118  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
119  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
120  */
121 class assign_user_summary implements renderable {
122     /** @var stdClass $user suitable for rendering with user_picture and fullname(). */
123     public $user = null;
124     /** @var int $courseid */
125     public $courseid;
126     /** @var bool $viewfullnames */
127     public $viewfullnames = false;
128     /** @var bool $blindmarking */
129     public $blindmarking = false;
130     /** @var int $uniqueidforuser */
131     public $uniqueidforuser;
132     /** @var array $extrauserfields */
133     public $extrauserfields;
134     /** @var bool $suspendeduser */
135     public $suspendeduser;
137     /**
138      * Constructor
139      * @param stdClass $user
140      * @param int $courseid
141      * @param bool $viewfullnames
142      * @param bool $blindmarking
143      * @param int $uniqueidforuser
144      * @param array $extrauserfields
145      * @param bool $suspendeduser
146      */
147     public function __construct(stdClass $user,
148                                 $courseid,
149                                 $viewfullnames,
150                                 $blindmarking,
151                                 $uniqueidforuser,
152                                 $extrauserfields,
153                                 $suspendeduser = false) {
154         $this->user = $user;
155         $this->courseid = $courseid;
156         $this->viewfullnames = $viewfullnames;
157         $this->blindmarking = $blindmarking;
158         $this->uniqueidforuser = $uniqueidforuser;
159         $this->extrauserfields = $extrauserfields;
160         $this->suspendeduser = $suspendeduser;
161     }
164 /**
165  * Implements a renderable feedback plugin feedback
166  * @package   mod_assign
167  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
168  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
169  */
170 class assign_feedback_plugin_feedback implements renderable {
171     /** @var int SUMMARY */
172     const SUMMARY                = 10;
173     /** @var int FULL */
174     const FULL                   = 20;
176     /** @var assign_submission_plugin $plugin */
177     public $plugin = null;
178     /** @var stdClass $grade */
179     public $grade = null;
180     /** @var string $view */
181     public $view = self::SUMMARY;
182     /** @var int $coursemoduleid */
183     public $coursemoduleid = 0;
184     /** @var string returnaction The action to take you back to the current page */
185     public $returnaction = '';
186     /** @var array returnparams The params to take you back to the current page */
187     public $returnparams = array();
189     /**
190      * Feedback for a single plugin
191      *
192      * @param assign_feedback_plugin $plugin
193      * @param stdClass $grade
194      * @param string $view one of feedback_plugin::SUMMARY or feedback_plugin::FULL
195      * @param int $coursemoduleid
196      * @param string $returnaction The action required to return to this page
197      * @param array $returnparams The params required to return to this page
198      */
199     public function __construct(assign_feedback_plugin $plugin,
200                                 stdClass $grade,
201                                 $view,
202                                 $coursemoduleid,
203                                 $returnaction,
204                                 $returnparams) {
205         $this->plugin = $plugin;
206         $this->grade = $grade;
207         $this->view = $view;
208         $this->coursemoduleid = $coursemoduleid;
209         $this->returnaction = $returnaction;
210         $this->returnparams = $returnparams;
211     }
215 /**
216  * Implements a renderable submission plugin submission
217  * @package   mod_assign
218  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
219  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
220  */
221 class assign_submission_plugin_submission implements renderable {
222     /** @var int SUMMARY */
223     const SUMMARY                = 10;
224     /** @var int FULL */
225     const FULL                   = 20;
227     /** @var assign_submission_plugin $plugin */
228     public $plugin = null;
229     /** @var stdClass $submission */
230     public $submission = null;
231     /** @var string $view */
232     public $view = self::SUMMARY;
233     /** @var int $coursemoduleid */
234     public $coursemoduleid = 0;
235     /** @var string returnaction The action to take you back to the current page */
236     public $returnaction = '';
237     /** @var array returnparams The params to take you back to the current page */
238     public $returnparams = array();
240     /**
241      * Constructor
242      * @param assign_submission_plugin $plugin
243      * @param stdClass $submission
244      * @param string $view one of submission_plugin::SUMMARY, submission_plugin::FULL
245      * @param int $coursemoduleid - the course module id
246      * @param string $returnaction The action to return to the current page
247      * @param array $returnparams The params to return to the current page
248      */
249     public function __construct(assign_submission_plugin $plugin,
250                                 stdClass $submission,
251                                 $view,
252                                 $coursemoduleid,
253                                 $returnaction,
254                                 $returnparams) {
255         $this->plugin = $plugin;
256         $this->submission = $submission;
257         $this->view = $view;
258         $this->coursemoduleid = $coursemoduleid;
259         $this->returnaction = $returnaction;
260         $this->returnparams = $returnparams;
261     }
264 /**
265  * Renderable feedback status
266  * @package   mod_assign
267  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
268  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
269  */
270 class assign_feedback_status implements renderable {
272     /** @var stding $gradefordisplay the student grade rendered into a format suitable for display */
273     public $gradefordisplay = '';
274     /** @var mixed the graded date (may be null) */
275     public $gradeddate = 0;
276     /** @var mixed the grader (may be null) */
277     public $grader = null;
278     /** @var array feedbackplugins - array of feedback plugins */
279     public $feedbackplugins = array();
280     /** @var stdClass assign_grade record */
281     public $grade = null;
282     /** @var int coursemoduleid */
283     public $coursemoduleid = 0;
284     /** @var string returnaction */
285     public $returnaction = '';
286     /** @var array returnparams */
287     public $returnparams = array();
289     /**
290      * Constructor
291      * @param string $gradefordisplay
292      * @param mixed $gradeddate
293      * @param mixed $grader
294      * @param array $feedbackplugins
295      * @param mixed $grade
296      * @param int $coursemoduleid
297      * @param string $returnaction The action required to return to this page
298      * @param array $returnparams The list of params required to return to this page
299      */
300     public function __construct($gradefordisplay,
301                                 $gradeddate,
302                                 $grader,
303                                 $feedbackplugins,
304                                 $grade,
305                                 $coursemoduleid,
306                                 $returnaction,
307                                 $returnparams) {
308         $this->gradefordisplay = $gradefordisplay;
309         $this->gradeddate = $gradeddate;
310         $this->grader = $grader;
311         $this->feedbackplugins = $feedbackplugins;
312         $this->grade = $grade;
313         $this->coursemoduleid = $coursemoduleid;
314         $this->returnaction = $returnaction;
315         $this->returnparams = $returnparams;
316     }
319 /**
320  * Renderable submission status
321  * @package   mod_assign
322  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
323  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
324  */
325 class assign_submission_status implements renderable {
326     /** @var int STUDENT_VIEW */
327     const STUDENT_VIEW     = 10;
328     /** @var int GRADER_VIEW */
329     const GRADER_VIEW      = 20;
331     /** @var int allowsubmissionsfromdate */
332     public $allowsubmissionsfromdate = 0;
333     /** @var bool alwaysshowdescription */
334     public $alwaysshowdescription = false;
335     /** @var stdClass the submission info (may be null) */
336     public $submission = null;
337     /** @var boolean teamsubmissionenabled - true or false */
338     public $teamsubmissionenabled = false;
339     /** @var stdClass teamsubmission the team submission info (may be null) */
340     public $teamsubmission = null;
341     /** @var stdClass submissiongroup the submission group info (may be null) */
342     public $submissiongroup = null;
343     /** @var array submissiongroupmemberswhoneedtosubmit list of users who still need to submit */
344     public $submissiongroupmemberswhoneedtosubmit = array();
345     /** @var bool submissionsenabled */
346     public $submissionsenabled = false;
347     /** @var bool locked */
348     public $locked = false;
349     /** @var bool graded */
350     public $graded = false;
351     /** @var int duedate */
352     public $duedate = 0;
353     /** @var int cutoffdate */
354     public $cutoffdate = 0;
355     /** @var array submissionplugins - the list of submission plugins */
356     public $submissionplugins = array();
357     /** @var string returnaction */
358     public $returnaction = '';
359     /** @var string returnparams */
360     public $returnparams = array();
361     /** @var int courseid */
362     public $courseid = 0;
363     /** @var int coursemoduleid */
364     public $coursemoduleid = 0;
365     /** @var int the view (STUDENT_VIEW OR GRADER_VIEW) */
366     public $view = self::STUDENT_VIEW;
367     /** @var bool canviewfullnames */
368     public $canviewfullnames = false;
369     /** @var bool canedit */
370     public $canedit = false;
371     /** @var bool cansubmit */
372     public $cansubmit = false;
373     /** @var int extensionduedate */
374     public $extensionduedate = 0;
375     /** @var context context */
376     public $context = 0;
377     /** @var bool blindmarking - Should we hide student identities from graders? */
378     public $blindmarking = false;
379     /** @var string gradingcontrollerpreview */
380     public $gradingcontrollerpreview = '';
381     /** @var string attemptreopenmethod */
382     public $attemptreopenmethod = 'none';
383     /** @var int maxattempts */
384     public $maxattempts = -1;
386     /**
387      * Constructor
388      *
389      * @param int $allowsubmissionsfromdate
390      * @param bool $alwaysshowdescription
391      * @param stdClass $submission
392      * @param bool $teamsubmissionenabled
393      * @param stdClass $teamsubmission
394      * @param int $submissiongroup
395      * @param array $submissiongroupmemberswhoneedtosubmit
396      * @param bool $submissionsenabled
397      * @param bool $locked
398      * @param bool $graded
399      * @param int $duedate
400      * @param int $cutoffdate
401      * @param array $submissionplugins
402      * @param string $returnaction
403      * @param array $returnparams
404      * @param int $coursemoduleid
405      * @param int $courseid
406      * @param string $view
407      * @param bool $canedit
408      * @param bool $cansubmit
409      * @param bool $canviewfullnames
410      * @param int $extensionduedate - Any extension to the due date granted for this user
411      * @param context $context - Any extension to the due date granted for this user
412      * @param bool $blindmarking - Should we hide student identities from graders?
413      * @param string $gradingcontrollerpreview
414      * @param string $attemptreopenmethod - The method of reopening student attempts.
415      * @param int $maxattempts - How many attempts can a student make?
416      */
417     public function __construct($allowsubmissionsfromdate,
418                                 $alwaysshowdescription,
419                                 $submission,
420                                 $teamsubmissionenabled,
421                                 $teamsubmission,
422                                 $submissiongroup,
423                                 $submissiongroupmemberswhoneedtosubmit,
424                                 $submissionsenabled,
425                                 $locked,
426                                 $graded,
427                                 $duedate,
428                                 $cutoffdate,
429                                 $submissionplugins,
430                                 $returnaction,
431                                 $returnparams,
432                                 $coursemoduleid,
433                                 $courseid,
434                                 $view,
435                                 $canedit,
436                                 $cansubmit,
437                                 $canviewfullnames,
438                                 $extensionduedate,
439                                 $context,
440                                 $blindmarking,
441                                 $gradingcontrollerpreview,
442                                 $attemptreopenmethod,
443                                 $maxattempts) {
444         $this->allowsubmissionsfromdate = $allowsubmissionsfromdate;
445         $this->alwaysshowdescription = $alwaysshowdescription;
446         $this->submission = $submission;
447         $this->teamsubmissionenabled = $teamsubmissionenabled;
448         $this->teamsubmission = $teamsubmission;
449         $this->submissiongroup = $submissiongroup;
450         $this->submissiongroupmemberswhoneedtosubmit = $submissiongroupmemberswhoneedtosubmit;
451         $this->submissionsenabled = $submissionsenabled;
452         $this->locked = $locked;
453         $this->graded = $graded;
454         $this->duedate = $duedate;
455         $this->cutoffdate = $cutoffdate;
456         $this->submissionplugins = $submissionplugins;
457         $this->returnaction = $returnaction;
458         $this->returnparams = $returnparams;
459         $this->coursemoduleid = $coursemoduleid;
460         $this->courseid = $courseid;
461         $this->view = $view;
462         $this->canedit = $canedit;
463         $this->cansubmit = $cansubmit;
464         $this->canviewfullnames = $canviewfullnames;
465         $this->extensionduedate = $extensionduedate;
466         $this->context = $context;
467         $this->blindmarking = $blindmarking;
468         $this->gradingcontrollerpreview = $gradingcontrollerpreview;
469         $this->attemptreopenmethod = $attemptreopenmethod;
470         $this->maxattempts = $maxattempts;
471     }
474 /**
475  * Used to output the attempt history for a particular assignment.
476  *
477  * @package mod_assign
478  * @copyright 2012 Davo Smith, Synergy Learning
479  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
480  */
481 class assign_attempt_history implements renderable {
483     /** @var array submissions - The list of previous attempts */
484     public $submissions = array();
485     /** @var array grades - The grades for the previous attempts */
486     public $grades = array();
487     /** @var array submissionplugins - The list of submission plugins to render the previous attempts */
488     public $submissionplugins = array();
489     /** @var array feedbackplugins - The list of feedback plugins to render the previous attempts */
490     public $feedbackplugins = array();
491     /** @var int coursemoduleid - The cmid for the assignment */
492     public $coursemoduleid = 0;
493     /** @var string returnaction - The action for the next page. */
494     public $returnaction = '';
495     /** @var string returnparams - The params for the next page. */
496     public $returnparams = array();
497     /** @var bool cangrade - Does this user have grade capability? */
498     public $cangrade = false;
499     /** @var string useridlistid - Id of the useridlist stored in cache, this plus rownum determines the userid */
500     public $useridlistid = 0;
501     /** @var int rownum - The rownum of the user in the useridlistid - this plus useridlistid determines the userid */
502     public $rownum = 0;
504     /**
505      * Constructor
506      *
507      * @param array $submissions
508      * @param array $grades
509      * @param array $submissionplugins
510      * @param array $feedbackplugins
511      * @param int $coursemoduleid
512      * @param string $returnaction
513      * @param array $returnparams
514      * @param bool $cangrade
515      * @param int $useridlistid
516      * @param int $rownum
517      */
518     public function __construct($submissions,
519                                 $grades,
520                                 $submissionplugins,
521                                 $feedbackplugins,
522                                 $coursemoduleid,
523                                 $returnaction,
524                                 $returnparams,
525                                 $cangrade,
526                                 $useridlistid,
527                                 $rownum) {
528         $this->submissions = $submissions;
529         $this->grades = $grades;
530         $this->submissionplugins = $submissionplugins;
531         $this->feedbackplugins = $feedbackplugins;
532         $this->coursemoduleid = $coursemoduleid;
533         $this->returnaction = $returnaction;
534         $this->returnparams = $returnparams;
535         $this->cangrade = $cangrade;
536         $this->useridlistid = $useridlistid;
537         $this->rownum = $rownum;
538     }
541 /**
542  * Renderable header
543  * @package   mod_assign
544  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
545  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
546  */
547 class assign_header implements renderable {
548     /** @var stdClass the assign record  */
549     public $assign = null;
550     /** @var mixed context|null the context record  */
551     public $context = null;
552     /** @var bool $showintro - show or hide the intro */
553     public $showintro = false;
554     /** @var int coursemoduleid - The course module id */
555     public $coursemoduleid = 0;
556     /** @var string $subpage optional subpage (extra level in the breadcrumbs) */
557     public $subpage = '';
558     /** @var string $preface optional preface (text to show before the heading) */
559     public $preface = '';
561     /**
562      * Constructor
563      *
564      * @param stdClass $assign  - the assign database record
565      * @param mixed $context context|null the course module context
566      * @param bool $showintro  - show or hide the intro
567      * @param int $coursemoduleid  - the course module id
568      * @param string $subpage  - an optional sub page in the navigation
569      * @param string $preface  - an optional preface to show before the heading
570      */
571     public function __construct(stdClass $assign,
572                                 $context,
573                                 $showintro,
574                                 $coursemoduleid,
575                                 $subpage='',
576                                 $preface='') {
577         $this->assign = $assign;
578         $this->context = $context;
579         $this->showintro = $showintro;
580         $this->coursemoduleid = $coursemoduleid;
581         $this->subpage = $subpage;
582         $this->preface = $preface;
583     }
586 /**
587  * Renderable header related to an individual subplugin
588  * @package   mod_assign
589  * @copyright 2014 Henning Bostelmann
590  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
591  */
592 class assign_plugin_header implements renderable {
593     /** @var assign_plugin $plugin */
594     public $plugin = null;
596     /**
597      * Header for a single plugin
598      *
599      * @param assign_plugin $plugin
600      */
601     public function __construct(assign_plugin $plugin) {
602         $this->plugin = $plugin;
603     }
606 /**
607  * Renderable grading summary
608  * @package   mod_assign
609  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
610  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
611  */
612 class assign_grading_summary implements renderable {
613     /** @var int participantcount - The number of users who can submit to this assignment */
614     public $participantcount = 0;
615     /** @var bool submissiondraftsenabled - Allow submission drafts */
616     public $submissiondraftsenabled = false;
617     /** @var int submissiondraftscount - The number of submissions in draft status */
618     public $submissiondraftscount = 0;
619     /** @var bool submissionsenabled - Allow submissions */
620     public $submissionsenabled = false;
621     /** @var int submissionssubmittedcount - The number of submissions in submitted status */
622     public $submissionssubmittedcount = 0;
623     /** @var int submissionsneedgradingcount - The number of submissions that need grading */
624     public $submissionsneedgradingcount = 0;
625     /** @var int duedate - The assignment due date (if one is set) */
626     public $duedate = 0;
627     /** @var int cutoffdate - The assignment cut off date (if one is set) */
628     public $cutoffdate = 0;
629     /** @var int coursemoduleid - The assignment course module id */
630     public $coursemoduleid = 0;
631     /** @var boolean teamsubmission - Are team submissions enabled for this assignment */
632     public $teamsubmission = false;
634     /**
635      * constructor
636      *
637      * @param int $participantcount
638      * @param bool $submissiondraftsenabled
639      * @param int $submissiondraftscount
640      * @param bool $submissionsenabled
641      * @param int $submissionssubmittedcount
642      * @param int $cutoffdate
643      * @param int $duedate
644      * @param int $coursemoduleid
645      * @param int $submissionsneedgradingcount
646      * @param bool $teamsubmission
647      */
648     public function __construct($participantcount,
649                                 $submissiondraftsenabled,
650                                 $submissiondraftscount,
651                                 $submissionsenabled,
652                                 $submissionssubmittedcount,
653                                 $cutoffdate,
654                                 $duedate,
655                                 $coursemoduleid,
656                                 $submissionsneedgradingcount,
657                                 $teamsubmission) {
658         $this->participantcount = $participantcount;
659         $this->submissiondraftsenabled = $submissiondraftsenabled;
660         $this->submissiondraftscount = $submissiondraftscount;
661         $this->submissionsenabled = $submissionsenabled;
662         $this->submissionssubmittedcount = $submissionssubmittedcount;
663         $this->duedate = $duedate;
664         $this->cutoffdate = $cutoffdate;
665         $this->coursemoduleid = $coursemoduleid;
666         $this->submissionsneedgradingcount = $submissionsneedgradingcount;
667         $this->teamsubmission = $teamsubmission;
668     }
671 /**
672  * Renderable course index summary
673  * @package   mod_assign
674  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
675  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
676  */
677 class assign_course_index_summary implements renderable {
678     /** @var array assignments - A list of course module info and submission counts or statuses */
679     public $assignments = array();
680     /** @var boolean usesections - Does this course format support sections? */
681     public $usesections = false;
682     /** @var string courseformat - The current course format name */
683     public $courseformatname = '';
685     /**
686      * constructor
687      *
688      * @param boolean $usesections - True if this course format uses sections
689      * @param string $courseformatname - The id of this course format
690      */
691     public function __construct($usesections, $courseformatname) {
692         $this->usesections = $usesections;
693         $this->courseformatname = $courseformatname;
694     }
696     /**
697      * Add a row of data to display on the course index page
698      *
699      * @param int $cmid - The course module id for generating a link
700      * @param string $cmname - The course module name for generating a link
701      * @param string $sectionname - The name of the course section (only if $usesections is true)
702      * @param int $timedue - The due date for the assignment - may be 0 if no duedate
703      * @param string $submissioninfo - A string with either the number of submitted assignments, or the
704      *                                 status of the current users submission depending on capabilities.
705      * @param string $gradeinfo - The current users grade if they have been graded and it is not hidden.
706      */
707     public function add_assign_info($cmid, $cmname, $sectionname, $timedue, $submissioninfo, $gradeinfo) {
708         $this->assignments[] = array('cmid'=>$cmid,
709                                'cmname'=>$cmname,
710                                'sectionname'=>$sectionname,
711                                'timedue'=>$timedue,
712                                'submissioninfo'=>$submissioninfo,
713                                'gradeinfo'=>$gradeinfo);
714     }
720 /**
721  * An assign file class that extends rendererable class and is used by the assign module.
722  *
723  * @package   mod_assign
724  * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
725  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
726  */
727 class assign_files implements renderable {
728     /** @var context $context */
729     public $context;
730     /** @var string $context */
731     public $dir;
732     /** @var MoodleQuickForm $portfolioform */
733     public $portfolioform;
734     /** @var stdClass $cm course module */
735     public $cm;
736     /** @var stdClass $course */
737     public $course;
739     /**
740      * The constructor
741      *
742      * @param context $context
743      * @param int $sid
744      * @param string $filearea
745      * @param string $component
746      */
747     public function __construct(context $context, $sid, $filearea, $component) {
748         global $CFG;
749         $this->context = $context;
750         list($context, $course, $cm) = get_context_info_array($context->id);
751         $this->cm = $cm;
752         $this->course = $course;
753         $fs = get_file_storage();
754         $this->dir = $fs->get_area_tree($this->context->id, $component, $filearea, $sid);
756         $files = $fs->get_area_files($this->context->id,
757                                      $component,
758                                      $filearea,
759                                      $sid,
760                                      'timemodified',
761                                      false);
763         if (!empty($CFG->enableportfolios)) {
764             require_once($CFG->libdir . '/portfoliolib.php');
765             if (count($files) >= 1 &&
766                     has_capability('mod/assign:exportownsubmission', $this->context)) {
767                 $button = new portfolio_add_button();
768                 $callbackparams = array('cmid' => $this->cm->id,
769                                         'sid' => $sid,
770                                         'area' => $filearea,
771                                         'component' => $component);
772                 $button->set_callback_options('assign_portfolio_caller',
773                                               $callbackparams,
774                                               'mod_assign');
775                 $button->reset_formats();
776                 $this->portfolioform = $button->to_html(PORTFOLIO_ADD_TEXT_LINK);
777             }
779         }
781         // Plagiarism check if it is enabled.
782         $output = '';
783         if (!empty($CFG->enableplagiarism)) {
784             require_once($CFG->libdir . '/plagiarismlib.php');
786             // For plagiarism_get_links.
787             $assignment = new assign($this->context, null, null);
788             foreach ($files as $file) {
790                 $linkparams = array('userid' => $sid,
791                                     'file' => $file,
792                                     'cmid' => $this->cm->id,
793                                     'course' => $this->course,
794                                     'assignment' => $assignment->get_instance());
795                 $output .= plagiarism_get_links($linkparams);
797                 $output .= '<br />';
798             }
799         }
801         $this->preprocess($this->dir, $filearea, $component);
802     }
804     /**
805      * Preprocessing the file list to add the portfolio links if required.
806      *
807      * @param array $dir
808      * @param string $filearea
809      * @param string $component
810      * @return void
811      */
812     public function preprocess($dir, $filearea, $component) {
813         global $CFG;
814         foreach ($dir['subdirs'] as $subdir) {
815             $this->preprocess($subdir, $filearea, $component);
816         }
817         foreach ($dir['files'] as $file) {
818             $file->portfoliobutton = '';
819             if (!empty($CFG->enableportfolios)) {
820                 $button = new portfolio_add_button();
821                 if (has_capability('mod/assign:exportownsubmission', $this->context)) {
822                     $portfolioparams = array('cmid' => $this->cm->id, 'fileid' => $file->get_id());
823                     $button->set_callback_options('assign_portfolio_caller',
824                                                   $portfolioparams,
825                                                   'mod_assign');
826                     $button->set_format_by_file($file);
827                     $file->portfoliobutton = $button->to_html(PORTFOLIO_ADD_ICON_LINK);
828                 }
829             }
830             $path = '/' .
831                     $this->context->id .
832                     '/' .
833                     $component .
834                     '/' .
835                     $filearea .
836                     '/' .
837                     $file->get_itemid() .
838                     $file->get_filepath() .
839                     $file->get_filename();
840             $url = file_encode_url("$CFG->wwwroot/pluginfile.php", $path, true);
841             $filename = $file->get_filename();
842             $file->fileurl = html_writer::link($url, $filename);
843         }
844     }