diff --git a/action.php b/action.php
index 39c9b41ea2e4cc042b374273fa9fe9ee993a72fa..8c2049fb271880e9d1c4acc94aac623a3e808ce7 100644
--- a/action.php
+++ b/action.php
@@ -327,7 +327,6 @@ if ($action === 'addComment') {
// Get the comment data.
$content = required_param('content', PARAM_RAW);
- $content = format_text($content, $format = FORMAT_MOODLE, $options = ['para' => false]);
$visibility = required_param('visibility', PARAM_ALPHA);
$isquestion = required_param('isquestion', PARAM_INT);
@@ -388,6 +387,18 @@ if ($action === 'getComments') {
echo json_encode($data);
}
+/* * ********************************* Retrieve content of a specific comment from db ********************************* */
+
+if ($action === 'getCommentContent') {
+ global $DB;
+ $commentid = required_param('commentId', PARAM_INT);
+
+ $content = $DB->get_field('pdfannotator_comments', 'content', ['id' => $commentid]);
+
+
+ echo json_encode($content);
+}
+
/* * ****************************************** Hide a comment for participants ****************************************** */
if ($action === 'hideComment') {
@@ -428,9 +439,8 @@ if ($action === 'editComment') {
$editanypost = has_capability('mod/pdfannotator:editanypost', $context);
$commentid = required_param('commentId', PARAM_INT);
- $content = required_param('content', PARAM_RAW);
- $content = format_text($content, $format = FORMAT_MOODLE, $options = ['para' => false]);
-
+ $content = required_param('content', PARAM_RAW);
+
$data = pdfannotator_comment::update($commentid, $content, $editanypost);
echo json_encode($data);
}
diff --git a/lang/en/pdfannotator.php b/lang/en/pdfannotator.php
index b0b8288a15153acd99ad213f434b0c72026b035b..d53ead66a7f45bc18f4627ef074aec42084983aa 100644
--- a/lang/en/pdfannotator.php
+++ b/lang/en/pdfannotator.php
@@ -113,6 +113,7 @@ $string['error:missingAnnotationtype'] = 'Annotationtype does not exists. Possib
$string['error:openingPDF'] = 'An error occurred while opening the PDF file.';
$string['error:openprintview'] = 'An error has occured while trying to open the pdf in Acrobat Reader.';
$string['error:printcomments'] = 'An error has occured while trying to open the comments in a pdf.';
+$string['error:printlatex'] = 'An error has occured while trying to add a LaTeX formula to the pdf.';
$string['error:redisplayComment'] = 'An error has occured while redisplaying the comment.';
$string['error:renderPage'] = 'An error has occured while rendering the page.';
$string['error:reportComment'] = 'An error has occured while saving the report.';
diff --git a/locallib.php b/locallib.php
index e02d956d85b6ae55ee416471f758440c6a15041d..3a2e921ce904c9d7e7bec19bdd16cef746d954b9 100644
--- a/locallib.php
+++ b/locallib.php
@@ -158,6 +158,35 @@ SIGN;
foreach ($matches as $match) {
$formulalength = strlen($match[0]);
$formulaoffset = $match[1];
+ $string = $match[0];
+ $string = str_replace('\xrightarrow', '\rightarrow', $string);
+ $string = str_replace('\xlefttarrow', '\leftarrow', $string);
+
+ $pos = strpos($string, '\\[');
+ if ($pos !== false) {
+ $string = substr_replace($string, '', $pos, strlen('\\['));
+ }
+
+ $pos = strpos($string, '\\(');
+ if ($pos !== false) {
+ $string = substr_replace($string, '', $pos, strlen('\\('));
+ }
+
+ $string = str_replace('\\]', '', $string);
+
+ $string = str_replace('\\)', '', $string);
+
+ $string = str_replace('\begin{aligned}', '', $string);
+ $string = str_replace('\end{aligned}', '', $string);
+
+ $string = str_replace('\begin{align*}', '', $string);
+ $string = str_replace('\end{align*}', '', $string);
+
+ // Find any backslash preceding a ( or [ and replace it with \backslash
+ $pattern = '~\\\\(?=[\\\(\\\[])~';
+ $string = preg_replace($pattern, '\\backslash', $string);
+ $match[0] = $string;
+
$result[] = trim(substr($subject, $textstart, $formulaoffset - $textstart));
if($latexapi == LATEX_TO_PNG_GOOGLE_API) {
$result[] = pdfannotator_process_latex_google($match[0]);
@@ -181,6 +210,9 @@ function pdfannotator_process_latex_moodle($context, $string) {
$tex = new latex();
$md5 = md5($string);
$image = $tex->render($string, $md5 . 'png');
+ if($image == false) {
+ return false;
+ }
$imagedata = file_get_contents($image);
$result['image'] = IMAGE_PREFIX . base64_encode($imagedata);
//imageinfo returns an array with the info of the size of the image. In Parameter 1 there is the height, which is the only thing needed here
@@ -196,35 +228,8 @@ function pdfannotator_process_latex_moodle($context, $string) {
* @return type
*/
function pdfannotator_process_latex_google(string $string) {
- $string = str_replace('\xrightarrow', '\rightarrow', $string);
- $string = str_replace('\xlefttarrow', '\leftarrow', $string);
-
- $pos = strpos($string, '\\[');
- if ($pos !== false) {
- $string = substr_replace($string, '', $pos, strlen('\\['));
- }
-
- $pos = strpos($string, '\\(');
- if ($pos !== false) {
- $string = substr_replace($string, '', $pos, strlen('\\('));
- }
-
- $string = str_replace('\\]', '', $string);
-
- $string = str_replace('\\)', '', $string);
-
- $string = str_replace('\begin{aligned}', '', $string);
- $string = str_replace('\end{aligned}', '', $string);
-
- $string = str_replace('\begin{align*}', '', $string);
- $string = str_replace('\end{align*}', '', $string);
-
- // Find any backslash preceding a ( or [ and replace it with \backslash
- $pattern = '~\\\\(?=[\\\(\\\[])~';
- $string = preg_replace($pattern, '\\backslash', $string);
-
+
$length = strlen($string);
-
$im = null;
if ($length <= 200) { // Google API constraint XXX find better alternative if possible.
$latexdata = urlencode($string);
diff --git a/model/comment.class.php b/model/comment.class.php
index 6c37987b384c8beba81f9300276c72e03257cb12..e856ac6820542283aa6034066d5800e0d187cdf7 100644
--- a/model/comment.class.php
+++ b/model/comment.class.php
@@ -66,6 +66,7 @@ class pdfannotator_comment {
} else {
$datarecord->username = get_string('me', 'pdfannotator');
}
+ $datarecord->content = format_text($datarecord->content, $format = FORMAT_MOODLE, $options = ['para' => false]);
$datarecord->timecreated = pdfannotator_optional_timeago($datarecord->timecreated);
$datarecord->timemodified = pdfannotator_optional_timeago($datarecord->timemodified);
$datarecord->usevotes = pdfannotator_instance::use_votes($documentid);
@@ -186,6 +187,7 @@ class pdfannotator_comment {
$comment->content = get_string('deletedComment', 'pdfannotator');
} else {
$comment->content = $data->content;
+ $comment->content = format_text($data->content, $format = FORMAT_MOODLE, $options = ['para' => false]);
}
$comment->userid = $data->userid; // Author of comment.
self::set_username($comment);
@@ -401,6 +403,7 @@ class pdfannotator_comment {
}
if ($success) {
+ $content = format_text($content, $format = FORMAT_MOODLE, $options = ['para' => false]);
$result = array('status' => 'success', 'timemodified' => $time, 'newContent' => $content);
if ($comment->userid != $USER->id) {
$result['modifiedby'] = pdfannotator_get_username($USER->id);
diff --git a/shared/index.js b/shared/index.js
index 4f75b7d7516551badbfa7d207efe29c322856d7e..cc15f5ecd0e0c4b612e8c5a41367dc751662dcd3 100644
--- a/shared/index.js
+++ b/shared/index.js
@@ -491,6 +491,23 @@ function startIndex(Y,_cm,_documentObject,_userid,_capabilities, _toolbarSetting
return JSON.parse(data);
});
},
+
+ /**
+ * Gets the content of a specific comment.
+ * @param {type} documentId
+ * @param {type} commentId
+ * @returns {unresolved}
+ */
+ getCommentContent(documentId, commentId){
+ return $.ajax({
+ type: "POST",
+ url: "action.php",
+ data: { "documentId": documentId, "commentId": commentId, "action": 'getCommentContent', sesskey: M.cfg.sesskey}
+ }).then(function(data){
+ return JSON.parse(data);
+ });
+ },
+
/**
* This function collects all Questions (Annotations with min. one comment)
@@ -847,8 +864,14 @@ function startIndex(Y,_cm,_documentObject,_userid,_capabilities, _toolbarSetting
function printItem(item, index) {
if (typeof item === "object") { //item.includes('data:image/png;base64,')) {
printImage(item);
- } else {
+ } else if (typeof item === "string"){
printTextblock(null, null, item);
+ } else {
+ console.error(M.util.get_string('error:printlatex', 'pdfannotator'));
+ notification.addNotification({
+ message: M.util.get_string('error:printlatex','pdfannotator'),
+ type: "error"
+ });
}
}
/**
@@ -1732,9 +1755,12 @@ function startIndex(Y,_cm,_documentObject,_userid,_capabilities, _toolbarSetting
var editArea = document.getElementById("editarea"+comment.uuid);
var text = document.getElementById("chatmessage"+comment.uuid);
if (editForm.style.display === "none") {
- editArea.innerHTML = comment.content;
- editForm.style.display = "block";
- text.innerHTML = "";
+ _2.default.getStoreAdapter().getCommentContent(documentId, comment.uuid)
+ .then(function(content){
+ editArea.innerHTML = content;
+ editForm.style.display = "block";
+ text.innerHTML = "";
+ });
// Add an event handler to the form for submitting any changes to the database.
editForm.onsubmit = function (e) {
let newContent = editArea.value.trim();
@@ -3478,6 +3504,11 @@ function startIndex(Y,_cm,_documentObject,_userid,_capabilities, _toolbarSetting
(0,_abstractFunction2.default)('getComments');
}
},
+
+ {key:'getCommentContent',value:function getCommentContent(documentId,commentId){
+ (0,_abstractFunction2.default)('getCommentContent');
+ }
+ },
/**
* Get all the questions of one page
*