Browse Source

Resolve "Assembler des informations techniques par branches"

fix-api
James 1 year ago
parent
commit
b4783284db
  1. 4
      .editorconfig
  2. 8
      .gitignore
  3. 4
      .gitlab-ci.yml
  4. 13
      CHANGELOG
  5. 5
      README.md
  6. 2
      composer.json
  7. 314
      data/pre_releases.json
  8. 4485
      data/releases.json
  9. 11
      lang/supportedversions_en.php
  10. 11
      lang/supportedversions_fr.php
  11. 69
      modeles/supportedversions_configuration.html
  12. 6
      modeles/supportedversions_spiploaderlist_2.html
  13. 2
      modeles/supportedversions_table.html
  14. 2
      paquet.xml
  15. 17
      phpdoc.dist.xml
  16. 56
      supportedversions_fonctions.php
  17. 31
      tests/SupportedVersionsTest.php
  18. 187
      tests/releases/init.json

4
.editorconfig

@ -10,6 +10,10 @@ indent_style = tab
[composer.json]
indent_style = space
[data/*.json]
indent_style = space
indent_size = 2
[CHANGELOG, *.md]
indent_size = 2

8
.gitignore vendored

@ -1,10 +1,12 @@
/vendor/
/.php_cs.cache
/php_cs.txt
/php_cs.xml
/.phpcs.cache
/phpcs.txt
/phpcs.xml
/.phpunit.cache/
/phpunit.xml
/tools/
/.phpdoc/
/phive.xml
/phpstan.neon
/phpstan.json
/phpdoc.xml

4
.gitlab-ci.yml

@ -14,8 +14,8 @@ lint:
- vendor/bin/phpstan --error-format=prettyJson > phpstan.json
artifacts:
paths:
- php_cs.txt
- php_cs.xml
- phpcs.txt
- phpcs.xml
- phpstan.json
test:

13
CHANGELOG

@ -14,6 +14,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `<supportedversions|spiploaderlist_X>` models (v1 and experimental v2)
- `spip_loader_list.json` page
- `spip_loader.api` pages for apache httpd server with rewrite mode and `.htaccess` default file behaviour
- `|SupportedVersions::branchesByState` filter
- `<supportedversions|configuration>` model
- `|SupportedVersions::configuration` filter
### Changed
- `php` attribute is moved from root branch descriptor to `technologies.require.php` in JSON format for releases. Edited with :
```bash
jq '[.[]|{branch, initial_release, active_support, eol, technologies: {require: {php: .php}}}]' tests/releases/init.json
jq '[.[]|{branch, initial_release, active_support, eol, last_version_release, last_date_release, technologies: {require: {php: .php}}, releases}]' data/releases.json
jq '.' data/pre_releases.json
```
## [0.5.0] - 2021-05-19

5
README.md

@ -19,11 +19,14 @@ SPIP Plugin backport of [PHP Supported Versions](http://php.net/supported-versio
- `<supportedversions|pre_releases>` : list of pre-releases in JSON
- `<supportedversions|stable>` : Gives informations of the last stable version released with `info` parameter (version, date or url)
- `<supportedversions|spiploaderlist_X>` : JSON for `spip_loader.php` where X is the API version.
- `<supportedversions|configuration>` : list of required, suggested and provided technologies
## Filters
- `|SupportedVersions::getBranchValues` : Array of branch data for a given release string
- `|SupportedVersions::getBranchesFromState` Array of branch data for a given state sttring
- `|SupportedVersions::getBranchesFromState` Array of branch data for a given state string
- `|SupportedVersions::branchesByState` Arrray of branch data for a given list of states
- `|SupportedVersions::configuration` Converts a list of elements in a string like `element1, element2 v1`
## Other usage

2
composer.json

@ -14,7 +14,7 @@
},
"extra": {
"branch-alias": {
"dev-master": "0.5.x-dev"
"dev-master": "0.6.x-dev"
}
},
"require-dev": {

314
data/pre_releases.json

@ -1,145 +1,173 @@
[
{
"branch": "3.0",
"pre_releases": [
{
"version": "3.0.0-alpha1",
"released_at": "2011-07-03 17:16:05"
},{
"version": "3.0.0-beta",
"released_at": "2011-09-23 09:29:13",
"announce": [{
"lang": "fr",
"url": "https://blog.spip.net/SPIP-1-9-2k-2-0-16-2-1-11-et-3-0-0-beta-disponibles.html"
}],
"download": [{
"url": "http://files.spip.org/spip/dev/SPIP-3-beta.zip"
}]
},{
"version": "3.0.0-beta2",
"released_at": "2012-01-03 11:46:17"
},{
"version": "3.0.0-RC",
"released_at": "2012-04-07 22:06:31"
}
]
},{
"branch": "3.1",
"pre_releases": [
{
"version": "3.1.0-alpha",
"released_at": "2014-11-09 17:10:17"
},{
"version": "3.1.0-beta",
"released_at": "2015-06-21 14:42:07",
"announce": [{
"lang": "fr",
"url": "https://blog.spip.net/SPIP-joue-a-cache-cache-avec-OpCache.html"
}],
"download": [{
"url": "http://files.spip.org/spip/archives/SPIP-vtrois.1.0-beta.zip"
}]
},{
"version": "v3.1.0-RC",
"released_at": "2015-10-31 21:52:41"
},{
"version": "3.1.0-RC2",
"released_at": "2015-12-03 21:57:44"
},{
"version": "3.1.0-RC3",
"released_at": "2017-03-22 22:33:33",
"announce": [{
"lang": "fr",
"url": "https://blog.spip.net/SPIP-3-1-Release-Candidate-3-Mise-a-jour-de-securite.html"
}],
"download": [{
"url": "http://files.spip.net/spip/archives/SPIP-vtrois.1.0-rc3.zip"
}]
}
]
},{
"branch": "3.2",
"pre_releases": [
{
"version": "3.2.0-alpha1",
"released_at": "2017-03-22 22:50:42",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/Chouette-SPIP-3-2-alpha.html"
}
],
"changelog": "https://contrib.spip.net/SPIP-3-2-alpha-changelogg",
"download": [{
"url" : "https://files.spip.net/spip/archives/SPIP-vtrois.2.0-alpha-1.zip"
}]
},{
"version": "3.2.0-beta",
"released_at": "2017-05-06 01:59:03"
},{
"version": "3.2.0-beta2",
"released_at": "2017-06-09 06:51:10",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/Mise-a-jour-de-maintenance-Sortie-de-SPIP-3-1-5-SPIP-3-0-26-et-SPIP-3-2-beta.html"
}
],
"download": [
{
"url": "https://files.spip.net/spip/archives/SPIP-vtrois.2.0-beta-2.zip"
}
]
},{
"version": "3.2.0-beta3",
"released_at": "2017-06-12 08:57:24",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/Mise-a-jour-CRITIQUE-de-securite-Sortie-de-SPIP-3-1-6-et-SPIP-3-2-Beta-3.html"
}
],
"download": [
{
"url": "https://files.spip.net/spip/archives/SPIP-vtrois.2.0-beta-3.zip"
}
]
}
]
},{
"branch": "4.0",
"pre_releases": [
{
"version": "4.0.0-alpha",
"released_at": "2021-05-01 17:32:13",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/O-mega-c-est-SPIP-4-0-alpha.html"
}
],
"download": [
{
"url": "https://files.spip.net/spip/dev/spip-v4.0.0-alpha.zip",
"size": 10077659
}
]
},{
"version": "4.0.0-beta",
"released_at": "2021-06-01 14:52:47",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/O-joie-C-est-SPIP-4-0-0-beta.html"
}
],
"download": [
{
"url": "https://files.spip.net/spip/dev/spip-v4.0.0-beta.zip",
"size": 9387661
}
]
}
]
}
{
"branch": "3.0",
"pre_releases": [
{
"version": "3.0.0-alpha1",
"released_at": "2011-07-03 17:16:05"
},
{
"version": "3.0.0-beta",
"released_at": "2011-09-23 09:29:13",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/SPIP-1-9-2k-2-0-16-2-1-11-et-3-0-0-beta-disponibles.html"
}
],
"download": [
{
"url": "http://files.spip.org/spip/dev/SPIP-3-beta.zip"
}
]
},
{
"version": "3.0.0-beta2",
"released_at": "2012-01-03 11:46:17"
},
{
"version": "3.0.0-RC",
"released_at": "2012-04-07 22:06:31"
}
]
},
{
"branch": "3.1",
"pre_releases": [
{
"version": "3.1.0-alpha",
"released_at": "2014-11-09 17:10:17"
},
{
"version": "3.1.0-beta",
"released_at": "2015-06-21 14:42:07",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/SPIP-joue-a-cache-cache-avec-OpCache.html"
}
],
"download": [
{
"url": "http://files.spip.org/spip/archives/SPIP-vtrois.1.0-beta.zip"
}
]
},
{
"version": "v3.1.0-RC",
"released_at": "2015-10-31 21:52:41"
},
{
"version": "3.1.0-RC2",
"released_at": "2015-12-03 21:57:44"
},
{
"version": "3.1.0-RC3",
"released_at": "2017-03-22 22:33:33",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/SPIP-3-1-Release-Candidate-3-Mise-a-jour-de-securite.html"
}
],
"download": [
{
"url": "http://files.spip.net/spip/archives/SPIP-vtrois.1.0-rc3.zip"
}
]
}
]
},
{
"branch": "3.2",
"pre_releases": [
{
"version": "3.2.0-alpha1",
"released_at": "2017-03-22 22:50:42",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/Chouette-SPIP-3-2-alpha.html"
}
],
"changelog": "https://contrib.spip.net/SPIP-3-2-alpha-changelogg",
"download": [
{
"url": "https://files.spip.net/spip/archives/SPIP-vtrois.2.0-alpha-1.zip"
}
]
},
{
"version": "3.2.0-beta",
"released_at": "2017-05-06 01:59:03"
},
{
"version": "3.2.0-beta2",
"released_at": "2017-06-09 06:51:10",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/Mise-a-jour-de-maintenance-Sortie-de-SPIP-3-1-5-SPIP-3-0-26-et-SPIP-3-2-beta.html"
}
],
"download": [
{
"url": "https://files.spip.net/spip/archives/SPIP-vtrois.2.0-beta-2.zip"
}
]
},
{
"version": "3.2.0-beta3",
"released_at": "2017-06-12 08:57:24",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/Mise-a-jour-CRITIQUE-de-securite-Sortie-de-SPIP-3-1-6-et-SPIP-3-2-Beta-3.html"
}
],
"download": [
{
"url": "https://files.spip.net/spip/archives/SPIP-vtrois.2.0-beta-3.zip"
}
]
}
]
},
{
"branch": "4.0",
"pre_releases": [
{
"version": "4.0.0-alpha",
"released_at": "2021-05-01 17:32:13",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/O-mega-c-est-SPIP-4-0-alpha.html"
}
],
"download": [
{
"url": "https://files.spip.net/spip/dev/spip-v4.0.0-alpha.zip",
"size": 10077659
}
]
},
{
"version": "4.0.0-beta",
"released_at": "2021-06-01 14:52:47",
"announce": [
{
"lang": "fr",
"url": "https://blog.spip.net/O-joie-C-est-SPIP-4-0-0-beta.html"
}
],
"download": [
{
"url": "https://files.spip.net/spip/dev/spip-v4.0.0-beta.zip",
"size": 9387661
}
]
}
]
}
]

4485
data/releases.json

File diff suppressed because it is too large Load Diff

11
lang/supportedversions_en.php

@ -27,4 +27,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = [
'changelog' => 'Changelog',
'download' => 'Download',
'download_size' => 'Size',
'freespace' => 'Free space (off database)',
'ram' => 'RAM',
'system_needs' => 'System needs',
'sql' => 'Database',
'image_processing' => 'Image Processing',
'required' => 'Required',
'suggest' => 'Suggestions',
'provided' => 'Provided',
'php_extensions' => 'PHP Extensions',
'no_future_version' => 'No future version planned.',
'no_maintained_version' => 'No maintained version.',
];

11
lang/supportedversions_fr.php

@ -30,4 +30,15 @@ $GLOBALS[$GLOBALS['idx_lang']] = [
'changelog' => 'Changelog',
'download' => 'T&eacute;l&eacute;chargement',
'download_size' => 'Taille',
'freespace' => 'Espace disque (hors base de données)',
'ram' => 'Mémoire RAM',
'system_needs' => 'Besoin système minimum',
'sql' => 'Base de données',
'image_processing' => 'Traitement d\'images',
'required' => 'Requis',
'suggest' => 'Suggestions',
'provided' => 'Fournit',
'php_extensions' => 'Extensions PHP',
'no_future_version' => 'Pas de version pr&eacute;vue pour le futur actuellement.',
'no_maintained_version' => 'Pas de version maintenue actuellement.',
];

69
modeles/supportedversions_configuration.html

@ -0,0 +1,69 @@
[(#REM)
Fournit la configuration système requise.
Le parametre "state" (obligatoire) permet de renvoyer les versions stable, future, en fin de vie
Le paramètre "limit" (2 par défaut) réduit le nombre de version à afficher par état
Exemple <supportedversions|configuration|state=stable|limit=1>
]<BOUCLE_branches(DATA){source table, #STATE|explode{","}|SupportedVersions::branchesByState}{par branch}{inverse}{0,#LIMIT|sinon{2}}>
<B_system>
<h3[ id="spip(#BRANCH|replace{\.})"]>SPIP #BRANCH</h3>
[<div>
<h4><:supportedversions:required:></h4>
<ul>
<li>
<:supportedversions:php_compatibility:>:
(#TECHNOLOGIES|table_valeur{require/php}|array_shift)[ -
(#TECHNOLOGIES|table_valeur{require/php}|array_pop)]
</li>[
<li>
<:supportedversions:php_extensions:>: (#TECHNOLOGIES|table_valeur{require/php-ext}|sinon{#ARRAY}|SupportedVersions::configuration)
</li>
]</ul>
</div>]
<B_suggest>
<div>
<h4><:supportedversions:suggest:></h4>
<ul>
<BOUCLE_suggest(DATA){source table, #TECHNOLOGIES|table_valeur{suggest}}>
<li>
<:supportedversions:{=#CLE}:>
<ul>
<BOUCLE_suggestions(DATA){source table, #VALEUR}>
#SET{min, #VALEUR|array_shift}
#SET{max, #VALEUR|array_pop}
#SET{max, #GET{max}|=={#GET{min}}|?{'', #GET{max}}}
#SET{min, #GET{min}|=={*}|?{'', #GET{min}}}
<li>#CLE[&nbsp;: (#GET{min})[ - (#GET{max})]]</li>
</BOUCLE_suggestions>
</ul>
</li>
</BOUCLE_suggest>
</ul>
</div>
</B_suggest>
[<div>
<h4><:supportedversions:provided:></h4>
<ul>
<li>(#TECHNOLOGIES|table_valeur{provide}|sinon{#ARRAY}|SupportedVersions::configuration{" v"})</li>
</ul>
</div>]
<div>
<h4><:supportedversions:system_needs:></h4>
<ul>
<BOUCLE_system(DATA){source table, #SYSTEM}>[
<li><:supportedversions:{=#CLE}:>&nbsp;: (#VALEUR|taille_en_octets)</li>
]</BOUCLE_system>
</ul>
</div>
</B_system>
[<p>(#STATE|strstr{future}|oui)<:supportedversions:no_future_version:></p>]
[<p>(#STATE|strstr{stable}|ou{#STATE|strstr{security}}|oui)<:supportedversions:no_maintained_version:></p>]
<//B_system>
</BOUCLE_branches>

6
modeles/supportedversions_spiploaderlist_2.html

@ -2,7 +2,7 @@
<BOUCLE_pre_releases(DATA){source json, #CHEMIN{data/pre_releases.json}}{branch=#VAL{future}|SupportedVersions::getBranchesFromState|table_valeur{0/branch}}>
<BOUCLE_releases(DATA){source table, #PRE_RELEASES}{par released_at}{inverse}{0,1}>
<BOUCLE_download(DATA){source table, #DOWNLOAD}>
#SET{release, #ARRAY{url, #URL, php, #VERSION|SupportedVersions::getBranchValues|table_valeur{php}}}
#SET{release, #ARRAY{url, #URL, php, #VERSION|SupportedVersions::getBranchValues|table_valeur{technologies/require/php}}}
</BOUCLE_download>
#SET{list, #GET{list}|array_merge{#ARRAY{#VERSION, #GET{release}}}}
</BOUCLE_releases>
@ -10,7 +10,7 @@
<BOUCLE_stable(DATA){source table, #VAL{stable}|SupportedVersions::getBranchesFromState}{par last_date_release}{inverse}{0,1}>
<BOUCLE_release_stable(DATA){source table, #RELEASES}{version=#LAST_VERSION_RELEASE}>
<BOUCLE_download_stable(DATA){source table, #DOWNLOAD}>
#SET{release, #ARRAY{url, #URL, php, #VERSION|SupportedVersions::getBranchValues|table_valeur{php}}}
#SET{release, #ARRAY{url, #URL, php, #VERSION|SupportedVersions::getBranchValues|table_valeur{technologies/require/php}}}
</BOUCLE_download_stable>
#SET{list, #GET{list}|array_merge{#ARRAY{#VERSION, #GET{release}}}}
</BOUCLE_release_stable>
@ -18,7 +18,7 @@
<BOUCLE_security(DATA){source table, #VAL{security}|SupportedVersions::getBranchesFromState}{par last_date_release}{inverse}{0,1}>
<BOUCLE_release_security(DATA){source table, #RELEASES}{version=#LAST_VERSION_RELEASE}>
<BOUCLE_download_security(DATA){source table, #DOWNLOAD}>
#SET{release, #ARRAY{url, #URL, php, #VERSION|SupportedVersions::getBranchValues|table_valeur{php}}}
#SET{release, #ARRAY{url, #URL, php, #VERSION|SupportedVersions::getBranchValues|table_valeur{technologies/require/php}}}
</BOUCLE_download_security>
#SET{list, #GET{list}|array_merge{#ARRAY{#VERSION, #GET{release}}}}
</BOUCLE_release_security>

2
modeles/supportedversions_table.html

@ -20,7 +20,7 @@
<td>
[(#LAST_DATE_RELEASE|date_relative)]
</td>
<td>[(#PHP|array_shift)][ - (#PHP|array_pop)]</td>
<td>[(#TECHNOLOGIES|table_valeur{require/php}|array_shift)][ - (#TECHNOLOGIES|table_valeur{require/php}|array_pop)]</td>
<td>[(#INITIAL_RELEASE|affdate)]</td>
<td>[(#ACTIVE_SUPPORT|affdate)]</td>
<td>[(#EOL|affdate)]</td>

2
paquet.xml

@ -1,7 +1,7 @@
<paquet
categorie="date"
prefix="supportedversions"
version="0.5.0"
version="0.6.0"
etat="experimental"
compatibilite="[3.2.999;["
>

17
phpdoc.dist.xml

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8" ?>
<phpdocumentor
configVersion="3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://www.phpdoc.org"
xsi:noNamespaceSchemaLocation="https://docs.phpdoc.org/latest/phpdoc.xsd"
>
<version number="0.5.0">
<api>
<source dsn=".">
<path>action</path>
<path>supportedversions_fonctions.php</path>
<path>supportedversions_options.php</path>
</source>
</api>
</version>
</phpdocumentor>

56
supportedversions_fonctions.php

@ -212,6 +212,26 @@ class SupportedVersions
);
}
/**
* Filtre sélectionnant les données de branches en fonction de leur état.
*
* @codeCoverageIgnore
*
* @see state()
*
* @param array<string> $states Listes des états souhaités
* @return array<mixed> les branches à afficher
*/
public static function branchesByState(array $states): array {
$branches = [];
foreach ($states as $state) {
$branches = array_merge($branches, self::getBranchesFromState($state));
}
return $branches;
}
/**
* Filtre fournissant un tableau de compatibilité SPIP/PHP.
*
@ -240,7 +260,7 @@ class SupportedVersions
array_reduce(
self::$releases,
function ($versions, $release) {
return array_merge($versions, $release['php']);
return array_merge($versions, $release['technologies']['require']['php']);
},
[]
)
@ -248,14 +268,14 @@ class SupportedVersions
);
foreach (self::$releases as $release) {
$toPrint = $release['initial_release'] !== '' && !empty($release['php']);
$toPrint = $release['initial_release'] !== '' && !empty($release['technologies']['require']['php']);
if (!$eol && $release['eol'] !== '') {
$toPrint = $toPrint && $release['eol'] >= $now;
}
if ($toPrint) {
foreach ($phpVersions as $php) {
$matrix[$release['branch']][$php] = in_array($php, $release['php']);
$matrix[$release['branch']][$php] = in_array($php, $release['technologies']['require']['php']);
}
}
}
@ -287,7 +307,11 @@ class SupportedVersions
'initial_release' => '',
'active_support' => '',
'eol' => '',
'php' => [],
'technologies' => [
'require' => [
'php' => []
],
],
'releases' => [],
];
if (preg_match('/^(\d+\.\d+)/', $release, $matches)) {
@ -325,7 +349,11 @@ class SupportedVersions
'initial_release' => '',
'active_support' => '',
'eol' => '',
'php' => [],
'technologies' => [
'require' => [
'php' => [],
],
],
'releases' => [],
];
@ -730,6 +758,9 @@ class SupportedVersions
//spip_loader API Part
/**
* Version par défaut de l'API pour le script spip_loader.php.
*/
public static function spipLoaderApi():int {
// @codeCoverageIgnoreStart
if (!self::$config) {
@ -739,4 +770,19 @@ class SupportedVersions
return intval(self::$config['spip_loader_api_default'] ?? 0);
}
/**
* Transforme un tableau en chaine.
*
* @param array<mixed> $extensions liste des extensions et de leurs versions
*/
public static function configuration(array $extensions, string $versionMarker = ''): string {
$strExtensions = '';
foreach ($extensions as $extension => $version) {
$strExtensions .= $extension.($version == '*' ? '' : $versionMarker.$version).', ';
}
return preg_replace('/, $/', '', $strExtensions) ?? '';
}
}

31
tests/SupportedVersionsTest.php

@ -238,7 +238,12 @@ class SupportedVersionsTest extends TestCase
'initial_release' => '',
'active_support' => '',
'eol' => '',
'php' => [],
'technologies' => [
'require' => [
'php' => []
],
],
'releases' => [],
],
'no-match',
@ -249,7 +254,11 @@ class SupportedVersionsTest extends TestCase
'initial_release' => '',
'active_support' => '',
'eol' => '',
'php' => [],
'technologies' => [
'require' => [
'php' => []
],
],
'releases' => [],
],
'6.10.0',
@ -260,7 +269,11 @@ class SupportedVersionsTest extends TestCase
'initial_release' => '1971-02-03',
'active_support' => '1971-06-06',
'eol' => '1971-10-07',
'php' => ['1.0'],
'technologies' => [
'require' => [
'php' => ['1.0']
],
],
],
'1.0.0-alpha'
]
@ -589,4 +602,16 @@ class SupportedVersionsTest extends TestCase
//Then
$this->assertEquals($expected, $actual);
}
public function testConfiguration()
{
//Given
$configuration = ['test' => '*', 'othertest' => '1'];
//When
$actual = SupportedVersions::configuration($configuration, 'v');
//Then
$this->assertEquals('test, othertestv1', $actual);
}
}

187
tests/releases/init.json

@ -1,79 +1,130 @@
[
{
"branch": "0.1",
"initial_release": "1969-02-03",
"active_support": "",
"eol": "1969-06-06",
{
"branch": "0.1",
"initial_release": "1969-02-03",
"active_support": "",
"eol": "1969-06-06",
"technologies": {
"require": {
"php": []
},
{
"branch": "0.8",
"initial_release": "1969-09-03",
"active_support": "1971-02-03",
"eol": "1971-02-03",
}
}
},
{
"branch": "0.8",
"initial_release": "1969-09-03",
"active_support": "1971-02-03",
"eol": "1971-02-03",
"technologies": {
"require": {
"php": []
},
{
"branch": "0.9",
"initial_release": "1969-11-05",
"active_support": "",
"eol": "",
}
}
},
{
"branch": "0.9",
"initial_release": "1969-11-05",
"active_support": "",
"eol": "",
"technologies": {
"require": {
"php": []
},
{
"branch": "1.0",
"initial_release": "1971-02-03",
"active_support": "1971-06-06",
"eol": "1971-10-07",
"php": ["1.0"]
},
{
"branch": "1.1",
"initial_release": "1971-06-06",
"active_support": "1971-10-07",
"eol": "1972-02-03",
}
}
},
{
"branch": "1.0",
"initial_release": "1971-02-03",
"active_support": "1971-06-06",
"eol": "1971-10-07",
"technologies": {
"require": {
"php": [
"1.0"
]
}
}
},
{
"branch": "1.1",
"initial_release": "1971-06-06",
"active_support": "1971-10-07",
"eol": "1972-02-03",
"technologies": {
"require": {
"php": []
},
{
"branch": "2.0",
"initial_release": "1971-07-01",
"active_support": "1972-03-09",
"eol": "1972-11-05",
}
}
},
{
"branch": "2.0",
"initial_release": "1971-07-01",
"active_support": "1972-03-09",
"eol": "1972-11-05",
"technologies": {
"require": {
"php": []
},
{
"branch": "2.1",
"initial_release": "1971-10-07",
"active_support": "1972-06-06",
"eol": "",
}
}
},
{
"branch": "2.1",
"initial_release": "1971-10-07",
"active_support": "1972-06-06",
"eol": "",
"technologies": {
"require": {
"php": []
},
{
"branch": "3.0",
"initial_release": "1972-03-01",
"active_support": "1972-11-05",
"eol": "1973-07-01",
}
}
},
{
"branch": "3.0",
"initial_release": "1972-03-01",
"active_support": "1972-11-05",
"eol": "1973-07-01",
"technologies": {
"require": {
"php": []
},
{
"branch": "4.0",
"initial_release": "1971-11-06",
"active_support": "",
"eol": "",
"php": ["1.0"]
},
{
"branch": "4.1",
"initial_release": "1971-12-01",
"active_support": "1971-12-01",
"eol": "1971-12-01",
"php": ["1.0", "2.0"]
},
{
"branch": "5.0",
"initial_release": "",
"active_support": "",
"eol": "",
}
}
},
{
"branch": "4.0",
"initial_release": "1971-11-06",
"active_support": "",
"eol": "",
"technologies": {
"require": {
"php": [
"1.0"
]
}
}
},
{
"branch": "4.1",
"initial_release": "1971-12-01",
"active_support": "1971-12-01",
"eol": "1971-12-01",
"technologies": {
"require": {
"php": [
"1.0",
"2.0"
]
}
}
},
{
"branch": "5.0",
"initial_release": "",
"active_support": "",
"eol": "",
"technologies": {
"require": {
"php": []
}
}
}
]

Loading…
Cancel
Save