function edit_comment_page($userid, $pageno, $enableedit = true) { global $CFG, $DB, $OUTPUT, $PAGE, $USER; if (!($user = $DB->get_record('user', array('id' => $userid)))) { print_error('No such user!'); } if (!($submission = $this->get_submission($user->id))) { print_error('User has no submission to comment on!'); } if (!has_capability('mod/assignment:grade', $this->context)) { if (has_capability('mod/assignment:submit', $this->context) && $USER->id == $userid) { $enableedit = false; } else { print_error('No permission to view or edit this assignment'); } } $showprevious = optional_param('showprevious', -1, PARAM_INT); if ($enableedit && optional_param('topframe', false, PARAM_INT)) { if ($showprevious != -1) { echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'; echo '<html><head><title>' . get_string('feedback', 'assignment') . ':' . fullname($user, true) . ':' . format_string($this->assignment->name) . '</title></head>'; echo '<frameset cols="60%, 40%">'; echo '<frame src="editcomment.php?'; echo 'id=' . $this->cm->id . '&userid=' . $userid . '&pageno=' . $pageno . '&showprevious=' . $showprevious; echo '">'; echo '<frame src="editcomment.php?'; echo 'a=' . $showprevious . '&userid=' . $userid . '&action=showprevious'; echo '">'; echo '</frameset></html>'; die; } } $savedraft = optional_param('savedraft', null, PARAM_TEXT); $generateresponse = optional_param('generateresponse', null, PARAM_TEXT); if ($enableedit && $savedraft) { echo $OUTPUT->header(get_string('feedback', 'assignment') . ':' . format_string($this->assignment->name)); echo $OUTPUT->heading(get_string('draftsaved', 'assignment_uploadpdf')); echo html_writer::script('self.close()'); // FIXME - use 'close_window()', if it ever starts working again die; } if ($enableedit && $generateresponse) { if ($this->create_response_pdf($submission->id)) { $submission->data2 = ASSIGNMENT_UPLOADPDF_STATUS_RESPONDED; $updated = new stdClass(); $updated->id = $submission->id; $updated->data2 = $submission->data2; $DB->update_record('assignment_submissions', $updated); $PAGE->set_title(get_string('feedback', 'assignment') . ':' . format_string($this->assignment->name)); echo $OUTPUT->header(); echo $OUTPUT->heading(get_string('responseok', 'assignment_uploadpdf')); require_once $CFG->libdir . '/gradelib.php'; echo $this->update_main_listing($submission); echo html_writer::script('self.close()'); // FIXME - use 'close_window()', if it ever starts working again die; } else { echo $OUTPUT->header(get_string('feedback', 'assignment') . ':' . format_string($this->assignment->name)); print_error(get_string('responseproblem', 'assignment_uploadpdf')); die; } } list($imageurl, $imgwidth, $imgheight, $pagecount) = $this->get_page_image($pageno, $submission); $PAGE->requires->js('/mod/assignment/type/uploadpdf/scripts/mootools-core-1.4.1.js'); $PAGE->requires->js('/mod/assignment/type/uploadpdf/scripts/mootools-more-1.4.0.1.js'); $PAGE->requires->js('/mod/assignment/type/uploadpdf/scripts/raphael-min.js'); $PAGE->requires->js('/mod/assignment/type/uploadpdf/scripts/contextmenu.js'); $PAGE->set_pagelayout('popup'); $PAGE->set_title(get_string('feedback', 'assignment') . ':' . fullname($user, true) . ':' . format_string($this->assignment->name)); $PAGE->set_heading(''); echo $OUTPUT->header(); echo '<div id="saveoptions">'; if ($enableedit) { echo '<form action="' . $CFG->wwwroot . '/mod/assignment/type/uploadpdf/editcomment.php" method="post" target="_top" >'; echo '<input type="hidden" name="id" value="' . $this->cm->id . '" />'; echo '<input type="hidden" name="userid" value="' . $userid . '" />'; echo '<input type="hidden" name="pageno" value="' . $pageno . '" />'; echo '<button type="submit" id="savedraft" name="savedraft" value="savedraft" title="' . get_string('savedraft', 'assignment_uploadpdf') . '"><img src="' . $OUTPUT->pix_url('savequit', 'assignment_uploadpdf') . '"/></button>'; echo '<button type="submit" id="generateresponse" name="generateresponse" value="generateresponse" title="' . get_string('generateresponse', 'assignment_uploadpdf') . '"><img src="' . $OUTPUT->pix_url('tostudent', 'assignment_uploadpdf') . '"/></button>'; } // 'Download original' button $pdfurl = file_encode_url($CFG->wwwroot . '/pluginfile.php', '/' . $this->context->id . '/mod_assignment/submissionfinal/' . $submission->id . '/submission.pdf'); $downloadorig = get_string('downloadoriginal', 'assignment_uploadpdf'); if (!$enableedit) { $pdfurl = file_encode_url($CFG->wwwroot . '/pluginfile.php', '/' . $this->context->id . '/mod_assignment/response/' . $submission->id . '/response.pdf'); } echo '<a href="' . $pdfurl . '" target="_blank" id="downloadpdf" title="' . $downloadorig . '" alt="' . $downloadorig . '" ><img src="' . $OUTPUT->pix_url('download', 'assignment_uploadpdf') . '" alt="' . $downloadorig . '" title="' . $downloadorig . '" /></a>'; if ($enableedit) { echo '</form>'; } // Show previous assignment if ($enableedit) { $ps_sql = 'SELECT asn.id, asn.name FROM {assignment} asn '; $ps_sql .= 'INNER JOIN {assignment_submissions} sub ON sub.assignment = asn.id '; $ps_sql .= 'WHERE course = ? '; $ps_sql .= 'AND asn.assignmenttype = \'uploadpdf\' '; $ps_sql .= 'AND userid = ? '; $ps_sql .= 'AND asn.id != ? '; $ps_sql .= 'ORDER BY sub.timemodified DESC;'; $previoussubs = $DB->get_records_sql($ps_sql, array($this->course->id, $userid, $this->assignment->id)); if ($previoussubs) { echo '<input type="submit" id="showpreviousbutton" name="showpreviousbutton" value="' . get_string('showpreviousassignment', 'assignment_uploadpdf') . '" />'; echo '<select id="showpreviousselect" name="showprevious" onChange="this.form.submit();">'; echo '<option value="-1">' . get_string('previousnone', 'assignment_uploadpdf') . '</option>'; foreach ($previoussubs as $prevsub) { echo '<option value="' . $prevsub->id . '"'; if ($showprevious == $prevsub->id) { echo ' selected="selected" '; } echo '>' . s($prevsub->name) . '</option>'; } echo '</select>'; } } $comments = $DB->get_records('assignment_uploadpdf_comment', array('assignment_submission' => $submission->id), 'pageno, posy'); echo '<button id="findcommentsbutton">' . get_string('findcomments', 'assignment_uploadpdf') . '</button>'; echo '<select id="findcommentsselect" name="findcomments" >'; if (empty($comments)) { echo '<option value="0:0">' . get_string('findcommentsempty', 'assignment_uploadpdf') . '</option>'; } else { foreach ($comments as $comment) { $text = $comment->rawtext; if (strlen($text) > 40) { $text = substr($text, 0, 39) . '…'; } echo '<option value="' . $comment->pageno . ':' . $comment->id . '"'; echo '>' . $comment->pageno . ': ' . s($text) . '</option>'; } } echo '</select>'; if (!$enableedit) { // If opening in same window - show 'back to comment list' link if (array_key_exists('uploadpdf_commentnewwindow', $_COOKIE) && !$_COOKIE['uploadpdf_commentnewwindow']) { $url = "editcomment.php?a={$this->assignment->id}&userid={$userid}&action=showprevious"; echo '<a href="' . $url . '">' . get_string('backtocommentlist', 'assignment_uploadpdf') . '</a>'; } } echo '</div>'; echo '<div id="toolbar-line2">'; if (!$CFG->uploadpdf_js_navigation) { //UT $pageselector = '<div style="float: left; margin-top: 5px; margin-right: 10px;" class="pageselector">'; if ($pageno > 1) { $pageselector .= '<a href="editcomment.php?id=' . $this->cm->id . '&userid=' . $userid . '&pageno=' . ($pageno - 1) . '&showprevious=' . $showprevious . '" accesskey="p"><--' . get_string('previous', 'assignment_uploadpdf') . '</a> '; } else { $pageselector .= '<--' . get_string('previous', 'assignment_uploadpdf') . ' '; } for ($i = 1; $i <= $pagecount; $i++) { if ($i == $pageno) { $pageselector .= "{$i} "; } else { $pageselector .= '<a href="editcomment.php?id=' . $this->cm->id . '&userid=' . $userid . '&pageno=' . $i . '&showprevious=' . $showprevious . '">' . $i . '</a> '; } if ($i % 20 == 0) { $pageselector .= '<br />'; } } if ($pageno < $pagecount) { $pageselector .= '<a href="editcomment.php?id=' . $this->cm->id . '&userid=' . $userid . '&pageno=' . ($pageno + 1) . '&showprevious=' . $showprevious . '" accesskey="n">' . get_string('next', 'assignment_uploadpdf') . '--></a>'; } else { $pageselector .= get_string('next', 'assignment_uploadpdf') . '-->'; } $pageselector .= '</div>'; } else { $pageselector = ''; $disabled = $pageno == 1 ? ' disabled = "disabled" ' : ''; $pageselector .= '<button id="prevpage" ' . $disabled . 'onClick="gotoprevpage();" title="' . get_string('keyboardprev', 'assignment_uploadpdf') . '" ><--' . get_string('previous', 'assignment_uploadpdf') . '</button>'; $pageselector .= '<span style="position:relative; width:50px; display:inline-block; height:34px"><select name="selectpage" id="selectpage" onChange="selectpage();">'; for ($i = 1; $i <= $pagecount; $i++) { if ($i == $pageno) { $pageselector .= "<option value='{$i}' selected='selected'>{$i}</option>"; } else { $pageselector .= "<option value='{$i}'>{$i}</option>"; } } $pageselector .= '</select></span>'; $disabled = $pageno == $pagecount ? ' disabled = "disabled" ' : ''; $pageselector .= '<button id="nextpage" ' . $disabled . 'onClick="gotonextpage();" title="' . get_string('keyboardnext', 'assignment_uploadpdf') . '">' . get_string('next', 'assignment_uploadpdf') . '--></button>'; } echo $pageselector; if ($enableedit) { // Choose comment colour echo '<input type="submit" id="choosecolour" style="line-height:normal;" name="choosecolour" value="" title="' . get_string('commentcolour', 'assignment_uploadpdf') . '">'; echo '<div id="choosecolourmenu" class="yuimenu" title="' . get_string('commentcolour', 'assignment_uploadpdf') . '"><div class="bd"><ul class="first-of-type">'; $colours = array('red', 'yellow', 'green', 'blue', 'white', 'clear'); foreach ($colours as $colour) { echo '<li class="yuimenuitem choosecolour-' . $colour . '-"><img src="' . $OUTPUT->pix_url($colour, 'assignment_uploadpdf') . '"/></li>'; } echo '</ul></div></div>'; // Choose line colour echo '<input type="submit" id="chooselinecolour" style="line-height:normal;" name="chooselinecolour" value="" title="' . get_string('linecolour', 'assignment_uploadpdf') . '">'; echo '<div id="chooselinecolourmenu" class="yuimenu"><div class="bd"><ul class="first-of-type">'; $colours = array('red', 'yellow', 'green', 'blue', 'white', 'black'); foreach ($colours as $colour) { echo '<li class="yuimenuitem choosecolour-' . $colour . '-"><img src="' . $OUTPUT->pix_url('line' . $colour, 'assignment_uploadpdf') . '"/></li>'; } echo '</ul></div></div>'; // Stamps echo '<input type="submit" id="choosestamp" style="line-height:normal;" name="choosestamp" value="" title="' . get_string('stamp', 'assignment_uploadpdf') . '">'; echo '<div id="choosestampmenu" class="yuimenu"><div class="bd"><ul class="first-of-type">'; $stamps = MyPDFLib::get_stamps(); foreach ($stamps as $stamp => $filename) { echo '<li class="yuimenuitem choosestamp-' . $stamp . '-"><img width="32" height="32" src="' . $OUTPUT->pix_url('stamps/' . $stamp, 'assignment_uploadpdf') . '"/></li>'; } echo '</ul></div></div>'; // Choose annotation type $drawingtools = array('commenticon', 'lineicon', 'rectangleicon', 'ovalicon', 'freehandicon', 'highlighticon', 'stampicon', 'eraseicon'); $checked = ' yui-button-checked'; echo '<div id="choosetoolgroup" class="yui-buttongroup">'; foreach ($drawingtools as $drawingtool) { echo '<span id="' . $drawingtool . '" class="yui-button yui-radio-button' . $checked . '">'; echo ' <span class="first-child">'; echo ' <button type="button" name="choosetoolradio" value="' . $drawingtool . '" title="' . get_string($drawingtool, 'assignment_uploadpdf') . '">'; echo ' <img src="' . $OUTPUT->pix_url($drawingtool, 'assignment_uploadpdf') . '" />'; echo ' </button>'; echo ' </span>'; echo '</span>'; $checked = ''; } echo '</div>'; } echo '</div>'; // toolbar-line-2 // Output the page image echo '<div id="pdfsize" style="clear: both; width:' . $imgwidth . 'px; height:' . $imgheight . 'px; ">'; echo '<div id="pdfouter" style="position: relative; "> <div id="pdfholder" > '; echo '<img id="pdfimg" src="' . $imageurl . '" width="' . $imgwidth . '" height="' . $imgheight . '" />'; echo '</div></div></div>'; if ($CFG->uploadpdf_js_navigation) { $pageselector = str_replace(array('selectpage', '"nextpage"', '"prevpage"'), array('selectpage2', '"nextpage2"', '"prevpage2"'), $pageselector); } echo '<br/>'; echo $pageselector; if ($enableedit && $CFG->uploadpdf_js_navigation) { echo '<p><a id="opennewwindow" target="_blank" href="editcomment.php?id=' . $this->cm->id . '&userid=' . $userid . '&pageno=' . $pageno . '&showprevious=' . $showprevious . '">' . get_string('opennewwindow', 'assignment_uploadpdf') . '</a></p>'; } echo '<br style="clear:both;" />'; if ($enableedit) { // Definitions for the right-click menus echo '<ul class="contextmenu" style="display: none;" id="context-quicklist"><li class="separator">' . get_string('quicklist', 'assignment_uploadpdf') . '</li></ul>'; echo '<ul class="contextmenu" style="display: none;" id="context-comment"><li><a href="#addtoquicklist">' . get_string('addquicklist', 'assignment_uploadpdf') . '</a></li>'; echo '<li class="separator"><a href="#red">' . get_string('colourred', 'assignment_uploadpdf') . '</a></li>'; echo '<li><a href="#yellow">' . get_string('colouryellow', 'assignment_uploadpdf') . '</a></li>'; echo '<li><a href="#green">' . get_string('colourgreen', 'assignment_uploadpdf') . '</a></li>'; echo '<li><a href="#blue">' . get_string('colourblue', 'assignment_uploadpdf') . '</a></li>'; echo '<li><a href="#white">' . get_string('colourwhite', 'assignment_uploadpdf') . '</a></li>'; echo '<li><a href="#clear">' . get_string('colourclear', 'assignment_uploadpdf') . '</a></li>'; echo '<li class="separator"><a href="#deletecomment">' . get_string('deletecomment', 'assignment_uploadpdf') . '</a></li>'; echo '</ul>'; } // Definition for 'resend' box echo '<div id="sendfailed" style="display: none;"><p>' . get_string('servercommfailed', 'assignment_uploadpdf') . '</p><button id="sendagain">' . get_string('resend', 'assignment_uploadpdf') . '</button><button onClick="hidesendfailed();">' . get_string('cancel', 'assignment_uploadpdf') . '</button></div>'; $server = array('id' => $this->cm->id, 'userid' => $userid, 'pageno' => $pageno, 'sesskey' => sesskey(), 'updatepage' => $CFG->wwwroot . '/mod/assignment/type/uploadpdf/updatecomment.php', 'lang_servercommfailed' => get_string('servercommfailed', 'assignment_uploadpdf'), 'lang_errormessage' => get_string('errormessage', 'assignment_uploadpdf'), 'lang_okagain' => get_string('okagain', 'assignment_uploadpdf'), 'lang_emptyquicklist' => get_string('emptyquicklist', 'assignment_uploadpdf'), 'lang_emptyquicklist_instructions' => get_string('emptyquicklist_instructions', 'assignment_uploadpdf'), 'deleteicon' => $OUTPUT->pix_url('/t/delete'), 'pagecount' => $pagecount, 'js_navigation' => $CFG->uploadpdf_js_navigation, 'blank_image' => $CFG->wwwroot . '/mod/assignment/type/uploadpdf/style/blank.gif', 'image_path' => $CFG->wwwroot . '/mod/assignment/type/uploadpdf/pix/', 'css_path' => $CFG->wwwroot . '/lib/yui/' . $CFG->yui2version . '/build/assets/skins/sam/', 'editing' => $enableedit ? 1 : 0, 'lang_nocomments' => get_string('findcommentsempty', 'assignment_uploadpdf')); echo '<script type="text/javascript">server_config = {'; foreach ($server as $key => $value) { echo $key . ": '{$value}', \n"; } echo "ignore: ''\n"; // Just there so IE does not complain echo '};</script>'; $jsmodule = array('name' => 'assignment_uploadpdf', 'fullpath' => new moodle_url('/mod/assignment/type/uploadpdf/scripts/annotate.js'), 'requires' => array('yui2-yahoo-dom-event', 'yui2-container', 'yui2-element', 'yui2-button', 'yui2-menu', 'yui2-utilities')); if ($CFG->version >= 2012120300) { $jsmodule['fullpath'] = new moodle_url('/mod/assignment/type/uploadpdf/scripts/annotate24.js'); } $PAGE->requires->js_init_call('uploadpdf_init', null, true, $jsmodule); echo $OUTPUT->footer(); }