[aur-dev] [PATCH 1/2] Remember user ID when flagging package bases
Add a new FlaggerUID field to the database and use it to store the user ID of the account who recently flagged a package out-of-date. Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org> --- schema/aur-schema.sql | 2 ++ upgrading/4.1.0.txt | 8 ++++++++ web/lib/pkgbasefuncs.inc.php | 4 ++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql index 444cb5e..9556b20 100644 --- a/schema/aur-schema.sql +++ b/schema/aur-schema.sql @@ -84,6 +84,7 @@ CREATE TABLE PackageBases ( OutOfDateTS BIGINT UNSIGNED NULL DEFAULT NULL, SubmittedTS BIGINT UNSIGNED NOT NULL, ModifiedTS BIGINT UNSIGNED NOT NULL, + FlaggerUID BIGINT UNSIGNED NULL DEFAULT NULL, -- who flagged the package out-of-date? SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL, -- who submitted it? MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- User PackagerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- Last packager @@ -93,6 +94,7 @@ CREATE TABLE PackageBases ( INDEX (SubmitterUID), INDEX (MaintainerUID), INDEX (PackagerUID), + FOREIGN KEY (FlaggerUID) REFERENCES Users(ID) ON DELETE SET NULL, -- deleting a user will cause packages to be orphaned, not deleted FOREIGN KEY (SubmitterUID) REFERENCES Users(ID) ON DELETE SET NULL, FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE SET NULL, diff --git a/upgrading/4.1.0.txt b/upgrading/4.1.0.txt index 7862030..c0bf573 100644 --- a/upgrading/4.1.0.txt +++ b/upgrading/4.1.0.txt @@ -7,3 +7,11 @@ ALTER TABLE PackageComments ADD COLUMN EditedUsersID INTEGER UNSIGNED NULL DEFAULT NULL, ADD FOREIGN KEY (EditedUsersID) REFERENCES Users(ID) ON DELETE SET NULL; ---- + +2. Add a field to store the ID of the last user who flagged a package +out-of-date: + +---- +ALTER TABLE PackageBases + ADD COLUMN FlaggerUID BIGINT UNSIGNED NULL DEFAULT NULL; +---- diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php index 677ae6b..df1ae18 100644 --- a/web/lib/pkgbasefuncs.inc.php +++ b/web/lib/pkgbasefuncs.inc.php @@ -328,15 +328,15 @@ function pkgbase_flag($base_ids) { return array(false, __("You did not select any packages to flag.")); } + $uid = uid_from_sid($_COOKIE['AURSID']); $dbh = DB::connect(); $q = "UPDATE PackageBases SET"; - $q.= " OutOfDateTS = UNIX_TIMESTAMP()"; + $q.= " OutOfDateTS = UNIX_TIMESTAMP(), FlaggerUID = " . $uid; $q.= " WHERE ID IN (" . implode(",", $base_ids) . ")"; $q.= " AND OutOfDateTS IS NULL"; $dbh->exec($q); - $uid = uid_from_sid($_COOKIE['AURSID']); foreach ($base_ids as $base_id) { notify(array('flag', $uid, $base_id)); } -- 2.5.0
Sometimes, a user accidentally flags a package out-of-date. Allow users to unflag packages that they flagged themselves, thereby providing a way to undo these actions. Implements FS#46145. Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org> --- web/lib/pkgbasefuncs.inc.php | 3 ++- web/lib/pkgfuncs.inc.php | 2 +- web/template/pkg_details.php | 3 ++- web/template/pkgbase_actions.php | 2 +- web/template/pkgbase_details.php | 3 ++- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php index df1ae18..24d3393 100644 --- a/web/lib/pkgbasefuncs.inc.php +++ b/web/lib/pkgbasefuncs.inc.php @@ -150,6 +150,7 @@ function pkgbase_get_details($base_id) { $q.= "PackageBases.OutOfDateTS, PackageBases.SubmittedTS, "; $q.= "PackageBases.ModifiedTS, PackageBases.SubmitterUID, "; $q.= "PackageBases.MaintainerUID, PackageBases.PackagerUID, "; + $q.= "PackageBases.FlaggerUID, "; $q.= "(SELECT COUNT(*) FROM PackageRequests "; $q.= " WHERE PackageRequests.PackageBaseID = PackageBases.ID "; $q.= " AND PackageRequests.Status = 0) AS RequestCount "; @@ -370,7 +371,7 @@ function pkgbase_unflag($base_ids) { $maintainers = array_merge(pkgbase_maintainer_uids($base_ids), pkgbase_get_comaintainer_uids($base_ids)); if (!has_credential(CRED_PKGBASE_UNFLAG, $maintainers)) { - $q.= "AND MaintainerUID = " . $uid; + $q.= "AND (MaintainerUID = " . $uid . " OR FlaggerUID = " . $uid. ")"; } $result = $dbh->exec($q); diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php index f403471..d760429 100644 --- a/web/lib/pkgfuncs.inc.php +++ b/web/lib/pkgfuncs.inc.php @@ -435,7 +435,7 @@ function pkg_get_details($id=0) { $q.= "PackageBases.Popularity, PackageBases.OutOfDateTS, "; $q.= "PackageBases.SubmittedTS, PackageBases.ModifiedTS, "; $q.= "PackageBases.SubmitterUID, PackageBases.MaintainerUID, "; - $q.= "PackageBases.PackagerUID, "; + $q.= "PackageBases.PackagerUID, PackageBases.FlaggerUID, "; $q.= "(SELECT COUNT(*) FROM PackageRequests "; $q.= " WHERE PackageRequests.PackageBaseID = Packages.PackageBaseID "; $q.= " AND PackageRequests.Status = 0) AS RequestCount "; diff --git a/web/template/pkg_details.php b/web/template/pkg_details.php index f4eed51..5ba3607 100644 --- a/web/template/pkg_details.php +++ b/web/template/pkg_details.php @@ -21,8 +21,9 @@ $packager = username_from_id($row["PackagerUID"]); if ($row["MaintainerUID"] !== NULL) { $maintainers = array_merge(array($row["MaintainerUID"]), pkgbase_get_comaintainer_uids(array($base_id))); } else { - $maintainers = NULL; + $maintainers = array(); } +$unflaggers = array_merge($maintainers, array($row["FlaggerUID"])); $votes = $row['NumVotes']; $popularity = $row['Popularity']; diff --git a/web/template/pkgbase_actions.php b/web/template/pkgbase_actions.php index c7428ee..dea348e 100644 --- a/web/template/pkgbase_actions.php +++ b/web/template/pkgbase_actions.php @@ -11,7 +11,7 @@ <li><span class="flagged"><?php if ($row["OutOfDateTS"] !== NULL) { echo __('Flagged out-of-date')." (${out_of_date_time})"; } ?></span></li> <?php if ($row["OutOfDateTS"] === NULL): ?> <li><?= html_action_form($base_uri . 'flag/', "do_Flag", __('Flag package out-of-date')) ?></li> - <?php elseif (($row["OutOfDateTS"] !== NULL) && has_credential(CRED_PKGBASE_UNFLAG, $maintainers)): ?> + <?php elseif (($row["OutOfDateTS"] !== NULL) && has_credential(CRED_PKGBASE_UNFLAG, $unflaggers)): ?> <li><?= html_action_form($base_uri . 'unflag/', "do_UnFlag", __('Unflag package')) ?></li> <?php endif; ?> diff --git a/web/template/pkgbase_details.php b/web/template/pkgbase_details.php index d4304e3..1012c4e 100644 --- a/web/template/pkgbase_details.php +++ b/web/template/pkgbase_details.php @@ -20,8 +20,9 @@ $packager = username_from_id($row["PackagerUID"]); if ($row["MaintainerUID"] !== NULL) { $maintainers = array_merge(array($row["MaintainerUID"]), pkgbase_get_comaintainer_uids(array($base_id))); } else { - $maintainers = NULL; + $maintainers = array(); } +$unflaggers = array_merge($maintainers, array($row["FlaggerUID"])); $votes = $row['NumVotes']; $popularity = $row['Popularity']; -- 2.5.0
participants (1)
-
Lukas Fleischer