/**
* Returns submissions from this workshop
*
- * Fetches data from {workshop_submissions} and adds some useful information from other
+ * Fetches no-big-text data from {workshop_submissions} and adds some useful information from other
* tables.
*
* @param mixed $userid int|array|'all' If set to [array of] integer, return submission[s] of the given user[s] only
public function get_submissions_recordset($userid='all', $examples=false) {
global $DB;
- $sql = 'SELECT s.*, u.lastname AS authorlastname, u.firstname AS authorfirstname
+ $sql = 'SELECT s.id, s.workshopid, s.example, s.userid, s.timecreated, s.timemodified,
+ s.title, s.grade, s.gradeover, s.gradeoverby, s.gradinggrade,
+ u.lastname AS authorlastname, u.firstname AS authorfirstname, u.id AS authorid,
+ u.picture AS authorpicture, u.imagealt AS authorimagealt
FROM {workshop_submissions} s
INNER JOIN {user} u ON (s.userid = u.id)
WHERE s.workshopid = :workshopid';
} else {
throw new coding_exception('Illegal parameter value: $examples may be false|true|"all"');
}
+ $sql .= ' ORDER BY u.lastname, u.firstname';
if ('all' === $userid) {
// no additional conditions
/**
* Returns a submission submitted by the given author or authors.
*
- * This is intended for regular workshop participants, not for example submissions by teachers.
- * If an array of authors is provided, returns array of stripped submission records so they do not
- * include text fields (to prevent possible memory-lack issues).
+ * If the single one submission is requested, returns the first found record including text fields.
+ * If multiple records are requested, uses {@link self::get_submissions_recordset()}.
+ * Does not return example submissions.
*
* @param mixed $id integer|array author ID or IDs
* @return mixed false if not found, stdClass if $id is int, array if $id is array
*/
public function get_submission_by_author($id) {
+ global $DB;
+
if (empty($id)) {
return false;
}
- $rs = $this->get_submissions_recordset($id, false);
if (is_array($id)) {
+ $rs = $this->get_submissions_recordset($id, false);
$submissions = array();
foreach ($rs as $submission) {
- $submissions[$submission->id] = new stdClass();
- foreach ($submission as $property => $value) {
- // we do not want text fields here to prevent possible memory issues
- if (in_array($property, array('id', 'workshopid', 'example', 'userid', 'authorlastname', 'authorfirstname',
- 'timecreated', 'timemodified', 'grade', 'gradeover', 'gradeoverby', 'gradinggrade'))) {
- $submissions[$submission->id]->{$property} = $value;
- }
- }
+ $submissions[$submission->id] = $submission;
}
+ $rs->close();
return $submissions;
} else {
- $submission = $rs->current();
- $rs->close();
- if (empty($submission->id)) {
- return false;
- } else {
- return $submission;
- }
+ $sql = 'SELECT s.*,
+ u.lastname AS authorlastname, u.firstname AS authorfirstname, u.id AS authorid,
+ u.picture AS authorpicture, u.imagealt AS authorimagealt
+ FROM {workshop_submissions} s
+ INNER JOIN {user} u ON (s.userid = u.id)
+ WHERE s.example = 0 AND s.workshopid = :workshopid AND s.userid = :userid';
+ $params = array('workshopid' => $this->id, 'userid' => $id);
+ return $DB->get_record_sql($sql, $params);
}
}
return $o;
}
+ /**
+ * Display a short summary of the submission
+ *
+ * @param stdClass $submission The submission record
+ * @param bool $showauthorname Should the author name be displayed
+ * @return string html to be echoed
+ */
+ public function submission_summary(stdClass $submission, $showauthorname=false) {
+ global $CFG;
+
+ $o = ''; // output HTML code
+ $classes = 'submission-summary';
+ if (!$showauthorname) {
+ $classes .= ' anonymous';
+ }
+ $o .= $this->output->container_start($classes); // main wrapper
+ $link = new html_link();
+ $link->url = new moodle_url($CFG->wwwroot . '/mod/workshop/submission.php',
+ array('cmid' => $this->page->context->instanceid, 'id' => $submission->id));
+ $link->text = format_string($submission->title);
+ $link->set_classes('title');
+ $o .= $this->output->link($link);
+ if ($showauthorname) {
+ $author = new stdClass();
+ $author->id = $submission->authorid;
+ $author->firstname = $submission->authorfirstname;
+ $author->lastname = $submission->authorlastname;
+ $author->picture = $submission->authorpicture;
+ $author->imagealt = $submission->authorimagealt;
+ $userpic = new moodle_user_picture();
+ $userpic->user = $author;
+ $userpic->courseid = $this->page->course->id;
+ $userpic->url = true;
+ $userpic->size = 35;
+ $userpic = $this->output->user_picture($userpic);
+ $userurl = new moodle_url($CFG->wwwroot . '/user/view.php',
+ array('id' => $author->id, 'course' => $this->page->course->id));
+ $a = new stdClass();
+ $a->name = fullname($author);
+ $a->url = $userurl->out();
+ $byfullname = get_string('byfullname', 'workshop', $a);
+
+ $oo = $this->output->container($userpic, 'picture');
+ $oo .= $this->output->container($byfullname, 'fullname');
+ $o .= $this->output->container($oo, 'author');
+ }
+ $created = get_string('userdatecreated', 'workshop', userdate($submission->timecreated));
+ $o .= $this->output->container($created, 'userdate created');
+ if ($submission->timemodified > $submission->timecreated) {
+ $modified = get_string('userdatemodified', 'workshop', userdate($submission->timemodified));
+ $o .= $this->output->container($modified, 'userdate modified');
+ }
+ $o .= $this->output->container_end(); // end of the main wrapper
+
+ return $o;
+ }
+
+
/**
* Displays the submission fulltext
*
*
* @param stdClass $submission The submission record
* @param bool $showauthorname Should the author name be displayed
- * @param stdClass $author If author's name should be displayed, this object contains the author data
* @return string html to be echoed
*/
- public function submission_full(stdClass $submission, $showauthorname=false, stdClass $author=null) {
+ public function submission_full(stdClass $submission, $showauthorname=false) {
global $CFG;
- $o = ''; // output code
- $at = array('class' => 'submission-full');
- if (!$showauthorname || !$author) {
- $at['class'] .= ' anonymous';
+ $o = ''; // output HTML code
+ $classes = 'submission-full';
+ if (!$showauthorname) {
+ $classes .= ' anonymous';
}
- $o .= $this->output->output_start_tag('div', $at); //+
- $o .= $this->output->output_start_tag('div', array('class' => 'header')); //++
+ $o .= $this->output->container_start($classes);
+ $o .= $this->output->container_start('header');
$o .= $this->output->heading(format_string($submission->title), 3, 'title');
- if ($showauthorname && $author) {
- $o .= $this->output->output_start_tag('div', array('class' => 'author')); //+++
- $userpic = new moodle_user_picture();
- $userpic->user = $author;
- $userpic->courseid = $this->page->course->id;
- $userpic->url = true;
- $userpic->size = 64;
- $userpic = $this->output->user_picture($userpic);
- $userurl = new moodle_url($CFG->wwwroot . '/user/view.php',
+ if ($showauthorname) {
+ $author = new stdClass();
+ $author->id = $submission->authorid;
+ $author->firstname = $submission->authorfirstname;
+ $author->lastname = $submission->authorlastname;
+ $author->picture = $submission->authorpicture;
+ $author->imagealt = $submission->authorimagealt;
+ $userpic = new moodle_user_picture();
+ $userpic->user = $author;
+ $userpic->courseid = $this->page->course->id;
+ $userpic->url = true;
+ $userpic->size = 64;
+ $userpic = $this->output->user_picture($userpic);
+ $userurl = new moodle_url($CFG->wwwroot . '/user/view.php',
array('id' => $author->id, 'course' => $this->page->course->id));
- $a = new stdClass();
- $a->name = fullname($author);
- $a->url = $userurl->out();
- $byfullname = get_string('byfullname', 'workshop', $a);
- $o .= $this->output->output_tag('div', array('class' => 'picture'), $userpic);
- $o .= $this->output->output_tag('div', array('class' => 'fullname'), $byfullname);
- $o .= $this->output->output_end_tag('div'); // end of author //++
+ $a = new stdClass();
+ $a->name = fullname($author);
+ $a->url = $userurl->out();
+ $byfullname = get_string('byfullname', 'workshop', $a);
+ $oo = $this->output->container($userpic, 'picture');
+ $oo .= $this->output->container($byfullname, 'fullname');
+
+ $o .= $this->output->container($oo, 'author');
}
$created = get_string('userdatecreated', 'workshop', userdate($submission->timecreated));
- $o .= $this->output->output_tag('div', array('class' => 'userdate created'), $created);
+ $o .= $this->output->container($created, 'userdate created');
if ($submission->timemodified > $submission->timecreated) {
$modified = get_string('userdatemodified', 'workshop', userdate($submission->timemodified));
- $o .= $this->output->output_tag('div', array('class' => 'userdate modified'), $modified);
+ $o .= $this->output->container($modified, 'userdate modified');
}
- $o .= $this->output->output_end_tag('div'); // end of header //+
+ $o .= $this->output->container_end(); // end of header
$content = format_text($submission->content, $submission->contentformat);
$content = file_rewrite_pluginfile_urls($content, 'pluginfile.php', $this->page->context->id,
'workshop_submission_content', $submission->id);
- $o .= $this->output->output_tag('div', array('class' => 'content'), $content);
+ $o .= $this->output->container($content, 'content');
$o .= $this->submission_attachments($submission);
- $o .= $this->output->output_end_tag('div'); // end of submission-full //
+ $o .= $this->output->container_end(); // end of submission-full
return $o;
}
$preview->set_classes('preview');
$preview = $this->output->image($preview);
$preview = $this->output->link($fileurl, $preview);
- $outputimgs .= $this->output->output_tag('div', array(), $preview);
+ $outputimgs .= $this->output->container($preview);
} else {
// this is the same as the code in html if-branch
$outputfiles .= $this->output->output_tag('li', array('class' => $type), $linkhtml);
}
if ($outputimgs) {
- $outputimgs = $this->output->output_tag('div', array('class' => 'images'), $outputimgs);
+ $outputimgs = $this->output->container($outputimgs, 'images');
}
if ($format !== "text") {
$outputfiles = $this->output->output_tag('ul', array('class' => 'files'), $outputfiles);
}
- return $this->output->output_tag('div', array('class' => 'attachments'), $outputimgs . $outputfiles);
+ return $this->output->container($outputimgs . $outputfiles, 'attachments');
}
/**
echo $OUTPUT->header();
include(dirname(__FILE__) . '/tabs.php');
-echo $OUTPUT->heading(format_string($workshop->name));
+echo $OUTPUT->heading(format_string($workshop->name), 2);
echo $wsoutput->user_plan($workshop->prepare_user_plan($USER->id));
switch ($workshop->phase) {
case workshop::PHASE_SETUP:
- // print workshop name and description
if (trim(strip_tags($workshop->intro))) {
echo $OUTPUT->box(format_module_intro('workshop', $workshop, $workshop->cm->id), 'generalbox', 'intro');
}
break;
case workshop::PHASE_SUBMISSION:
+ if (has_capability('mod/workshop:submit', $PAGE->context)) {
+ if ($submission = $workshop->get_submission_by_author($USER->id)) {
+ echo $OUTPUT->box_start('generalbox mysubmission');
+ echo $wsoutput->submission_summary($submission, true);
+ echo $OUTPUT->box_end();
+ }
+ }
+ if (has_capability('mod/workshop:viewallsubmissions', $PAGE->context)) {
+ $shownames = has_capability('mod/workshop:viewauthornames', $PAGE->context);
+ echo $OUTPUT->box_start('generalbox allsubmissions');
+ $counter = 0;
+ $rs = $workshop->get_submissions_recordset('all', false);
+ foreach ($rs as $submission) {
+ $counter++;
+ echo $wsoutput->submission_summary($submission, $shownames);
+ }
+ $rs->close();
+ if ($counter == 0) {
+ echo $OUTPUT->container(get_string('nosubmissions', 'workshop'), 'nosubmissions');
+ }
+ echo $OUTPUT->box_end();
+ }
+ break;
case workshop::PHASE_ASSESSMENT:
case workshop::PHASE_EVALUATION:
case workshop::PHASE_CLOSED: