Implements FS#10863 Signed-off-by: Mark Weiman <mark.weiman@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