[aur-dev] [PATCH 2/2] Implement capability to pin comments above others
Mark Weiman
mark.weiman at markzz.com
Sat Nov 28 00:44:27 UTC 2015
Implements FS#10863
Signed-off-by: Mark Weiman <mark.weiman at markzz.com>
---
web/html/css/aurweb.css | 18 +++++-
web/lib/pkgbasefuncs.inc.php | 7 +++
web/lib/pkgfuncs.inc.php | 9 ++-
web/template/pkg_comments.php | 22 +++++++
web/template/pkg_pinned_comments.php | 112 +++++++++++++++++++++++++++++++++++
5 files changed, 165 insertions(+), 3 deletions(-)
create mode 100644 web/template/pkg_pinned_comments.php
diff --git a/web/html/css/aurweb.css b/web/html/css/aurweb.css
index 11af747..9912c56 100644
--- a/web/html/css/aurweb.css
+++ b/web/html/css/aurweb.css
@@ -101,7 +101,7 @@
color: #999;
}
-.delete-comment-form, .edit-comment {
+.delete-comment-form, .pin-comment-form, .edit-comment {
float: right;
margin-left: 8px;
}
@@ -118,12 +118,26 @@
opacity: 0.6;
}
-.delete-comment:hover, .edit-comment:hover {
+.delete-comment:hover, .edit-comment:hover, .pin-comment:hover {
-webkit-filter: none;
filter: none;
opacity: 1;
}
+.pin-comment {
+ float: right;
+ font-weight: 600;
+ background: none!important;
+ border: none;
+ padding: 0!important;
+ font: inherit;
+ cursor: pointer;
+ color: #3366aa;
+ -webkit-filter: grayscale(100%);
+ filter: grayscale(100%);
+ opacity: 0.6;
+}
+
.ajax-loader {
float: right;
position: relative;
diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index 0a4176f..87f5dcb 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -257,6 +257,13 @@ function pkgbase_display_details($base_id, $row, $SID="") {
if ($SID) {
include('pkg_comment_box.php');
}
+
+ $limit_pinned = isset($_GET['pinned']) ? 0 : 5;
+ $include_del_pinned = has_credential(CRED_COMMENT_VIEW_DELETED);
+ $pinned = pkgbase_pinned_comments($base_id, $limit_pinned, $include_del_pinned);
+ if (!empty($pinned)) {
+ include('pkg_pinned_comments.php');
+ }
$limit = isset($_GET['comments']) ? 0 : 10;
$include_deleted = has_credential(CRED_COMMENT_VIEW_DELETED);
diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index 8e8f5d2..0019706 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -635,7 +635,14 @@ function pkg_display_details($id=0, $row, $SID="") {
if ($SID) {
include('pkg_comment_box.php');
}
-
+
+ $limit_pinned = isset($_GET['pinned']) ? 0 : 5;
+ $include_del_pinned = has_credential(CRED_COMMENT_VIEW_DELETED);
+ $pinned = pkgbase_pinned_comments($base_id, $limit_pinned, $include_del_pinned);
+ if (!empty($pinned)) {
+ include('pkg_pinned_comments.php');
+ }
+
$limit = isset($_GET['comments']) ? 0 : 10;
$include_deleted = has_credential(CRED_COMMENT_VIEW_DELETED);
$comments = pkgbase_comments($base_id, $limit, $include_deleted);
diff --git a/web/template/pkg_comments.php b/web/template/pkg_comments.php
index 21ce16f..a0afc64 100644
--- a/web/template/pkg_comments.php
+++ b/web/template/pkg_comments.php
@@ -56,6 +56,28 @@ $count = pkgbase_comments_count($base_id, $include_deleted);
<?php if (!$row['DelUsersID'] && can_edit_comment_array($row)): ?>
<a href="<?= htmlspecialchars(get_pkgbase_uri($pkgbase_name) . 'edit-comment/?comment_id=' . $row['ID'], ENT_QUOTES) ?>" class="edit-comment" title="<?= __('Edit comment') ?>"><img src="/images/pencil.min.svg" alt="<?= __('Edit comment') ?>" width="11" height="11"></a>
<?php endif; ?>
+
+ <?php if (!$row['DelUsersID'] && !$row['PinnedUsersID'] && can_pin_comment_array($row)): ?>
+ <form class="pin-comment-form" method="post" action="<?= htmlspecialchars(get_pkgbase_uri($pkgbase_name), ENT_QUOTES); ?>">
+ <fieldset style="display:inline;">
+ <input type="hidden" name="action" value="do_PinComment" />
+ <input type="hidden" name="comment_id" value="<?= $row['ID'] ?>" />
+ <input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
+ <input type="submit" class="pin-comment" value="<?= __('Pin') ?>" width="11" height="11" alt="<?= __('Pin comment') ?>" title="<?= __('Pin comment') ?>" name="submit" value="1" />
+ </fieldset>
+ </form>
+ <?php endif; ?>
+
+ <?php if (!$row['DelUsersID'] && $row['PinnedUsersID'] && can_pin_comment_array($row)): ?>
+ <form class="pin-comment-form" method="post" action="<?= htmlspecialchars(get_pkgbase_uri($pkgbase_name), ENT_QUOTES); ?>">
+ <fieldset style="display:inline;">
+ <input type="hidden" name="action" value="do_UnpinComment" />
+ <input type="hidden" name="comment_id" value="<?= $row['ID'] ?>" />
+ <input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
+ <input type="submit" class="pin-comment" value="<?= __('Unpin') ?>" width="11" height="11" alt="<?= __('Unin comment') ?>" title="<?= __('Pin comment') ?>" name="submit" value="1" />
+ </fieldset>
+ </form>
+ <?php endif; ?>
</h4>
<div class="article-content<?php if ($row['DelUsersID']): ?> comment-deleted<?php endif; ?>">
<p>
diff --git a/web/template/pkg_pinned_comments.php b/web/template/pkg_pinned_comments.php
new file mode 100644
index 0000000..9d87082
--- /dev/null
+++ b/web/template/pkg_pinned_comments.php
@@ -0,0 +1,112 @@
+<?php
+if (isset($row['BaseID'])) {
+ /* On a package details page. */
+ $base_id = $row['BaseID'];
+} else {
+ /* On a package base details page. */
+ $base_id = $row['ID'];
+}
+$include_deleted = has_credential(CRED_COMMENT_VIEW_DELETED);
+$count = pkgbase_comments_count($base_id, $include_deleted);
+?>
+<div id="news">
+ <h3>
+ <a href="<?= htmlentities(get_pkgbase_uri($pkgbase_name), ENT_QUOTES) . '?' . mkurl('comments=all') ?>" title="<?= __('View all pinned comments' , $count) ?> (<?= $count ?>)"><?= __('Pinned Comments') ?></a>
+ <span class="arrow"></span>
+ </h3>
+
+ <?php while (list($indx, $row) = each($pinned)): ?>
+ <?php
+ $date_fmtd = gmdate('Y-m-d H:i', $row['CommentTS']);
+ if ($row['UserName']) {
+ $user_fmtd = html_format_username($row['UserName']);
+ $heading = __('%s commented on %s', $user_fmtd, $date_fmtd);
+ } else {
+ $heading = __('Anonymous comment on %s', $date_fmtd);
+ }
+
+ if ($row['EditedTS']) {
+ $date_fmtd = gmdate('Y-m-d H:i', $row['EditedTS']);
+ $heading .= ' <span class="edited">(';
+ if ($row['DelUsersID']) {
+ $user_fmtd = html_format_username($row['DelUserName']);
+ $heading .= __('deleted on %s by %s', $date_fmtd, $user_fmtd);
+ } else {
+ $user_fmtd = html_format_username($row['EditUserName']);
+ $heading .= __('last edited on %s by %s', $date_fmtd, $user_fmtd);
+ }
+ $heading .= ')</span>';
+ }
+
+ $row['DelUserName'] = html_format_username($row['DelUserName']);
+ $row['EditUserName'] = html_format_username($row['EditUserName']);
+ ?>
+ <h4 id="comment-<?= $row['ID'] ?>"<?php if ($row['DelUsersID']): ?> class="comment-deleted"<?php endif; ?>>
+ <?= $heading ?>
+ <?php if (!$row['DelUsersID'] && can_delete_comment_array($row)): ?>
+ <form class="delete-comment-form" method="post" action="<?= htmlspecialchars(get_pkgbase_uri($pkgbase_name), ENT_QUOTES); ?>">
+ <fieldset style="display:inline;">
+ <input type="hidden" name="action" value="do_DeleteComment" />
+ <input type="hidden" name="comment_id" value="<?= $row['ID'] ?>" />
+ <input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
+ <input type="image" class="delete-comment" src="/images/x.min.svg" width="11" height="11" alt="<?= __('Delete comment') ?>" title="<?= __('Delete comment') ?>" name="submit" value="1" />
+ </fieldset>
+ </form>
+ <?php endif; ?>
+ <?php if (!$row['DelUsersID'] && can_edit_comment_array($row)): ?>
+ <a href="<?= htmlspecialchars(get_pkgbase_uri($pkgbase_name) . 'edit-comment/?comment_id=' . $row['ID'], ENT_QUOTES) ?>" class="edit-comment" title="<?= __('Edit comment') ?>"><img src="/images/pencil.min.svg" alt="<?= __('Edit comment') ?>" width="11" height="11"></a>
+ <?php endif; ?>
+
+ <?php if (!$row['DelUsersID'] && can_pin_comment_array($row)): ?>
+ <form class="pin-comment-form" method="post" action="<?= htmlspecialchars(get_pkgbase_uri($pkgbase_name), ENT_QUOTES); ?>">
+ <fieldset style="display:inline;">
+ <input type="hidden" name="action" value="do_UnpinComment" />
+ <input type="hidden" name="comment_id" value="<?= $row['ID'] ?>" />
+ <input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
+ <input type="submit" class="pin-comment" value="<?= __('Unpin') ?>" width="11" height="11" alt="<?= __('Unpin comment') ?>" title="<?= __('Pin comment') ?>" name="submit" value="1" />
+ </fieldset>
+ </form>
+ <?php endif; ?>
+ </h4>
+ <div class="article-content<?php if ($row['DelUsersID']): ?> comment-deleted<?php endif; ?>">
+ <p>
+ <?= parse_comment($row['Comments']) ?>
+ </p>
+ </div>
+ <?php endwhile; ?>
+</div>
+<script>
+$(document).ready(function() {
+ $('.edit-comment').click(function () {
+ var parent_element = this.parentElement,
+ parent_id = parent_element.id,
+ comment_id = parent_id.substr(parent_id.indexOf('-') + 1),
+ edit_form = $(parent_element).next(),
+ _this = $(this);
+ add_busy_indicator(_this);
+ $.getJSON('<?= get_uri('/rpc') ?>', {
+ type: 'get-comment-form',
+ arg: comment_id,
+ base_id: <?= intval($base_id) ?>,
+ pkgbase_name: <?= json_encode($pkgbase_name) ?>
+ }, function (data) {
+ remove_busy_indicator(_this);
+ if (data.success) {
+ edit_form.html(data.form);
+ edit_form.find('textarea').focus();
+ } else {
+ alert(data.error);
+ }
+ });
+ return false;
+ });
+
+ function add_busy_indicator(sibling) {
+ sibling.after('<img src="/images/ajax-loader.gif" class="ajax-loader" width="16" height="11" alt="Busy..." />');
+ }
+
+ function remove_busy_indicator(sibling) {
+ sibling.next().remove();
+ }
+});
+</script>
--
2.6.2
More information about the aur-dev
mailing list