wordpress-theme-openmamba/distroquery.php

266 lines
11 KiB
PHP

<?php
/**
* Distroquery API Template
*
*
* @file distroquery.php
* @package openmamba-theme
* @author Silvan Calarco
* @copyright 2024
* @license license.txt
* @version Release: 1.0
*/
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) {
exit;
}
$url_prefix = home_url() . "/rpms/";
?>
<?php get_header(); ?>
<div id="content-full" class="grid col-940"><span id="distromatic">
<?php
// Navigation bar
echo "<a href=\"" . home_url() . "\">Home</a>";
$repo=get_query_var('repo');
$package=get_query_var('package');
$arch=get_query_var('arch');
if ($repo == "") {
//
// Repositories
//
echo " > " . _r("Repositories");
echo "<h1>" . _r("Available repositories") . ":</h1>";
$request = wp_remote_get('https://push.openmamba.org/openmamba/distroquery/api/v1/repositories');
$j = json_decode($request["body"], true);
foreach ($j as $repository) {
$repository_url = $url_prefix . $repository["tag"];
echo "<a href=\"" . $repository_url . "\">". $repository["tag"] . "</a>: " . $repository["description"] . "</br>";
}
} else if ($package == "") {
//
// Repository
//
echo " > <a href=\"" . $url_prefix . "\">Repositories</a>";
$page = $_GET['page'];
$q = $_GET['q'];
$query_append = "";
if ($page != "") $query_append="&page=" . $page;
if ($q != "") $query_append .= "&q=" . urlencode($q);
if ($query_append[0] == '&') $query_append[0] = "?";
$request = wp_remote_get('https://push.openmamba.org/openmamba/distroquery/api/v1/repository/' . $repo . $query_append);
$j = json_decode($request["body"], true);
if ($j["error"] != "") {
echo "<h3>ERROR: " . $j["error"] . "</h3>";
} else {
echo " > " . $repo;
echo "<h1>" . _r("List of packages") . ":</h1>";
echo "<form id=\"distroquery\" method=\"get\" action=\"" . $url_prefix . "/" . $repo . "\">";
echo "<label class=\"screen-reader-text\" for=\"q\">" . _r("Search packages") . ":</label>";
echo "<input id=\"q\" class=\"field\" type=\"text\" name=\"q\" placeholder=\"" . _r("Search here") . "\"> - ";
if ($q != "") echo _r("Results for:") . " <strong>" . $q . "</strong> - ";
// Pagination
if ($j["query"]["pages"]) {
$query_append = "";
if ($q != "") $query_append .= "&q=" . urlencode($q);
$page = $j["query"]["page"];
$pages = $j["query"]["pages"];
$from_page = 1;
if ($page > 10) $from_page = $page - 10;
$to_page = $from_page + 20;
if ($to_page > $pages) {
$to_page = $pages;
$from_page = $to_page - 20;
if ($from_page < 1) $from_page = 1;
}
echo "" . $j["query"]["total"] . " " . _r("result(s) found") . " - " .
_r("Showing page") . " " . $page . " " . _r("of") . " " . $pages . " [ ";
if ($from_page > 1) {
$back_page = $from_page - 10;
if ($back_page < 1) $back_page = 1;
echo "<a href=\"" . $url_prefix . "/" . $repo . "?page=" . $back_page . $query_append . "\">&lt;</a>&nbsp;";
}
for ($i = $from_page; $i <= $to_page; $i++) {
if ($i != $j["query"]["page"]) {
echo "<a href=\"" . $url_prefix . "/" . $repo . "?page=" . $i . $query_append . "\">" . $i . "</a>&nbsp;";
} else {
echo "<strong>" . $i . "</strong>&nbsp";
}
}
if ($to_page < $pages) {
$next_page = $to_page + 10;
if ($next_page > $pages) $next_page = $pages;
if ($next_page < 1) $next_page = 1;
echo "<a href=\"" . $url_prefix . "/" . $repo . "?page=" . $next_page . $query_append . "\">&gt;</a>&nbsp;";
}
echo "]</br>";
} else {
echo "0 " . _r("result(s) found");
}
echo "<table class=\"pkgpage\"><tr><th>" . _r("Name") . "</th><th>" . _r("Version") . "</th><th>" .
_r("Summary") . "</th><th>" . _r("Last update") . "</th></tr>";
foreach ($j["packages"] as $package) {
$package_url = $url_prefix . $repo . "/" . $package["name"];
echo "<tr><td><a href=\"" . $package_url . "\">". $package["name"] . "</a></td><td>" .
$package["version"] . "-" . $package["release"] . "</td><td>" .
$package["summary"] . "</td><td style=\"white-space:no-wrap\">" . substr($package["buildtime"], 0, 10) . "</td></tr>";
}
echo "</table>";
echo "</form>";
}
} else if ($arch == "") {
//
// Source package
//
echo " > <a href=\"" . $url_prefix . "\">" . _r("Repositories") . "</a>";
$request = wp_remote_get('https://push.openmamba.org/openmamba/distroquery/api/v1/package/'. $repo . "/" . $package);
$j = json_decode($request["body"], true);
if ($j["error"] != "") {
echo "<h3>" . _r("ERROR") . ": " . $j["error"] . "</h3>";
} else {
echo " > <a href=\"" . $url_prefix . "/" . $repo . "\">$repo</a> > " . $package;
?>
<div class="box" style="float:right;min-width:150px;padding:10px;">
<b><?php echo _r("Resources") ?>:</b><br/>
<a href="<?php echo $j["source_url"] ?>" target=_blank><?php echo _r("Source files") ?></a> |
<a href="<?php echo $j["source_url"] ?>/commits/branch/main" target=_blank><?php echo _r("Changes") ?></a><br/>
<a href="<?php echo $j["source_url"] ?>/issues" target=_blank><?php echo _r("Issues") ?></a> |
<a href="<?php echo $j["source_url"] ?>/issues/new" target=_blank><?php echo _r("Add a new issue") ?></a><br/>
<a href="<?php echo $j["download_url"] ?>" target=_blank><?php echo _r("Download") ?></a>
</div>
<h1><img src="https://www.google.com/s2/favicons?domain=<?php echo $j["url"] ?>" width="24" height="24">
<?php echo $j["name"] ?>: <?php echo $j["summary"] ?></h1>
<table class="pkgpage" width="100%">
<tr><td width="15%"><?php echo _r("Name") ?>:</td><td><?php echo $j["name"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Release") ?>:</td><td>
<?php if ($j["epoch"] != "0") echo $j["epoch"].":";
echo $j["version"]."-".$j["release"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Group") ?>:</td><td><?php echo $j["group"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Maintainer") ?>:</td><td><?php echo $j["maintainer"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Description") ?>:</td><td><?php echo $j["description"] ?></td></tr>
<tr><td width="15%"><?php echo _r("License") ?>:</td><td><?php echo $j["license"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Size") ?>:</td><td><?php echo $j["size"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Upstream URL") ?>:</td><td><a href="<?php echo $j["url"] ?>" target=_blank><?php echo $j["url"] ?></a></td></tr>
<tr><td width="15%"><?php echo _r("Build time") ?>:</td><td><?php echo iso8601_to_datetime($j["buildtime"]) ?></td></tr>
<tr><td width="15%"><?php echo _r("Built RPMS") ?>:</td><td><?php
foreach ($j["children"] as $child) {
$child_url = $url_prefix . $repo . "/" . $child["name"] . "/" . $child["arch"];
echo "<a href=\"" . $child_url . "\">" . $child["name"] . "(" . $child["arch"] . ")</a> ";
} ?>
</td></tr>
<tr><td width="15%"><?php echo _r("Build requirements") ?>:</td><td><?php
foreach ($j["buildrequires"] as $buildrequire) {
echo $buildrequire["name"];
if ($buildrequire["flags"] != "") echo "[" . $buildrequire["flags"] . $buildrequire["version"] . "]";
echo " ";
} ?>
</td></tr>
</table>
<?php
}
} else if ($arch != "") {
//
// Package
//
echo " > <a href=\"" . $url_prefix . "\">" . _r("Repositories") . "</a>";
$request = wp_remote_get('https://push.openmamba.org/openmamba/distroquery/api/v1/package/'. $repo . "/" . $package . "/" . $arch);
$j = json_decode($request["body"],true);
if ($j["error"] != "") {
echo "<h3>" . _r("ERROR") . ": " . $j["error"] . "</h3>";
} else {
echo " > <a href=\"" . $url_prefix . "/" . $repo . "\">$repo</a> > " . $package . " (" . $arch . ")";
?>
<div class="box" style="float:right;min-width:150px;padding:10px;">
<b><?php echo _r("Resources") ?>:</b><br/>
<a href="<?php echo $j["source"]["source_url"] ?>" target=_blank><?php echo _r("Source files") ?></a> |
<a href="<?php echo $j["source"]["source_url"] ?>/commits/branch/main" target=_blank><?php echo _r("Changes") ?></a><br/>
<a href="<?php echo $j["source"]["source_url"] ?>/issues" target=_blank><?php echo _r("Issues") ?></a> |
<a href="<?php echo $j["source"]["source_url"] ?>/issues/new" target=_blank><?php echo _r("Add a new issue") ?></a><br/>
<a href="<?php echo $j["download_url"] ?>" target=_blank><?php echo _r("Download") ?></a>
</div>
<h1><img src="https://www.google.com/s2/favicons?domain=<?php echo $j["source"]["url"] ?>" width="24" height="24">
<?php echo $j["name"] ?>: <?php echo $j["summary"] ?></h1>
<table class="pkgpage" width="100%">
<tr><td width="15%"><?php echo _r("Name") ?>:</td><td><?php echo $j["name"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Release") ?>:</td><td>
<?php if ($j["source"]["epoch"] != "0") echo $j["source"]["epoch"].":";
echo $j["source"]["version"]."-".$j["source"]["release"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Architecture") ?>:</td><td><?php echo $j["arch"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Group") ?>:</td><td><?php echo $j["group"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Description") ?>:</td><td><?php echo $j["description"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Size") ?>:</td><td><?php echo $j["size"] ?></td></tr>
<tr><td width="15%"><?php echo _r("Upstream URL") ?>:</td><td><a href="<?php echo $j["source"]["url"] ?>" target=_blank><?php echo $j["source"]["url"] ?></a></td></tr>
<tr><td width="15%"><?php echo _r("Source RPM") ?>:</td><td><?php
$sourcerpm_url = $url_prefix . $repo . "/" . $j["source"]["name"];
echo "<a href=\"". $sourcerpm_url . "\">". $j["source"]["name"] . "</a> "; ?>
<tr><td width="15%"><?php echo _r("Brothers") ?>:</td><td><?php
foreach ($j["brothers"] as $brother) {
$brother_url = $url_prefix . $repo . "/" . $brother . "/" . $arch;
echo "<a href=\"". $brother_url . "\">". $brother . "</a> ";
} ?>
</td></tr>
<tr><td width="15%"><?php echo _r("Provides") ?>:</td><td><?php
foreach ($j["provides"] as $provide) {
echo $provide["name"];
if ($provide["flags"] != "") echo "[" . $provide["flags"] . $provide["version"] . "]";
echo " ";
} ?>
</td></tr>
<tr><td width="15%"><?php echo _r("Obsoletes") ?>:</td><td><?php
foreach ($j["obsoletes"] as $obsolete) {
echo $obsolete["name"];
if ($obsolete["flags"] != "") echo "[" . $obsolete["flags"] . $obsolete["version"] . "]";
echo " ";
} ?>
</td></tr>
<tr><td width="15%"><?php echo _r("Requires") ?>:</td><td><?php
foreach ($j["requires"] as $require) {
echo $require["name"];
if ($require["flags"] != "") echo "[" . $require["flags"] . $require["version"] . "]";
echo " ";
} ?>
</td></tr>
</table>
<?php
}
}
?>
</span></div><!-- end of #content-full -->
<?php get_footer(); ?>