First commit
This commit is contained in:
commit
3611104c8c
|
@ -0,0 +1,3 @@
|
|||
.idea/
|
||||
vendor/
|
||||
composer.lock
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"name": "sikofitt/php-version",
|
||||
"authors": [
|
||||
"sikofitt <sikofitt@gmail.com>"
|
||||
],
|
||||
"description": "Pulls version information from qa.php.net/api.php",
|
||||
"main": "",
|
||||
"license": "GPL-3.0",
|
||||
"homepage": "",
|
||||
"private": true,
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"test",
|
||||
"tests"
|
||||
],
|
||||
"dependencies": {
|
||||
"uikit": "^2.27.2"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"name": "sikofitt/php-version",
|
||||
"description": "Pulls version information from qa.php.net/api.php",
|
||||
"type": "project",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"Sikofitt\\":"src/Sikofitt"
|
||||
}
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.0.0",
|
||||
"guzzlehttp/guzzle": "^6.2",
|
||||
"webmozart/json": "^1.2",
|
||||
"doctrine/collections": "^1.3",
|
||||
"twig/twig": "^1.28"
|
||||
},
|
||||
"license": "GPL-3.0",
|
||||
"authors": [
|
||||
{
|
||||
"name": "sikofitt",
|
||||
"email": "sikofitt@gmail.com"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<title>Recent Version of PHP</title>
|
||||
<link rel="stylesheet" type="text/css" href="vendor/uikit/css/uikit.almost-flat.min.css"/>
|
||||
<style type="text/css">
|
||||
.uk-modal-content h3 {
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="uk-container uk-container-center uk-margin-large-top uk-margin-large-bottom">
|
||||
<h1 class="uk-text-center uk-text-primary">Recent RC Version of PHP</h1>
|
||||
{% if release is null %}
|
||||
<div class="uk-width-1-1">
|
||||
<h3>No RC Releases Found.</h3>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="uk-width-1-1">
|
||||
{% set fullVersion = release.version ~ release.release.type ~ release.release.number %}
|
||||
<h3 class="uk-align-medium-left">{{ fullVersion }}</h3>
|
||||
<div class="uk-grid uk-grid-large">
|
||||
|
||||
{% for file in release.release.files %}
|
||||
|
||||
<div class="uk-width-1-3">
|
||||
<div class="uk-panel uk-panel-box uk-grid">
|
||||
<div class="uk-panel-badge uk-badge">{{ file.type|upper }}</div>
|
||||
<h3 class="uk-panel-title">php-{{ fullVersion }}.tar.{{ file.type }}</h3>
|
||||
<div class="uk-width-1-1 uk-grid">
|
||||
<div class="uk-width-1-3">
|
||||
<a href="{{ file.path }}" title="{{ file.type|upper }}">Download</a>
|
||||
</div>
|
||||
<div class="uk-width-1-3">
|
||||
<a href="javascript:;;" onclick="UIkit.modal.alert('<h3>{{ file.md5 }}<?h3>');">MD5</a>
|
||||
</div>
|
||||
<div class="uk-width-1-3">
|
||||
<a href="javascript:;;" onclick="UIkit.modal.alert('<h3>{{ file.sha256 }}</h3>');">SHA256</a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<script type="text/javascript" src="vendor/jquery/dist/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="vendor/uikit/js/uikit.min.js"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,110 @@
|
|||
<?php
|
||||
/**
|
||||
* This is a stupid php thing to pull the most recent releases
|
||||
* from qa.php.net/api.php
|
||||
*/
|
||||
|
||||
require 'vendor/autoload.php';
|
||||
|
||||
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
use GuzzleHttp\Client;
|
||||
use Sikofitt\PhpVersion\Entity\{
|
||||
FileInfo, ReleaseInfo, VersionInfo
|
||||
};
|
||||
use Webmozart\Json\JsonDecoder;
|
||||
|
||||
$client = new Client(
|
||||
[
|
||||
'base_uri' => 'https://qa.php.net/api.php',
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
$result = $client->get(
|
||||
'',
|
||||
[
|
||||
'query' => [
|
||||
'type' => 'qa-releases',
|
||||
'format' => 'json',
|
||||
],
|
||||
]
|
||||
);
|
||||
|
||||
|
||||
$contents = $result
|
||||
->getBody()
|
||||
->getContents();
|
||||
|
||||
$json = new JsonDecoder();
|
||||
|
||||
$decoded = $json->decode($contents);
|
||||
|
||||
$releases = new ArrayCollection();
|
||||
|
||||
foreach ($decoded as $key => $value) {
|
||||
|
||||
if ('releases' === $key || 'reported' === $key) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$versionInfo = new VersionInfo();
|
||||
|
||||
$versionInfo
|
||||
->setActive($value->active)
|
||||
->setDevVersion($value->dev_version)
|
||||
->setVersion($key);
|
||||
|
||||
$info = new ReleaseInfo();
|
||||
|
||||
$info->setType($value->release->type)
|
||||
->setNumber($value->release->number)
|
||||
->setVersion(isset($value->release->version) ?? "")
|
||||
->setMd5Bz2($value->release->md5_bz2)
|
||||
->setMd5Gz($value->release->md5_gz)
|
||||
->setMd5Xz($value->release->md5_xz)
|
||||
->setSha256Bz2($value->release->sha256_bz2)
|
||||
->setSha256Gz($value->release->sha256_gz)
|
||||
->setSha256Xz($value->release->sha256_xz)
|
||||
->setDate($value->release->date)
|
||||
->setBaseUrl($value->release->baseurl);
|
||||
|
||||
if (isset($value->release->files)) {
|
||||
foreach ($value->release->files as $fileKey => $fileValue) {
|
||||
$file = new FileInfo();
|
||||
|
||||
$file->setType($fileKey)
|
||||
->setMd5($fileValue->md5)
|
||||
->setSha256($fileValue->sha256)
|
||||
->setPath($fileValue->path);
|
||||
|
||||
$info->addFile($file);
|
||||
}
|
||||
}
|
||||
|
||||
$versionInfo->setRelease($info);
|
||||
|
||||
$releases->set($versionInfo->getVersion(), $versionInfo);
|
||||
|
||||
}
|
||||
|
||||
|
||||
$twig = new Twig_Environment(
|
||||
new Twig_Loader_Filesystem([ __DIR__])
|
||||
);
|
||||
|
||||
$releases = $releases->filter(
|
||||
function (VersionInfo $version) {
|
||||
return 0 !== $version->getRelease()->getNumber();
|
||||
}
|
||||
);
|
||||
if(false === $releases->isEmpty()) {
|
||||
foreach ($releases as $release)
|
||||
{
|
||||
$twig->display('index.html.twig', ['release' => $release]);
|
||||
}
|
||||
} else {
|
||||
$twig->display('index.html.twig', ['release' => null]);
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<?php
|
||||
/**
|
||||
* This is a stupid php thing to pull the most recent releases
|
||||
* from qa.php.net/api.php
|
||||
*/
|
||||
|
||||
namespace Sikofitt\PhpVersion\Entity;
|
||||
|
||||
|
||||
/**
|
||||
* Class FileInfo
|
||||
*
|
||||
* @package Sikofitt\PhpVersion\Entity
|
||||
*/
|
||||
class FileInfo
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $path;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $md5;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $sha256;
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getType(): string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
*
|
||||
* @return FileInfo
|
||||
*/
|
||||
public function setType(string $type): FileInfo
|
||||
{
|
||||
$this->type = $type;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPath(): string
|
||||
{
|
||||
return $this->path;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $path
|
||||
*
|
||||
* @return FileInfo
|
||||
*/
|
||||
public function setPath(string $path): FileInfo
|
||||
{
|
||||
$this->path = $path;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMd5(): string
|
||||
{
|
||||
return $this->md5;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $md5
|
||||
*
|
||||
* @return FileInfo
|
||||
*/
|
||||
public function setMd5(string $md5): FileInfo
|
||||
{
|
||||
$this->md5 = $md5;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSha256(): string
|
||||
{
|
||||
return $this->sha256;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sha256
|
||||
*
|
||||
* @return FileInfo
|
||||
*/
|
||||
public function setSha256(string $sha256): FileInfo
|
||||
{
|
||||
$this->sha256 = $sha256;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,349 @@
|
|||
<?php
|
||||
/**
|
||||
* This is a stupid php thing to pull the most recent releases
|
||||
* from qa.php.net/api.php
|
||||
*/
|
||||
|
||||
namespace Sikofitt\PhpVersion\Entity;
|
||||
|
||||
|
||||
use Doctrine\Common\Collections\ArrayCollection;
|
||||
|
||||
/**
|
||||
* Class ReleaseInfo
|
||||
*
|
||||
* @package Sikofitt\PhpVersion\Entity
|
||||
*/
|
||||
class ReleaseInfo
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $type;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
private $number;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $md5Bz2;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $md5Gz;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $md5Xz;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $sha256Bz2;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $sha256Gz;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $sha256Xz;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $date;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $baseUrl;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $version;
|
||||
|
||||
/**
|
||||
* @var ArrayCollection
|
||||
*/
|
||||
private $files;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->files = new ArrayCollection();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getType() : String
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setType(String $type) : ReleaseInfo
|
||||
{
|
||||
$this->type = $type;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getNumber() : Int
|
||||
{
|
||||
return $this->number;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $number
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setNumber(Int $number) : ReleaseInfo
|
||||
{
|
||||
$this->number = $number;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMd5Bz2() : String
|
||||
{
|
||||
return $this->md5Bz2;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $md5Bz2
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setMd5Bz2(String $md5Bz2) : ReleaseInfo
|
||||
{
|
||||
$this->md5Bz2 = $md5Bz2;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMd5Gz() : String
|
||||
{
|
||||
return $this->md5Gz;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $md5Gz
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setMd5Gz(String $md5Gz) : ReleaseInfo
|
||||
{
|
||||
$this->md5Gz = $md5Gz;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMd5Xz() : String
|
||||
{
|
||||
return $this->md5Xz;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $md5Xz
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setMd5Xz(String $md5Xz)
|
||||
{
|
||||
$this->md5Xz = $md5Xz;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSha256Bz2() : String
|
||||
{
|
||||
return $this->sha256Bz2;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sha256Bz2
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setSha256Bz2(String $sha256Bz2) : ReleaseInfo
|
||||
{
|
||||
$this->sha256Bz2 = $sha256Bz2;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSha256Gz() : String
|
||||
{
|
||||
return $this->sha256Gz;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sha256Gz
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setSha256Gz(String $sha256Gz) : ReleaseInfo
|
||||
{
|
||||
$this->sha256Gz = $sha256Gz;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSha256Xz() : String
|
||||
{
|
||||
return $this->sha256Xz;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sha256Xz
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setSha256Xz(String $sha256Xz) : ReleaseInfo
|
||||
{
|
||||
$this->sha256Xz = $sha256Xz;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDate() : String
|
||||
{
|
||||
return $this->date;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $date
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setDate(String $date) : ReleaseInfo
|
||||
{
|
||||
$this->date = $date;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getBaseUrl() : String
|
||||
{
|
||||
return $this->baseUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $baseUrl
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setBaseUrl(String $baseUrl) : ReleaseInfo
|
||||
{
|
||||
$this->baseUrl = $baseUrl;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getVersion() : String
|
||||
{
|
||||
return $this->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $version
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setVersion(String $version) : ReleaseInfo
|
||||
{
|
||||
$this->version = $version;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ArrayCollection
|
||||
*/
|
||||
public function getFiles() : ArrayCollection
|
||||
{
|
||||
return $this->files;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ArrayCollection $files
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function setFiles(ArrayCollection $files)
|
||||
{
|
||||
$this->files = $files;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param \Sikofitt\PhpVersion\Entity\FileInfo $file
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function addFile(FileInfo $file) : ReleaseInfo
|
||||
{
|
||||
$this->files->add($file);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \Sikofitt\PhpVersion\Entity\FileInfo $file
|
||||
*
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function removeFile(FileInfo $file) : ReleaseInfo
|
||||
{
|
||||
$this->files->removeElement($file);
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,119 @@
|
|||
<?php
|
||||
/**
|
||||
* This is a stupid php thing to pull the most recent releases
|
||||
* from qa.php.net/api.php
|
||||
*/
|
||||
|
||||
namespace Sikofitt\PhpVersion\Entity;
|
||||
|
||||
|
||||
/**
|
||||
* Class VersionInfo
|
||||
*
|
||||
* @package Sikofitt\PhpVersion\Entity
|
||||
*/
|
||||
class VersionInfo
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $version;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private $active = false;
|
||||
|
||||
/**
|
||||
* @var ReleaseInfo
|
||||
*/
|
||||
private $release;
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $devVersion;
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getVersion(): string
|
||||
{
|
||||
return $this->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $version
|
||||
*
|
||||
* @return VersionInfo
|
||||
*/
|
||||
public function setVersion(string $version): VersionInfo
|
||||
{
|
||||
$this->version = $version;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return boolean
|
||||
*/
|
||||
public function isActive(): bool
|
||||
{
|
||||
return $this->active;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param boolean $active
|
||||
*
|
||||
* @return VersionInfo
|
||||
*/
|
||||
public function setActive(bool $active): VersionInfo
|
||||
{
|
||||
$this->active = $active;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ReleaseInfo
|
||||
*/
|
||||
public function getRelease(): ReleaseInfo
|
||||
{
|
||||
return $this->release;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ReleaseInfo $release
|
||||
*
|
||||
* @return VersionInfo
|
||||
*/
|
||||
public function setRelease(ReleaseInfo $release): VersionInfo
|
||||
{
|
||||
$this->release = $release;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDevVersion(): string
|
||||
{
|
||||
return $this->devVersion;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $devVersion
|
||||
*
|
||||
* @return VersionInfo
|
||||
*/
|
||||
public function setDevVersion(string $devVersion): VersionInfo
|
||||
{
|
||||
$this->devVersion = $devVersion;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue