X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;ds=sidebyside;f=public%2Findex.php;h=b403d19733946259f0a6f42c56908830c48d749c;hb=d99c29923d4822ca1cce6cb3a285c15572571617;hp=181dfcb02be0319053bba0b1296092d3768d6ad7;hpb=c55ec759c79a2ab370df0020f3b66dc1bef2a693;p=pharext%2Freplicator.pharext.org diff --git a/public/index.php b/public/index.php index 181dfcb..b403d19 100644 --- a/public/index.php +++ b/public/index.php @@ -1,157 +1,105 @@ - - - - - Replicator - - - - - - -
-
-

- Replicator
- Replicating PECL releases as pharext packages since 2015 -

- Fork me on GitHub -
-
-
- - - + } + } + return gmdate("Y-m-d", $t); +} -

- - - - - - - - - - +function sigof($phar, $typ) { + return str_replace("phars/", "sigs/", $phar) . ".$typ"; +} - - - - - - +function package_info($package) { + if (($xml = simplexml_load_file("phars/$package/info.xml"))) { + return [ + "title" => (string) $xml->s, + "description" => (string) $xml->d, + "license" => (string) $xml->l + ]; + } +} - -
PackageDateSize
- - - getMetadata(); + unset($data); - $time = time(); - $dsec = 86400; - $lmod = filemtime($phar); - $days = [1 => "today", "yesterday"]; - do { - for ($i = 1; $i < 7; ++$i) { - if ($lmod > $time - $dsec * $i) { - switch ($i) { - case 1: - echo "today"; - break 3; - case 2: - echo "yesterday"; - break 3; - default: - echo "$i days ago"; - break 3; - } - } - } - echo date("Y-m-d", $lmod); - } while (false); - - ?> + if ($meta) { + $release = $meta["release"]; + } else { + $release = substr($name, strlen($package)+1); + } - - $sigext) { + if (file_exists($sigdat = sigof($file, $sigext))) { + $sigs[$sigtyp] = $sigdat; + } + } + $size = filesize($file); + $date = isset($meta["date"]) ? strtotime($meta["date"]) : filemtime($file); + $pharext = isset($meta["version"]) ? $meta["version"] : "2.0.1"; + $versions[$release][$enc] = ["phar" => $file] + compact("date", "size", "pharext", "sigs"); + } + uksort($versions[$release], function($a, $b) { + $al = strlen($a); + $bl = strlen($b); + if ($al < $bl) return -1; + if ($al > $bl) return 1; + return 0; + }); + } + uksort($versions, "version_compare"); + return $versions; +} - ?> -
- +$packages = array_map("basename", glob("phars/*", GLOB_NOSORT|GLOB_ONLYDIR)); +sort($packages, SORT_NATURAL|SORT_FLAG_CASE); -

Available Packages

- - - +$res = new Response; +$req = new Request; -
- - - +if (!defined("INCLUDED")) { + if (($acc = $req->getHeader("Accept", Header::class))) { + $neg = basename($acc->negotiate(["text/html", "application/json"])); + } else { + $neg = "html"; + } + include_once "$neg.php"; +}