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,
SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL,
MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL,
PackagerUID INTEGER UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (ID),
UNIQUE (Name),
INDEX (CategoryID),
INDEX (NumVotes),
INDEX (SubmitterUID),
INDEX (MaintainerUID),
INDEX (PackagerUID),
FOREIGN KEY (CategoryID) REFERENCES PackageCategories(ID) ON DELETE NO ACTION,
-- 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
FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE SET NULL,
FOREIGN KEY (PackagerUID) REFERENCES Users(ID) ON DELETE SET NULL
) ENGINE = InnoDB;
----

View file

@ -104,16 +104,19 @@ CREATE TABLE PackageBases (
ModifiedTS BIGINT UNSIGNED NOT NULL,
SubmitterUID INTEGER UNSIGNED NULL DEFAULT NULL, -- who submitted it?
MaintainerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- User
PackagerUID INTEGER UNSIGNED NULL DEFAULT NULL, -- Last packager
PRIMARY KEY (ID),
UNIQUE (Name),
INDEX (CategoryID),
INDEX (NumVotes),
INDEX (SubmitterUID),
INDEX (MaintainerUID),
INDEX (PackagerUID),
FOREIGN KEY (CategoryID) REFERENCES PackageCategories(ID) ON DELETE NO ACTION,
-- 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
FOREIGN KEY (MaintainerUID) REFERENCES Users(ID) ON DELETE SET NULL,
FOREIGN KEY (PackagerUID) REFERENCES Users(ID) ON DELETE SET NULL
) ENGINE = InnoDB;

View file

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

View file

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

View file

@ -9,6 +9,7 @@ $catarr = pkgbase_categories();
$submitter = username_from_id($row["SubmitterUID"]);
$maintainer = username_from_id($row["MaintainerUID"]);
$packager = username_from_id($row["PackagerUID"]);
$votes = $row['NumVotes'];
@ -286,6 +287,24 @@ if ($row["MaintainerUID"]):
<?php endif; ?>
<?php else: ?>
<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; ?>
</tr>
<tr>

View file

@ -8,6 +8,7 @@ $catarr = pkgbase_categories();
$submitter = username_from_id($row["SubmitterUID"]);
$maintainer = username_from_id($row["MaintainerUID"]);
$packager = username_from_id($row["PackagerUID"]);
$votes = $row['NumVotes'];
@ -169,6 +170,24 @@ if ($row["MaintainerUID"]):
<?php endif; ?>
<?php else: ?>
<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; ?>
</tr>
<tr>