[aur-dev] [PATCH 2/6] Display package relations on the details page

Lukas Fleischer archlinux at cryptocrack.de
Sat Apr 26 08:54:13 EDT 2014


This adds information from the following three fields to the package
details page:

* conflicts
* provides
* replaces

If either of these fields is empty, it is not displayed.

Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>
---
 web/lib/pkgfuncs.inc.php     | 28 +++++++++++++++++++
 web/template/pkg_details.php | 64 ++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 92 insertions(+)

diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index 2eb0be4..a04f525 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -133,6 +133,34 @@ function pkg_dependencies($pkgid) {
 }
 
 /**
+ * Get package relations for a specific package
+ *
+ * @param int $pkgid The package to get relations for
+ *
+ * @return array All package relations for the package
+ */
+function pkg_relations($pkgid) {
+	$rels = array();
+	$pkgid = intval($pkgid);
+	if ($pkgid > 0) {
+		$dbh = DB::connect();
+		$q = "SELECT pr.RelName, rt.Name, pr.RelCondition, p.ID FROM PackageRelations pr ";
+		$q.= "LEFT JOIN Packages p ON pr.RelName = p.Name ";
+		$q.= "LEFT JOIN RelationTypes rt ON rt.ID = pr.RelTypeID ";
+		$q.= "WHERE pr.PackageID = ". $pkgid . " ";
+		$q.= "ORDER BY pr.RelName";
+		$result = $dbh->query($q);
+		if (!$result) {
+			return array();
+		}
+		while ($row = $result->fetch(PDO::FETCH_NUM)) {
+			$rels[] = $row;
+		}
+	}
+	return $rels;
+}
+
+/**
  * Get the ID of a dependency type given its name
  *
  * @param string $name The name of the dependency type
diff --git a/web/template/pkg_details.php b/web/template/pkg_details.php
index f0bfa0b..da90c9d 100644
--- a/web/template/pkg_details.php
+++ b/web/template/pkg_details.php
@@ -25,6 +25,22 @@ $urlpath = URL_DIR . substr($row['BaseName'], 0, 2) . "/" . $row['BaseName'];
 $deps = pkg_dependencies($row["ID"]);
 $requiredby = pkg_required($row["Name"]);
 
+$rels = pkg_relations($row["ID"]);
+$rels_c = $rels_p = $rels_r = array();
+foreach ($rels as $rel) {
+	switch ($rel[1]) {
+	case "conflicts":
+		$rels_c[] = $rel;
+		break;
+	case "provides":
+		$rels_p[] = $rel;
+		break;
+	case "replaces":
+		$rels_r[] = $rel;
+		break;
+	}
+}
+
 # $sources[0] = 'src';
 $sources = pkg_sources($row["ID"]);
 ?>
@@ -156,6 +172,54 @@ if ($SID && ($uid == $row["MaintainerUID"] ||
 			<th><?= __('License') . ': ' ?></th>
 			<td><?= htmlspecialchars($license) ?></td>
 		</tr>
+		<?php if (count($rels_c) > 0): ?>
+		<tr>
+			<th><?= __('Conflicts') . ': ' ?></th>
+			<td class="wrap relatedto">
+				<?php foreach($rels_c as $rarr): ?>
+				<span class="related">
+					<?php if ($rarr !== end($rels_c)): ?>
+					<?= htmlspecialchars($rarr[0]) ?>,
+					<?php else: ?>
+					<?= htmlspecialchars($rarr[0]) ?>
+					<?php endif; ?>
+				</span>
+				<?php endforeach; ?>
+			</td>
+		</tr>
+		<?php endif; ?>
+		<?php if (count($rels_p) > 0): ?>
+		<tr>
+			<th><?= __('Provides') . ': ' ?></th>
+			<td class="wrap relatedto">
+				<?php foreach($rels_p as $rarr): ?>
+				<span class="related">
+					<?php if ($rarr !== end($rels_p)): ?>
+					<?= htmlspecialchars($rarr[0]) ?>,
+					<?php else: ?>
+					<?= htmlspecialchars($rarr[0]) ?>
+					<?php endif; ?>
+				</span>
+				<?php endforeach; ?>
+			</td>
+		</tr>
+		<?php endif; ?>
+		<?php if (count($rels_r) > 0): ?>
+		<tr>
+			<th><?= __('Replaces') . ': ' ?></th>
+			<td class="wrap relatedto">
+				<?php foreach($rels_r as $rarr): ?>
+				<span class="related">
+					<?php if ($rarr !== end($rels_r)): ?>
+					<?= htmlspecialchars($rarr[0]) ?>,
+					<?php else: ?>
+					<?= htmlspecialchars($rarr[0]) ?>
+					<?php endif; ?>
+				</span>
+				<?php endforeach; ?>
+			</td>
+		</tr>
+		<?php endif; ?>
 		<tr>
 			<th><?= __('Submitter') .': ' ?></th>
 <?php
-- 
1.9.2



More information about the aur-dev mailing list