diff options
-rw-r--r-- | feeds/feed.php | 125 |
1 files changed, 124 insertions, 1 deletions
diff --git a/feeds/feed.php b/feeds/feed.php index 040c36d..177071b 100644 --- a/feeds/feed.php +++ b/feeds/feed.php @@ -1,3 +1,126 @@ <?php -echo "sry, this is not yet implemented: " . $_SERVER['REQUEST_URI']; +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 +); + +// TODO +if ($uri_parts[0] == 'releases') + throw_http_error(501, "Not Implemented", "Sry, the releases-feed is not yet implemented."); + +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]; + array_splice( + $uri_parts, + 0, 1 + ); + } + else + $action = ''; + + 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]; + array_splice( + $uri_parts, + 0, 1 + ); + } + else + $arch = ''; + + 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]; + array_splice( + $uri_parts, + 0, 1 + ); + } + else + $repo = ''; + + if (count($uri_parts) != 0) + throw_http_error(501, "Not Implemented", implode('/',$uri_parts)); + +# $result = mysql_run_query( +# TODO +# ); + + 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 != '') + print " (" . $arch; + if ($repo != '') + print " [" . $repo . "]"; + if ($arch != '') + print ")"; + print "</title>"; + print "<link>"; + print "https://archlinux32.org" . $_SERVER['REQUEST_URI']; + print "</link>"; + print "<description>"; + print "</description>"; +# TODO + print "</channel>"; + + die(); + +} + +throw_http_error(501, "Not Implemented"); |