mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
Add comment undeletion functionality
Only Developers and Trusted Users can undelete comments. Signed-off-by: Marcel Korpel <marcel.korpel@gmail.com> Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
parent
e9fe1a9eb1
commit
bd85441cf6
8 changed files with 75 additions and 7 deletions
|
@ -101,7 +101,7 @@
|
||||||
color: #999;
|
color: #999;
|
||||||
}
|
}
|
||||||
|
|
||||||
.delete-comment-form, .pin-comment-form, .edit-comment {
|
.delete-comment-form, .undelete-comment-form, .pin-comment-form, .edit-comment {
|
||||||
float: right;
|
float: right;
|
||||||
margin-left: 8px;
|
margin-left: 8px;
|
||||||
}
|
}
|
||||||
|
@ -112,13 +112,13 @@
|
||||||
top: 1px;
|
top: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.delete-comment, .edit-comment, .pin-comment {
|
.delete-comment, .undelete-comment, .edit-comment, .pin-comment {
|
||||||
-webkit-filter: grayscale(100%);
|
-webkit-filter: grayscale(100%);
|
||||||
filter: grayscale(100%);
|
filter: grayscale(100%);
|
||||||
opacity: 0.6;
|
opacity: 0.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.delete-comment:hover, .edit-comment:hover, .pin-comment:hover {
|
.delete-comment:hover, .undelete-comment:hover, .edit-comment:hover, .pin-comment:hover {
|
||||||
-webkit-filter: none;
|
-webkit-filter: none;
|
||||||
filter: none;
|
filter: none;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
|
3
web/html/images/action-undo.min.svg
Normal file
3
web/html/images/action-undo.min.svg
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="8" width="8" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 8 8">
|
||||||
|
<path d="m4.5 0c-1.93 0-3.5 1.57-3.5 3.5v0.5h-1l2 2 2-2h-1v-0.5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5c0-1.93-1.57-3.5-3.5-3.5z" transform="translate(0 1)" fill="#36a"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 415 B |
32
web/html/images/action-undo.svg
Normal file
32
web/html/images/action-undo.svg
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
version="1.1"
|
||||||
|
id="svg2"
|
||||||
|
viewBox="0 0 8 8"
|
||||||
|
height="8"
|
||||||
|
width="8">
|
||||||
|
<metadata
|
||||||
|
id="metadata10">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<defs
|
||||||
|
id="defs8" />
|
||||||
|
<path
|
||||||
|
style="fill:#3366aa;fill-opacity:1"
|
||||||
|
id="path4"
|
||||||
|
transform="translate(0 1)"
|
||||||
|
d="M4.5 0c-1.93 0-3.5 1.57-3.5 3.5v.5h-1l2 2 2-2h-1v-.5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5c0-1.93-1.57-3.5-3.5-3.5z" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 924 B |
|
@ -180,6 +180,7 @@ if (!empty($tokens[1]) && '/' . $tokens[1] == get_pkg_route()) {
|
||||||
readfile("./$path");
|
readfile("./$path");
|
||||||
break;
|
break;
|
||||||
case "/images/x.min.svg":
|
case "/images/x.min.svg":
|
||||||
|
case "/images/action-undo.min.svg":
|
||||||
case "/images/pencil.min.svg":
|
case "/images/pencil.min.svg":
|
||||||
case "/images/pin.min.svg":
|
case "/images/pin.min.svg":
|
||||||
case "/images/unpin.min.svg":
|
case "/images/unpin.min.svg":
|
||||||
|
|
|
@ -99,6 +99,11 @@ if (check_token()) {
|
||||||
list($ret, $output) = pkgbase_notify($ids, false);
|
list($ret, $output) = pkgbase_notify($ids, false);
|
||||||
} elseif (current_action("do_DeleteComment")) {
|
} elseif (current_action("do_DeleteComment")) {
|
||||||
list($ret, $output) = pkgbase_delete_comment();
|
list($ret, $output) = pkgbase_delete_comment();
|
||||||
|
} elseif (current_action("do_UndeleteComment")) {
|
||||||
|
list($ret, $output) = pkgbase_delete_comment(true);
|
||||||
|
if ($ret && isset($_POST["comment_id"])) {
|
||||||
|
$fragment = '#comment-' . intval($_POST["comment_id"]);
|
||||||
|
}
|
||||||
} elseif (current_action("do_PinComment")) {
|
} elseif (current_action("do_PinComment")) {
|
||||||
list($ret, $output) = pkgbase_pin_comment();
|
list($ret, $output) = pkgbase_pin_comment();
|
||||||
} elseif (current_action("do_UnpinComment")) {
|
} elseif (current_action("do_UnpinComment")) {
|
||||||
|
|
|
@ -6,6 +6,7 @@ define("CRED_ACCOUNT_EDIT_DEV", 3);
|
||||||
define("CRED_ACCOUNT_LAST_LOGIN", 4);
|
define("CRED_ACCOUNT_LAST_LOGIN", 4);
|
||||||
define("CRED_ACCOUNT_SEARCH", 5);
|
define("CRED_ACCOUNT_SEARCH", 5);
|
||||||
define("CRED_COMMENT_DELETE", 6);
|
define("CRED_COMMENT_DELETE", 6);
|
||||||
|
define("CRED_COMMENT_UNDELETE", 27);
|
||||||
define("CRED_COMMENT_VIEW_DELETED", 22);
|
define("CRED_COMMENT_VIEW_DELETED", 22);
|
||||||
define("CRED_COMMENT_EDIT", 25);
|
define("CRED_COMMENT_EDIT", 25);
|
||||||
define("CRED_COMMENT_PIN", 26);
|
define("CRED_COMMENT_PIN", 26);
|
||||||
|
@ -59,6 +60,7 @@ function has_credential($credential, $approved_users=array()) {
|
||||||
case CRED_ACCOUNT_LAST_LOGIN:
|
case CRED_ACCOUNT_LAST_LOGIN:
|
||||||
case CRED_ACCOUNT_SEARCH:
|
case CRED_ACCOUNT_SEARCH:
|
||||||
case CRED_COMMENT_DELETE:
|
case CRED_COMMENT_DELETE:
|
||||||
|
case CRED_COMMENT_UNDELETE:
|
||||||
case CRED_COMMENT_VIEW_DELETED:
|
case CRED_COMMENT_VIEW_DELETED:
|
||||||
case CRED_COMMENT_EDIT:
|
case CRED_COMMENT_EDIT:
|
||||||
case CRED_COMMENT_PIN:
|
case CRED_COMMENT_PIN:
|
||||||
|
|
|
@ -932,9 +932,10 @@ function pkgbase_notify ($base_ids, $action=true) {
|
||||||
/**
|
/**
|
||||||
* Delete a package comment
|
* Delete a package comment
|
||||||
*
|
*
|
||||||
|
* @param boolean $undelete True if undeleting rather than deleting
|
||||||
* @return array Tuple of success/failure indicator and error message
|
* @return array Tuple of success/failure indicator and error message
|
||||||
*/
|
*/
|
||||||
function pkgbase_delete_comment() {
|
function pkgbase_delete_comment($undelete=false) {
|
||||||
$uid = uid_from_sid($_COOKIE["AURSID"]);
|
$uid = uid_from_sid($_COOKIE["AURSID"]);
|
||||||
if (!$uid) {
|
if (!$uid) {
|
||||||
return array(false, __("You must be logged in before you can edit package information."));
|
return array(false, __("You must be logged in before you can edit package information."));
|
||||||
|
@ -947,15 +948,28 @@ function pkgbase_delete_comment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
$dbh = DB::connect();
|
$dbh = DB::connect();
|
||||||
if (can_delete_comment($comment_id)) {
|
if ($undelete) {
|
||||||
|
if (!has_credential(CRED_COMMENT_UNDELETE)) {
|
||||||
|
return array(false, __("You are not allowed to undelete this comment."));
|
||||||
|
}
|
||||||
|
|
||||||
|
$q = "UPDATE PackageComments ";
|
||||||
|
$q.= "SET DelUsersID = NULL, ";
|
||||||
|
$q.= "DelTS = NULL ";
|
||||||
|
$q.= "WHERE ID = ".intval($comment_id);
|
||||||
|
$dbh->exec($q);
|
||||||
|
return array(true, __("Comment has been undeleted."));
|
||||||
|
} else {
|
||||||
|
if (!can_delete_comment($comment_id)) {
|
||||||
|
return array(false, __("You are not allowed to delete this comment."));
|
||||||
|
}
|
||||||
|
|
||||||
$q = "UPDATE PackageComments ";
|
$q = "UPDATE PackageComments ";
|
||||||
$q.= "SET DelUsersID = ".$uid.", ";
|
$q.= "SET DelUsersID = ".$uid.", ";
|
||||||
$q.= "DelTS = UNIX_TIMESTAMP() ";
|
$q.= "DelTS = UNIX_TIMESTAMP() ";
|
||||||
$q.= "WHERE ID = ".intval($comment_id);
|
$q.= "WHERE ID = ".intval($comment_id);
|
||||||
$dbh->exec($q);
|
$dbh->exec($q);
|
||||||
return array(true, __("Comment has been deleted."));
|
return array(true, __("Comment has been deleted."));
|
||||||
} else {
|
|
||||||
return array(false, __("You are not allowed to delete this comment."));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,6 +53,17 @@ if (!isset($count)) {
|
||||||
?>
|
?>
|
||||||
<h4 id="comment-<?= $row['ID'] ?>"<?php if ($is_deleted): ?> class="comment-deleted"<?php endif; ?>>
|
<h4 id="comment-<?= $row['ID'] ?>"<?php if ($is_deleted): ?> class="comment-deleted"<?php endif; ?>>
|
||||||
<?= $heading ?>
|
<?= $heading ?>
|
||||||
|
<?php if ($is_deleted && has_credential(CRED_COMMENT_UNDELETE)): ?>
|
||||||
|
<form class="undelete-comment-form" method="post" action="<?= htmlspecialchars(get_pkgbase_uri($pkgbase_name), ENT_QUOTES); ?>">
|
||||||
|
<fieldset style="display:inline;">
|
||||||
|
<input type="hidden" name="action" value="do_UndeleteComment" />
|
||||||
|
<input type="hidden" name="comment_id" value="<?= $row['ID'] ?>" />
|
||||||
|
<input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
|
||||||
|
<input type="image" class="undelete-comment" src="/images/action-undo.min.svg" width="11" height="11" alt="<?= __('Undelete comment') ?>" title="<?= __('Undelete comment') ?>" name="submit" value="1" />
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
<?php endif;?>
|
||||||
|
|
||||||
<?php if (!$is_deleted && can_delete_comment_array($row)): ?>
|
<?php if (!$is_deleted && can_delete_comment_array($row)): ?>
|
||||||
<form class="delete-comment-form" method="post" action="<?= htmlspecialchars(get_pkgbase_uri($pkgbase_name), ENT_QUOTES); ?>">
|
<form class="delete-comment-form" method="post" action="<?= htmlspecialchars(get_pkgbase_uri($pkgbase_name), ENT_QUOTES); ?>">
|
||||||
<fieldset style="display:inline;">
|
<fieldset style="display:inline;">
|
||||||
|
|
Loading…
Add table
Reference in a new issue