diff options
-rw-r--r-- | web/lib/pkgfuncs.inc.php | 43 | ||||
-rw-r--r-- | web/template/pkg_details.php | 13 |
2 files changed, 45 insertions, 11 deletions
diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php index 153e2a83..5c30a95a 100644 --- a/web/lib/pkgfuncs.inc.php +++ b/web/lib/pkgfuncs.inc.php @@ -116,8 +116,9 @@ function pkg_dependencies($pkgid) { $pkgid = intval($pkgid); if ($pkgid > 0) { $dbh = DB::connect(); - $q = "SELECT pd.DepName, pd.DepCondition, p.ID FROM PackageDepends pd "; + $q = "SELECT pd.DepName, dt.Name, pd.DepCondition, p.ID FROM PackageDepends pd "; $q.= "LEFT JOIN Packages p ON pd.DepName = p.Name "; + $q.= "LEFT JOIN DependencyTypes dt ON dt.ID = pd.DepTypeID "; $q.= "WHERE pd.PackageID = ". $pkgid . " "; $q.= "ORDER BY pd.DepName"; $result = $dbh->query($q); @@ -147,6 +148,46 @@ function pkg_dependency_type_id_from_name($name) { } /** + * Get the HTML code to display a package dependency link + * + * @param string $name The name of the dependency + * @param string $type The name of the dependency type + * @param string $cond The package dependency condition string + * @param int $pkg_id The package of the package to display the dependency for + * + * @return string The HTML code of the label to display + */ +function pkg_depend_link($name, $type, $cond, $pkg_id) { + if ($type == 'optdepends' && strpos($name, ':') !== false) { + $tokens = explode(':', $name, 2); + $name = $tokens[0]; + $desc = $tokens[1]; + } else { + $desc = '(unknown)'; + } + + $link = '<a href="'; + if (is_null($pkg_id)) { + $link .= 'https://www.archlinux.org/packages/?q=' . urlencode($name); + } else { + $link .= htmlspecialchars(get_pkg_uri($name), ENT_QUOTES); + } + $link .= '" title="' . __('View packages details for') .' ' . htmlspecialchars($name) . '">'; + $link .= htmlspecialchars($name) . '</a>'; + $link .= htmlspecialchars($cond); + + if ($type == 'makedepends') { + $link .= ' <em>(make)</em>'; + } elseif ($type == 'checkdepends') { + $link .= ' <em>(check)</em>'; + } elseif ($type == 'optdepends') { + $link .= ' <em>(optional) – ' . htmlspecialchars($desc) . ' </em>'; + } + + return $link; +} + +/** * Determine packages that depend on a package * * @param string $name The package name for the dependency search diff --git a/web/template/pkg_details.php b/web/template/pkg_details.php index 3eaeac79..ef40f1f6 100644 --- a/web/template/pkg_details.php +++ b/web/template/pkg_details.php @@ -219,16 +219,9 @@ if ($row["MaintainerUID"]): <h3><?= __('Dependencies') . " (" . count($deps) . ")"?></h3> <?php if (count($deps) > 0): ?> <ul> -<?php - while (list($k, $darr) = each($deps)): - # darr: (DepName, DepCondition, PackageID), where ID is NULL if it didn't exist - if (!is_null($darr[2])): -?> - <li><a href="<?= htmlspecialchars(get_pkg_uri($darr[0]), ENT_QUOTES); ?>" title="<?= __('View packages details for').' '. htmlspecialchars($darr[0]) ?>"><?= htmlspecialchars($darr[0]) ?></a><?= htmlspecialchars($darr[1]) ?></li> - <?php else: ?> - <li><a href="https://www.archlinux.org/packages/?q=<?= urlencode($darr[0])?>" title="<?= __('View packages details for').' ' . htmlspecialchars($darr[0]) ?>"><?= htmlspecialchars($darr[0]) ?></a><?= htmlspecialchars($darr[1]) ?></li> - <?php endif; ?> - <?php endwhile; ?> +<?php while (list($k, $darr) = each($deps)): ?> + <li><?= pkg_depend_link($darr[0], $darr[1], $darr[2], $darr[3]); ?></li> +<?php endwhile; ?> </ul> <?php endif; ?> </div> |