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 . '&amp;userid=' . $userid . '&amp;pageno=' . $pageno . '&amp;showprevious=' . $showprevious;
             echo '">';
             echo '<frame src="editcomment.php?';
             echo 'a=' . $showprevious . '&amp;userid=' . $userid . '&amp;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) . '&hellip;';
             }
             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}&amp;userid={$userid}&amp;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 . '&amp;userid=' . $userid . '&amp;pageno=' . ($pageno - 1) . '&amp;showprevious=' . $showprevious . '" accesskey="p">&lt;--' . get_string('previous', 'assignment_uploadpdf') . '</a> ';
         } else {
             $pageselector .= '&lt;--' . 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 . '&amp;userid=' . $userid . '&amp;pageno=' . $i . '&amp;showprevious=' . $showprevious . '">' . $i . '</a> ';
             }
             if ($i % 20 == 0) {
                 $pageselector .= '<br />';
             }
         }
         if ($pageno < $pagecount) {
             $pageselector .= '<a href="editcomment.php?id=' . $this->cm->id . '&amp;userid=' . $userid . '&amp;pageno=' . ($pageno + 1) . '&amp;showprevious=' . $showprevious . '" accesskey="n">' . get_string('next', 'assignment_uploadpdf') . '--&gt;</a>';
         } else {
             $pageselector .= get_string('next', 'assignment_uploadpdf') . '--&gt;';
         }
         $pageselector .= '</div>';
     } else {
         $pageselector = '';
         $disabled = $pageno == 1 ? ' disabled = "disabled" ' : '';
         $pageselector .= '<button id="prevpage" ' . $disabled . 'onClick="gotoprevpage();" title="' . get_string('keyboardprev', 'assignment_uploadpdf') . '" >&lt;--' . 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') . '--&gt;</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 . '&amp;userid=' . $userid . '&amp;pageno=' . $pageno . '&amp;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();
 }
 function get_page_image($userid, $pageno, $submission)
 {
     global $CFG;
     $imagefolder = $CFG->dataroot . '/' . $this->file_area_name($userid) . '/images';
     check_dir_exists($imagefolder, true, true);
     $pdffile = $CFG->dataroot . '/' . $this->file_area_name($userid) . '/submission/submission.pdf';
     // Check folder exists + file exists
     if (!file_exists($pdffile)) {
         error('Attempting to display image for non-existing submission');
     }
     $pdf = new MyPDFLib();
     $pdf->set_image_folder($imagefolder);
     $pagecount = $submission->numfiles >> 1;
     // Extract the pagecount from 'numfiles' (may be 0)
     $pagecount = $pdf->set_pdf($pdffile, $pagecount);
     // Only loads the PDF if the pagecount is unknown (0)
     if ($pageno > $pagecount) {
         return array(null, 0, 0, $pagecount);
     }
     if (!($imgname = $pdf->get_image($pageno))) {
         error(get_string('errorgenerateimage', 'assignment_uploadpdf'));
     }
     if (($submission->numfiles & 1) == 0) {
         $submission->numfiles = $pagecount << 1 | 1;
         /* Use this as a flag that there are images to delete at some point */
         $updated = new Object();
         $updated->id = $submission->id;
         $updated->numfiles = $submission->numfiles;
         update_record('assignment_submissions', $updated);
     }
     $imageurl = $CFG->wwwroot . '/file.php?file=/' . $this->file_area_name($userid) . '/images/' . $imgname;
     list($imgwidth, $imgheight, $imgtype, $imgattr) = getimagesize($CFG->dataroot . '/' . $this->file_area_name($userid) . '/images/' . $imgname);
     return array($imageurl, $imgwidth, $imgheight, $pagecount);
 }
            }
            delete_records('assignment_uploadpdf_tmplitm', 'id', $itemid);
            $itemid = 0;
        }
    }
} elseif ($uploadpreview) {
    $partdest = $courseid . IMAGE_PATH;
    $fulldest = $CFG->dataroot . '/' . $partdest;
    check_dir_exists($fulldest);
    require_once $CFG->dirroot . '/lib/uploadlib.php';
    $um = new upload_manager('preview', false, false, $course, false, 0, true);
    if ($um->process_file_uploads($partdest)) {
        $fp = $um->get_new_filepath();
        $fn = $um->get_new_filename();
        require_once 'mypdflib.php';
        $pdf = new MyPDFLib();
        $pdf->load_pdf($fp);
        $pdf->set_image_folder($fulldest);
        $imagename = $pdf->get_image(1);
        unlink($fp);
    } else {
        //echo 'No file uploaded';
        //die;
    }
} elseif ($duplicatetemplate) {
    // Should not have access to the 'duplicate' button unless a template is selected
    // but, just in case, we check here (but just do nothing if that is not the case)
    if ($templateid != -1) {
        $template = get_record('assignment_uploadpdf_tmpl', 'id', $templateid);
        if (!$template) {
            error("Old template not found");
 function upload_preview()
 {
     global $CFG;
     $imagefolder = $CFG->dataroot . '/temp/uploadpdf/img';
     if (!file_exists($imagefolder)) {
         if (!mkdir($imagefolder, 0777, true)) {
             echo "Unable to create temporary image folder";
             die;
         }
     }
     $mform = new edit_templates_form();
     $fname = $mform->save_temp_file('preview');
     if (!$fname) {
         return;
     }
     $pdf = new MyPDFLib();
     $pdf->load_pdf($fname);
     $pdf->set_image_folder($imagefolder);
     $imgname = $pdf->get_image(1);
     $context = get_context_instance(CONTEXT_COURSE, $this->courseid);
     $fs = get_file_storage();
     if ($oldfile = $fs->get_file($context->id, 'mod_assignment', 'previewimage', 0, '/', 'preview.png')) {
         $oldfile->delete();
     }
     $imginfo = array('contextid' => $context->id, 'component' => 'mod_assignment', 'filearea' => 'previewimage', 'itemid' => 0, 'filepath' => '/', 'filename' => 'preview.png');
     $file = $fs->create_file_from_pathname($imginfo, $imagefolder . '/' . $imgname);
     // Copy the image into the file storage
     //Delete the temporary files
     unlink($fname);
     unlink($imagefolder . '/' . $imgname);
     $this->imagetime = time();
 }