PageRenderTime 50ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/mod/workshop/view.php

http://github.com/moodle/moodle
PHP | 656 lines | 545 code | 61 blank | 50 comment | 87 complexity | d9e6031276ba8f0f1bd4d6654e3dc363 MD5 | raw file
Possible License(s): MIT, AGPL-3.0, MPL-2.0-no-copyleft-exception, LGPL-3.0, GPL-3.0, Apache-2.0, LGPL-2.1, BSD-3-Clause
  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/>.
  16. /**
  17. * Prints a particular instance of workshop
  18. *
  19. * You can have a rather longer description of the file as well,
  20. * if you like, and it can span multiple lines.
  21. *
  22. * @package mod_workshop
  23. * @copyright 2009 David Mudrak <david.mudrak@gmail.com>
  24. * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  25. */
  26. require(__DIR__.'/../../config.php');
  27. require_once(__DIR__.'/locallib.php');
  28. $id = optional_param('id', 0, PARAM_INT); // course_module ID, or
  29. $w = optional_param('w', 0, PARAM_INT); // workshop instance ID
  30. $editmode = optional_param('editmode', null, PARAM_BOOL);
  31. $page = optional_param('page', 0, PARAM_INT);
  32. $perpage = optional_param('perpage', null, PARAM_INT);
  33. $sortby = optional_param('sortby', 'lastname', PARAM_ALPHA);
  34. $sorthow = optional_param('sorthow', 'ASC', PARAM_ALPHA);
  35. $eval = optional_param('eval', null, PARAM_PLUGIN);
  36. if ($id) {
  37. $cm = get_coursemodule_from_id('workshop', $id, 0, false, MUST_EXIST);
  38. $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
  39. $workshoprecord = $DB->get_record('workshop', array('id' => $cm->instance), '*', MUST_EXIST);
  40. } else {
  41. $workshoprecord = $DB->get_record('workshop', array('id' => $w), '*', MUST_EXIST);
  42. $course = $DB->get_record('course', array('id' => $workshoprecord->course), '*', MUST_EXIST);
  43. $cm = get_coursemodule_from_instance('workshop', $workshoprecord->id, $course->id, false, MUST_EXIST);
  44. }
  45. require_login($course, true, $cm);
  46. require_capability('mod/workshop:view', $PAGE->context);
  47. $workshop = new workshop($workshoprecord, $cm, $course);
  48. $PAGE->set_url($workshop->view_url());
  49. // Mark viewed.
  50. $workshop->set_module_viewed();
  51. // If the phase is to be switched, do it asap. This just has to happen after triggering
  52. // the event so that the scheduled allocator had a chance to allocate submissions.
  53. if ($workshop->phase == workshop::PHASE_SUBMISSION and $workshop->phaseswitchassessment
  54. and $workshop->submissionend > 0 and $workshop->submissionend < time()) {
  55. $workshop->switch_phase(workshop::PHASE_ASSESSMENT);
  56. // Disable the automatic switching now so that it is not executed again by accident
  57. // if the teacher changes the phase back to the submission one.
  58. $DB->set_field('workshop', 'phaseswitchassessment', 0, array('id' => $workshop->id));
  59. $workshop->phaseswitchassessment = 0;
  60. }
  61. if (!is_null($editmode) && $PAGE->user_allowed_editing()) {
  62. $USER->editing = $editmode;
  63. }
  64. $userplan = new workshop_user_plan($workshop, $USER->id);
  65. foreach ($userplan->phases as $phase) {
  66. if ($phase->active) {
  67. $currentphasetitle = $phase->title;
  68. }
  69. }
  70. $PAGE->set_title($workshop->name . " (" . $currentphasetitle . ")");
  71. $PAGE->set_heading($course->fullname);
  72. if ($perpage and $perpage > 0 and $perpage <= 1000) {
  73. require_sesskey();
  74. set_user_preference('workshop_perpage', $perpage);
  75. redirect($PAGE->url);
  76. }
  77. if ($eval) {
  78. require_sesskey();
  79. require_capability('mod/workshop:overridegrades', $workshop->context);
  80. $workshop->set_grading_evaluation_method($eval);
  81. redirect($PAGE->url);
  82. }
  83. $output = $PAGE->get_renderer('mod_workshop');
  84. /// Output starts here
  85. echo $output->header();
  86. echo $output->heading_with_help(format_string($workshop->name), 'userplan', 'workshop');
  87. echo $output->heading(format_string($currentphasetitle), 3, null, 'mod_workshop-userplanheading');
  88. echo $output->render($userplan);
  89. switch ($workshop->phase) {
  90. case workshop::PHASE_SETUP:
  91. if (trim($workshop->intro)) {
  92. print_collapsible_region_start('', 'workshop-viewlet-intro', get_string('introduction', 'workshop'));
  93. echo $output->box(format_module_intro('workshop', $workshop, $workshop->cm->id), 'generalbox');
  94. print_collapsible_region_end();
  95. }
  96. if ($workshop->useexamples and has_capability('mod/workshop:manageexamples', $PAGE->context)) {
  97. print_collapsible_region_start('', 'workshop-viewlet-allexamples', get_string('examplesubmissions', 'workshop'));
  98. echo $output->box_start('generalbox examples');
  99. if ($workshop->grading_strategy_instance()->form_ready()) {
  100. if (! $examples = $workshop->get_examples_for_manager()) {
  101. echo $output->container(get_string('noexamples', 'workshop'), 'noexamples');
  102. }
  103. foreach ($examples as $example) {
  104. $summary = $workshop->prepare_example_summary($example);
  105. $summary->editable = true;
  106. echo $output->render($summary);
  107. }
  108. $aurl = new moodle_url($workshop->exsubmission_url(0), array('edit' => 'on'));
  109. echo $output->single_button($aurl, get_string('exampleadd', 'workshop'), 'get');
  110. } else {
  111. echo $output->container(get_string('noexamplesformready', 'workshop'));
  112. }
  113. echo $output->box_end();
  114. print_collapsible_region_end();
  115. }
  116. break;
  117. case workshop::PHASE_SUBMISSION:
  118. if (trim($workshop->instructauthors)) {
  119. $instructions = file_rewrite_pluginfile_urls($workshop->instructauthors, 'pluginfile.php', $PAGE->context->id,
  120. 'mod_workshop', 'instructauthors', null, workshop::instruction_editors_options($PAGE->context));
  121. print_collapsible_region_start('', 'workshop-viewlet-instructauthors', get_string('instructauthors', 'workshop'));
  122. echo $output->box(format_text($instructions, $workshop->instructauthorsformat, array('overflowdiv'=>true)), array('generalbox', 'instructions'));
  123. print_collapsible_region_end();
  124. }
  125. // does the user have to assess examples before submitting their own work?
  126. $examplesmust = ($workshop->useexamples and $workshop->examplesmode == workshop::EXAMPLES_BEFORE_SUBMISSION);
  127. // is the assessment of example submissions considered finished?
  128. $examplesdone = has_capability('mod/workshop:manageexamples', $workshop->context);
  129. if ($workshop->assessing_examples_allowed()
  130. and has_capability('mod/workshop:submit', $workshop->context)
  131. and ! has_capability('mod/workshop:manageexamples', $workshop->context)) {
  132. $examples = $userplan->get_examples();
  133. $total = count($examples);
  134. $left = 0;
  135. // make sure the current user has all examples allocated
  136. foreach ($examples as $exampleid => $example) {
  137. if (is_null($example->assessmentid)) {
  138. $examples[$exampleid]->assessmentid = $workshop->add_allocation($example, $USER->id, 0);
  139. }
  140. if (is_null($example->grade)) {
  141. $left++;
  142. }
  143. }
  144. if ($left > 0 and $workshop->examplesmode != workshop::EXAMPLES_VOLUNTARY) {
  145. $examplesdone = false;
  146. } else {
  147. $examplesdone = true;
  148. }
  149. print_collapsible_region_start('', 'workshop-viewlet-examples', get_string('exampleassessments', 'workshop'), false, $examplesdone);
  150. echo $output->box_start('generalbox exampleassessments');
  151. if ($total == 0) {
  152. echo $output->heading(get_string('noexamples', 'workshop'), 3);
  153. } else {
  154. foreach ($examples as $example) {
  155. $summary = $workshop->prepare_example_summary($example);
  156. echo $output->render($summary);
  157. }
  158. }
  159. echo $output->box_end();
  160. print_collapsible_region_end();
  161. }
  162. if (has_capability('mod/workshop:submit', $PAGE->context) and (!$examplesmust or $examplesdone)) {
  163. print_collapsible_region_start('', 'workshop-viewlet-ownsubmission', get_string('yoursubmission', 'workshop'));
  164. echo $output->box_start('generalbox ownsubmission');
  165. if ($submission = $workshop->get_submission_by_author($USER->id)) {
  166. echo $output->render($workshop->prepare_submission_summary($submission, true));
  167. if ($workshop->modifying_submission_allowed($USER->id)) {
  168. $btnurl = new moodle_url($workshop->submission_url(), array('edit' => 'on'));
  169. $btntxt = get_string('editsubmission', 'workshop');
  170. }
  171. } else {
  172. echo $output->container(get_string('noyoursubmission', 'workshop'));
  173. if ($workshop->creating_submission_allowed($USER->id)) {
  174. $btnurl = new moodle_url($workshop->submission_url(), array('edit' => 'on'));
  175. $btntxt = get_string('createsubmission', 'workshop');
  176. }
  177. }
  178. if (!empty($btnurl)) {
  179. echo $output->single_button($btnurl, $btntxt, 'get');
  180. }
  181. echo $output->box_end();
  182. print_collapsible_region_end();
  183. }
  184. if (has_capability('mod/workshop:viewallsubmissions', $PAGE->context)) {
  185. $groupmode = groups_get_activity_groupmode($workshop->cm);
  186. $groupid = groups_get_activity_group($workshop->cm, true);
  187. if ($groupmode == SEPARATEGROUPS and !has_capability('moodle/site:accessallgroups', $workshop->context)) {
  188. $allowedgroups = groups_get_activity_allowed_groups($workshop->cm);
  189. if (empty($allowedgroups)) {
  190. echo $output->container(get_string('groupnoallowed', 'mod_workshop'), 'groupwidget error');
  191. break;
  192. }
  193. if (! in_array($groupid, array_keys($allowedgroups))) {
  194. echo $output->container(get_string('groupnotamember', 'core_group'), 'groupwidget error');
  195. break;
  196. }
  197. }
  198. print_collapsible_region_start('', 'workshop-viewlet-allsubmissions', get_string('submissionsreport', 'workshop'));
  199. $perpage = get_user_preferences('workshop_perpage', 10);
  200. $data = $workshop->prepare_grading_report_data($USER->id, $groupid, $page, $perpage, $sortby, $sorthow);
  201. if ($data) {
  202. $countparticipants = $workshop->count_participants();
  203. $countsubmissions = $workshop->count_submissions(array_keys($data->grades), $groupid);
  204. $a = new stdClass();
  205. $a->submitted = $countsubmissions;
  206. $a->notsubmitted = $data->totalcount - $countsubmissions;
  207. echo html_writer::tag('div', get_string('submittednotsubmitted', 'workshop', $a));
  208. echo $output->container(groups_print_activity_menu($workshop->cm, $PAGE->url, true), 'groupwidget');
  209. // Prepare the paging bar.
  210. $baseurl = new moodle_url($PAGE->url, array('sortby' => $sortby, 'sorthow' => $sorthow));
  211. $pagingbar = new paging_bar($data->totalcount, $page, $perpage, $baseurl, 'page');
  212. // Populate the display options for the submissions report.
  213. $reportopts = new stdclass();
  214. $reportopts->showauthornames = has_capability('mod/workshop:viewauthornames', $workshop->context);
  215. $reportopts->showreviewernames = has_capability('mod/workshop:viewreviewernames', $workshop->context);
  216. $reportopts->sortby = $sortby;
  217. $reportopts->sorthow = $sorthow;
  218. $reportopts->showsubmissiongrade = false;
  219. $reportopts->showgradinggrade = false;
  220. $reportopts->workshopphase = $workshop->phase;
  221. echo $output->render($pagingbar);
  222. echo $output->render(new workshop_grading_report($data, $reportopts));
  223. echo $output->render($pagingbar);
  224. echo $output->perpage_selector($perpage);
  225. } else {
  226. echo html_writer::tag('div', get_string('nothingfound', 'workshop'), array('class' => 'nothingfound'));
  227. }
  228. print_collapsible_region_end();
  229. }
  230. break;
  231. case workshop::PHASE_ASSESSMENT:
  232. $ownsubmissionexists = null;
  233. if (has_capability('mod/workshop:submit', $PAGE->context)) {
  234. if ($ownsubmission = $workshop->get_submission_by_author($USER->id)) {
  235. print_collapsible_region_start('', 'workshop-viewlet-ownsubmission', get_string('yoursubmission', 'workshop'), false, true);
  236. echo $output->box_start('generalbox ownsubmission');
  237. echo $output->render($workshop->prepare_submission_summary($ownsubmission, true));
  238. $ownsubmissionexists = true;
  239. } else {
  240. print_collapsible_region_start('', 'workshop-viewlet-ownsubmission', get_string('yoursubmission', 'workshop'));
  241. echo $output->box_start('generalbox ownsubmission');
  242. echo $output->container(get_string('noyoursubmission', 'workshop'));
  243. $ownsubmissionexists = false;
  244. if ($workshop->creating_submission_allowed($USER->id)) {
  245. $btnurl = new moodle_url($workshop->submission_url(), array('edit' => 'on'));
  246. $btntxt = get_string('createsubmission', 'workshop');
  247. }
  248. }
  249. if (!empty($btnurl)) {
  250. echo $output->single_button($btnurl, $btntxt, 'get');
  251. }
  252. echo $output->box_end();
  253. print_collapsible_region_end();
  254. }
  255. if (has_capability('mod/workshop:viewallassessments', $PAGE->context)) {
  256. $perpage = get_user_preferences('workshop_perpage', 10);
  257. $groupid = groups_get_activity_group($workshop->cm, true);
  258. $data = $workshop->prepare_grading_report_data($USER->id, $groupid, $page, $perpage, $sortby, $sorthow);
  259. if ($data) {
  260. $showauthornames = has_capability('mod/workshop:viewauthornames', $workshop->context);
  261. $showreviewernames = has_capability('mod/workshop:viewreviewernames', $workshop->context);
  262. // prepare paging bar
  263. $baseurl = new moodle_url($PAGE->url, array('sortby' => $sortby, 'sorthow' => $sorthow));
  264. $pagingbar = new paging_bar($data->totalcount, $page, $perpage, $baseurl, 'page');
  265. // grading report display options
  266. $reportopts = new stdclass();
  267. $reportopts->showauthornames = $showauthornames;
  268. $reportopts->showreviewernames = $showreviewernames;
  269. $reportopts->sortby = $sortby;
  270. $reportopts->sorthow = $sorthow;
  271. $reportopts->showsubmissiongrade = false;
  272. $reportopts->showgradinggrade = false;
  273. $reportopts->workshopphase = $workshop->phase;
  274. print_collapsible_region_start('', 'workshop-viewlet-gradereport', get_string('gradesreport', 'workshop'));
  275. echo $output->box_start('generalbox gradesreport');
  276. echo $output->container(groups_print_activity_menu($workshop->cm, $PAGE->url, true), 'groupwidget');
  277. echo $output->render($pagingbar);
  278. echo $output->render(new workshop_grading_report($data, $reportopts));
  279. echo $output->render($pagingbar);
  280. echo $output->perpage_selector($perpage);
  281. echo $output->box_end();
  282. print_collapsible_region_end();
  283. }
  284. }
  285. if (trim($workshop->instructreviewers)) {
  286. $instructions = file_rewrite_pluginfile_urls($workshop->instructreviewers, 'pluginfile.php', $PAGE->context->id,
  287. 'mod_workshop', 'instructreviewers', null, workshop::instruction_editors_options($PAGE->context));
  288. print_collapsible_region_start('', 'workshop-viewlet-instructreviewers', get_string('instructreviewers', 'workshop'));
  289. echo $output->box(format_text($instructions, $workshop->instructreviewersformat, array('overflowdiv'=>true)), array('generalbox', 'instructions'));
  290. print_collapsible_region_end();
  291. }
  292. // does the user have to assess examples before assessing other's work?
  293. $examplesmust = ($workshop->useexamples and $workshop->examplesmode == workshop::EXAMPLES_BEFORE_ASSESSMENT);
  294. // is the assessment of example submissions considered finished?
  295. $examplesdone = has_capability('mod/workshop:manageexamples', $workshop->context);
  296. // can the examples be assessed?
  297. $examplesavailable = true;
  298. if (!$examplesdone and $examplesmust and ($ownsubmissionexists === false)) {
  299. print_collapsible_region_start('', 'workshop-viewlet-examplesfail', get_string('exampleassessments', 'workshop'));
  300. echo $output->box(get_string('exampleneedsubmission', 'workshop'));
  301. print_collapsible_region_end();
  302. $examplesavailable = false;
  303. }
  304. if ($workshop->assessing_examples_allowed()
  305. and has_capability('mod/workshop:submit', $workshop->context)
  306. and ! has_capability('mod/workshop:manageexamples', $workshop->context)
  307. and $examplesavailable) {
  308. $examples = $userplan->get_examples();
  309. $total = count($examples);
  310. $left = 0;
  311. // make sure the current user has all examples allocated
  312. foreach ($examples as $exampleid => $example) {
  313. if (is_null($example->assessmentid)) {
  314. $examples[$exampleid]->assessmentid = $workshop->add_allocation($example, $USER->id, 0);
  315. }
  316. if (is_null($example->grade)) {
  317. $left++;
  318. }
  319. }
  320. if ($left > 0 and $workshop->examplesmode != workshop::EXAMPLES_VOLUNTARY) {
  321. $examplesdone = false;
  322. } else {
  323. $examplesdone = true;
  324. }
  325. print_collapsible_region_start('', 'workshop-viewlet-examples', get_string('exampleassessments', 'workshop'), false, $examplesdone);
  326. echo $output->box_start('generalbox exampleassessments');
  327. if ($total == 0) {
  328. echo $output->heading(get_string('noexamples', 'workshop'), 3);
  329. } else {
  330. foreach ($examples as $example) {
  331. $summary = $workshop->prepare_example_summary($example);
  332. echo $output->render($summary);
  333. }
  334. }
  335. echo $output->box_end();
  336. print_collapsible_region_end();
  337. }
  338. if (!$examplesmust or $examplesdone) {
  339. print_collapsible_region_start('', 'workshop-viewlet-assignedassessments', get_string('assignedassessments', 'workshop'));
  340. if (! $assessments = $workshop->get_assessments_by_reviewer($USER->id)) {
  341. echo $output->box_start('generalbox assessment-none');
  342. echo $output->notification(get_string('assignedassessmentsnone', 'workshop'));
  343. echo $output->box_end();
  344. } else {
  345. $shownames = has_capability('mod/workshop:viewauthornames', $PAGE->context);
  346. foreach ($assessments as $assessment) {
  347. $submission = new stdClass();
  348. $submission->id = $assessment->submissionid;
  349. $submission->title = $assessment->submissiontitle;
  350. $submission->timecreated = $assessment->submissioncreated;
  351. $submission->timemodified = $assessment->submissionmodified;
  352. $userpicturefields = explode(',', user_picture::fields());
  353. foreach ($userpicturefields as $userpicturefield) {
  354. $prefixedusernamefield = 'author' . $userpicturefield;
  355. $submission->$prefixedusernamefield = $assessment->$prefixedusernamefield;
  356. }
  357. // transform the submission object into renderable component
  358. $submission = $workshop->prepare_submission_summary($submission, $shownames);
  359. if (is_null($assessment->grade)) {
  360. $submission->status = 'notgraded';
  361. $class = ' notgraded';
  362. $buttontext = get_string('assess', 'workshop');
  363. } else {
  364. $submission->status = 'graded';
  365. $class = ' graded';
  366. $buttontext = get_string('reassess', 'workshop');
  367. }
  368. echo $output->box_start('generalbox assessment-summary' . $class);
  369. echo $output->render($submission);
  370. $aurl = $workshop->assess_url($assessment->id);
  371. echo $output->single_button($aurl, $buttontext, 'get');
  372. echo $output->box_end();
  373. }
  374. }
  375. print_collapsible_region_end();
  376. }
  377. break;
  378. case workshop::PHASE_EVALUATION:
  379. if (has_capability('mod/workshop:viewallassessments', $PAGE->context)) {
  380. $perpage = get_user_preferences('workshop_perpage', 10);
  381. $groupid = groups_get_activity_group($workshop->cm, true);
  382. $data = $workshop->prepare_grading_report_data($USER->id, $groupid, $page, $perpage, $sortby, $sorthow);
  383. if ($data) {
  384. $showauthornames = has_capability('mod/workshop:viewauthornames', $workshop->context);
  385. $showreviewernames = has_capability('mod/workshop:viewreviewernames', $workshop->context);
  386. if (has_capability('mod/workshop:overridegrades', $PAGE->context)) {
  387. // Print a drop-down selector to change the current evaluation method.
  388. $selector = new single_select($PAGE->url, 'eval', workshop::available_evaluators_list(),
  389. $workshop->evaluation, false, 'evaluationmethodchooser');
  390. $selector->set_label(get_string('evaluationmethod', 'mod_workshop'));
  391. $selector->set_help_icon('evaluationmethod', 'mod_workshop');
  392. $selector->method = 'post';
  393. echo $output->render($selector);
  394. // load the grading evaluator
  395. $evaluator = $workshop->grading_evaluation_instance();
  396. $form = $evaluator->get_settings_form(new moodle_url($workshop->aggregate_url(),
  397. compact('sortby', 'sorthow', 'page')));
  398. $form->display();
  399. }
  400. // prepare paging bar
  401. $baseurl = new moodle_url($PAGE->url, array('sortby' => $sortby, 'sorthow' => $sorthow));
  402. $pagingbar = new paging_bar($data->totalcount, $page, $perpage, $baseurl, 'page');
  403. // grading report display options
  404. $reportopts = new stdclass();
  405. $reportopts->showauthornames = $showauthornames;
  406. $reportopts->showreviewernames = $showreviewernames;
  407. $reportopts->sortby = $sortby;
  408. $reportopts->sorthow = $sorthow;
  409. $reportopts->showsubmissiongrade = true;
  410. $reportopts->showgradinggrade = true;
  411. $reportopts->workshopphase = $workshop->phase;
  412. print_collapsible_region_start('', 'workshop-viewlet-gradereport', get_string('gradesreport', 'workshop'));
  413. echo $output->box_start('generalbox gradesreport');
  414. echo $output->container(groups_print_activity_menu($workshop->cm, $PAGE->url, true), 'groupwidget');
  415. echo $output->render($pagingbar);
  416. echo $output->render(new workshop_grading_report($data, $reportopts));
  417. echo $output->render($pagingbar);
  418. echo $output->perpage_selector($perpage);
  419. echo $output->box_end();
  420. print_collapsible_region_end();
  421. }
  422. }
  423. if (has_capability('mod/workshop:overridegrades', $workshop->context)) {
  424. print_collapsible_region_start('', 'workshop-viewlet-cleargrades', get_string('toolbox', 'workshop'), false, true);
  425. echo $output->box_start('generalbox toolbox');
  426. // Clear aggregated grades
  427. $url = new moodle_url($workshop->toolbox_url('clearaggregatedgrades'));
  428. $btn = new single_button($url, get_string('clearaggregatedgrades', 'workshop'), 'post');
  429. $btn->add_confirm_action(get_string('clearaggregatedgradesconfirm', 'workshop'));
  430. echo $output->container_start('toolboxaction');
  431. echo $output->render($btn);
  432. echo $output->help_icon('clearaggregatedgrades', 'workshop');
  433. echo $output->container_end();
  434. // Clear assessments
  435. $url = new moodle_url($workshop->toolbox_url('clearassessments'));
  436. $btn = new single_button($url, get_string('clearassessments', 'workshop'), 'post');
  437. $btn->add_confirm_action(get_string('clearassessmentsconfirm', 'workshop'));
  438. echo $output->container_start('toolboxaction');
  439. echo $output->render($btn);
  440. echo $output->help_icon('clearassessments', 'workshop');
  441. echo $OUTPUT->pix_icon('i/risk_dataloss', get_string('riskdatalossshort', 'admin'));
  442. echo $output->container_end();
  443. echo $output->box_end();
  444. print_collapsible_region_end();
  445. }
  446. if (has_capability('mod/workshop:submit', $PAGE->context)) {
  447. print_collapsible_region_start('', 'workshop-viewlet-ownsubmission', get_string('yoursubmission', 'workshop'));
  448. echo $output->box_start('generalbox ownsubmission');
  449. if ($submission = $workshop->get_submission_by_author($USER->id)) {
  450. echo $output->render($workshop->prepare_submission_summary($submission, true));
  451. } else {
  452. echo $output->container(get_string('noyoursubmission', 'workshop'));
  453. }
  454. echo $output->box_end();
  455. print_collapsible_region_end();
  456. }
  457. if ($assessments = $workshop->get_assessments_by_reviewer($USER->id)) {
  458. print_collapsible_region_start('', 'workshop-viewlet-assignedassessments', get_string('assignedassessments', 'workshop'));
  459. $shownames = has_capability('mod/workshop:viewauthornames', $PAGE->context);
  460. foreach ($assessments as $assessment) {
  461. $submission = new stdclass();
  462. $submission->id = $assessment->submissionid;
  463. $submission->title = $assessment->submissiontitle;
  464. $submission->timecreated = $assessment->submissioncreated;
  465. $submission->timemodified = $assessment->submissionmodified;
  466. $userpicturefields = explode(',', user_picture::fields());
  467. foreach ($userpicturefields as $userpicturefield) {
  468. $prefixedusernamefield = 'author' . $userpicturefield;
  469. $submission->$prefixedusernamefield = $assessment->$prefixedusernamefield;
  470. }
  471. if (is_null($assessment->grade)) {
  472. $class = ' notgraded';
  473. $submission->status = 'notgraded';
  474. $buttontext = get_string('assess', 'workshop');
  475. } else {
  476. $class = ' graded';
  477. $submission->status = 'graded';
  478. $buttontext = get_string('reassess', 'workshop');
  479. }
  480. echo $output->box_start('generalbox assessment-summary' . $class);
  481. echo $output->render($workshop->prepare_submission_summary($submission, $shownames));
  482. echo $output->box_end();
  483. }
  484. print_collapsible_region_end();
  485. }
  486. break;
  487. case workshop::PHASE_CLOSED:
  488. if (trim($workshop->conclusion)) {
  489. $conclusion = file_rewrite_pluginfile_urls($workshop->conclusion, 'pluginfile.php', $workshop->context->id,
  490. 'mod_workshop', 'conclusion', null, workshop::instruction_editors_options($workshop->context));
  491. print_collapsible_region_start('', 'workshop-viewlet-conclusion', get_string('conclusion', 'workshop'));
  492. echo $output->box(format_text($conclusion, $workshop->conclusionformat, array('overflowdiv'=>true)), array('generalbox', 'conclusion'));
  493. print_collapsible_region_end();
  494. }
  495. $finalgrades = $workshop->get_gradebook_grades($USER->id);
  496. if (!empty($finalgrades)) {
  497. print_collapsible_region_start('', 'workshop-viewlet-yourgrades', get_string('yourgrades', 'workshop'));
  498. echo $output->box_start('generalbox grades-yourgrades');
  499. echo $output->render($finalgrades);
  500. echo $output->box_end();
  501. print_collapsible_region_end();
  502. }
  503. if (has_capability('mod/workshop:viewallassessments', $PAGE->context)) {
  504. $perpage = get_user_preferences('workshop_perpage', 10);
  505. $groupid = groups_get_activity_group($workshop->cm, true);
  506. $data = $workshop->prepare_grading_report_data($USER->id, $groupid, $page, $perpage, $sortby, $sorthow);
  507. if ($data) {
  508. $showauthornames = has_capability('mod/workshop:viewauthornames', $workshop->context);
  509. $showreviewernames = has_capability('mod/workshop:viewreviewernames', $workshop->context);
  510. // prepare paging bar
  511. $baseurl = new moodle_url($PAGE->url, array('sortby' => $sortby, 'sorthow' => $sorthow));
  512. $pagingbar = new paging_bar($data->totalcount, $page, $perpage, $baseurl, 'page');
  513. // grading report display options
  514. $reportopts = new stdclass();
  515. $reportopts->showauthornames = $showauthornames;
  516. $reportopts->showreviewernames = $showreviewernames;
  517. $reportopts->sortby = $sortby;
  518. $reportopts->sorthow = $sorthow;
  519. $reportopts->showsubmissiongrade = true;
  520. $reportopts->showgradinggrade = true;
  521. $reportopts->workshopphase = $workshop->phase;
  522. print_collapsible_region_start('', 'workshop-viewlet-gradereport', get_string('gradesreport', 'workshop'));
  523. echo $output->box_start('generalbox gradesreport');
  524. echo $output->container(groups_print_activity_menu($workshop->cm, $PAGE->url, true), 'groupwidget');
  525. echo $output->render($pagingbar);
  526. echo $output->render(new workshop_grading_report($data, $reportopts));
  527. echo $output->render($pagingbar);
  528. echo $output->perpage_selector($perpage);
  529. echo $output->box_end();
  530. print_collapsible_region_end();
  531. }
  532. }
  533. if (has_capability('mod/workshop:submit', $PAGE->context)) {
  534. print_collapsible_region_start('', 'workshop-viewlet-ownsubmission', get_string('yoursubmission', 'workshop'));
  535. echo $output->box_start('generalbox ownsubmission');
  536. if ($submission = $workshop->get_submission_by_author($USER->id)) {
  537. echo $output->render($workshop->prepare_submission_summary($submission, true));
  538. } else {
  539. echo $output->container(get_string('noyoursubmission', 'workshop'));
  540. }
  541. echo $output->box_end();
  542. if (!empty($submission->gradeoverby) and strlen(trim($submission->feedbackauthor)) > 0) {
  543. echo $output->render(new workshop_feedback_author($submission));
  544. }
  545. print_collapsible_region_end();
  546. }
  547. if (has_capability('mod/workshop:viewpublishedsubmissions', $workshop->context)) {
  548. $shownames = has_capability('mod/workshop:viewauthorpublished', $workshop->context);
  549. if ($submissions = $workshop->get_published_submissions()) {
  550. print_collapsible_region_start('', 'workshop-viewlet-publicsubmissions', get_string('publishedsubmissions', 'workshop'));
  551. foreach ($submissions as $submission) {
  552. echo $output->box_start('generalbox submission-summary');
  553. echo $output->render($workshop->prepare_submission_summary($submission, $shownames));
  554. echo $output->box_end();
  555. }
  556. print_collapsible_region_end();
  557. }
  558. }
  559. if ($assessments = $workshop->get_assessments_by_reviewer($USER->id)) {
  560. print_collapsible_region_start('', 'workshop-viewlet-assignedassessments', get_string('assignedassessments', 'workshop'));
  561. $shownames = has_capability('mod/workshop:viewauthornames', $PAGE->context);
  562. foreach ($assessments as $assessment) {
  563. $submission = new stdclass();
  564. $submission->id = $assessment->submissionid;
  565. $submission->title = $assessment->submissiontitle;
  566. $submission->timecreated = $assessment->submissioncreated;
  567. $submission->timemodified = $assessment->submissionmodified;
  568. $userpicturefields = explode(',', user_picture::fields());
  569. foreach ($userpicturefields as $userpicturefield) {
  570. $prefixedusernamefield = 'author' . $userpicturefield;
  571. $submission->$prefixedusernamefield = $assessment->$prefixedusernamefield;
  572. }
  573. if (is_null($assessment->grade)) {
  574. $class = ' notgraded';
  575. $submission->status = 'notgraded';
  576. $buttontext = get_string('assess', 'workshop');
  577. } else {
  578. $class = ' graded';
  579. $submission->status = 'graded';
  580. $buttontext = get_string('reassess', 'workshop');
  581. }
  582. echo $output->box_start('generalbox assessment-summary' . $class);
  583. echo $output->render($workshop->prepare_submission_summary($submission, $shownames));
  584. echo $output->box_end();
  585. if (strlen(trim($assessment->feedbackreviewer)) > 0) {
  586. echo $output->render(new workshop_feedback_reviewer($assessment));
  587. }
  588. }
  589. print_collapsible_region_end();
  590. }
  591. break;
  592. default:
  593. }
  594. $PAGE->requires->js_call_amd('mod_workshop/workshopview', 'init');
  595. echo $output->footer();