diff --git a/web/html/commentedit.php b/web/html/commentedit.php
new file mode 100644
index 00000000..83d86dd5
--- /dev/null
+++ b/web/html/commentedit.php
@@ -0,0 +1,21 @@
+
+
+
diff --git a/web/html/images/pencil.svg b/web/html/images/pencil.svg
new file mode 100644
index 00000000..91f08991
--- /dev/null
+++ b/web/html/images/pencil.svg
@@ -0,0 +1,55 @@
+
+
diff --git a/web/html/index.php b/web/html/index.php
index 2d5f2a97..175a533f 100644
--- a/web/html/index.php
+++ b/web/html/index.php
@@ -89,6 +89,9 @@ if (!empty($tokens[1]) && '/' . $tokens[1] == get_pkg_route()) {
case "comaintainers":
include('comaintainers.php');
return;
+ case "edit-comment":
+ include('commentedit.php');
+ return;
default:
header("HTTP/1.0 404 Not Found");
include "./404.php";
@@ -174,6 +177,7 @@ if (!empty($tokens[1]) && '/' . $tokens[1] == get_pkg_route()) {
readfile("./$path");
break;
case "/images/x.min.svg":
+ case "/images/pencil.min.svg":
header("Content-Type: image/svg+xml");
readfile("./$path");
break;
diff --git a/web/html/pkgbase.php b/web/html/pkgbase.php
index 5179d0c1..f9080290 100644
--- a/web/html/pkgbase.php
+++ b/web/html/pkgbase.php
@@ -104,9 +104,7 @@ if (check_token()) {
list($ret, $output) = pkgreq_close($_POST['reqid'], $_POST['reason'], $_POST['comments']);
} elseif (current_action("do_EditComaintainers")) {
list($ret, $output) = pkgbase_set_comaintainers($base_id, explode("\n", $_POST['users']));
- }
-
- if (isset($_REQUEST['comment'])) {
+ } elseif (current_action("do_AddComment")) {
$uid = uid_from_sid($_COOKIE["AURSID"]);
pkgbase_add_comment($base_id, $uid, $_REQUEST['comment']);
$ret = true;
diff --git a/web/lib/aur.inc.php b/web/lib/aur.inc.php
index b410db5a..99975356 100644
--- a/web/lib/aur.inc.php
+++ b/web/lib/aur.inc.php
@@ -576,6 +576,25 @@ function salted_hash($passwd, $salt) {
return md5($salt . $passwd);
}
+/**
+ * Get a package comment
+ *
+ * @param int $comment_id The ID of the comment
+ *
+ * @return array The user ID and comment OR null, null in case of an error
+ */
+function comment_by_id($comment_id) {
+ $dbh = DB::connect();
+ $q = "SELECT UsersID, Comments FROM PackageComments ";
+ $q.= "WHERE ID = " . intval($comment_id);
+ $result = $dbh->query($q);
+ if (!$result) {
+ return array(null, null);
+ }
+
+ return $result->fetch(PDO::FETCH_NUM);
+}
+
/**
* Process submitted comments so any links can be followed
*
diff --git a/web/lib/credentials.inc.php b/web/lib/credentials.inc.php
index cf1fccab..648d78c8 100644
--- a/web/lib/credentials.inc.php
+++ b/web/lib/credentials.inc.php
@@ -7,6 +7,7 @@ define("CRED_ACCOUNT_LAST_LOGIN", 4);
define("CRED_ACCOUNT_SEARCH", 5);
define("CRED_COMMENT_DELETE", 6);
define("CRED_COMMENT_VIEW_DELETED", 22);
+define("CRED_COMMENT_EDIT", 25);
define("CRED_PKGBASE_ADOPT", 7);
define("CRED_PKGBASE_SET_KEYWORDS", 8);
define("CRED_PKGBASE_DELETE", 9);
@@ -58,6 +59,7 @@ function has_credential($credential, $approved_users=array()) {
case CRED_ACCOUNT_SEARCH:
case CRED_COMMENT_DELETE:
case CRED_COMMENT_VIEW_DELETED:
+ case CRED_COMMENT_EDIT:
case CRED_PKGBASE_ADOPT:
case CRED_PKGBASE_SET_KEYWORDS:
case CRED_PKGBASE_DELETE:
diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index 110290ba..7cb2ffcf 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -42,6 +42,20 @@ function can_delete_comment_array($comment) {
return has_credential(CRED_COMMENT_DELETE, array($comment['UsersID']));
}
+/**
+ * Determine if the user can edit a specific package comment using an array
+ *
+ * Only the comment submitter, Trusted Users, and Developers can edit
+ * comments. This function is used for the frontend side of comment editing.
+ *
+ * @param array $comment All database information relating a specific comment
+ *
+ * @return bool True if the user can edit the comment, otherwise false
+ */
+function can_edit_comment_array($comment) {
+ return has_credential(CRED_COMMENT_EDIT, array($comment['UsersID']));
+}
+
/**
* Check to see if the package name already exists in the database
*
diff --git a/web/template/pkg_comment_form.php b/web/template/pkg_comment_form.php
index 8a74dc13..16a92b1b 100644
--- a/web/template/pkg_comment_form.php
+++ b/web/template/pkg_comment_form.php
@@ -1,5 +1,5 @@