<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
< * This file contains a renderer for the assignment class
> * Legacy file to avoid exceptions when scripts require it.
> * Please use classes from mod/assign/classes/output instead.
*
> * @deprecated since Moodle 4.0 - please do not include this file anymore.
* @package mod_assign
* @copyright 2012 NetSpot {@link http://www.netspot.com.au}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
< require_once($CFG->dirroot . '/mod/assign/locallib.php');
<
< use \mod_assign\output\grading_app;
<
< /**
< * A custom renderer class that extends the plugin_renderer_base and is used by the assign module.
< *
< * @package mod_assign
< * @copyright 2012 NetSpot {@link http://www.netspot.com.au}
< * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
< */
< class mod_assign_renderer extends plugin_renderer_base {
<
< /**
< * Rendering assignment files
< *
< * @param context $context
< * @param int $userid
< * @param string $filearea
< * @param string $component
< * @return string
< */
< public function assign_files(context $context, $userid, $filearea, $component) {
< return $this->render(new assign_files($context, $userid, $filearea, $component));
< }
<
< /**
< * Rendering assignment files
< *
< * @param assign_files $tree
< * @return string
< */
< public function render_assign_files(assign_files $tree) {
< $this->htmlid = html_writer::random_id('assign_files_tree');
< $this->page->requires->js_init_call('M.mod_assign.init_tree', array(true, $this->htmlid));
< $html = '<div id="'.$this->htmlid.'">';
< $html .= $this->htmllize_tree($tree, $tree->dir);
< $html .= '</div>';
<
< if ($tree->portfolioform) {
< $html .= $tree->portfolioform;
< }
< return $html;
< }
<
< /**
< * Utility function to add a row of data to a table with 2 columns where the first column is the table's header.
< * Modified the table param and does not return a value.
< *
< * @param html_table $table The table to append the row of data to
< * @param string $first The first column text
< * @param string $second The second column text
< * @param array $firstattributes The first column attributes (optional)
< * @param array $secondattributes The second column attributes (optional)
< * @return void
< */
< private function add_table_row_tuple(html_table $table, $first, $second, $firstattributes = [],
< $secondattributes = []) {
< $row = new html_table_row();
< $cell1 = new html_table_cell($first);
< $cell1->header = true;
< if (!empty($firstattributes)) {
< $cell1->attributes = $firstattributes;
< }
< $cell2 = new html_table_cell($second);
< if (!empty($secondattributes)) {
< $cell2->attributes = $secondattributes;
< }
< $row->cells = array($cell1, $cell2);
< $table->data[] = $row;
< }
<
< /**
< * Render a grading message notification
< * @param assign_gradingmessage $result The result to render
< * @return string
< */
< public function render_assign_gradingmessage(assign_gradingmessage $result) {
< $urlparams = array('id' => $result->coursemoduleid, 'action'=>'grading');
< if (!empty($result->page)) {
< $urlparams['page'] = $result->page;
< }
< $url = new moodle_url('/mod/assign/view.php', $urlparams);
< $classes = $result->gradingerror ? 'notifyproblem' : 'notifysuccess';
<
< $o = '';
< $o .= $this->output->heading($result->heading, 4);
< $o .= $this->output->notification($result->message, $classes);
< $o .= $this->output->continue_button($url);
< return $o;
< }
<
< /**
< * Render the generic form
< * @param assign_form $form The form to render
< * @return string
< */
< public function render_assign_form(assign_form $form) {
< $o = '';
< if ($form->jsinitfunction) {
< $this->page->requires->js_init_call($form->jsinitfunction, array());
< }
< $o .= $this->output->box_start('boxaligncenter ' . $form->classname);
< $o .= $this->moodleform($form->form);
< $o .= $this->output->box_end();
< return $o;
< }
<
< /**
< * Render the user summary
< *
< * @param assign_user_summary $summary The user summary to render
< * @return string
< */
< public function render_assign_user_summary(assign_user_summary $summary) {
< $o = '';
< $supendedclass = '';
< $suspendedicon = '';
<
< if (!$summary->user) {
< return;
< }
<
< if ($summary->suspendeduser) {
< $supendedclass = ' usersuspended';
< $suspendedstring = get_string('userenrolmentsuspended', 'grades');
< $suspendedicon = ' ' . $this->pix_icon('i/enrolmentsuspended', $suspendedstring);
< }
< $o .= $this->output->container_start('usersummary');
< $o .= $this->output->box_start('boxaligncenter usersummarysection'.$supendedclass);
< if ($summary->blindmarking) {
< $o .= get_string('hiddenuser', 'assign') . $summary->uniqueidforuser.$suspendedicon;
< } else {
< $o .= $this->output->user_picture($summary->user);
< $o .= $this->output->spacer(array('width'=>30));
< $urlparams = array('id' => $summary->user->id, 'course'=>$summary->courseid);
< $url = new moodle_url('/user/view.php', $urlparams);
< $fullname = fullname($summary->user, $summary->viewfullnames);
< $extrainfo = array();
< foreach ($summary->extrauserfields as $extrafield) {
< $extrainfo[] = s($summary->user->$extrafield);
< }
< if (count($extrainfo)) {
< $fullname .= ' (' . implode(', ', $extrainfo) . ')';
< }
< $fullname .= $suspendedicon;
< $o .= $this->output->action_link($url, $fullname);
< }
< $o .= $this->output->box_end();
< $o .= $this->output->container_end();
<
< return $o;
< }
<
< /**
< * Render the submit for grading page
< *
< * @param assign_submit_for_grading_page $page
< * @return string
< */
< public function render_assign_submit_for_grading_page($page) {
< $o = '';
<
< $o .= $this->output->container_start('submitforgrading');
< $o .= $this->output->heading(get_string('confirmsubmissionheading', 'assign'), 3);
<
< $cancelurl = new moodle_url('/mod/assign/view.php', array('id' => $page->coursemoduleid));
< if (count($page->notifications)) {
< // At least one of the submission plugins is not ready for submission.
<
< $o .= $this->output->heading(get_string('submissionnotready', 'assign'), 4);
<
< foreach ($page->notifications as $notification) {
< $o .= $this->output->notification($notification);
< }
<
< $o .= $this->output->continue_button($cancelurl);
< } else {
< // All submission plugins ready - show the confirmation form.
< $o .= $this->moodleform($page->confirmform);
< }
< $o .= $this->output->container_end();
<
< return $o;
< }
<
< /**
< * Page is done - render the footer.
< *
< * @return void
< */
< public function render_footer() {
< return $this->output->footer();
< }
<
< /**
< * Render the header.
< *
< * @param assign_header $header
< * @return string
< */
< public function render_assign_header(assign_header $header) {
< global $USER;
<
< $o = '';
<
< if ($header->subpage) {
< $this->page->navbar->add($header->subpage);
< $args = ['contextname' => $header->context->get_context_name(false, true), 'subpage' => $header->subpage];
< $title = get_string('subpagetitle', 'assign', $args);
< } else {
< $title = $header->context->get_context_name(false, true);
< }
< $courseshortname = $header->context->get_course_context()->get_context_name(false, true);
< $title = $courseshortname . ': ' . $title;
< $heading = format_string($header->assign->name, false, array('context' => $header->context));
<
< $this->page->set_title($title);
< $this->page->set_heading($this->page->course->fullname);
<
< $o .= $this->output->header();
< $o .= $this->output->heading($heading);
<
< // Show the activity information output component.
< $modinfo = get_fast_modinfo($header->assign->course);
< $cm = $modinfo->get_cm($header->coursemoduleid);
< $cmcompletion = \core_completion\cm_completion_details::get_instance($cm, $USER->id);
< $activitydates = \core\activity_dates::get_dates_for_module($cm, $USER->id);
< $o .= $this->output->activity_information($cm, $cmcompletion, $activitydates);
<
< if ($header->preface) {
< $o .= $header->preface;
< }
<
< if ($header->showintro) {
< $o .= $this->output->box_start('generalbox boxaligncenter', 'intro');
< $o .= format_module_intro('assign', $header->assign, $header->coursemoduleid);
< $o .= $header->postfix;
< $o .= $this->output->box_end();
< }
<
< return $o;
< }
<
< /**
< * Render the header for an individual plugin.
< *
< * @param assign_plugin_header $header
< * @return string
< */
< public function render_assign_plugin_header(assign_plugin_header $header) {
< $o = $header->plugin->view_header();
< return $o;
< }
<
< /**
< * Render a table containing the current status of the grading process.
< *
< * @param assign_grading_summary $summary
< * @return string
< */
< public function render_assign_grading_summary(assign_grading_summary $summary) {
< // Create a table for the data.
< $o = '';
< $o .= $this->output->container_start('gradingsummary');
< $o .= $this->output->heading(get_string('gradingsummary', 'assign'), 3);
< $o .= $this->output->box_start('boxaligncenter gradingsummarytable');
< $t = new html_table();
<
< // Visibility Status.
< $cell1content = get_string('hiddenfromstudents');
< $cell2content = (!$summary->isvisible) ? get_string('yes') : get_string('no');
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
<
< // Status.
< if ($summary->teamsubmission) {
< if ($summary->warnofungroupedusers === assign_grading_summary::WARN_GROUPS_REQUIRED) {
< $o .= $this->output->notification(get_string('ungroupedusers', 'assign'));
< } else if ($summary->warnofungroupedusers === assign_grading_summary::WARN_GROUPS_OPTIONAL) {
< $o .= $this->output->notification(get_string('ungroupedusersoptional', 'assign'));
< }
< $cell1content = get_string('numberofteams', 'assign');
< } else {
< $cell1content = get_string('numberofparticipants', 'assign');
< }
<
< $cell2content = $summary->participantcount;
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
<
< // Drafts count and dont show drafts count when using offline assignment.
< if ($summary->submissiondraftsenabled && $summary->submissionsenabled) {
< $cell1content = get_string('numberofdraftsubmissions', 'assign');
< $cell2content = $summary->submissiondraftscount;
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
<
< // Submitted for grading.
< if ($summary->submissionsenabled) {
< $cell1content = get_string('numberofsubmittedassignments', 'assign');
< $cell2content = $summary->submissionssubmittedcount;
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
<
< if (!$summary->teamsubmission) {
< $cell1content = get_string('numberofsubmissionsneedgrading', 'assign');
< $cell2content = $summary->submissionsneedgradingcount;
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
< }
<
< $time = time();
< if ($summary->duedate) {
< // Time remaining.
< $duedate = $summary->duedate;
< $cell1content = get_string('timeremaining', 'assign');
< if ($summary->courserelativedatesmode) {
< $cell2content = get_string('relativedatessubmissiontimeleft', 'mod_assign');
< } else {
< if ($duedate - $time <= 0) {
< $cell2content = get_string('assignmentisdue', 'assign');
< } else {
< $cell2content = format_time($duedate - $time);
< }
< }
<
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
<
< if ($duedate < $time) {
< $cell1content = get_string('latesubmissions', 'assign');
< $cutoffdate = $summary->cutoffdate;
< if ($cutoffdate) {
< if ($cutoffdate > $time) {
< $cell2content = get_string('latesubmissionsaccepted', 'assign', userdate($summary->cutoffdate));
< } else {
< $cell2content = get_string('nomoresubmissionsaccepted', 'assign');
< }
<
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
< }
<
< }
<
< // All done - write the table.
< $o .= html_writer::table($t);
< $o .= $this->output->box_end();
<
< // Link to the grading page.
< $o .= html_writer::start_tag('center');
< $o .= $this->output->container_start('submissionlinks');
< $urlparams = array('id' => $summary->coursemoduleid, 'action' => 'grading');
< $url = new moodle_url('/mod/assign/view.php', $urlparams);
< $o .= html_writer::link($url, get_string('viewgrading', 'mod_assign'),
< ['class' => 'btn btn-secondary']);
< if ($summary->cangrade) {
< $urlparams = array('id' => $summary->coursemoduleid, 'action' => 'grader');
< $url = new moodle_url('/mod/assign/view.php', $urlparams);
< $o .= html_writer::link($url, get_string('gradeverb'),
< ['class' => 'btn btn-primary ml-1']);
< }
< $o .= $this->output->container_end();
<
< // Close the container and insert a spacer.
< $o .= $this->output->container_end();
< $o .= html_writer::end_tag('center');
<
< return $o;
< }
<
< /**
< * Render a table containing all the current grades and feedback.
< *
< * @param assign_feedback_status $status
< * @return string
< */
< public function render_assign_feedback_status(assign_feedback_status $status) {
< $o = '';
<
< $o .= $this->output->container_start('feedback');
< $o .= $this->output->heading(get_string('feedback', 'assign'), 3);
< $o .= $this->output->box_start('boxaligncenter feedbacktable');
< $t = new html_table();
<
< // Grade.
< if (isset($status->gradefordisplay)) {
< $cell1content = get_string('gradenoun');
< $cell2content = $status->gradefordisplay;
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
<
< // Grade date.
< $cell1content = get_string('gradedon', 'assign');
< $cell2content = userdate($status->gradeddate);
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
<
< if ($status->grader) {
< // Grader.
< $cell1content = get_string('gradedby', 'assign');
< $cell2content = $this->output->user_picture($status->grader) .
< $this->output->spacer(array('width' => 30)) .
< fullname($status->grader, $status->canviewfullnames);
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
<
< foreach ($status->feedbackplugins as $plugin) {
< if ($plugin->is_enabled() &&
< $plugin->is_visible() &&
< $plugin->has_user_summary() &&
< !empty($status->grade) &&
< !$plugin->is_empty($status->grade)) {
<
< $displaymode = assign_feedback_plugin_feedback::SUMMARY;
< $pluginfeedback = new assign_feedback_plugin_feedback($plugin,
< $status->grade,
< $displaymode,
< $status->coursemoduleid,
< $status->returnaction,
< $status->returnparams);
< $cell1content = $plugin->get_name();
< $cell2content = $this->render($pluginfeedback);
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
< }
<
< $o .= html_writer::table($t);
< $o .= $this->output->box_end();
<
< $o .= $this->output->container_end();
< return $o;
< }
<
< /**
< * Render a compact view of the current status of the submission.
< *
< * @param assign_submission_status_compact $status
< * @return string
< */
< public function render_assign_submission_status_compact(assign_submission_status_compact $status) {
< $o = '';
< $o .= $this->output->container_start('submissionstatustable');
< $o .= $this->output->heading(get_string('submission', 'assign'), 3);
< $time = time();
<
< if ($status->teamsubmissionenabled) {
< $group = $status->submissiongroup;
< if ($group) {
< $team = format_string($group->name, false, $status->context);
< } else if ($status->preventsubmissionnotingroup) {
< if (count($status->usergroups) == 0) {
< $team = '<span class="alert alert-error">' . get_string('noteam', 'assign') . '</span>';
< } else if (count($status->usergroups) > 1) {
< $team = '<span class="alert alert-error">' . get_string('multipleteams', 'assign') . '</span>';
< }
< } else {
< $team = get_string('defaultteam', 'assign');
< }
< $o .= $this->output->container(get_string('teamname', 'assign', $team), 'teamname');
< }
<
< if (!$status->teamsubmissionenabled) {
< if ($status->submission && $status->submission->status != ASSIGN_SUBMISSION_STATUS_NEW) {
< $statusstr = get_string('submissionstatus_' . $status->submission->status, 'assign');
< $o .= $this->output->container($statusstr, 'submissionstatus' . $status->submission->status);
< } else {
< if (!$status->submissionsenabled) {
< $o .= $this->output->container(get_string('noonlinesubmissions', 'assign'), 'submissionstatus');
< } else {
< $o .= $this->output->container(get_string('noattempt', 'assign'), 'submissionstatus');
< }
< }
< } else {
< $group = $status->submissiongroup;
< if (!$group && $status->preventsubmissionnotingroup) {
< $o .= $this->output->container(get_string('nosubmission', 'assign'), 'submissionstatus');
< } else if ($status->teamsubmission && $status->teamsubmission->status != ASSIGN_SUBMISSION_STATUS_NEW) {
< $teamstatus = $status->teamsubmission->status;
< $submissionsummary = get_string('submissionstatus_' . $teamstatus, 'assign');
< $groupid = 0;
< if ($status->submissiongroup) {
< $groupid = $status->submissiongroup->id;
< }
<
< $members = $status->submissiongroupmemberswhoneedtosubmit;
< $userslist = array();
< foreach ($members as $member) {
< $urlparams = array('id' => $member->id, 'course' => $status->courseid);
< $url = new moodle_url('/user/view.php', $urlparams);
< if ($status->view == assign_submission_status::GRADER_VIEW && $status->blindmarking) {
< $userslist[] = $member->alias;
< } else {
< $fullname = fullname($member, $status->canviewfullnames);
< $userslist[] = $this->output->action_link($url, $fullname);
< }
< }
< if (count($userslist) > 0) {
< $userstr = join(', ', $userslist);
< $formatteduserstr = get_string('userswhoneedtosubmit', 'assign', $userstr);
< $submissionsummary .= $this->output->container($formatteduserstr);
< }
< $o .= $this->output->container($submissionsummary, 'submissionstatus' . $status->teamsubmission->status);
< } else {
< if (!$status->submissionsenabled) {
< $o .= $this->output->container(get_string('noonlinesubmissions', 'assign'), 'submissionstatus');
< } else {
< $o .= $this->output->container(get_string('nosubmission', 'assign'), 'submissionstatus');
< }
< }
< }
<
< // Is locked?
< if ($status->locked) {
< $o .= $this->output->container(get_string('submissionslocked', 'assign'), 'submissionlocked');
< }
<
< // Grading status.
< $statusstr = '';
< $classname = 'gradingstatus';
< if ($status->gradingstatus == ASSIGN_GRADING_STATUS_GRADED ||
< $status->gradingstatus == ASSIGN_GRADING_STATUS_NOT_GRADED) {
< $statusstr = get_string($status->gradingstatus, 'assign');
< } else {
< $gradingstatus = 'markingworkflowstate' . $status->gradingstatus;
< $statusstr = get_string($gradingstatus, 'assign');
< }
< if ($status->gradingstatus == ASSIGN_GRADING_STATUS_GRADED ||
< $status->gradingstatus == ASSIGN_MARKING_WORKFLOW_STATE_RELEASED) {
< $classname = 'submissiongraded';
< } else {
< $classname = 'submissionnotgraded';
< }
< $o .= $this->output->container($statusstr, $classname);
<
< $submission = $status->teamsubmission ? $status->teamsubmission : $status->submission;
< $duedate = $status->duedate;
< if ($duedate > 0) {
<
< if ($status->extensionduedate) {
< // Extension date.
< $duedate = $status->extensionduedate;
< }
<
< // Time remaining.
< $classname = 'timeremaining';
< if ($duedate - $time <= 0) {
< if (!$submission ||
< $submission->status != ASSIGN_SUBMISSION_STATUS_SUBMITTED) {
< if ($status->submissionsenabled) {
< $remaining = get_string('overdue', 'assign', format_time($time - $duedate));
< $classname = 'overdue';
< } else {
< $remaining = get_string('duedatereached', 'assign');
< }
< } else {
< if ($submission->timemodified > $duedate) {
< $remaining = get_string('submittedlate',
< 'assign',
< format_time($submission->timemodified - $duedate));
< $classname = 'latesubmission';
< } else {
< $remaining = get_string('submittedearly',
< 'assign',
< format_time($submission->timemodified - $duedate));
< $classname = 'earlysubmission';
< }
< }
< } else {
< $remaining = get_string('paramtimeremaining', 'assign', format_time($duedate - $time));
< }
< $o .= $this->output->container($remaining, $classname);
< }
<
< // Show graders whether this submission is editable by students.
< if ($status->view == assign_submission_status::GRADER_VIEW) {
< if ($status->canedit) {
< $o .= $this->output->container(get_string('submissioneditable', 'assign'), 'submissioneditable');
< } else {
< $o .= $this->output->container(get_string('submissionnoteditable', 'assign'), 'submissionnoteditable');
< }
< }
<
< // Grading criteria preview.
< if (!empty($status->gradingcontrollerpreview)) {
< $o .= $this->output->container($status->gradingcontrollerpreview, 'gradingmethodpreview');
< }
<
< if ($submission) {
<
< if (!$status->teamsubmission || $status->submissiongroup != false || !$status->preventsubmissionnotingroup) {
< foreach ($status->submissionplugins as $plugin) {
< $pluginshowsummary = !$plugin->is_empty($submission) || !$plugin->allow_submissions();
< if ($plugin->is_enabled() &&
< $plugin->is_visible() &&
< $plugin->has_user_summary() &&
< $pluginshowsummary
< ) {
<
< $displaymode = assign_submission_plugin_submission::SUMMARY;
< $pluginsubmission = new assign_submission_plugin_submission($plugin,
< $submission,
< $displaymode,
< $status->coursemoduleid,
< $status->returnaction,
< $status->returnparams);
< $plugincomponent = $plugin->get_subtype() . '_' . $plugin->get_type();
< $o .= $this->output->container($this->render($pluginsubmission), 'assignsubmission ' . $plugincomponent);
< }
< }
< }
< }
<
< $o .= $this->output->container_end();
< return $o;
< }
<
< /**
< * Render a table containing the current status of the submission.
< *
< * @param assign_submission_status $status
< * @return string
< */
< public function render_assign_submission_status(assign_submission_status $status) {
< $o = '';
< $o .= $this->output->container_start('submissionstatustable');
< $o .= $this->output->heading(get_string('submissionstatusheading', 'assign'), 3);
< $time = time();
<
< $o .= $this->output->box_start('boxaligncenter submissionsummarytable');
<
< $t = new html_table();
<
< $warningmsg = '';
< if ($status->teamsubmissionenabled) {
< $cell1content = get_string('submissionteam', 'assign');
< $group = $status->submissiongroup;
< if ($group) {
< $cell2content = format_string($group->name, false, $status->context);
< } else if ($status->preventsubmissionnotingroup) {
< if (count($status->usergroups) == 0) {
< $notification = new \core\output\notification(get_string('noteam', 'assign'), 'error');
< $notification->set_show_closebutton(false);
< $warningmsg = $this->output->notification(get_string('noteam_desc', 'assign'), 'error');
< } else if (count($status->usergroups) > 1) {
< $notification = new \core\output\notification(get_string('multipleteams', 'assign'), 'error');
< $notification->set_show_closebutton(false);
< $warningmsg = $this->output->notification(get_string('multipleteams_desc', 'assign'), 'error');
< }
< $cell2content = $this->output->render($notification);
< } else {
< $cell2content = get_string('defaultteam', 'assign');
< }
<
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
<
< if ($status->attemptreopenmethod != ASSIGN_ATTEMPT_REOPEN_METHOD_NONE) {
< $currentattempt = 1;
< if (!$status->teamsubmissionenabled) {
< if ($status->submission) {
< $currentattempt = $status->submission->attemptnumber + 1;
< }
< } else {
< if ($status->teamsubmission) {
< $currentattempt = $status->teamsubmission->attemptnumber + 1;
< }
< }
<
< $cell1content = get_string('attemptnumber', 'assign');
< $maxattempts = $status->maxattempts;
< if ($maxattempts == ASSIGN_UNLIMITED_ATTEMPTS) {
< $cell2content = get_string('currentattempt', 'assign', $currentattempt);
< } else {
< $cell2content = get_string('currentattemptof', 'assign',
< array('attemptnumber' => $currentattempt, 'maxattempts' => $maxattempts));
< }
<
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
<
< $cell1content = get_string('submissionstatus', 'assign');
< $cell2attributes = [];
< if (!$status->teamsubmissionenabled) {
< if ($status->submission && $status->submission->status != ASSIGN_SUBMISSION_STATUS_NEW) {
< $cell2content = get_string('submissionstatus_' . $status->submission->status, 'assign');
< $cell2attributes = array('class' => 'submissionstatus' . $status->submission->status);
< } else {
< if (!$status->submissionsenabled) {
< $cell2content = get_string('noonlinesubmissions', 'assign');
< } else {
< $cell2content = get_string('noattempt', 'assign');
< }
< }
< } else {
< $group = $status->submissiongroup;
< if (!$group && $status->preventsubmissionnotingroup) {
< $cell2content = get_string('nosubmission', 'assign');
< } else if ($status->teamsubmission && $status->teamsubmission->status != ASSIGN_SUBMISSION_STATUS_NEW) {
< $teamstatus = $status->teamsubmission->status;
< $cell2content = get_string('submissionstatus_' . $teamstatus, 'assign');
<
< $members = $status->submissiongroupmemberswhoneedtosubmit;
< $userslist = array();
< foreach ($members as $member) {
< $urlparams = array('id' => $member->id, 'course'=>$status->courseid);
< $url = new moodle_url('/user/view.php', $urlparams);
< if ($status->view == assign_submission_status::GRADER_VIEW && $status->blindmarking) {
< $userslist[] = $member->alias;
< } else {
< $fullname = fullname($member, $status->canviewfullnames);
< $userslist[] = $this->output->action_link($url, $fullname);
< }
< }
< if (count($userslist) > 0) {
< $userstr = join(', ', $userslist);
< $formatteduserstr = get_string('userswhoneedtosubmit', 'assign', $userstr);
< $cell2content .= $this->output->container($formatteduserstr);
< }
<
< $cell2attributes = array('class' => 'submissionstatus' . $status->teamsubmission->status);
< } else {
< if (!$status->submissionsenabled) {
< $cell2content = get_string('noonlinesubmissions', 'assign');
< } else {
< $cell2content = get_string('nosubmission', 'assign');
< }
< }
< }
<
< $this->add_table_row_tuple($t, $cell1content, $cell2content, [], $cell2attributes);
<
< // Is locked?
< if ($status->locked) {
< $cell1content = '';
< $cell2content = get_string('submissionslocked', 'assign');
< $cell2attributes = array('class' => 'submissionlocked');
< $this->add_table_row_tuple($t, $cell1content, $cell2content, [], $cell2attributes);
< }
<
< // Grading status.
< $cell1content = get_string('gradingstatus', 'assign');
< if ($status->gradingstatus == ASSIGN_GRADING_STATUS_GRADED ||
< $status->gradingstatus == ASSIGN_GRADING_STATUS_NOT_GRADED) {
< $cell2content = get_string($status->gradingstatus, 'assign');
< } else {
< $gradingstatus = 'markingworkflowstate' . $status->gradingstatus;
< $cell2content = get_string($gradingstatus, 'assign');
< }
< if ($status->gradingstatus == ASSIGN_GRADING_STATUS_GRADED ||
< $status->gradingstatus == ASSIGN_MARKING_WORKFLOW_STATE_RELEASED) {
< $cell2attributes = array('class' => 'submissiongraded');
< } else {
< $cell2attributes = array('class' => 'submissionnotgraded');
< }
< $this->add_table_row_tuple($t, $cell1content, $cell2content, [], $cell2attributes);
<
< $submission = $status->teamsubmission ? $status->teamsubmission : $status->submission;
< $duedate = $status->duedate;
< if ($duedate > 0) {
< if ($status->view == assign_submission_status::GRADER_VIEW) {
< if ($status->cutoffdate) {
< // Cut off date.
< $cell1content = get_string('cutoffdate', 'assign');
< $cell2content = userdate($status->cutoffdate);
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
< }
<
< if ($status->extensionduedate) {
< // Extension date.
< $cell1content = get_string('extensionduedate', 'assign');
< $cell2content = userdate($status->extensionduedate);
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< $duedate = $status->extensionduedate;
< }
<
< // Time remaining.
< $cell1content = get_string('timeremaining', 'assign');
< $cell2attributes = [];
< if ($duedate - $time <= 0) {
< if (!$submission ||
< $submission->status != ASSIGN_SUBMISSION_STATUS_SUBMITTED) {
< if ($status->submissionsenabled) {
< $cell2content = get_string('overdue', 'assign', format_time($time - $duedate));
< $cell2attributes = array('class' => 'overdue');
< } else {
< $cell2content = get_string('duedatereached', 'assign');
< }
< } else {
< if ($submission->timemodified > $duedate) {
< $cell2content = get_string('submittedlate',
< 'assign',
< format_time($submission->timemodified - $duedate));
< $cell2attributes = array('class' => 'latesubmission');
< } else {
< $cell2content = get_string('submittedearly',
< 'assign',
< format_time($submission->timemodified - $duedate));
< $cell2attributes = array('class' => 'earlysubmission');
< }
< }
< } else {
< $cell2content = format_time($duedate - $time);
< }
< $this->add_table_row_tuple($t, $cell1content, $cell2content, [], $cell2attributes);
< }
<
< // Show graders whether this submission is editable by students.
< if ($status->view == assign_submission_status::GRADER_VIEW) {
< $cell1content = get_string('editingstatus', 'assign');
< if ($status->canedit) {
< $cell2content = get_string('submissioneditable', 'assign');
< $cell2attributes = array('class' => 'submissioneditable');
< } else {
< $cell2content = get_string('submissionnoteditable', 'assign');
< $cell2attributes = array('class' => 'submissionnoteditable');
< }
< $this->add_table_row_tuple($t, $cell1content, $cell2content, [], $cell2attributes);
< }
<
< // Grading criteria preview.
< if (!empty($status->gradingcontrollerpreview)) {
< $cell1content = get_string('gradingmethodpreview', 'assign');
< $cell2content = $status->gradingcontrollerpreview;
< $this->add_table_row_tuple($t, $cell1content, $cell2content, [], $cell2attributes);
< }
<
< // Last modified.
< if ($submission) {
< $cell1content = get_string('timemodified', 'assign');
<
< if ($submission->status != ASSIGN_SUBMISSION_STATUS_NEW) {
< $cell2content = userdate($submission->timemodified);
< } else {
< $cell2content = "-";
< }
<
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
<
< if (!$status->teamsubmission || $status->submissiongroup != false || !$status->preventsubmissionnotingroup) {
< foreach ($status->submissionplugins as $plugin) {
< $pluginshowsummary = !$plugin->is_empty($submission) || !$plugin->allow_submissions();
< if ($plugin->is_enabled() &&
< $plugin->is_visible() &&
< $plugin->has_user_summary() &&
< $pluginshowsummary
< ) {
<
< $cell1content = $plugin->get_name();
< $displaymode = assign_submission_plugin_submission::SUMMARY;
< $pluginsubmission = new assign_submission_plugin_submission($plugin,
< $submission,
< $displaymode,
< $status->coursemoduleid,
< $status->returnaction,
< $status->returnparams);
< $cell2content = $this->render($pluginsubmission);
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
< }
< }
< }
<
< $o .= $warningmsg;
< $o .= html_writer::table($t);
< $o .= $this->output->box_end();
<
< // Links.
< if ($status->view == assign_submission_status::STUDENT_VIEW) {
< if ($status->canedit) {
< if (!$submission || $submission->status == ASSIGN_SUBMISSION_STATUS_NEW) {
< $o .= $this->output->box_start('generalbox submissionaction');
< $urlparams = array('id' => $status->coursemoduleid, 'action' => 'editsubmission');
< $o .= $this->output->single_button(new moodle_url('/mod/assign/view.php', $urlparams),
< get_string('addsubmission', 'assign'), 'get');
< $o .= $this->output->box_start('boxaligncenter submithelp');
< $o .= get_string('addsubmission_help', 'assign');
< $o .= $this->output->box_end();
< $o .= $this->output->box_end();
< } else if ($submission->status == ASSIGN_SUBMISSION_STATUS_REOPENED) {
< $o .= $this->output->box_start('generalbox submissionaction');
< $urlparams = array('id' => $status->coursemoduleid,
< 'action' => 'editprevioussubmission',
< 'sesskey'=>sesskey());
< $o .= $this->output->single_button(new moodle_url('/mod/assign/view.php', $urlparams),
< get_string('addnewattemptfromprevious', 'assign'), 'get');
< $o .= $this->output->box_start('boxaligncenter submithelp');
< $o .= get_string('addnewattemptfromprevious_help', 'assign');
< $o .= $this->output->box_end();
< $o .= $this->output->box_end();
< $o .= $this->output->box_start('generalbox submissionaction');
< $urlparams = array('id' => $status->coursemoduleid, 'action' => 'editsubmission');
< $o .= $this->output->single_button(new moodle_url('/mod/assign/view.php', $urlparams),
< get_string('addnewattempt', 'assign'), 'get');
< $o .= $this->output->box_start('boxaligncenter submithelp');
< $o .= get_string('addnewattempt_help', 'assign');
< $o .= $this->output->box_end();
< $o .= $this->output->box_end();
< } else {
< $o .= $this->output->box_start('generalbox submissionaction');
< $urlparams = array('id' => $status->coursemoduleid, 'action' => 'editsubmission');
< $o .= $this->output->single_button(new moodle_url('/mod/assign/view.php', $urlparams),
< get_string('editsubmission', 'assign'), 'get');
< $urlparams = array('id' => $status->coursemoduleid, 'action' => 'removesubmissionconfirm');
< $o .= $this->output->single_button(new moodle_url('/mod/assign/view.php', $urlparams),
< get_string('removesubmission', 'assign'), 'get');
< $o .= $this->output->box_start('boxaligncenter submithelp');
< $o .= get_string('editsubmission_help', 'assign');
< $o .= $this->output->box_end();
< $o .= $this->output->box_end();
< }
< }
<
< if ($status->cansubmit) {
< $urlparams = array('id' => $status->coursemoduleid, 'action'=>'submit');
< $o .= $this->output->box_start('generalbox submissionaction');
< $o .= $this->output->single_button(new moodle_url('/mod/assign/view.php', $urlparams),
< get_string('submitassignment', 'assign'), 'get');
< $o .= $this->output->box_start('boxaligncenter submithelp');
< $o .= get_string('submitassignment_help', 'assign');
< $o .= $this->output->box_end();
< $o .= $this->output->box_end();
< }
< }
<
< $o .= $this->output->container_end();
< return $o;
< }
<
< /**
< * Output the attempt history chooser for this assignment
< *
< * @param assign_attempt_history_chooser $history
< * @return string
< */
< public function render_assign_attempt_history_chooser(assign_attempt_history_chooser $history) {
< $o = '';
<
< $context = $history->export_for_template($this);
< $o .= $this->render_from_template('mod_assign/attempt_history_chooser', $context);
<
< return $o;
< }
<
< /**
< * Output the attempt history for this assignment
< *
< * @param assign_attempt_history $history
< * @return string
< */
< public function render_assign_attempt_history(assign_attempt_history $history) {
< $o = '';
<
< // Don't show the last one because it is the current submission.
< array_pop($history->submissions);
<
< // Show newest to oldest.
< $history->submissions = array_reverse($history->submissions);
<
< if (empty($history->submissions)) {
< return '';
< }
<
< $containerid = 'attempthistory' . uniqid();
< $o .= $this->output->heading(get_string('attempthistory', 'assign'), 3);
< $o .= $this->box_start('attempthistory', $containerid);
<
< foreach ($history->submissions as $i => $submission) {
< $grade = null;
< foreach ($history->grades as $onegrade) {
< if ($onegrade->attemptnumber == $submission->attemptnumber) {
< if ($onegrade->grade != ASSIGN_GRADE_NOT_SET) {
< $grade = $onegrade;
< }
< break;
< }
< }
<
< if ($submission) {
< $submissionsummary = userdate($submission->timemodified);
< } else {
< $submissionsummary = get_string('nosubmission', 'assign');
< }
<
< $attemptsummaryparams = array('attemptnumber'=>$submission->attemptnumber+1,
< 'submissionsummary'=>$submissionsummary);
< $o .= $this->heading(get_string('attemptheading', 'assign', $attemptsummaryparams), 4);
<
< $t = new html_table();
<
< if ($submission) {
< $cell1content = get_string('submissionstatus', 'assign');
< $cell2content = get_string('submissionstatus_' . $submission->status, 'assign');
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
<
< foreach ($history->submissionplugins as $plugin) {
< $pluginshowsummary = !$plugin->is_empty($submission) || !$plugin->allow_submissions();
< if ($plugin->is_enabled() &&
< $plugin->is_visible() &&
< $plugin->has_user_summary() &&
< $pluginshowsummary) {
<
< $cell1content = $plugin->get_name();
< $pluginsubmission = new assign_submission_plugin_submission($plugin,
< $submission,
< assign_submission_plugin_submission::SUMMARY,
< $history->coursemoduleid,
< $history->returnaction,
< $history->returnparams);
< $cell2content = $this->render($pluginsubmission);
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
< }
< }
<
< if ($grade) {
< // Heading 'feedback'.
< $title = get_string('feedback', 'assign', $i);
< $title .= $this->output->spacer(array('width'=>10));
< if ($history->cangrade) {
< // Edit previous feedback.
< $returnparams = http_build_query($history->returnparams);
< $urlparams = array('id' => $history->coursemoduleid,
< 'rownum'=>$history->rownum,
< 'useridlistid'=>$history->useridlistid,
< 'attemptnumber'=>$grade->attemptnumber,
< 'action'=>'grade',
< 'returnaction'=>$history->returnaction,
< 'returnparams'=>$returnparams);
< $url = new moodle_url('/mod/assign/view.php', $urlparams);
< $icon = new pix_icon('gradefeedback',
< get_string('editattemptfeedback', 'assign', $grade->attemptnumber+1),
< 'mod_assign');
< $title .= $this->output->action_icon($url, $icon);
< }
< $cell = new html_table_cell($title);
< $cell->attributes['class'] = 'feedbacktitle';
< $cell->colspan = 2;
< $t->data[] = new html_table_row(array($cell));
<
< // Grade.
< $cell1content = get_string('gradenoun');
< $cell2content = $grade->gradefordisplay;
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
<
< // Graded on.
< $cell1content = get_string('gradedon', 'assign');
< $cell2content = userdate($grade->timemodified);
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
<
< // Graded by set to a real user. Not set can be empty or -1.
< if (!empty($grade->grader) && is_object($grade->grader)) {
< $cell1content = get_string('gradedby', 'assign');
< $cell2content = $this->output->user_picture($grade->grader) .
< $this->output->spacer(array('width' => 30)) . fullname($grade->grader);
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
<
< // Feedback from plugins.
< foreach ($history->feedbackplugins as $plugin) {
< if ($plugin->is_enabled() &&
< $plugin->is_visible() &&
< $plugin->has_user_summary() &&
< !$plugin->is_empty($grade)) {
<
< $pluginfeedback = new assign_feedback_plugin_feedback(
< $plugin, $grade, assign_feedback_plugin_feedback::SUMMARY, $history->coursemoduleid,
< $history->returnaction, $history->returnparams
< );
<
< $cell1content = $plugin->get_name();
< $cell2content = $this->render($pluginfeedback);
< $this->add_table_row_tuple($t, $cell1content, $cell2content);
< }
<
< }
<
< }
<
< $o .= html_writer::table($t);
< }
< $o .= $this->box_end();
<
< $this->page->requires->yui_module('moodle-mod_assign-history', 'Y.one("#' . $containerid . '").history');
<
< return $o;
< }
<
< /**
< * Render a submission plugin submission
< *
< * @param assign_submission_plugin_submission $submissionplugin
< * @return string
< */
< public function render_assign_submission_plugin_submission(assign_submission_plugin_submission $submissionplugin) {
< $o = '';
<
< if ($submissionplugin->view == assign_submission_plugin_submission::SUMMARY) {
< $showviewlink = false;
< $summary = $submissionplugin->plugin->view_summary($submissionplugin->submission,
< $showviewlink);
<
< $classsuffix = $submissionplugin->plugin->get_subtype() .
< '_' .
< $submissionplugin->plugin->get_type() .
< '_' .
< $submissionplugin->submission->id;
<
< $o .= $this->output->box_start('boxaligncenter plugincontentsummary summary_' . $classsuffix);
<
< $link = '';
< if ($showviewlink) {
< $previewstr = get_string('viewsubmission', 'assign');
< $icon = $this->output->pix_icon('t/preview', $previewstr);
<
< $expandstr = get_string('viewfull', 'assign');
< $expandicon = $this->output->pix_icon('t/switch_plus', $expandstr);
< $options = array(
< 'class' => 'expandsummaryicon expand_' . $classsuffix,
< 'aria-label' => $expandstr,
< 'role' => 'button',
< 'aria-expanded' => 'false'
< );
< $o .= html_writer::link('', $expandicon, $options);
<
< $jsparams = array($submissionplugin->plugin->get_subtype(),
< $submissionplugin->plugin->get_type(),
< $submissionplugin->submission->id);
<
< $this->page->requires->js_init_call('M.mod_assign.init_plugin_summary', $jsparams);
<
< $action = 'viewplugin' . $submissionplugin->plugin->get_subtype();
< $returnparams = http_build_query($submissionplugin->returnparams);
< $link .= '<noscript>';
< $urlparams = array('id' => $submissionplugin->coursemoduleid,
< 'sid'=>$submissionplugin->submission->id,
< 'plugin'=>$submissionplugin->plugin->get_type(),
< 'action'=>$action,
< 'returnaction'=>$submissionplugin->returnaction,
< 'returnparams'=>$returnparams);
< $url = new moodle_url('/mod/assign/view.php', $urlparams);
< $link .= $this->output->action_link($url, $icon);
< $link .= '</noscript>';
<
< $link .= $this->output->spacer(array('width'=>15));
< }
<
< $o .= $link . $summary;
< $o .= $this->output->box_end();
< if ($showviewlink) {
< $o .= $this->output->box_start('boxaligncenter hidefull full_' . $classsuffix);
< $collapsestr = get_string('viewsummary', 'assign');
< $options = array(
< 'class' => 'expandsummaryicon contract_' . $classsuffix,
< 'aria-label' => $collapsestr,
< 'role' => 'button',
< 'aria-expanded' => 'true'
< );
< $collapseicon = $this->output->pix_icon('t/switch_minus', $collapsestr);
< $o .= html_writer::link('', $collapseicon, $options);
<
< $o .= $submissionplugin->plugin->view($submissionplugin->submission);
< $o .= $this->output->box_end();
< }
< } else if ($submissionplugin->view == assign_submission_plugin_submission::FULL) {
< $o .= $this->output->box_start('boxaligncenter submissionfull');
< $o .= $submissionplugin->plugin->view($submissionplugin->submission);
< $o .= $this->output->box_end();
< }
<
< return $o;
< }
<
< /**
< * Render the grading table.
< *
< * @param assign_grading_table $table
< * @return string
< */
< public function render_assign_grading_table(assign_grading_table $table) {
< $o = '';
< $o .= $this->output->box_start('boxaligncenter gradingtable');
<
< $this->page->requires->js_init_call('M.mod_assign.init_grading_table', array());
< $this->page->requires->string_for_js('nousersselected', 'assign');
< $this->page->requires->string_for_js('batchoperationconfirmgrantextension', 'assign');
< $this->page->requires->string_for_js('batchoperationconfirmlock', 'assign');
< $this->page->requires->string_for_js('batchoperationconfirmremovesubmission', 'assign');
< $this->page->requires->string_for_js('batchoperationconfirmreverttodraft', 'assign');
< $this->page->requires->string_for_js('batchoperationconfirmunlock', 'assign');
< $this->page->requires->string_for_js('batchoperationconfirmaddattempt', 'assign');
< $this->page->requires->string_for_js('batchoperationconfirmdownloadselected', 'assign');
< $this->page->requires->string_for_js('batchoperationconfirmsetmarkingworkflowstate', 'assign');
< $this->page->requires->string_for_js('batchoperationconfirmsetmarkingallocation', 'assign');
< $this->page->requires->string_for_js('editaction', 'assign');
< foreach ($table->plugingradingbatchoperations as $plugin => $operations) {
< foreach ($operations as $operation => $description) {
< $this->page->requires->string_for_js('batchoperationconfirm' . $operation,
< 'assignfeedback_' . $plugin);
< }
< }
< $o .= $this->flexible_table($table, $table->get_rows_per_page(), true);
< $o .= $this->output->box_end();
<
< return $o;
< }
<
< /**
< * Render a feedback plugin feedback
< *
< * @param assign_feedback_plugin_feedback $feedbackplugin
< * @return string
< */
< public function render_assign_feedback_plugin_feedback(assign_feedback_plugin_feedback $feedbackplugin) {
< $o = '';
<
< if ($feedbackplugin->view == assign_feedback_plugin_feedback::SUMMARY) {
< $showviewlink = false;
< $summary = $feedbackplugin->plugin->view_summary($feedbackplugin->grade, $showviewlink);
<
< $classsuffix = $feedbackplugin->plugin->get_subtype() .
< '_' .
< $feedbackplugin->plugin->get_type() .
< '_' .
< $feedbackplugin->grade->id;
< $o .= $this->output->box_start('boxaligncenter plugincontentsummary summary_' . $classsuffix);
<
< $link = '';
< if ($showviewlink) {
< $previewstr = get_string('viewfeedback', 'assign');
< $icon = $this->output->pix_icon('t/preview', $previewstr);
<
< $expandstr = get_string('viewfull', 'assign');
< $expandicon = $this->output->pix_icon('t/switch_plus', $expandstr);
< $options = array(
< 'class' => 'expandsummaryicon expand_' . $classsuffix,
< 'aria-label' => $expandstr,
< 'role' => 'button',
< 'aria-expanded' => 'false'
< );
< $o .= html_writer::link('', $expandicon, $options);
<
< $jsparams = array($feedbackplugin->plugin->get_subtype(),
< $feedbackplugin->plugin->get_type(),
< $feedbackplugin->grade->id);
< $this->page->requires->js_init_call('M.mod_assign.init_plugin_summary', $jsparams);
<
< $urlparams = array('id' => $feedbackplugin->coursemoduleid,
< 'gid'=>$feedbackplugin->grade->id,
< 'plugin'=>$feedbackplugin->plugin->get_type(),
< 'action'=>'viewplugin' . $feedbackplugin->plugin->get_subtype(),
< 'returnaction'=>$feedbackplugin->returnaction,
< 'returnparams'=>http_build_query($feedbackplugin->returnparams));
< $url = new moodle_url('/mod/assign/view.php', $urlparams);
< $link .= '<noscript>';
< $link .= $this->output->action_link($url, $icon);
< $link .= '</noscript>';
<
< $link .= $this->output->spacer(array('width'=>15));
< }
<
< $o .= $link . $summary;
< $o .= $this->output->box_end();
< if ($showviewlink) {
< $o .= $this->output->box_start('boxaligncenter hidefull full_' . $classsuffix);
< $collapsestr = get_string('viewsummary', 'assign');
< $options = array(
< 'class' => 'expandsummaryicon contract_' . $classsuffix,
< 'aria-label' => $collapsestr,
< 'role' => 'button',
< 'aria-expanded' => 'true'
< );
< $collapseicon = $this->output->pix_icon('t/switch_minus', $collapsestr);
< $o .= html_writer::link('', $collapseicon, $options);
<
< $o .= $feedbackplugin->plugin->view($feedbackplugin->grade);
< $o .= $this->output->box_end();
< }
< } else if ($feedbackplugin->view == assign_feedback_plugin_feedback::FULL) {
< $o .= $this->output->box_start('boxaligncenter feedbackfull');
< $o .= $feedbackplugin->plugin->view($feedbackplugin->grade);
< $o .= $this->output->box_end();
< }
<
< return $o;
< }
<
< /**
< * Render a course index summary
< *
< * @param assign_course_index_summary $indexsummary
< * @return string
< */
< public function render_assign_course_index_summary(assign_course_index_summary $indexsummary) {
< $o = '';
<
< $strplural = get_string('modulenameplural', 'assign');
< $strsectionname = $indexsummary->courseformatname;
< $strduedate = get_string('duedate', 'assign');
< $strsubmission = get_string('submission', 'assign');
< $strgrade = get_string('gradenoun');
<
< $table = new html_table();
< if ($indexsummary->usesections) {
< $table->head = array ($strsectionname, $strplural, $strduedate, $strsubmission, $strgrade);
< $table->align = array ('left', 'left', 'center', 'right', 'right');
< } else {
< $table->head = array ($strplural, $strduedate, $strsubmission, $strgrade);
< $table->align = array ('left', 'left', 'center', 'right');
< }
< $table->data = array();
<
< $currentsection = '';
< foreach ($indexsummary->assignments as $info) {
< $params = array('id' => $info['cmid']);
< $link = html_writer::link(new moodle_url('/mod/assign/view.php', $params),
< $info['cmname']);
< $due = $info['timedue'] ? userdate($info['timedue']) : '-';
<
< $printsection = '';
< if ($indexsummary->usesections) {
< if ($info['sectionname'] !== $currentsection) {
< if ($info['sectionname']) {
< $printsection = $info['sectionname'];
< }
< if ($currentsection !== '') {
< $table->data[] = 'hr';
< }
< $currentsection = $info['sectionname'];
< }
< }
<
< if ($indexsummary->usesections) {
< $row = array($printsection, $link, $due, $info['submissioninfo'], $info['gradeinfo']);
< } else {
< $row = array($link, $due, $info['submissioninfo'], $info['gradeinfo']);
< }
< $table->data[] = $row;
< }
<
< $o .= html_writer::table($table);
<
< return $o;
< }
<
<
<
< /**
< * Internal function - creates htmls structure suitable for YUI tree.
< *
< * @param assign_files $tree
< * @param array $dir
< * @return string
< */
< protected function htmllize_tree(assign_files $tree, $dir) {
< global $CFG;
< $yuiconfig = array();
< $yuiconfig['type'] = 'html';
<
< if (empty($dir['subdirs']) and empty($dir['files'])) {
< return '';
< }
<
< $result = '<ul>';
< foreach ($dir['subdirs'] as $subdir) {
< $image = $this->output->pix_icon(file_folder_icon(),
< $subdir['dirname'],
< 'moodle',
< array('class'=>'icon'));
< $result .= '<li yuiConfig=\'' . json_encode($yuiconfig) . '\'>' .
< '<div>' . $image . ' ' . s($subdir['dirname']) . '</div> ' .
< $this->htmllize_tree($tree, $subdir) .
< '</li>';
< }
<
< foreach ($dir['files'] as $file) {
< $filename = $file->get_filename();
< if ($CFG->enableplagiarism) {
< require_once($CFG->libdir.'/plagiarismlib.php');
< $plagiarismlinks = plagiarism_get_links(array('userid'=>$file->get_userid(),
< 'file'=>$file,
< 'cmid'=>$tree->cm->id,
< 'course'=>$tree->course));
< } else {
< $plagiarismlinks = '';
< }
< $image = $this->output->pix_icon(file_file_icon($file),
< $filename,
< 'moodle',
< array('class'=>'icon'));
< $result .= '<li yuiConfig=\'' . json_encode($yuiconfig) . '\'>' .
< '<div>' .
< '<div class="fileuploadsubmission">' . $image . ' ' .
< $file->fileurl . ' ' .
< $plagiarismlinks . ' ' .
< $file->portfoliobutton . ' ' .
< '</div>' .
< '<div class="fileuploadsubmissiontime">' . $file->timemodified . '</div>' .
< '</div>' .
< '</li>';
< }
<
< $result .= '</ul>';
<
< return $result;
< }
<
< /**
< * Helper method dealing with the fact we can not just fetch the output of flexible_table
< *
< * @param flexible_table $table The table to render
< * @param int $rowsperpage How many assignments to render in a page
< * @param bool $displaylinks - Whether to render links in the table
< * (e.g. downloads would not enable this)
< * @return string HTML
< */
< protected function flexible_table(flexible_table $table, $rowsperpage, $displaylinks) {
<
< $o = '';
< ob_start();
< $table->out($rowsperpage, $displaylinks);
< $o = ob_get_contents();
< ob_end_clean();
<
< return $o;
< }
<
< /**
< * Helper method dealing with the fact we can not just fetch the output of moodleforms
< *
< * @param moodleform $mform
< * @return string HTML
< */
< protected function moodleform(moodleform $mform) {
<
< $o = '';
< ob_start();
< $mform->display();
< $o = ob_get_contents();
< ob_end_clean();
<
< return $o;
< }
<
< /**
< * Defer to template..
< *
< * @param grading_app $app - All the data to render the grading app.
< */
< public function render_grading_app(grading_app $app) {
< $context = $app->export_for_template($this);
< return $this->render_from_template('mod_assign/grading_app', $context);
< }
< }
<
> // TODO - MDL-72749 add debugging message.