Signed-off-by: Lukas Fleischer <[email protected]>
---
 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

Reply via email to