Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de> --- UPGRADING | 18 ++++++++++++++++++ schema/aur-schema.sql | 21 +++++++++++++++++++++ web/html/pkgsubmit.php | 9 ++++++++- web/lib/pkgfuncs.inc.php | 43 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 90 insertions(+), 1 deletion(-) diff --git a/UPGRADING b/UPGRADING index f523140..814fea1 100644 --- a/UPGRADING +++ b/UPGRADING @@ -199,6 +199,24 @@ CREATE TABLE PackageRelations ( ) ENGINE = InnoDB; ---- +17. Create tables to store package groups: + +---- +CREATE TABLE Groups ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + Name VARCHAR(64) NOT NULL, + PRIMARY KEY (ID), + UNIQUE (Name) +) ENGINE = InnoDB; +CREATE TABLE PackageGroups ( + PackageID INTEGER UNSIGNED NOT NULL, + GroupID INTEGER UNSIGNED NOT NULL, + PRIMARY KEY (PackageID, GroupID), + FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE, + FOREIGN KEY (GroupID) REFERENCES Groups(ID) ON DELETE CASCADE +) ENGINE = InnoDB; +---- + From 2.2.0 to 2.3.0 ------------------- diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql index c98ba77..ae42fd3 100644 --- a/schema/aur-schema.sql +++ b/schema/aur-schema.sql @@ -133,6 +133,27 @@ CREATE TABLE Packages ( ) ENGINE = InnoDB; +-- Information about groups +-- +CREATE TABLE Groups ( + ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, + Name VARCHAR(64) NOT NULL, + PRIMARY KEY (ID), + UNIQUE (Name) +) ENGINE = InnoDB; + + +-- Information about package-group-relations +-- +CREATE TABLE PackageGroups ( + PackageID INTEGER UNSIGNED NOT NULL, + GroupID INTEGER UNSIGNED NOT NULL, + PRIMARY KEY (PackageID, GroupID), + FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE, + FOREIGN KEY (GroupID) REFERENCES Groups(ID) ON DELETE CASCADE +) ENGINE = InnoDB; + + -- Define the package dependency types -- CREATE TABLE DependencyTypes ( diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php index 3df38d8..107441f 100644 --- a/web/html/pkgsubmit.php +++ b/web/html/pkgsubmit.php @@ -151,6 +151,7 @@ if ($uid): } } $section_info = array( + 'groups' => array(), 'depends' => array(), 'makedepends' => array(), 'checkdepends' => array(), @@ -169,6 +170,7 @@ if ($uid): case 'license': $section_info[$key] = $value; break; + case 'groups': case 'source': case 'depends': case 'makedepends': @@ -196,7 +198,7 @@ if ($uid): if (!isset($pkgbase_info['pkgbase'])) { $pkgbase_info['pkgbase'] = $pkgbase_info['pkgname']; } - foreach (array('source', 'depends', 'makedepends', 'checkdepends', 'optdepends', 'conflicts', 'provides', 'replaces') as $array_opt) { + foreach (array('groups', 'source', 'depends', 'makedepends', 'checkdepends', 'optdepends', 'conflicts', 'provides', 'replaces') as $array_opt) { if (empty($pkgbase_info[$array_opt])) { $pkgbase_info[$array_opt] = array(); } else { @@ -357,6 +359,11 @@ if ($uid): foreach ($pkginfo as $pi) { $pkgid = pkg_create($base_id, $pi['pkgname'], $pi['license'], $pi['full-version'], $pi['pkgdesc'], $pi['url']); + foreach ($pi['groups'] as $grp) { + $grpid = pkg_create_group($grp); + pkg_add_grp($pkgid, $grpid); + } + foreach (array('depends', 'makedepends', 'checkdepends', 'optdepends') as $deptype) { foreach ($pi[$deptype] as $dep) { $deppkgname = preg_replace("/(<|=|>).*/", "", $dep); diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php index a04f525..f80d4b4 100644 --- a/web/lib/pkgfuncs.inc.php +++ b/web/lib/pkgfuncs.inc.php @@ -805,3 +805,46 @@ function pkg_add_src($pkgid, $pkgsrc) { $dbh->exec($q); } + +/** + * Creates a new group and returns its ID + * + * If the groups already exists, the ID of the already existing group is + * returned. + * + * @param string $name The name of the group to create + * + * @return int The ID of the group + */ +function pkg_create_group($name) { + $dbh = DB::connect(); + $q = sprintf("SELECT ID FROM Groups WHERE Name = %s", $dbh->quote($name)); + $result = $dbh->query($q); + if ($result) { + $grpid = $result->fetch(PDO::FETCH_COLUMN, 0); + if ($grpid > 0) { + return $grpid; + } + } + + $q = sprintf("INSERT INTO Groups (Name) VALUES (%s)", $dbh->quote($name)); + $dbh->exec($q); + return $dbh->lastInsertId(); +} + +/** + * Add a package to a group + * + * @param int $pkgid The package ID of the package to add + * @param int $grpid The group ID of the group to add the package to + * + * @return void + */ +function pkg_add_grp($pkgid, $grpid) { + $dbh = DB::connect(); + $q = sprintf("INSERT INTO PackageGroups (PackageID, GroupID) VALUES (%d, %d)", + $pkgid, + $grpid + ); + $dbh->exec($q); +} -- 1.9.2