summaryrefslogtreecommitdiff
path: root/feeds/feed.php
diff options
context:
space:
mode:
authorErich Eckner <git@eckner.net>2019-05-22 12:57:06 +0200
committerErich Eckner <git@eckner.net>2019-05-22 12:57:06 +0200
commit43ccda16412ef964f20f16501e2053dd0220d936 (patch)
tree462c544890383ef0980011f29f4bef1d8f06dffa /feeds/feed.php
parent1d0a889c627ceec69ed817c425a40912414ce9e8 (diff)
downloadarchweb32-43ccda16412ef964f20f16501e2053dd0220d936.tar.xz
feeds are now served from a single php file
Diffstat (limited to 'feeds/feed.php')
-rw-r--r--feeds/feed.php294
1 files changed, 0 insertions, 294 deletions
diff --git a/feeds/feed.php b/feeds/feed.php
deleted file mode 100644
index 65fc372..0000000
--- a/feeds/feed.php
+++ /dev/null
@@ -1,294 +0,0 @@
-<?php
-
-require_once "../init.php";
-
-require_once BASE . "/lib/mysql.php";
-
-$uri_parts = explode('/', $_SERVER['REQUEST_URI']);
-
-if ($uri_parts[0] != '' || $uri_parts[1] != 'feeds')
- throw_http_error(422, 'Unprocessable Entity');
-
-$last = array_pop($uri_parts);
-if ($last != '')
- array_push($uri_parts, $last);
-
-array_splice(
- $uri_parts,
- 0, 2
-);
-
-if ($uri_parts[0] == 'releases') {
- if (count($uri_parts) != 1)
- throw_http_error(501, "Not Implemented", '/feeds/' . implode('/',$uri_parts));
- $available_isos = apcu_fetch('available_isos', $apcu_success);
- if ($apcu_success == false || true) {
- $ch = curl_init("https://mirror.archlinux32.org/archisos/");
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- $listing = curl_exec($ch);
- curl_close($ch);
- preg_match_all(
- ',<a href="(archlinux-([0-9]{4}\.[0-9]{2}\.[0-9]{2})-([^.]+)\.iso)">\1</a>\s+(\S+)\s+\S+\s+([0-9]+)\s*\n,',
- $listing,
- $matches,
- PREG_SET_ORDER
- );
- $available_isos = array();
- foreach ($matches as $match) {
- $available_isos[] = array(
- 'file' => $match[1],
- 'title' => $match[2] . '-' . $match[3],
- 'build_date' => strtotime(str_replace('.', '-', $match[2])),
- 'build_type' => $match[3],
- 'release_date' => $match[4],
- 'size' => $match[5]
- );
- }
- apcu_store('available_isos', $available_isos, 3600);
- }
-
- header('Content-Type: application/rss+xml; charset=utf-8');
- print "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
- print "<rss version=\"2.0\">";
- print "<channel>";
- print "<title>";
- print "Arch Linux 32: Releases";
- print "</title>";
- print "<link>";
- print "https://www.archlinux32.org/download/";
- print "</link>";
- print "<description>";
- print "Release ISOs";
- print "</description>";
- print "<atom:link href=\"https://www.archlinux32.org/feeds/releases/\" rel=\"self\">";
- print "</atom:link>";
- print "<language>";
- print "en-us";
- print "</language>";
- print "<lastBuildDate>";
- print date('Y-m-d', $available_isos[0]['build_date']);
- print "</lastBuildDate>";
- foreach ($available_isos as $available_iso) {
- print "<item>";
- print "<title>";
- print $available_iso['title'];
- print "</title>";
- // TODO: link to iso description (do we want that?)
- print "<description>";
- print "</description>";
- print "<pubDate>";
- print date('Y-m-d', $available_iso['release_date']);
- print "</pubDate>";
- // TODO: guid
- print "<enclosure length=\"";
- print date('Y-m-d', $available_iso['size']);
- print "\" type=\"application/x-bittorrent\">";
- // TODO: url=\"https://www.archlinux32.org/iso/2019.02.01/archlinux-2019.02.01-x86_64.iso.torrent\">";
- print "</enclosure>";
- print "</item>";
- }
- print "</channel>";
- print "</rss>";
-
- die();
-}
-
-if ($uri_parts[0] == 'packages') {
-
- array_splice(
- $uri_parts,
- 0, 1
- );
-
-// TODO: implement "added" and "removed" - but how?
-// $actions = array('' => '', 'added' => 'added', 'removed' => 'removed');
- $actions = array('' => '');
- $archs = array('all' => 'all');
- $result = mysql_run_query(
- "SELECT DISTINCT `architectures`.`name` FROM `architectures`" .
- mysql_join_architectures_repositories() .
- " WHERE `repositories`.`is_on_master_mirror`" .
- " ORDER BY `name`"
- );
- while ($row = $result -> fetch_assoc())
- $archs[$row['name']] = $row['name'];
- $repos = array('' => '');
- $result = mysql_run_query(
- "SELECT DISTINCT `repositories`.`name` FROM `repositories` WHERE `repositories`.`is_on_master_mirror` ORDER BY `name`"
- );
- while ($row = $result -> fetch_assoc())
- $repos[$row['name']] = $row['name'];
-
- if (count($uri_parts) > 0 && array_key_exists($uri_parts[0], $actions)) {
- $action = $uri_parts[0];
- $action_filter = 'unimplemented';
- array_splice(
- $uri_parts,
- 0, 1
- );
- }
- else {
- $action = '';
- $action_filter = '`repositories`.`is_on_master_mirror`';
- }
-
- if (count($uri_parts) > 0) {
- if (!array_key_exists($uri_parts[0], $archs))
- throw_http_error(501, "Not Implemented", implode('/',$uri_parts));
- $arch = $uri_parts[0];
- $arch_filter = ' AND `r_a`.`name`="' . $arch . '"';
- array_splice(
- $uri_parts,
- 0, 1
- );
- }
- else {
- $arch = '';
- $arch_filter = '';
- }
-
- if (count($uri_parts) > 0) {
- if (!array_key_exists($uri_parts[0], $repos))
- throw_http_error(501, "Not Implemented", implode('/',$uri_parts));
- $repo = $uri_parts[0];
- $repo_filter = ' AND `repositories`.`name`="' . $repo . '"';
- array_splice(
- $uri_parts,
- 0, 1
- );
- }
- else {
- $repo = '';
- $repo_filter = '';
- }
-
- if (count($uri_parts) != 0)
- throw_http_error(501, "Not Implemented", implode('/',$uri_parts));
-
- $result = mysql_run_query(
- "SELECT MAX(`build_assignments`.`return_date`) AS `max_build_date`" .
- " FROM `build_assignments`" .
- mysql_join_build_assignments_binary_packages() .
- mysql_join_binary_packages_binary_packages_in_repositories() .
- mysql_join_binary_packages_in_repositories_repositories() .
- mysql_join_repositories_architectures("", "r_a") .
- " WHERE " . $action_filter . $repo_filter . $arch_filter
- );
- $max_build_date = $result -> fetch_assoc();
- $max_build_date = $max_build_date['max_build_date'];
-
- $result = mysql_run_query(
- "SELECT `binary_packages`.`pkgname`," .
- "`binary_packages`.`epoch`," .
- "`binary_packages`.`pkgver`," .
- "`binary_packages`.`pkgrel`," .
- "`binary_packages`.`sub_pkgrel`," .
- "`binary_packages`.`sub_pkgrel_omitted`," .
- "`architectures`.`name` AS `architecture`," .
- "`repositories`.`name` AS `repo`," .
- "`r_a`.`name` AS `r_a`," .
- "`binary_packages_in_repositories`.`last_moved`" .
- " FROM `binary_packages`" .
- mysql_join_binary_packages_binary_packages_in_repositories() .
- mysql_join_binary_packages_in_repositories_repositories() .
- mysql_join_repositories_architectures("", "r_a") .
- mysql_join_binary_packages_architectures() .
- " WHERE " . $action_filter . $repo_filter . $arch_filter .
- " ORDER BY `binary_packages_in_repositories`.`last_moved` DESC" .
- " LIMIT 50"
- );
- $packages = array();
- while ($row = $result -> fetch_assoc())
- $packages[] = $row;
-
- header('Content-Type: application/rss+xml; charset=utf-8');
-
- print "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
- print "<rss version=\"2.0\">";
- print "<channel>";
- print "<title>";
- print "Arch Linux 32: ";
- switch ($action) {
- case '':
- print "Recent package updates";
- break;
- case 'added':
- print "Recent added packages";
- break;
- case 'removes':
- print "Recent removed packages";
- break;
- }
- if ($arch != 'all')
- print " (" . $arch;
- if ($repo != '')
- print " [" . $repo . "]";
- if ($arch != '')
- print ")";
- print "</title>";
- print "<link>";
- print "https://www.archlinux32.org/packages/";
- print "</link>";
- print "<description>";
- switch ($action) {
- case '':
- print "Recently updated packages in the Arch Linux 32 package repositories";
- break;
- case 'added':
- print "Recently added packages to the Arch Linux 32 package repositories";
- break;
- case 'removes':
- print "Recently removed packages from the Arch Linux 32 package repositories";
- break;
- }
- if ($arch != 'all')
- print " for the '" . $arch . "' architecture (including 'any' packages)";
- else
- print " for all architectures";
- if ($repo != '')
- print " in the [" . $repo . "] repository";
- print ".";
- print "</description>";
- print "<atom:link href=\"https://www.archlinux32.org" . $_SERVER['REQUEST_URI'] . "\" rel=\"self\">";
- print "</atom:link>";
- print "<language>";
- print "en-us";
- print "</language>";
- print "<lastBuildDate>";
- print $max_build_date;
- print "</lastBuildDate>";
- foreach ($packages as $package) {
- print "<item>";
- print "<title>";
- print $package['pkgname'];
- if ($package['epoch'] != 0)
- print $package['epoch'] . ":";
- print $package['pkgver'] . "-" . $package['pkgrel'];
- if (!$package['sub_pkgrel_omitted'])
- print '.' . $package['sub_pkgrel'];
- print ' ' . $package['architecture'];
- print "</title>";
- print "<link>";
- print "https://www.archlinux32.org/packages/" . $package['repo'] . "/" . $package['r_a'] . "/" . $package['pkgname'] . "/";
- print "</link>";
-// TODO: description
- print "<pubDate>";
- print $package['last_moved'];
- print "</pubDate>";
-// TODO: guid
- print "<category>";
- print $package['repo'];
- print "</category>";
- print "<category>";
- print $package['r_a'];
- print "</category>";
- print "</item>";
- }
- print "</channel>";
- print "</rss>";
-
- die();
-
-}
-
-throw_http_error(501, "Not Implemented");