mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
pkgsubmit.php: Pull out DB code
* Move DB code in pkgsubmit.php to new functions in aur.inc.php and pkgfuncs.inc.php * Centralization of DB code important in a future transition to PDO interface Signed-off-by: canyonknight <canyonknight@gmail.com> Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
This commit is contained in:
parent
82d234c4d5
commit
763cbf8373
3 changed files with 129 additions and 48 deletions
|
@ -299,13 +299,10 @@ if ($uid):
|
||||||
|
|
||||||
# Update the backend database
|
# Update the backend database
|
||||||
if (!$error) {
|
if (!$error) {
|
||||||
|
|
||||||
$dbh = db_connect();
|
$dbh = db_connect();
|
||||||
db_query("BEGIN", $dbh);
|
begin_atomic_commit($dbh);
|
||||||
|
|
||||||
$q = "SELECT * FROM Packages WHERE Name = '" . db_escape_string($new_pkgbuild['pkgname']) . "'";
|
$pdata = pkgdetails_by_pkgname($new_pkgbuild['pkgname'], $dbh);
|
||||||
$result = db_query($q, $dbh);
|
|
||||||
$pdata = mysql_fetch_assoc($result);
|
|
||||||
|
|
||||||
if (isset($new_pkgbuild['epoch']) && (int)$new_pkgbuild['epoch'] > 0) {
|
if (isset($new_pkgbuild['epoch']) && (int)$new_pkgbuild['epoch'] > 0) {
|
||||||
$pkg_version = sprintf('%d:%s-%s', $new_pkgbuild['epoch'], $new_pkgbuild['pkgver'], $new_pkgbuild['pkgrel']);
|
$pkg_version = sprintf('%d:%s-%s', $new_pkgbuild['epoch'], $new_pkgbuild['pkgver'], $new_pkgbuild['pkgrel']);
|
||||||
|
@ -332,46 +329,20 @@ if ($uid):
|
||||||
$packageID = $pdata["ID"];
|
$packageID = $pdata["ID"];
|
||||||
|
|
||||||
# Flush out old data that will be replaced with new data
|
# Flush out old data that will be replaced with new data
|
||||||
$q = "DELETE FROM PackageDepends WHERE PackageID = " . $packageID;
|
remove_pkg_deps($packageID, $dbh);
|
||||||
db_query($q, $dbh);
|
remove_pkg_sources($packageID, $dbh);
|
||||||
$q = "DELETE FROM PackageSources WHERE PackageID = " . $packageID;
|
|
||||||
db_query($q, $dbh);
|
|
||||||
|
|
||||||
# If a new category was chosen, change it to that
|
# If a new category was chosen, change it to that
|
||||||
if ($category_id > 1) {
|
if ($category_id > 1) {
|
||||||
$q = sprintf( "UPDATE Packages SET CategoryID = %d WHERE ID = %d",
|
update_pkg_category($packageID, $category_id);
|
||||||
$category_id,
|
|
||||||
$packageID);
|
|
||||||
|
|
||||||
db_query($q, $dbh);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Update package data
|
# Update package data
|
||||||
$q = sprintf("UPDATE Packages SET ModifiedTS = UNIX_TIMESTAMP(), Name = '%s', Version = '%s', License = '%s', Description = '%s', URL = '%s', OutOfDateTS = NULL, MaintainerUID = %d WHERE ID = %d",
|
update_pkgdetails($packageID, $new_pkgbuild['pkgname'], $new_pkgbuild['license'], $pkg_version, "", $new_pkgbuild['pkgdesc'], $new_pkgbuild['url'], "", $uid, $dbh);
|
||||||
db_escape_string($new_pkgbuild['pkgname']),
|
|
||||||
db_escape_string($pkg_version),
|
|
||||||
db_escape_string($new_pkgbuild['license']),
|
|
||||||
db_escape_string($new_pkgbuild['pkgdesc']),
|
|
||||||
db_escape_string($new_pkgbuild['url']),
|
|
||||||
$uid,
|
|
||||||
$packageID);
|
|
||||||
|
|
||||||
db_query($q, $dbh);
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
# This is a brand new package
|
# This is a brand new package
|
||||||
$q = sprintf("INSERT INTO Packages (Name, License, Version, CategoryID, Description, URL, SubmittedTS, ModifiedTS, SubmitterUID, MaintainerUID) VALUES ('%s', '%s', '%s', %d, '%s', '%s', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), %d, %d)",
|
new_pkgdetails($new_pkgbuild['pkgname'], $new_pkgbuild['license'], $pkg_version, $category_id, $new_pkgbuild['pkgdesc'], $new_pkgbuild['url'], $uid, $dbh);
|
||||||
db_escape_string($new_pkgbuild['pkgname']),
|
$packageID = last_insert_id($dbh);
|
||||||
db_escape_string($new_pkgbuild['license']),
|
|
||||||
db_escape_string($pkg_version),
|
|
||||||
$category_id,
|
|
||||||
db_escape_string($new_pkgbuild['pkgdesc']),
|
|
||||||
db_escape_string($new_pkgbuild['url']),
|
|
||||||
$uid,
|
|
||||||
$uid);
|
|
||||||
|
|
||||||
db_query($q, $dbh);
|
|
||||||
$packageID = mysql_insert_id($dbh);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -388,13 +359,7 @@ if ($uid):
|
||||||
else if ($deppkgname == "#") {
|
else if ($deppkgname == "#") {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
add_pkg_dep($packageID, $deppkgname, $depcondition, $dbh);
|
||||||
$q = sprintf("INSERT INTO PackageDepends (PackageID, DepName, DepCondition) VALUES (%d, '%s', '%s')",
|
|
||||||
$packageID,
|
|
||||||
db_escape_string($deppkgname),
|
|
||||||
db_escape_string($depcondition));
|
|
||||||
|
|
||||||
db_query($q, $dbh);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -402,9 +367,7 @@ if ($uid):
|
||||||
$sources = explode(" ", $new_pkgbuild['source']);
|
$sources = explode(" ", $new_pkgbuild['source']);
|
||||||
foreach ($sources as $src) {
|
foreach ($sources as $src) {
|
||||||
if ($src != "" ) {
|
if ($src != "" ) {
|
||||||
$q = "INSERT INTO PackageSources (PackageID, Source) VALUES (";
|
add_pkg_src($packageID, $src, $dbh);
|
||||||
$q .= $packageID . ", '" . db_escape_string($src) . "')";
|
|
||||||
db_query($q, $dbh);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -415,7 +378,7 @@ if ($uid):
|
||||||
}
|
}
|
||||||
|
|
||||||
# Entire package creation process is atomic
|
# Entire package creation process is atomic
|
||||||
db_query("COMMIT", $dbh);
|
end_atomic_commit($dbh);
|
||||||
|
|
||||||
header('Location: packages.php?ID=' . $packageID);
|
header('Location: packages.php?ID=' . $packageID);
|
||||||
}
|
}
|
||||||
|
|
|
@ -512,3 +512,24 @@ function parse_comment($comment) {
|
||||||
|
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function begin_atomic_commit($dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
db_query("BEGIN", $dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
function end_atomic_commit($dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
db_query("COMMIT", $dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
function last_insert_id($dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
return mysql_insert_id($dbh);
|
||||||
|
}
|
||||||
|
|
|
@ -1240,3 +1240,100 @@ function pkg_change_category($atype, $dbh=NULL) {
|
||||||
return __("You are not allowed to change this package category.");
|
return __("You are not allowed to change this package category.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function pkgdetails_by_pkgname($pkgname, $dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
$q = "SELECT * FROM Packages WHERE Name = '" . db_escape_string($pkgname) . "'";
|
||||||
|
$result = db_query($q, $dbh);
|
||||||
|
if ($result) {
|
||||||
|
$pdata = mysql_fetch_assoc($result);
|
||||||
|
}
|
||||||
|
return $pdata;
|
||||||
|
}
|
||||||
|
|
||||||
|
function new_pkgdetails($pkgname, $license, $pkgver, $category_id, $pkgdesc, $pkgurl, $uid, $dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
$q = sprintf("INSERT INTO Packages (Name, License, Version, CategoryID, Description, URL, SubmittedTS, ModifiedTS, SubmitterUID, MaintainerUID) VALUES ('%s', '%s', '%s', %d, '%s', '%s', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), %d, %d)",
|
||||||
|
db_escape_string($pkgname),
|
||||||
|
db_escape_string($license),
|
||||||
|
db_escape_string($pkgver),
|
||||||
|
$category_id,
|
||||||
|
db_escape_string($pkgdesc),
|
||||||
|
db_escape_string($pkgurl),
|
||||||
|
$uid,
|
||||||
|
$uid);
|
||||||
|
|
||||||
|
db_query($q, $dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_pkgdetails($pkgname, $license, $pkgver, $pkgdesc, $pkgurl, $uid, $pkgid, $dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
# This is an overwrite of an existing package
|
||||||
|
$q = sprintf("UPDATE Packages SET ModifiedTS = UNIX_TIMESTAMP(), Name = '%s', Version = '%s', License = '%s', Description = '%s', URL = '%s', OutOfDateTS = NULL, MaintainerUID = %d WHERE ID = %d",
|
||||||
|
db_escape_string($pkgname),
|
||||||
|
db_escape_string($pkgver),
|
||||||
|
db_escape_string($license),
|
||||||
|
db_escape_string($pkgdesc),
|
||||||
|
db_escape_string($pkgurl),
|
||||||
|
$uid,
|
||||||
|
$pkgid);
|
||||||
|
|
||||||
|
db_query($q, $dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
function add_pkg_dep($pkgid, $depname, $depcondition, $dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
$q = sprintf("INSERT INTO PackageDepends (PackageID, DepName, DepCondition) VALUES (%d, '%s', '%s')",
|
||||||
|
$pkgid,
|
||||||
|
db_escape_string($depname),
|
||||||
|
db_escape_string($depcondition));
|
||||||
|
|
||||||
|
db_query($q, $dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
function add_pkg_src($pkgid, $pkgsrc, $dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
$q = "INSERT INTO PackageSources (PackageID, Source) VALUES (";
|
||||||
|
$q .= $pkgid . ", '" . db_escape_string($pkgsrc) . "')";
|
||||||
|
|
||||||
|
db_query($q, $dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_pkg_category($pkgid, $category_id, $dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
$q = sprintf( "UPDATE Packages SET CategoryID = %d WHERE ID = %d",
|
||||||
|
$category_id,
|
||||||
|
$pkgid);
|
||||||
|
|
||||||
|
db_query($q, $dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove_pkg_deps($pkgid, $dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
$q = "DELETE FROM PackageDepends WHERE PackageID = " . $pkgid;
|
||||||
|
|
||||||
|
db_query($q, $dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove_pkg_sources($pkgid, $dbh=NULL) {
|
||||||
|
if(!$dbh) {
|
||||||
|
$dbh = db_connect();
|
||||||
|
}
|
||||||
|
$q = "DELETE FROM PackageSources WHERE PackageID = " . $pkgid;
|
||||||
|
|
||||||
|
db_query($q, $dbh);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue