Merge branch 'MDL-42411-master' of git://github.com/damyon/moodle
[moodle.git] / mod / workshop / view.php
blobdfa245f2be141f442c4331ec6d7e4e2557846999
1 <?php
3 // This file is part of Moodle - http://moodle.org/
4 //
5 // Moodle is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // Moodle is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with Moodle. If not, see <http://www.gnu.org/licenses/>.
18 /**
19 * Prints a particular instance of workshop
21 * You can have a rather longer description of the file as well,
22 * if you like, and it can span multiple lines.
24 * @package mod
25 * @subpackage workshop
26 * @copyright 2009 David Mudrak <david.mudrak@gmail.com>
27 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
30 require_once(dirname(dirname(dirname(__FILE__))).'/config.php');
31 require_once(dirname(__FILE__).'/locallib.php');
32 require_once($CFG->libdir.'/completionlib.php');
34 $id = optional_param('id', 0, PARAM_INT); // course_module ID, or
35 $w = optional_param('w', 0, PARAM_INT); // workshop instance ID
36 $editmode = optional_param('editmode', null, PARAM_BOOL);
37 $page = optional_param('page', 0, PARAM_INT);
38 $perpage = optional_param('perpage', null, PARAM_INT);
39 $sortby = optional_param('sortby', 'lastname', PARAM_ALPHA);
40 $sorthow = optional_param('sorthow', 'ASC', PARAM_ALPHA);
41 $eval = optional_param('eval', null, PARAM_PLUGIN);
43 if ($id) {
44 $cm = get_coursemodule_from_id('workshop', $id, 0, false, MUST_EXIST);
45 $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
46 $workshoprecord = $DB->get_record('workshop', array('id' => $cm->instance), '*', MUST_EXIST);
47 } else {
48 $workshoprecord = $DB->get_record('workshop', array('id' => $w), '*', MUST_EXIST);
49 $course = $DB->get_record('course', array('id' => $workshoprecord->course), '*', MUST_EXIST);
50 $cm = get_coursemodule_from_instance('workshop', $workshoprecord->id, $course->id, false, MUST_EXIST);
53 require_login($course, true, $cm);
54 require_capability('mod/workshop:view', $PAGE->context);
56 $workshop = new workshop($workshoprecord, $cm, $course);
58 // Mark viewed
59 $completion = new completion_info($course);
60 $completion->set_module_viewed($cm);
62 $eventdata = array();
63 $eventdata['objectid'] = $workshop->id;
64 $eventdata['context'] = $workshop->context;
65 $eventdata['courseid'] = $course->id;
66 $eventdata['other']['content'] = $workshop->phase;
68 $PAGE->set_url($workshop->view_url());
69 $event = \mod_workshop\event\course_module_viewed::create($eventdata);
70 $event->add_record_snapshot('course', $course);
71 $event->add_record_snapshot('workshop', $workshoprecord);
72 $event->add_record_snapshot('course_modules', $cm);
73 $event->set_page_detail();
74 $event->trigger();
76 // If the phase is to be switched, do it asap. This just has to happen after triggering
77 // the event so that the scheduled allocator had a chance to allocate submissions.
78 if ($workshop->phase == workshop::PHASE_SUBMISSION and $workshop->phaseswitchassessment
79 and $workshop->submissionend > 0 and $workshop->submissionend < time()) {
80 $workshop->switch_phase(workshop::PHASE_ASSESSMENT);
81 $workshop->log('update switch phase', $workshop->view_url(), $workshop->phase);
82 // Disable the automatic switching now so that it is not executed again by accident
83 // if the teacher changes the phase back to the submission one.
84 $DB->set_field('workshop', 'phaseswitchassessment', 0, array('id' => $workshop->id));
85 $workshop->phaseswitchassessment = 0;
88 if (!is_null($editmode) && $PAGE->user_allowed_editing()) {
89 $USER->editing = $editmode;
92 $PAGE->set_title($workshop->name);
93 $PAGE->set_heading($course->fullname);
95 if ($perpage and $perpage > 0 and $perpage <= 1000) {
96 require_sesskey();
97 set_user_preference('workshop_perpage', $perpage);
98 redirect($PAGE->url);
101 if ($eval) {
102 require_sesskey();
103 require_capability('mod/workshop:overridegrades', $workshop->context);
104 $workshop->set_grading_evaluation_method($eval);
105 redirect($PAGE->url);
108 $output = $PAGE->get_renderer('mod_workshop');
109 $userplan = new workshop_user_plan($workshop, $USER->id);
111 /// Output starts here
113 echo $output->header();
114 echo $output->heading_with_help(format_string($workshop->name), 'userplan', 'workshop');
115 echo $output->render($userplan);
117 switch ($workshop->phase) {
118 case workshop::PHASE_SETUP:
119 if (trim($workshop->intro)) {
120 print_collapsible_region_start('', 'workshop-viewlet-intro', get_string('introduction', 'workshop'));
121 echo $output->box(format_module_intro('workshop', $workshop, $workshop->cm->id), 'generalbox');
122 print_collapsible_region_end();
124 if ($workshop->useexamples and has_capability('mod/workshop:manageexamples', $PAGE->context)) {
125 print_collapsible_region_start('', 'workshop-viewlet-allexamples', get_string('examplesubmissions', 'workshop'));
126 echo $output->box_start('generalbox examples');
127 if ($workshop->grading_strategy_instance()->form_ready()) {
128 if (! $examples = $workshop->get_examples_for_manager()) {
129 echo $output->container(get_string('noexamples', 'workshop'), 'noexamples');
131 foreach ($examples as $example) {
132 $summary = $workshop->prepare_example_summary($example);
133 $summary->editable = true;
134 echo $output->render($summary);
136 $aurl = new moodle_url($workshop->exsubmission_url(0), array('edit' => 'on'));
137 echo $output->single_button($aurl, get_string('exampleadd', 'workshop'), 'get');
138 } else {
139 echo $output->container(get_string('noexamplesformready', 'workshop'));
141 echo $output->box_end();
142 print_collapsible_region_end();
144 break;
145 case workshop::PHASE_SUBMISSION:
146 if (trim($workshop->instructauthors)) {
147 $instructions = file_rewrite_pluginfile_urls($workshop->instructauthors, 'pluginfile.php', $PAGE->context->id,
148 'mod_workshop', 'instructauthors', 0, workshop::instruction_editors_options($PAGE->context));
149 print_collapsible_region_start('', 'workshop-viewlet-instructauthors', get_string('instructauthors', 'workshop'));
150 echo $output->box(format_text($instructions, $workshop->instructauthorsformat, array('overflowdiv'=>true)), array('generalbox', 'instructions'));
151 print_collapsible_region_end();
154 // does the user have to assess examples before submitting their own work?
155 $examplesmust = ($workshop->useexamples and $workshop->examplesmode == workshop::EXAMPLES_BEFORE_SUBMISSION);
157 // is the assessment of example submissions considered finished?
158 $examplesdone = has_capability('mod/workshop:manageexamples', $workshop->context);
159 if ($workshop->assessing_examples_allowed()
160 and has_capability('mod/workshop:submit', $workshop->context)
161 and ! has_capability('mod/workshop:manageexamples', $workshop->context)) {
162 $examples = $userplan->get_examples();
163 $total = count($examples);
164 $left = 0;
165 // make sure the current user has all examples allocated
166 foreach ($examples as $exampleid => $example) {
167 if (is_null($example->assessmentid)) {
168 $examples[$exampleid]->assessmentid = $workshop->add_allocation($example, $USER->id, 0);
170 if (is_null($example->grade)) {
171 $left++;
174 if ($left > 0 and $workshop->examplesmode != workshop::EXAMPLES_VOLUNTARY) {
175 $examplesdone = false;
176 } else {
177 $examplesdone = true;
179 print_collapsible_region_start('', 'workshop-viewlet-examples', get_string('exampleassessments', 'workshop'), false, $examplesdone);
180 echo $output->box_start('generalbox exampleassessments');
181 if ($total == 0) {
182 echo $output->heading(get_string('noexamples', 'workshop'), 3);
183 } else {
184 foreach ($examples as $example) {
185 $summary = $workshop->prepare_example_summary($example);
186 echo $output->render($summary);
189 echo $output->box_end();
190 print_collapsible_region_end();
193 if (has_capability('mod/workshop:submit', $PAGE->context) and (!$examplesmust or $examplesdone)) {
194 print_collapsible_region_start('', 'workshop-viewlet-ownsubmission', get_string('yoursubmission', 'workshop'));
195 echo $output->box_start('generalbox ownsubmission');
196 if ($submission = $workshop->get_submission_by_author($USER->id)) {
197 echo $output->render($workshop->prepare_submission_summary($submission, true));
198 if ($workshop->modifying_submission_allowed($USER->id)) {
199 $btnurl = new moodle_url($workshop->submission_url(), array('edit' => 'on'));
200 $btntxt = get_string('editsubmission', 'workshop');
202 } else {
203 echo $output->container(get_string('noyoursubmission', 'workshop'));
204 if ($workshop->creating_submission_allowed($USER->id)) {
205 $btnurl = new moodle_url($workshop->submission_url(), array('edit' => 'on'));
206 $btntxt = get_string('createsubmission', 'workshop');
209 if (!empty($btnurl)) {
210 echo $output->single_button($btnurl, $btntxt, 'get');
212 echo $output->box_end();
213 print_collapsible_region_end();
216 if (has_capability('mod/workshop:viewallsubmissions', $PAGE->context)) {
217 $groupmode = groups_get_activity_groupmode($workshop->cm);
218 $groupid = groups_get_activity_group($workshop->cm, true);
220 if ($groupmode == SEPARATEGROUPS and !has_capability('moodle/site:accessallgroups', $workshop->context)) {
221 $allowedgroups = groups_get_activity_allowed_groups($workshop->cm);
222 if (empty($allowedgroups)) {
223 echo $output->container(get_string('groupnoallowed', 'mod_workshop'), 'groupwidget error');
224 break;
226 if (! in_array($groupid, array_keys($allowedgroups))) {
227 echo $output->container(get_string('groupnotamember', 'core_group'), 'groupwidget error');
228 break;
232 $countsubmissions = $workshop->count_submissions('all', $groupid);
233 $perpage = get_user_preferences('workshop_perpage', 10);
234 $pagingbar = new paging_bar($countsubmissions, $page, $perpage, $PAGE->url, 'page');
236 print_collapsible_region_start('', 'workshop-viewlet-allsubmissions', get_string('allsubmissions', 'workshop', $countsubmissions));
237 echo $output->box_start('generalbox allsubmissions');
238 echo $output->container(groups_print_activity_menu($workshop->cm, $PAGE->url, true), 'groupwidget');
240 if ($countsubmissions == 0) {
241 echo $output->container(get_string('nosubmissions', 'workshop'), 'nosubmissions');
243 } else {
244 $submissions = $workshop->get_submissions('all', $groupid, $page * $perpage, $perpage);
245 $shownames = has_capability('mod/workshop:viewauthornames', $workshop->context);
246 echo $output->render($pagingbar);
247 foreach ($submissions as $submission) {
248 echo $output->render($workshop->prepare_submission_summary($submission, $shownames));
250 echo $output->render($pagingbar);
251 echo $output->perpage_selector($perpage);
254 echo $output->box_end();
255 print_collapsible_region_end();
258 break;
260 case workshop::PHASE_ASSESSMENT:
262 $ownsubmissionexists = null;
263 if (has_capability('mod/workshop:submit', $PAGE->context)) {
264 if ($ownsubmission = $workshop->get_submission_by_author($USER->id)) {
265 print_collapsible_region_start('', 'workshop-viewlet-ownsubmission', get_string('yoursubmission', 'workshop'), false, true);
266 echo $output->box_start('generalbox ownsubmission');
267 echo $output->render($workshop->prepare_submission_summary($ownsubmission, true));
268 $ownsubmissionexists = true;
269 } else {
270 print_collapsible_region_start('', 'workshop-viewlet-ownsubmission', get_string('yoursubmission', 'workshop'));
271 echo $output->box_start('generalbox ownsubmission');
272 echo $output->container(get_string('noyoursubmission', 'workshop'));
273 $ownsubmissionexists = false;
274 if ($workshop->creating_submission_allowed($USER->id)) {
275 $btnurl = new moodle_url($workshop->submission_url(), array('edit' => 'on'));
276 $btntxt = get_string('createsubmission', 'workshop');
279 if (!empty($btnurl)) {
280 echo $output->single_button($btnurl, $btntxt, 'get');
282 echo $output->box_end();
283 print_collapsible_region_end();
286 if (has_capability('mod/workshop:viewallassessments', $PAGE->context)) {
287 $perpage = get_user_preferences('workshop_perpage', 10);
288 $groupid = groups_get_activity_group($workshop->cm, true);
289 $data = $workshop->prepare_grading_report_data($USER->id, $groupid, $page, $perpage, $sortby, $sorthow);
290 if ($data) {
291 $showauthornames = has_capability('mod/workshop:viewauthornames', $workshop->context);
292 $showreviewernames = has_capability('mod/workshop:viewreviewernames', $workshop->context);
294 // prepare paging bar
295 $baseurl = new moodle_url($PAGE->url, array('sortby' => $sortby, 'sorthow' => $sorthow));
296 $pagingbar = new paging_bar($data->totalcount, $page, $perpage, $baseurl, 'page');
298 // grading report display options
299 $reportopts = new stdclass();
300 $reportopts->showauthornames = $showauthornames;
301 $reportopts->showreviewernames = $showreviewernames;
302 $reportopts->sortby = $sortby;
303 $reportopts->sorthow = $sorthow;
304 $reportopts->showsubmissiongrade = false;
305 $reportopts->showgradinggrade = false;
307 print_collapsible_region_start('', 'workshop-viewlet-gradereport', get_string('gradesreport', 'workshop'));
308 echo $output->box_start('generalbox gradesreport');
309 echo $output->container(groups_print_activity_menu($workshop->cm, $PAGE->url, true), 'groupwidget');
310 echo $output->render($pagingbar);
311 echo $output->render(new workshop_grading_report($data, $reportopts));
312 echo $output->render($pagingbar);
313 echo $output->perpage_selector($perpage);
314 echo $output->box_end();
315 print_collapsible_region_end();
318 if (trim($workshop->instructreviewers)) {
319 $instructions = file_rewrite_pluginfile_urls($workshop->instructreviewers, 'pluginfile.php', $PAGE->context->id,
320 'mod_workshop', 'instructreviewers', 0, workshop::instruction_editors_options($PAGE->context));
321 print_collapsible_region_start('', 'workshop-viewlet-instructreviewers', get_string('instructreviewers', 'workshop'));
322 echo $output->box(format_text($instructions, $workshop->instructreviewersformat, array('overflowdiv'=>true)), array('generalbox', 'instructions'));
323 print_collapsible_region_end();
326 // does the user have to assess examples before assessing other's work?
327 $examplesmust = ($workshop->useexamples and $workshop->examplesmode == workshop::EXAMPLES_BEFORE_ASSESSMENT);
329 // is the assessment of example submissions considered finished?
330 $examplesdone = has_capability('mod/workshop:manageexamples', $workshop->context);
332 // can the examples be assessed?
333 $examplesavailable = true;
335 if (!$examplesdone and $examplesmust and ($ownsubmissionexists === false)) {
336 print_collapsible_region_start('', 'workshop-viewlet-examplesfail', get_string('exampleassessments', 'workshop'));
337 echo $output->box(get_string('exampleneedsubmission', 'workshop'));
338 print_collapsible_region_end();
339 $examplesavailable = false;
342 if ($workshop->assessing_examples_allowed()
343 and has_capability('mod/workshop:submit', $workshop->context)
344 and ! has_capability('mod/workshop:manageexamples', $workshop->context)
345 and $examplesavailable) {
346 $examples = $userplan->get_examples();
347 $total = count($examples);
348 $left = 0;
349 // make sure the current user has all examples allocated
350 foreach ($examples as $exampleid => $example) {
351 if (is_null($example->assessmentid)) {
352 $examples[$exampleid]->assessmentid = $workshop->add_allocation($example, $USER->id, 0);
354 if (is_null($example->grade)) {
355 $left++;
358 if ($left > 0 and $workshop->examplesmode != workshop::EXAMPLES_VOLUNTARY) {
359 $examplesdone = false;
360 } else {
361 $examplesdone = true;
363 print_collapsible_region_start('', 'workshop-viewlet-examples', get_string('exampleassessments', 'workshop'), false, $examplesdone);
364 echo $output->box_start('generalbox exampleassessments');
365 if ($total == 0) {
366 echo $output->heading(get_string('noexamples', 'workshop'), 3);
367 } else {
368 foreach ($examples as $example) {
369 $summary = $workshop->prepare_example_summary($example);
370 echo $output->render($summary);
373 echo $output->box_end();
374 print_collapsible_region_end();
376 if (!$examplesmust or $examplesdone) {
377 print_collapsible_region_start('', 'workshop-viewlet-assignedassessments', get_string('assignedassessments', 'workshop'));
378 if (! $assessments = $workshop->get_assessments_by_reviewer($USER->id)) {
379 echo $output->box_start('generalbox assessment-none');
380 echo $output->notification(get_string('assignedassessmentsnone', 'workshop'));
381 echo $output->box_end();
382 } else {
383 $shownames = has_capability('mod/workshop:viewauthornames', $PAGE->context);
384 foreach ($assessments as $assessment) {
385 $submission = new stdClass();
386 $submission->id = $assessment->submissionid;
387 $submission->title = $assessment->submissiontitle;
388 $submission->timecreated = $assessment->submissioncreated;
389 $submission->timemodified = $assessment->submissionmodified;
390 $submission->authorid = $assessment->authorid;
391 $submission->authorfirstname = $assessment->authorfirstname;
392 $submission->authorlastname = $assessment->authorlastname;
393 $submission->authorpicture = $assessment->authorpicture;
394 $submission->authorimagealt = $assessment->authorimagealt;
395 $submission->authoremail = $assessment->authoremail;
397 // transform the submission object into renderable component
398 $submission = $workshop->prepare_submission_summary($submission, $shownames);
400 if (is_null($assessment->grade)) {
401 $submission->status = 'notgraded';
402 $class = ' notgraded';
403 $buttontext = get_string('assess', 'workshop');
404 } else {
405 $submission->status = 'graded';
406 $class = ' graded';
407 $buttontext = get_string('reassess', 'workshop');
410 echo $output->box_start('generalbox assessment-summary' . $class);
411 echo $output->render($submission);
412 $aurl = $workshop->assess_url($assessment->id);
413 echo $output->single_button($aurl, $buttontext, 'get');
414 echo $output->box_end();
417 print_collapsible_region_end();
419 break;
420 case workshop::PHASE_EVALUATION:
421 if (has_capability('mod/workshop:viewallassessments', $PAGE->context)) {
422 $perpage = get_user_preferences('workshop_perpage', 10);
423 $groupid = groups_get_activity_group($workshop->cm, true);
424 $data = $workshop->prepare_grading_report_data($USER->id, $groupid, $page, $perpage, $sortby, $sorthow);
425 if ($data) {
426 $showauthornames = has_capability('mod/workshop:viewauthornames', $workshop->context);
427 $showreviewernames = has_capability('mod/workshop:viewreviewernames', $workshop->context);
429 if (has_capability('mod/workshop:overridegrades', $PAGE->context)) {
430 // Print a drop-down selector to change the current evaluation method.
431 $selector = new single_select($PAGE->url, 'eval', workshop::available_evaluators_list(),
432 $workshop->evaluation, false, 'evaluationmethodchooser');
433 $selector->set_label(get_string('evaluationmethod', 'mod_workshop'));
434 $selector->set_help_icon('evaluationmethod', 'mod_workshop');
435 $selector->method = 'post';
436 echo $output->render($selector);
437 // load the grading evaluator
438 $evaluator = $workshop->grading_evaluation_instance();
439 $form = $evaluator->get_settings_form(new moodle_url($workshop->aggregate_url(),
440 compact('sortby', 'sorthow', 'page')));
441 $form->display();
444 // prepare paging bar
445 $baseurl = new moodle_url($PAGE->url, array('sortby' => $sortby, 'sorthow' => $sorthow));
446 $pagingbar = new paging_bar($data->totalcount, $page, $perpage, $baseurl, 'page');
448 // grading report display options
449 $reportopts = new stdclass();
450 $reportopts->showauthornames = $showauthornames;
451 $reportopts->showreviewernames = $showreviewernames;
452 $reportopts->sortby = $sortby;
453 $reportopts->sorthow = $sorthow;
454 $reportopts->showsubmissiongrade = true;
455 $reportopts->showgradinggrade = true;
457 print_collapsible_region_start('', 'workshop-viewlet-gradereport', get_string('gradesreport', 'workshop'));
458 echo $output->box_start('generalbox gradesreport');
459 echo $output->container(groups_print_activity_menu($workshop->cm, $PAGE->url, true), 'groupwidget');
460 echo $output->render($pagingbar);
461 echo $output->render(new workshop_grading_report($data, $reportopts));
462 echo $output->render($pagingbar);
463 echo $output->perpage_selector($perpage);
464 echo $output->box_end();
465 print_collapsible_region_end();
468 if (has_capability('mod/workshop:overridegrades', $workshop->context)) {
469 print_collapsible_region_start('', 'workshop-viewlet-cleargrades', get_string('toolbox', 'workshop'), false, true);
470 echo $output->box_start('generalbox toolbox');
472 // Clear aggregated grades
473 $url = new moodle_url($workshop->toolbox_url('clearaggregatedgrades'));
474 $btn = new single_button($url, get_string('clearaggregatedgrades', 'workshop'), 'post');
475 $btn->add_confirm_action(get_string('clearaggregatedgradesconfirm', 'workshop'));
476 echo $output->container_start('toolboxaction');
477 echo $output->render($btn);
478 echo $output->help_icon('clearaggregatedgrades', 'workshop');
479 echo $output->container_end();
480 // Clear assessments
481 $url = new moodle_url($workshop->toolbox_url('clearassessments'));
482 $btn = new single_button($url, get_string('clearassessments', 'workshop'), 'post');
483 $btn->add_confirm_action(get_string('clearassessmentsconfirm', 'workshop'));
484 echo $output->container_start('toolboxaction');
485 echo $output->render($btn);
486 echo $output->help_icon('clearassessments', 'workshop');
487 echo html_writer::empty_tag('img', array('src' => $output->pix_url('i/risk_dataloss'),
488 'title' => get_string('riskdatalossshort', 'admin'),
489 'alt' => get_string('riskdatalossshort', 'admin'),
490 'class' => 'workshop-risk-dataloss'));
491 echo $output->container_end();
493 echo $output->box_end();
494 print_collapsible_region_end();
496 if (has_capability('mod/workshop:submit', $PAGE->context)) {
497 print_collapsible_region_start('', 'workshop-viewlet-ownsubmission', get_string('yoursubmission', 'workshop'));
498 echo $output->box_start('generalbox ownsubmission');
499 if ($submission = $workshop->get_submission_by_author($USER->id)) {
500 echo $output->render($workshop->prepare_submission_summary($submission, true));
501 } else {
502 echo $output->container(get_string('noyoursubmission', 'workshop'));
504 echo $output->box_end();
505 print_collapsible_region_end();
507 if ($assessments = $workshop->get_assessments_by_reviewer($USER->id)) {
508 print_collapsible_region_start('', 'workshop-viewlet-assignedassessments', get_string('assignedassessments', 'workshop'));
509 $shownames = has_capability('mod/workshop:viewauthornames', $PAGE->context);
510 foreach ($assessments as $assessment) {
511 $submission = new stdclass();
512 $submission->id = $assessment->submissionid;
513 $submission->title = $assessment->submissiontitle;
514 $submission->timecreated = $assessment->submissioncreated;
515 $submission->timemodified = $assessment->submissionmodified;
516 $submission->authorid = $assessment->authorid;
517 $submission->authorfirstname = $assessment->authorfirstname;
518 $submission->authorlastname = $assessment->authorlastname;
519 $submission->authorpicture = $assessment->authorpicture;
520 $submission->authorimagealt = $assessment->authorimagealt;
521 $submission->authoremail = $assessment->authoremail;
523 if (is_null($assessment->grade)) {
524 $class = ' notgraded';
525 $submission->status = 'notgraded';
526 $buttontext = get_string('assess', 'workshop');
527 } else {
528 $class = ' graded';
529 $submission->status = 'graded';
530 $buttontext = get_string('reassess', 'workshop');
532 echo $output->box_start('generalbox assessment-summary' . $class);
533 echo $output->render($workshop->prepare_submission_summary($submission, $shownames));
534 echo $output->box_end();
536 print_collapsible_region_end();
538 break;
539 case workshop::PHASE_CLOSED:
540 if (trim($workshop->conclusion)) {
541 $conclusion = file_rewrite_pluginfile_urls($workshop->conclusion, 'pluginfile.php', $workshop->context->id,
542 'mod_workshop', 'conclusion', 0, workshop::instruction_editors_options($workshop->context));
543 print_collapsible_region_start('', 'workshop-viewlet-conclusion', get_string('conclusion', 'workshop'));
544 echo $output->box(format_text($conclusion, $workshop->conclusionformat, array('overflowdiv'=>true)), array('generalbox', 'conclusion'));
545 print_collapsible_region_end();
547 $finalgrades = $workshop->get_gradebook_grades($USER->id);
548 if (!empty($finalgrades)) {
549 print_collapsible_region_start('', 'workshop-viewlet-yourgrades', get_string('yourgrades', 'workshop'));
550 echo $output->box_start('generalbox grades-yourgrades');
551 echo $output->render($finalgrades);
552 echo $output->box_end();
553 print_collapsible_region_end();
555 if (has_capability('mod/workshop:viewallassessments', $PAGE->context)) {
556 $perpage = get_user_preferences('workshop_perpage', 10);
557 $groupid = groups_get_activity_group($workshop->cm, true);
558 $data = $workshop->prepare_grading_report_data($USER->id, $groupid, $page, $perpage, $sortby, $sorthow);
559 if ($data) {
560 $showauthornames = has_capability('mod/workshop:viewauthornames', $workshop->context);
561 $showreviewernames = has_capability('mod/workshop:viewreviewernames', $workshop->context);
563 // prepare paging bar
564 $baseurl = new moodle_url($PAGE->url, array('sortby' => $sortby, 'sorthow' => $sorthow));
565 $pagingbar = new paging_bar($data->totalcount, $page, $perpage, $baseurl, 'page');
567 // grading report display options
568 $reportopts = new stdclass();
569 $reportopts->showauthornames = $showauthornames;
570 $reportopts->showreviewernames = $showreviewernames;
571 $reportopts->sortby = $sortby;
572 $reportopts->sorthow = $sorthow;
573 $reportopts->showsubmissiongrade = true;
574 $reportopts->showgradinggrade = true;
576 print_collapsible_region_start('', 'workshop-viewlet-gradereport', get_string('gradesreport', 'workshop'));
577 echo $output->box_start('generalbox gradesreport');
578 echo $output->container(groups_print_activity_menu($workshop->cm, $PAGE->url, true), 'groupwidget');
579 echo $output->render($pagingbar);
580 echo $output->render(new workshop_grading_report($data, $reportopts));
581 echo $output->render($pagingbar);
582 echo $output->perpage_selector($perpage);
583 echo $output->box_end();
584 print_collapsible_region_end();
587 if (has_capability('mod/workshop:submit', $PAGE->context)) {
588 print_collapsible_region_start('', 'workshop-viewlet-ownsubmission', get_string('yoursubmission', 'workshop'));
589 echo $output->box_start('generalbox ownsubmission');
590 if ($submission = $workshop->get_submission_by_author($USER->id)) {
591 echo $output->render($workshop->prepare_submission_summary($submission, true));
592 } else {
593 echo $output->container(get_string('noyoursubmission', 'workshop'));
595 echo $output->box_end();
597 if (!empty($submission->gradeoverby) and strlen(trim($submission->feedbackauthor)) > 0) {
598 echo $output->render(new workshop_feedback_author($submission));
601 print_collapsible_region_end();
603 if (has_capability('mod/workshop:viewpublishedsubmissions', $workshop->context)) {
604 $shownames = has_capability('mod/workshop:viewauthorpublished', $workshop->context);
605 if ($submissions = $workshop->get_published_submissions()) {
606 print_collapsible_region_start('', 'workshop-viewlet-publicsubmissions', get_string('publishedsubmissions', 'workshop'));
607 foreach ($submissions as $submission) {
608 echo $output->box_start('generalbox submission-summary');
609 echo $output->render($workshop->prepare_submission_summary($submission, $shownames));
610 echo $output->box_end();
612 print_collapsible_region_end();
615 if ($assessments = $workshop->get_assessments_by_reviewer($USER->id)) {
616 print_collapsible_region_start('', 'workshop-viewlet-assignedassessments', get_string('assignedassessments', 'workshop'));
617 $shownames = has_capability('mod/workshop:viewauthornames', $PAGE->context);
618 foreach ($assessments as $assessment) {
619 $submission = new stdclass();
620 $submission->id = $assessment->submissionid;
621 $submission->title = $assessment->submissiontitle;
622 $submission->timecreated = $assessment->submissioncreated;
623 $submission->timemodified = $assessment->submissionmodified;
624 $submission->authorid = $assessment->authorid;
625 $submission->authorfirstname = $assessment->authorfirstname;
626 $submission->authorlastname = $assessment->authorlastname;
627 $submission->authorpicture = $assessment->authorpicture;
628 $submission->authorimagealt = $assessment->authorimagealt;
629 $submission->authoremail = $assessment->authoremail;
631 if (is_null($assessment->grade)) {
632 $class = ' notgraded';
633 $submission->status = 'notgraded';
634 $buttontext = get_string('assess', 'workshop');
635 } else {
636 $class = ' graded';
637 $submission->status = 'graded';
638 $buttontext = get_string('reassess', 'workshop');
640 echo $output->box_start('generalbox assessment-summary' . $class);
641 echo $output->render($workshop->prepare_submission_summary($submission, $shownames));
642 echo $output->box_end();
644 if (strlen(trim($assessment->feedbackreviewer)) > 0) {
645 echo $output->render(new workshop_feedback_reviewer($assessment));
648 print_collapsible_region_end();
650 break;
651 default:
654 echo $output->footer();