On Mon, 18 Jan 2016 at 00:00:10, Marcel Korpel wrote:
> Only Developers and Trusted Users can undelete comments.
> 
> Signed-off-by: Marcel Korpel <[email protected]>
> ---
>  web/html/css/aurweb.css       |  9 +++++++++
>  web/html/pkgbase.php          |  5 +++++
>  web/lib/credentials.inc.php   |  2 ++
>  web/lib/pkgbasefuncs.inc.php  | 31 ++++++++++++++++++++++---------
>  web/lib/pkgfuncs.inc.php      | 12 ++++++++++++
>  web/template/pkg_comments.php | 11 +++++++++++
>  6 files changed, 61 insertions(+), 9 deletions(-)
> 
> [...]
> diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
> index 2b1201d..b0854d2 100644
> --- a/web/lib/pkgbasefuncs.inc.php
> +++ b/web/lib/pkgbasefuncs.inc.php
> @@ -934,7 +934,7 @@ function pkgbase_notify ($base_ids, $action=true) {
>   *
>   * @return array Tuple of success/failure indicator and error message
>   */
> -function pkgbase_delete_comment() {
> +function pkgbase_delete_comment($undelete=false) {

Missing documentation for that new parameter?

> [...]
> +       if ($undelete) {
> +               if (can_undelete_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 {
> +                       return array(false, __("You are not allowed to 
> undelete this comment."));
> +               }

Reduce nesting:

    if (!can_undelete_comment()) {
        return array(false, __("You are not allowed to undelete this 
comment."));
    }

... and then do not branch for the main logic.

>         } else {
> -               return array(false, __("You are not allowed to delete this 
> comment."));
> +               if (can_delete_comment($comment_id)) {
> +                       $q = "UPDATE PackageComments ";
> +                       $q.= "SET DelUsersID = ".$uid.", ";
> +                       $q.= "DelTS = UNIX_TIMESTAMP() ";
> +                       $q.= "WHERE ID = ".intval($comment_id);
> +                       $dbh->exec($q);
> +                       return array(true, __("Comment has been deleted."));
> +               } else {
> +                       return array(false, __("You are not allowed to delete 
> this comment."));
> +               }

Same here.

>         }
>  }
>  
> diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
> index c2bbe38..4438fc4 100644
> --- a/web/lib/pkgfuncs.inc.php
> +++ b/web/lib/pkgfuncs.inc.php
> @@ -43,6 +43,18 @@ function can_delete_comment_array($comment) {
>  }
>  
>  /**
> + * Determine if the user can undelete a specific package comment
> + *
> + * Only Trusted Users and Developers can undelete comments.
> + * This function is used for both sides of comment undeletion.
> + *
> + * @return bool True if the user can undelete the comment, otherwise false
> + */
> +function can_undelete_comment() {
> +       return has_credential(CRED_COMMENT_UNDELETE);
> +}

Do we really need a new function for this? How about simply using
has_credential(CRED_COMMENT_UNDELETE) at all call sites instead?

> +
> +/**
>   * Determine if the user can edit a specific package comment
>   *
>   * Only the comment submitter, Trusted Users, and Developers can edit
> diff --git a/web/template/pkg_comments.php b/web/template/pkg_comments.php
> index d05c512..679d571 100644
> --- a/web/template/pkg_comments.php
> +++ b/web/template/pkg_comments.php
> @@ -53,6 +53,17 @@ if (!isset($count)) {
>                 ?>
>                 <h4 id="comment-<?= $row['ID'] ?>"<?php if ($is_deleted): ?> 
> class="comment-deleted"<?php endif; ?>>
>                         <?= $heading ?>
> +                       <?php if ($is_deleted && can_undelete_comment()): ?>
> +                               <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="submit" 
> class="undelete-comment" value="<?= __('Undelete') ?>" name="submit" />
> +                                       </fieldset>
> +                               </form>
> +                       <?php endif;?>
> [...]

I wonder why this is not located next to the other comment action icons?
Ideally, there should be a "undelete" icon at the location where we
usually have the delete icon. On IRC, you mentioned that placing it
there helps "prevent erroneously clicking" but I do not think it really
does. In which way is the restore icon different to the delete icon?

Patch looks good otherwise. Thank you for your work!

Reply via email to