Add a packager field to packages

Store the last packager in addition to storing the submitter and the
maintainer of a package. This allows for checking who last updated a
package, even if the package has been disowned.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
This commit is contained in:
Lukas Fleischer 2014-05-06 20:52:32 +02:00
parent 0e368510f4
commit a93363ac08
6 changed files with 56 additions and 9 deletions

View file

@ -31,16 +31,19 @@ CREATE TABLE PackageBases (
ModifiedTS BIGINT UNSIGNED NOT NULL, ModifiedTS BIGINT UNSIGNED NOT NULL,
SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL, SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL,
MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL, MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL,
PackagerUID INTEGER UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (ID), PRIMARY KEY (ID),
UNIQUE (Name), UNIQUE (Name),
INDEX (CategoryID), INDEX (CategoryID),
INDEX (NumVotes), INDEX (NumVotes),
INDEX (SubmitterUID), INDEX (SubmitterUID),
INDEX (MaintainerUID), INDEX (MaintainerUID),
INDEX (PackagerUID),
FOREIGN KEY (CategoryID) REFERENCES PackageCategories(ID) ON DELETE NO ACTION, FOREIGN KEY (CategoryID) REFERENCES PackageCategories(ID) ON DELETE NO ACTION,
-- deleting a user will cause packages to be orphaned, not deleted -- deleting a user will cause packages to be orphaned, not deleted
FOREIGN KEY (SubmitterUID) REFERENCES Users(ID) ON DELETE SET NULL, FOREIGN KEY (SubmitterUID) REFERENCES Users(ID) ON DELETE SET NULL,
FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE SET NULL FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE SET NULL,
FOREIGN KEY (PackagerUID) REFERENCES Users(ID) ON DELETE SET NULL
) ENGINE = InnoDB; ) ENGINE = InnoDB;
---- ----

View file

@ -104,16 +104,19 @@ CREATE TABLE PackageBases (
ModifiedTS BIGINT UNSIGNED NOT NULL, ModifiedTS BIGINT UNSIGNED NOT NULL,
SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL, -- who submitted it? SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL, -- who submitted it?
MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- User MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- User
PackagerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- Last packager
PRIMARY KEY (ID), PRIMARY KEY (ID),
UNIQUE (Name), UNIQUE (Name),
INDEX (CategoryID), INDEX (CategoryID),
INDEX (NumVotes), INDEX (NumVotes),
INDEX (SubmitterUID), INDEX (SubmitterUID),
INDEX (MaintainerUID), INDEX (MaintainerUID),
INDEX (PackagerUID),
FOREIGN KEY (CategoryID) REFERENCES PackageCategories(ID) ON DELETE NO ACTION, FOREIGN KEY (CategoryID) REFERENCES PackageCategories(ID) ON DELETE NO ACTION,
-- deleting a user will cause packages to be orphaned, not deleted -- deleting a user will cause packages to be orphaned, not deleted
FOREIGN KEY (SubmitterUID) REFERENCES Users(ID) ON DELETE SET NULL, FOREIGN KEY (SubmitterUID) REFERENCES Users(ID) ON DELETE SET NULL,
FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE SET NULL FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE SET NULL,
FOREIGN KEY (PackagerUID) REFERENCES Users(ID) ON DELETE SET NULL
) ENGINE = InnoDB; ) ENGINE = InnoDB;

View file

@ -182,7 +182,8 @@ function pkgbase_get_details($base_id) {
$q.= "PackageBases.CategoryID, PackageBases.NumVotes, "; $q.= "PackageBases.CategoryID, PackageBases.NumVotes, ";
$q.= "PackageBases.OutOfDateTS, PackageBases.SubmittedTS, "; $q.= "PackageBases.OutOfDateTS, PackageBases.SubmittedTS, ";
$q.= "PackageBases.ModifiedTS, PackageBases.SubmitterUID, "; $q.= "PackageBases.ModifiedTS, PackageBases.SubmitterUID, ";
$q.= "PackageBases.MaintainerUID, PackageCategories.Category "; $q.= "PackageBases.MaintainerUID, PackageBases.PackagerUID, ";
$q.= "PackageCategories.Category ";
$q.= "FROM PackageBases, PackageCategories "; $q.= "FROM PackageBases, PackageCategories ";
$q.= "WHERE PackageBases.CategoryID = PackageCategories.ID "; $q.= "WHERE PackageBases.CategoryID = PackageCategories.ID ";
$q.= "AND PackageBases.ID = " . intval($base_id); $q.= "AND PackageBases.ID = " . intval($base_id);
@ -917,9 +918,10 @@ function pkgbase_change_category($base_id, $atype) {
function pkgbase_create($name, $category_id, $uid) { function pkgbase_create($name, $category_id, $uid) {
$dbh = DB::connect(); $dbh = DB::connect();
$q = sprintf("INSERT INTO PackageBases (Name, CategoryID, " . $q = sprintf("INSERT INTO PackageBases (Name, CategoryID, " .
"SubmittedTS, ModifiedTS, SubmitterUID, MaintainerUID) " . "SubmittedTS, ModifiedTS, SubmitterUID, MaintainerUID, " .
"VALUES (%s, %d, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), %d, %d)", "PackagerUID) VALUES (%s, %d, UNIX_TIMESTAMP(), " .
$dbh->quote($name), $category_id, $uid, $uid); "UNIX_TIMESTAMP(), %d, %d, %d)",
$dbh->quote($name), $category_id, $uid, $uid, $uid);
$dbh->exec($q); $dbh->exec($q);
return $dbh->lastInsertId(); return $dbh->lastInsertId();
} }
@ -937,8 +939,9 @@ function pkgbase_update($base_id, $name, $uid) {
$dbh = DB::connect(); $dbh = DB::connect();
$q = sprintf("UPDATE PackageBases SET " . $q = sprintf("UPDATE PackageBases SET " .
"Name = %s, ModifiedTS = UNIX_TIMESTAMP(), " . "Name = %s, ModifiedTS = UNIX_TIMESTAMP(), " .
"MaintainerUID = %d, OutOfDateTS = NULL WHERE ID = %d", "MaintainerUID = %d, PackagerUID = %d, OutOfDateTS = NULL " .
$dbh->quote($name), $uid, $base_id); "WHERE ID = %d",
$dbh->quote($name), $uid, $uid, $base_id);
$dbh->exec($q); $dbh->exec($q);
} }

View file

@ -400,7 +400,7 @@ function pkg_get_details($id=0) {
$q.= "PackageBases.NumVotes, PackageBases.OutOfDateTS, "; $q.= "PackageBases.NumVotes, PackageBases.OutOfDateTS, ";
$q.= "PackageBases.SubmittedTS, PackageBases.ModifiedTS, "; $q.= "PackageBases.SubmittedTS, PackageBases.ModifiedTS, ";
$q.= "PackageBases.SubmitterUID, PackageBases.MaintainerUID, "; $q.= "PackageBases.SubmitterUID, PackageBases.MaintainerUID, ";
$q.= "PackageCategories.Category "; $q.= "PackageBases.PackagerUID, PackageCategories.Category ";
$q.= "FROM Packages, PackageBases, PackageCategories "; $q.= "FROM Packages, PackageBases, PackageCategories ";
$q.= "WHERE PackageBases.ID = Packages.PackageBaseID "; $q.= "WHERE PackageBases.ID = Packages.PackageBaseID ";
$q.= "AND PackageBases.CategoryID = PackageCategories.ID "; $q.= "AND PackageBases.CategoryID = PackageCategories.ID ";

View file

@ -9,6 +9,7 @@ $catarr = pkgbase_categories();
$submitter = username_from_id($row["SubmitterUID"]); $submitter = username_from_id($row["SubmitterUID"]);
$maintainer = username_from_id($row["MaintainerUID"]); $maintainer = username_from_id($row["MaintainerUID"]);
$packager = username_from_id($row["PackagerUID"]);
$votes = $row['NumVotes']; $votes = $row['NumVotes'];
@ -286,6 +287,24 @@ if ($row["MaintainerUID"]):
<?php endif; ?> <?php endif; ?>
<?php else: ?> <?php else: ?>
<td><?= __('None') ?></td> <td><?= __('None') ?></td>
<?php endif; ?>
</tr>
<tr>
<th><?= __('Last Packager') .': ' ?></th>
<?php
if ($row["PackagerUID"]):
if ($SID):
if (!$USE_VIRTUAL_URLS):
?>
<td><a href="<?= get_uri('/account/'); ?>?Action=AccountInfo&amp;ID=<?= htmlspecialchars($row['PackagerUID'], ENT_QUOTES) ?>" title="<?= __('View account information for')?> <?= htmlspecialchars($packager) ?>"><?= htmlspecialchars($packager) ?></a></td>
<?php else: ?>
<td><a href="<?= get_uri('/account/') . htmlspecialchars($packager, ENT_QUOTES) ?>" title="<?= __('View account information for %s', htmlspecialchars($packager)) ?>"><?= htmlspecialchars($packager) ?></a></td>
<?php endif; ?>
<?php else: ?>
<td><?= htmlspecialchars($packager) ?></td>
<?php endif; ?>
<?php else: ?>
<td><?= __('None') ?></td>
<?php endif; ?> <?php endif; ?>
</tr> </tr>
<tr> <tr>

View file

@ -8,6 +8,7 @@ $catarr = pkgbase_categories();
$submitter = username_from_id($row["SubmitterUID"]); $submitter = username_from_id($row["SubmitterUID"]);
$maintainer = username_from_id($row["MaintainerUID"]); $maintainer = username_from_id($row["MaintainerUID"]);
$packager = username_from_id($row["PackagerUID"]);
$votes = $row['NumVotes']; $votes = $row['NumVotes'];
@ -169,6 +170,24 @@ if ($row["MaintainerUID"]):
<?php endif; ?> <?php endif; ?>
<?php else: ?> <?php else: ?>
<td><?= __('None') ?></td> <td><?= __('None') ?></td>
<?php endif; ?>
</tr>
<tr>
<th><?= __('Last Packager') .': ' ?></th>
<?php
if ($row["PackagerUID"]):
if ($SID):
if (!$USE_VIRTUAL_URLS):
?>
<td><a href="<?= get_uri('/account/'); ?>?Action=AccountInfo&amp;ID=<?= htmlspecialchars($row['PackagerUID'], ENT_QUOTES) ?>" title="<?= __('View account information for')?> <?= htmlspecialchars($packager) ?>"><?= htmlspecialchars($packager) ?></a></td>
<?php else: ?>
<td><a href="<?= get_uri('/account/') . htmlspecialchars($packager, ENT_QUOTES) ?>" title="<?= __('View account information for %s', htmlspecialchars($packager)) ?>"><?= htmlspecialchars($packager) ?></a></td>
<?php endif; ?>
<?php else: ?>
<td><?= htmlspecialchars($packager) ?></td>
<?php endif; ?>
<?php else: ?>
<td><?= __('None') ?></td>
<?php endif; ?> <?php endif; ?>
</tr> </tr>
<tr> <tr>