As a follow-up to 4d7da95 (Add support for architecture-specific fields, 2014-08-10), handle architecture-specific source fields as well. Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de> --- schema/aur-schema.sql | 1 + upgrading/3.5.0.txt | 1 + web/html/pkgsubmit.php | 8 +++++--- web/lib/pkgfuncs.inc.php | 40 ++++++++++++++++++++++++++++++++++------ web/template/pkg_details.php | 24 +++++------------------- 5 files changed, 46 insertions(+), 28 deletions(-) diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql index 149695c..08f87d8 100644 --- a/schema/aur-schema.sql +++ b/schema/aur-schema.sql @@ -238,6 +238,7 @@ CREATE TABLE PackageRelations ( CREATE TABLE PackageSources ( PackageID INTEGER UNSIGNED NOT NULL, Source VARCHAR(255) NOT NULL DEFAULT "/dev/null", + SourceArch VARCHAR(255) NULL DEFAULT NULL, INDEX (PackageID), FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE ) ENGINE = InnoDB; diff --git a/upgrading/3.5.0.txt b/upgrading/3.5.0.txt index a0ee389..152fc84 100644 --- a/upgrading/3.5.0.txt +++ b/upgrading/3.5.0.txt @@ -3,4 +3,5 @@ ---- ALTER TABLE PackageDepends ADD COLUMN DepArch VARCHAR(255) NULL DEFAULT NULL; ALTER TABLE PackageRelations ADD COLUMN RelArch VARCHAR(255) NULL DEFAULT NULL; +ALTER TABLE PackageSources ADD COLUMN SourceArch VARCHAR(255) NULL DEFAULT NULL; ---- diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php index e1963de..8cecd67 100644 --- a/web/html/pkgsubmit.php +++ b/web/html/pkgsubmit.php @@ -176,7 +176,6 @@ if ($uid): break; case 'license': case 'groups': - case 'source': $section_info[$key][] = $value; break; case 'depends': @@ -186,6 +185,7 @@ if ($uid): case 'conflicts': case 'provides': case 'replaces': + case 'source': $section_info[$key][$arch][] = $value; break; } @@ -382,8 +382,10 @@ if ($uid): } } - foreach ($pi['source'] as $src) { - pkg_add_src($pkgid, $src); + foreach ($pi['source'] as $srcarch => $srcgrp) { + foreach ($srcgrp as $src) { + pkg_add_src($pkgid, $src, $srcarch); + } } } diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php index 6a43a48..cf8c2f9 100644 --- a/web/lib/pkgfuncs.inc.php +++ b/web/lib/pkgfuncs.inc.php @@ -292,6 +292,31 @@ function pkg_rel_html($name, $cond, $arch) { } /** + * Get the HTML code to display a source link + * + * @param string $url The URL of the source + * @param string $arch The source architecture + * + * @return string The HTML code of the label to display + */ +function pkg_source_link($url, $arch) { + $url = explode('::', $url); + $parsed_url = parse_url($url[0]); + + if (isset($parsed_url['scheme']) || isset($url[1])) { + $link = '<a href="' . htmlspecialchars((isset($url[1]) ? $url[1] : $url[0]), ENT_QUOTES) . '">' . htmlspecialchars($url[0]) . '</a>'; + } else { + $link = htmlspecialchars($url[0]); + } + + if ($arch) { + $link .= ' <em>(' . htmlspecialchars($arch) . ')</em>'; + } + + return $link; +} + +/** * Determine packages that depend on a package * * @param string $name The package name for the dependency search @@ -327,7 +352,7 @@ function pkg_sources($pkgid) { $pkgid = intval($pkgid); if ($pkgid > 0) { $dbh = DB::connect(); - $q = "SELECT Source FROM PackageSources "; + $q = "SELECT Source, SourceArch FROM PackageSources "; $q.= "WHERE PackageID = " . $pkgid; $q.= " ORDER BY Source"; $result = $dbh->query($q); @@ -335,7 +360,7 @@ function pkg_sources($pkgid) { return array(); } while ($row = $result->fetch(PDO::FETCH_NUM)) { - $sources[] = $row[0]; + $sources[] = $row; } } return $sources; @@ -831,14 +856,17 @@ function pkg_add_rel($pkgid, $type, $relname, $relcondition, $relarch) { * * @param int $pkgid The package ID to add the source for * @param string $pkgsrc The package source to add to the database + * @param string $srcarch The architecture of the source to add * * @return void */ -function pkg_add_src($pkgid, $pkgsrc) { +function pkg_add_src($pkgid, $pkgsrc, $srcarch) { $dbh = DB::connect(); - $q = "INSERT INTO PackageSources (PackageID, Source) VALUES ("; - $q .= $pkgid . ", " . $dbh->quote($pkgsrc) . ")"; - + $q = sprintf("INSERT INTO PackageSources (PackageID, Source, SourceArch) VALUES (%d, %s, %s)", + $pkgid, + $dbh->quote($pkgsrc), + $srcarch ? $dbh->quote($srcarch) : 'NULL' + ); $dbh->exec($q); } diff --git a/web/template/pkg_details.php b/web/template/pkg_details.php index 3752e1a..d09b3d8 100644 --- a/web/template/pkg_details.php +++ b/web/template/pkg_details.php @@ -379,28 +379,14 @@ if ($row["PackagerUID"]): <div id="pkgfiles" class="listing"> <h3><?= __('Sources') ?></h3> </div> -<?php if (count($sources) > 0): ?> + <?php if (count($sources) > 0): ?> <div> <ul id="pkgsrcslist"> -<?php - while (list($k, $src) = each($sources)): - $src = explode('::', $src); - $parsed_url = parse_url($src[0]); - - # It is an external source - if (isset($parsed_url['scheme']) || isset($src[1])): -?> - <li><a href="<?= htmlspecialchars((isset($src[1]) ? $src[1] : $src[0]), ENT_QUOTES) ?>"><?= htmlspecialchars($src[0]) ?> </a></li> -<?php - else: - # It is presumably an internal source - $src = $src[0]; -?> - <li><?= htmlspecialchars($src) ?></li> - <?php endif; ?> - <?php endwhile; ?> + <?php while (list($k, $src) = each($sources)): ?> + <li><?= pkg_source_link($src[0], $src[1]) ?></li> + <?php endwhile; ?> </ul> </div> -<?php endif; ?> + <?php endif; ?> </div> </div> -- 2.1.2