diff --git a/app/controllers/course/timesrooms.php b/app/controllers/course/timesrooms.php index 486d7b065f9d5167eba7b321e9caa702da4927be..3e11e62e85fad9840bc4cb4d342da772df980c99 100644 --- a/app/controllers/course/timesrooms.php +++ b/app/controllers/course/timesrooms.php @@ -1057,7 +1057,7 @@ class Course_TimesroomsController extends AuthenticatedController $end_semester = $this->course->semesters; } - $this->start_weeks = $this->course->start_semester->getStartWeeks($this->course->duration_time); + $this->start_weeks = $end_semester[count($end_semester) - 1]->getStartWeeks(); if (!empty($end_semester)) { $this->end_semester_weeks = []; diff --git a/app/controllers/oer/endpoints.php b/app/controllers/oer/endpoints.php index f193139769425940063f67f79a8a3e84be7fd880..552a757af20b616df44ae34121a3e06cafe41a73 100755 --- a/app/controllers/oer/endpoints.php +++ b/app/controllers/oer/endpoints.php @@ -131,6 +131,7 @@ class Oer_EndpointsController extends StudipController ]; $data['data'] = $material->toArray(); unset($data['data']['material_id']); + unset($data['data']['uri_hash']); $data['users'] = []; foreach ($material->users as $userdata) { $user = $userdata['external_contact'] @@ -242,7 +243,8 @@ class Oer_EndpointsController extends StudipController 'player_url' => $material['player_url'], 'tool' => $material['tool'], 'structure' => ($material['structure'] ? $material['structure']->getArrayCopy() : null), - 'license' => $material['license'] + 'license' => $material['license'], + 'uri' => $material['uri'] ], 'users' => $users, 'topics' => $topics, diff --git a/app/controllers/oer/mymaterial.php b/app/controllers/oer/mymaterial.php index bb83bca2bc2acf628b5e8fd5190c0f6383fa7c72..6f6f4c3cf111df8fafe2552ccb0843361c450a7a 100755 --- a/app/controllers/oer/mymaterial.php +++ b/app/controllers/oer/mymaterial.php @@ -8,7 +8,6 @@ class Oer_MymaterialController extends AuthenticatedController { parent::before_filter($action, $args); PageLayout::setTitle(_('Lernmaterialien')); - } public function index_action() @@ -36,6 +35,7 @@ class Oer_MymaterialController extends AuthenticatedController return; } elseif (Request::isPost()) { $was_new = $material->isNew(); + $was_on_twillo = (bool) $material['published_id_on_twillo']; $material->setData(Request::getArray('data')); $material['host_id'] = null; $material['license_identifier'] = Request::get('license', 'CC-BY-SA-4.0'); @@ -131,6 +131,19 @@ class Oer_MymaterialController extends AuthenticatedController $material->pushDataToIndexServers(); + if (Config::get()->OERCAMPUS_ENABLE_TWILLO && TwilloConnector::getTwilloUserID()) { + if (Request::bool('publish_on_twillo') || $_SESSION['NEW_OER']['publish_on_twillo']) { + //upload it to twillo.de + $succes_or_error = $material->uploadToTwillo($material); + if (is_string($succes_or_error)) { + PageLayout::postWarning(_('Konnte Material nicht zu twillo.de hochladen.'), [$succes_or_error]); + } + } elseif ($was_on_twillo) { + //remove it from twillo.de if able + $material->deleteFromTwillo(); + } + } + unset($_SESSION['NEW_OER']); PageLayout::postSuccess(_('Lernmaterial erfolgreich gespeichert.')); diff --git a/app/views/oer/mymaterial/edit.php b/app/views/oer/mymaterial/edit.php index 5b20618be386474ac642a31f1548c43cb472b49c..434414fa4ab921ee23808721e6e115624718db26 100755 --- a/app/views/oer/mymaterial/edit.php +++ b/app/views/oer/mymaterial/edit.php @@ -238,6 +238,15 @@ value="<?= htmlReady($template['module_id']) ?>"> <? endif ?> + <? if (Config::get()->OERCAMPUS_ENABLE_TWILLO && TwilloConnector::getTwilloUserID()) : ?> + <input type="hidden" name="publish_on_twillo" value="0"> + <label style="margin-top: 20px;"> + <input type="checkbox" + name="publish_on_twillo" + value="1"<?= $material['published_id_on_twillo'] ? " checked" : "" ?>> + <?= _('Auf twillo.de veröffentlichen') ?> + </label> + <? endif ?> </fieldset> <? if (!Config::get()->OER_DISABLE_LICENSE) : ?> diff --git a/cli/twillo_generate_keys.php b/cli/twillo_generate_keys.php new file mode 100644 index 0000000000000000000000000000000000000000..0d1f5d1b0b75f67b769a7e8f3c6c3cf3656ffd5c --- /dev/null +++ b/cli/twillo_generate_keys.php @@ -0,0 +1,36 @@ +#!/usr/bin/env php +<?php +require_once 'studip_cli_env.inc.php'; + +$app_id = str_replace(" ", "-", Config::get()->UNI_NAME_CLEAN); + +$privatekey = @file_get_contents('../config/twillo-private.key'); + +if (!$privatekey) { + $key = EduSharingHelper::generateKeyPair(); + $success = file_put_contents( + '../config/twillo.properties.xml', + EduSharingHelper::generateEduAppXMLData($app_id, $key['publickey']) + ); + if ($success !== false) { + file_put_contents( + '../config/twillo-private.key', + $key['privatekey'] + ); + Config::get()->store('OERCAMPUS_TWILLO_APPID', $app_id); + echo "Wrote config/twillo.properties.xml file. Next steps: + +- Send the file config/twillo.properties.xml to the twillo.de administrators support.twillo@tib.eu . If they ask you to change the app-ID, you can do this in the system at Admin -> System -> Configuration by editing the config value OERCAMPUS_TWILLO_APPID. +- Leave the config/twillo-private.key file as it is in the config folder. This file is important for the API to work. +- You need to either have or create a datafield for users which contains the DFN-AAI-ID of a person. Without this ID in the datafield a user cannot upload to twillo.de due to technical restrictions. +- Copy the datafield_id of this datafield (you find this in the DB-table datafields). In Stud.IP go to Admin -> System -> Configuration and edit the config value OERCAMPUS_TWILLO_DFNAAIID_DATAFIELD. What you inserted, should look like 6a9ee3ca3685d2551698a3dc6f0f0eff. +- Once the twillo.de adminstrators received your file and registered your Stud.IP, you can enable the connection to twillo: Go to Admin -> System -> Configuration and edit the config value OERCAMPUS_ENABLE_TWILLO and switch it on. + +There you go. From now on all your users with a given DFN-AAI-ID should be able to upload their OERs to twillo.de. +"; + } else { + echo "No permission to write into folder config. Cannot save private and public keys.\n"; + } +} else { + echo "Private key already exists. Remove it or be happy that it is there.\n"; +} diff --git a/composer.json b/composer.json index 50b3f8a6ec937cd12206e702991703900f633589..94121610556a4ba00788901e9c3c585490f636ec 100644 --- a/composer.json +++ b/composer.json @@ -7,18 +7,21 @@ "require-dev": { "adlawson/vfs": "~0.12.1", "camspiers/json-pretty": "~1.0.2", + "codeception/codeception": "4.0.2", "monolog/monolog": "~1.21.0", "php-http/curl-client": "~1.7.0", - "woohoolabs/yang": "2.3.2", - "codeception/codeception": "~4.1.21", - "codeception/module-asserts": "^1.3" + "phpunit/phpunit": "6.5.14", + "woohoolabs/yang": "~0.9.0", + "codeception/module-phpbrowser": "^1.0", + "codeception/module-asserts": "^1.1" }, "require": { "php": "^7.2", "guzzlehttp/psr7": "~1.4.2", - "neomerx/json-api": "4.0.1", + "neomerx/json-api": "~1.0.9", + "slim/slim": "~3.12.3", "spomky-labs/otphp": "^8.3.3", - "tuupola/cors-middleware": "1.2.1", + "tuupola/cors-middleware": "~0.5.2", "tecnickcom/tcpdf": "^6.3", "scssphp/scssphp": "^1.4", "symfony/yaml": "^3.4", @@ -45,6 +48,7 @@ "opis/json-schema": "^1.0", "slim/psr7": "1.4", "slim/slim": "4.7.1", - "php-di/php-di": "6.3.4" + "php-di/php-di": "6.3.4", + "league/oauth2-client": "^2.6" } } diff --git a/composer.lock b/composer.lock index 440bb705a837ef291243ddaeb13a2e385cdf13cf..50c988c14586994914f981747f6516b8f454427b 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "98af1effd6c2da72cc51ac552e851451", + "content-hash": "470f6b148b8f1f3421c22c149df783a0", "packages": [ { "name": "algo26-matthias/idna-convert", @@ -275,34 +275,94 @@ "time": "2020-06-29T00:56:53+00:00" }, { - "name": "fig/http-message-util", - "version": "1.1.5", + "name": "gossi/docblock", + "version": "v1.6", + "source": { + "type": "git", + "url": "https://github.com/gossi/docblock.git", + "reference": "d7e2f299279f5aebbfddeef1c119e26bef4bc7e9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/gossi/docblock/zipball/d7e2f299279f5aebbfddeef1c119e26bef4bc7e9", + "reference": "d7e2f299279f5aebbfddeef1c119e26bef4bc7e9", + "shasum": "" + }, + "require": { + "phootwork/collection": "^1.5", + "php": ">=5.6" + }, + "require-dev": { + "phpunit/phpunit": "^5.7", + "sami/sami": "^4|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "gossi\\docblock\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Thomas Gossmann", + "homepage": "http://gos.si" + } + ], + "description": "PHP Docblock parser and generator. An API to read and write Docblocks.", + "keywords": [ + "docblock", + "generator", + "parser" + ], + "support": { + "issues": "https://github.com/gossi/docblock/issues", + "source": "https://github.com/gossi/docblock/tree/master" + }, + "time": "2017-07-01T18:10:54+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.3.3", "source": { "type": "git", - "url": "https://github.com/php-fig/http-message-util.git", - "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765" + "url": "https://github.com/guzzle/guzzle.git", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message-util/zipball/9d94dc0154230ac39e5bf89398b324a86f63f765", - "reference": "9d94dc0154230ac39e5bf89398b324a86f63f765", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/407b0cb880ace85c9b63c5f9551db498cb2d50ba", + "reference": "407b0cb880ace85c9b63c5f9551db498cb2d50ba", "shasum": "" }, "require": { - "php": "^5.3 || ^7.0 || ^8.0" + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.4", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.0" }, "suggest": { - "psr/http-message": "The package containing the PSR-7 interfaces" + "psr/log": "Required for using the Log middleware" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "6.3-dev" } }, "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { - "Fig\\Http\\Message\\": "src/" + "GuzzleHttp\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -311,52 +371,61 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "Utility classes and constants for use with PSR-7 (psr/http-message)", + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", "keywords": [ + "client", + "curl", + "framework", "http", - "http-message", - "psr", - "psr-7", - "request", - "response" + "http client", + "rest", + "web service" ], "support": { - "issues": "https://github.com/php-fig/http-message-util/issues", - "source": "https://github.com/php-fig/http-message-util/tree/1.1.5" + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/master" }, - "time": "2020-11-24T22:02:12+00:00" + "time": "2018-04-22T15:46:56+00:00" }, { - "name": "gossi/docblock", - "version": "v1.6", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/gossi/docblock.git", - "reference": "d7e2f299279f5aebbfddeef1c119e26bef4bc7e9" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/gossi/docblock/zipball/d7e2f299279f5aebbfddeef1c119e26bef4bc7e9", - "reference": "d7e2f299279f5aebbfddeef1c119e26bef4bc7e9", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "phootwork/collection": "^1.5", - "php": ">=5.6" + "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": "^5.7", - "sami/sami": "^4|^3" + "phpunit/phpunit": "^4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, "autoload": { "psr-4": { - "gossi\\docblock\\": "src" - } + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -364,21 +433,20 @@ ], "authors": [ { - "name": "Thomas Gossmann", - "homepage": "http://gos.si" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } ], - "description": "PHP Docblock parser and generator. An API to read and write Docblocks.", + "description": "Guzzle promises library", "keywords": [ - "docblock", - "generator", - "parser" + "promise" ], "support": { - "issues": "https://github.com/gossi/docblock/issues", - "source": "https://github.com/gossi/docblock/tree/master" + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/master" }, - "time": "2017-07-01T18:10:54+00:00" + "time": "2016-12-20T10:07:11+00:00" }, { "name": "guzzlehttp/psr7", @@ -595,6 +663,76 @@ }, "time": "2019-10-25T12:34:43+00:00" }, + { + "name": "league/oauth2-client", + "version": "2.6.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/oauth2-client.git", + "reference": "badb01e62383430706433191b82506b6df24ad98" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/oauth2-client/zipball/badb01e62383430706433191b82506b6df24ad98", + "reference": "badb01e62383430706433191b82506b6df24ad98", + "shasum": "" + }, + "require": { + "guzzlehttp/guzzle": "^6.0 || ^7.0", + "paragonie/random_compat": "^1 || ^2 || ^9.99", + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "mockery/mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpunit/phpunit": "^5.7 || ^6.0 || ^9.3", + "squizlabs/php_codesniffer": "^2.3 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-2.x": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\OAuth2\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alex Bilbie", + "email": "hello@alexbilbie.com", + "homepage": "http://www.alexbilbie.com", + "role": "Developer" + }, + { + "name": "Woody Gilk", + "homepage": "https://github.com/shadowhand", + "role": "Contributor" + } + ], + "description": "OAuth 2.0 Client Library", + "keywords": [ + "Authentication", + "SSO", + "authorization", + "identity", + "idp", + "oauth", + "oauth2", + "single sign on" + ], + "support": { + "issues": "https://github.com/thephpleague/oauth2-client/issues", + "source": "https://github.com/thephpleague/oauth2-client/tree/2.6.0" + }, + "time": "2020-10-28T02:03:40+00:00" + }, { "name": "mishal/iless", "version": "2.2.0", @@ -713,37 +851,36 @@ }, { "name": "neomerx/json-api", - "version": "v4.0.1", + "version": "v1.0.9", "source": { "type": "git", "url": "https://github.com/neomerx/json-api.git", - "reference": "0e45254a4574a3118e0ed663312b43aca23b89c7" + "reference": "c911b7494496e79f9de72ee40d6a2b791caaf95b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/neomerx/json-api/zipball/0e45254a4574a3118e0ed663312b43aca23b89c7", - "reference": "0e45254a4574a3118e0ed663312b43aca23b89c7", + "url": "https://api.github.com/repos/neomerx/json-api/zipball/c911b7494496e79f9de72ee40d6a2b791caaf95b", + "reference": "c911b7494496e79f9de72ee40d6a2b791caaf95b", "shasum": "" }, "require": { - "php": ">=7.1.0" + "php": ">=5.5.0", + "psr/http-message": "^1.0", + "psr/log": "^1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.14", - "mockery/mockery": "^1.0", + "mockery/mockery": "~0.9.4", + "monolog/monolog": "^1.18", "phpmd/phpmd": "^2.6", - "phpunit/phpunit": "^7.0", - "scrutinizer/ocular": "^1.4", - "squizlabs/php_codesniffer": "^2.9" + "phpunit/phpunit": "^4.6 || ^5.0 || ^6.0", + "scrutinizer/ocular": "^1.3", + "squizlabs/php_codesniffer": "^2.5" }, "type": "library", "autoload": { "psr-4": { "Neomerx\\JsonApi\\": "src/" - }, - "files": [ - "src/I18n/format.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -767,9 +904,9 @@ ], "support": { "issues": "https://github.com/neomerx/json-api/issues", - "source": "https://github.com/neomerx/json-api/tree/develop" + "source": "https://github.com/neomerx/json-api/tree/v1.x" }, - "time": "2020-03-03T05:56:54+00:00" + "time": "2018-02-21T13:45:30+00:00" }, { "name": "nikic/fast-route", @@ -821,71 +958,6 @@ }, "time": "2018-02-13T20:26:39+00:00" }, - { - "name": "opis/closure", - "version": "3.6.2", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" - }, - "time": "2021-04-09T13:42:10+00:00" - }, { "name": "opis/json-schema", "version": "1.1.0", @@ -1176,212 +1248,47 @@ "time": "2018-08-04T14:22:05+00:00" }, { - "name": "php-di/invoker", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/PHP-DI/Invoker.git", - "reference": "540c27c86f663e20fe39a24cd72fa76cdb21d41a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/540c27c86f663e20fe39a24cd72fa76cdb21d41a", - "reference": "540c27c86f663e20fe39a24cd72fa76cdb21d41a", - "shasum": "" - }, - "require": { - "psr/container": "~1.0" - }, - "require-dev": { - "athletic/athletic": "~0.1.8", - "phpunit/phpunit": "~4.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Invoker\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Generic and extensible callable invoker", - "homepage": "https://github.com/PHP-DI/Invoker", - "keywords": [ - "callable", - "dependency", - "dependency-injection", - "injection", - "invoke", - "invoker" - ], - "support": { - "issues": "https://github.com/PHP-DI/Invoker/issues", - "source": "https://github.com/PHP-DI/Invoker/tree/master" - }, - "time": "2017-03-20T19:28:22+00:00" - }, - { - "name": "php-di/php-di", - "version": "6.3.4", + "name": "phpseclib/phpseclib", + "version": "2.0.31", "source": { "type": "git", - "url": "https://github.com/PHP-DI/PHP-DI.git", - "reference": "f53bcba06ab31b18e911b77c039377f4ccd1f7a5" + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/f53bcba06ab31b18e911b77c039377f4ccd1f7a5", - "reference": "f53bcba06ab31b18e911b77c039377f4ccd1f7a5", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4", + "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4", "shasum": "" }, "require": { - "opis/closure": "^3.5.5", - "php": ">=7.2.0", - "php-di/invoker": "^2.0", - "php-di/phpdoc-reader": "^2.0.1", - "psr/container": "^1.0" - }, - "provide": { - "psr/container-implementation": "^1.0" + "php": ">=5.3.3" }, "require-dev": { - "doctrine/annotations": "~1.2", - "friendsofphp/php-cs-fixer": "^2.4", - "mnapoli/phpunit-easymock": "^1.2", - "ocramius/proxy-manager": "^2.0.2", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^8.5|^9.0" + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", + "squizlabs/php_codesniffer": "~2.0" }, "suggest": { - "doctrine/annotations": "Install it if you want to use annotations (version ~1.2)", - "ocramius/proxy-manager": "Install it if you want to use lazy injection (version ~2.0)" + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." }, "type": "library", "autoload": { - "psr-4": { - "DI\\": "src/" - }, "files": [ - "src/functions.php" - ] + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "The dependency injection container for humans", - "homepage": "https://php-di.org/", - "keywords": [ - "PSR-11", - "container", - "container-interop", - "dependency injection", - "di", - "ioc", - "psr11" - ], - "support": { - "issues": "https://github.com/PHP-DI/PHP-DI/issues", - "source": "https://github.com/PHP-DI/PHP-DI/tree/6.3.4" - }, - "funding": [ - { - "url": "https://github.com/mnapoli", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/php-di/php-di", - "type": "tidelift" - } - ], - "time": "2021-06-10T08:04:48+00:00" - }, - { - "name": "php-di/phpdoc-reader", - "version": "2.2.1", - "source": { - "type": "git", - "url": "https://github.com/PHP-DI/PhpDocReader.git", - "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/66daff34cbd2627740ffec9469ffbac9f8c8185c", - "reference": "66daff34cbd2627740ffec9469ffbac9f8c8185c", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "require-dev": { - "mnapoli/hard-mode": "~0.3.0", - "phpunit/phpunit": "^8.5|^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "PhpDocReader\\": "src/PhpDocReader" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)", - "keywords": [ - "phpdoc", - "reflection" - ], - "support": { - "issues": "https://github.com/PHP-DI/PhpDocReader/issues", - "source": "https://github.com/PHP-DI/PhpDocReader/tree/2.2.1" - }, - "time": "2020-10-12T12:39:22+00:00" - }, - { - "name": "phpseclib/phpseclib", - "version": "2.0.31", - "source": { - "type": "git", - "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/233a920cb38636a43b18d428f9a8db1f0a1a08f4", - "reference": "233a920cb38636a43b18d428f9a8db1f0a1a08f4", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phing/phing": "~2.7", - "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", - "squizlabs/php_codesniffer": "~2.0" - }, - "suggest": { - "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", - "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", - "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", - "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." - }, - "type": "library", - "autoload": { - "files": [ - "phpseclib/bootstrap.php" - ], - "psr-4": { - "phpseclib\\": "phpseclib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "authors": [ { "name": "Jim Wigginton", "email": "terrafrost@php.net", @@ -1555,31 +1462,35 @@ "time": "2020-03-04T10:26:33+00:00" }, { - "name": "psr/container", - "version": "1.0.0", + "name": "pimple/pimple", + "version": "v3.2.3", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "url": "https://github.com/silexphp/Pimple.git", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.3.0", + "psr/container": "^1.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.2.x-dev" } }, "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" + "psr-0": { + "Pimple": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1588,42 +1499,38 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "http://pimple.sensiolabs.org", "keywords": [ - "PSR-11", "container", - "container-interface", - "container-interop", - "psr" + "dependency injection" ], "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/master" + "issues": "https://github.com/silexphp/Pimple/issues", + "source": "https://github.com/silexphp/Pimple/tree/master" }, - "time": "2017-02-14T16:28:37+00:00" + "time": "2018-01-21T07:42:36+00:00" }, { - "name": "psr/http-factory", - "version": "1.0.1", + "name": "psr/container", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", "shasum": "" }, "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" + "php": ">=5.3.0" }, "type": "library", "extra": { @@ -1633,7 +1540,7 @@ }, "autoload": { "psr-4": { - "Psr\\Http\\Message\\": "src/" + "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1646,21 +1553,20 @@ "homepage": "http://www.php-fig.org/" } ], - "description": "Common interfaces for PSR-7 HTTP message factories", + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/master" }, - "time": "2019-04-30T12:38:16+00:00" + "time": "2017-02-14T16:28:37+00:00" }, { "name": "psr/http-message", @@ -1715,120 +1621,6 @@ }, "time": "2016-08-06T14:39:51+00:00" }, - { - "name": "psr/http-server-handler", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-server-handler.git", - "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-server-handler/zipball/aff2f80e33b7f026ec96bb42f63242dc50ffcae7", - "reference": "aff2f80e33b7f026ec96bb42f63242dc50ffcae7", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Server\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP server-side request handler", - "keywords": [ - "handler", - "http", - "http-interop", - "psr", - "psr-15", - "psr-7", - "request", - "response", - "server" - ], - "support": { - "issues": "https://github.com/php-fig/http-server-handler/issues", - "source": "https://github.com/php-fig/http-server-handler/tree/master" - }, - "time": "2018-10-30T16:46:14+00:00" - }, - { - "name": "psr/http-server-middleware", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-server-middleware.git", - "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-server-middleware/zipball/2296f45510945530b9dceb8bcedb5cb84d40c5f5", - "reference": "2296f45510945530b9dceb8bcedb5cb84d40c5f5", - "shasum": "" - }, - "require": { - "php": ">=7.0", - "psr/http-message": "^1.0", - "psr/http-server-handler": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Server\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP server-side middleware", - "keywords": [ - "http", - "http-interop", - "middleware", - "psr", - "psr-15", - "psr-7", - "request", - "response" - ], - "support": { - "issues": "https://github.com/php-fig/http-server-middleware/issues", - "source": "https://github.com/php-fig/http-server-middleware/tree/master" - }, - "time": "2018-10-30T17:12:04+00:00" - }, { "name": "psr/log", "version": "1.1.3", @@ -1879,50 +1671,6 @@ }, "time": "2020-03-23T09:12:05+00:00" }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, { "name": "scssphp/scssphp", "version": "v1.4.0", @@ -1991,45 +1739,40 @@ "time": "2020-11-07T20:53:41+00:00" }, { - "name": "slim/psr7", - "version": "1.4", + "name": "slim/slim", + "version": "3.12.3", "source": { "type": "git", - "url": "https://github.com/slimphp/Slim-Psr7.git", - "reference": "0dca983ca32a26f4a91fb11173b7b9eaee29e9d6" + "url": "https://github.com/slimphp/Slim.git", + "reference": "1c9318a84ffb890900901136d620b4f03a59da38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim-Psr7/zipball/0dca983ca32a26f4a91fb11173b7b9eaee29e9d6", - "reference": "0dca983ca32a26f4a91fb11173b7b9eaee29e9d6", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/1c9318a84ffb890900901136d620b4f03a59da38", + "reference": "1c9318a84ffb890900901136d620b4f03a59da38", "shasum": "" }, "require": { - "fig/http-message-util": "^1.1.5", - "php": "^7.2 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "ralouphie/getallheaders": "^3", - "symfony/polyfill-php80": "^1.22" + "ext-json": "*", + "ext-libxml": "*", + "ext-simplexml": "*", + "nikic/fast-route": "^1.0", + "php": ">=5.5.0", + "pimple/pimple": "^3.0", + "psr/container": "^1.0", + "psr/http-message": "^1.0" }, "provide": { - "psr/http-factory-implementation": "1.0", "psr/http-message-implementation": "1.0" }, "require-dev": { - "adriansuter/php-autoload-override": "^1.2", - "ext-json": "*", - "http-interop/http-factory-tests": "^0.9.0", - "php-http/psr7-integration-tests": "dev-master", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^8.5 || ^9.5", - "squizlabs/php_codesniffer": "^3.6", - "weirdan/prophecy-shim": "^1.0 || ^2.0.2" + "phpunit/phpunit": "^4.0", + "squizlabs/php_codesniffer": "^2.5" }, "type": "library", "autoload": { "psr-4": { - "Slim\\Psr7\\": "src" + "Slim\\": "Slim" } }, "notification-url": "https://packagist.org/downloads/", @@ -2040,7 +1783,7 @@ { "name": "Josh Lockhart", "email": "hello@joshlockhart.com", - "homepage": "http://joshlockhart.com" + "homepage": "https://joshlockhart.com" }, { "name": "Andrew Smith", @@ -2052,103 +1795,6 @@ "email": "rob@akrabat.com", "homepage": "http://akrabat.com" }, - { - "name": "Pierre Berube", - "email": "pierre@lgse.com", - "homepage": "http://www.lgse.com" - } - ], - "description": "Strict PSR-7 implementation", - "homepage": "https://www.slimframework.com", - "keywords": [ - "http", - "psr-7", - "psr7" - ], - "support": { - "issues": "https://github.com/slimphp/Slim-Psr7/issues", - "source": "https://github.com/slimphp/Slim-Psr7/tree/1.4" - }, - "time": "2021-05-08T18:22:56+00:00" - }, - { - "name": "slim/slim", - "version": "4.7.1", - "source": { - "type": "git", - "url": "https://github.com/slimphp/Slim.git", - "reference": "0905e0775f8c1cfb3bbcfabeb6588dcfd8b82d3f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim/zipball/0905e0775f8c1cfb3bbcfabeb6588dcfd8b82d3f", - "reference": "0905e0775f8c1cfb3bbcfabeb6588dcfd8b82d3f", - "shasum": "" - }, - "require": { - "ext-json": "*", - "nikic/fast-route": "^1.3", - "php": "^7.2 || ^8.0", - "psr/container": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "psr/http-server-handler": "^1.0", - "psr/http-server-middleware": "^1.0", - "psr/log": "^1.1" - }, - "require-dev": { - "adriansuter/php-autoload-override": "^1.2", - "ext-simplexml": "*", - "guzzlehttp/psr7": "^1.7", - "http-interop/http-factory-guzzle": "^1.0", - "laminas/laminas-diactoros": "^2.4", - "nyholm/psr7": "^1.3", - "nyholm/psr7-server": "^1.0.1", - "phpspec/prophecy": "^1.12", - "phpstan/phpstan": "^0.12.58", - "phpunit/phpunit": "^8.5.13", - "slim/http": "^1.2", - "slim/psr7": "^1.3", - "squizlabs/php_codesniffer": "^3.5", - "weirdan/prophecy-shim": "^1.0 || ^2.0.2" - }, - "suggest": { - "ext-simplexml": "Needed to support XML format in BodyParsingMiddleware", - "ext-xml": "Needed to support XML format in BodyParsingMiddleware", - "php-di/php-di": "PHP-DI is the recommended container library to be used with Slim", - "slim/psr7": "Slim PSR-7 implementation. See https://www.slimframework.com/docs/v4/start/installation.html for more information." - }, - "type": "library", - "autoload": { - "psr-4": { - "Slim\\": "Slim" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Josh Lockhart", - "email": "hello@joshlockhart.com", - "homepage": "https://joshlockhart.com" - }, - { - "name": "Andrew Smith", - "email": "a.smith@silentworks.co.uk", - "homepage": "http://silentworks.co.uk" - }, - { - "name": "Rob Allen", - "email": "rob@akrabat.com", - "homepage": "http://akrabat.com" - }, - { - "name": "Pierre Berube", - "email": "pierre@lgse.com", - "homepage": "http://www.lgse.com" - }, { "name": "Gabriel Manricks", "email": "gmanricks@me.com", @@ -2156,7 +1802,7 @@ } ], "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs", - "homepage": "https://www.slimframework.com", + "homepage": "https://slimframework.com", "keywords": [ "api", "framework", @@ -2164,26 +1810,10 @@ "router" ], "support": { - "docs": "https://www.slimframework.com/docs/v4/", - "forum": "https://discourse.slimframework.com/", - "irc": "irc://irc.freenode.net:6667/slimphp", "issues": "https://github.com/slimphp/Slim/issues", - "rss": "https://www.slimframework.com/blog/feed.rss", - "slack": "https://slimphp.slack.com/", - "source": "https://github.com/slimphp/Slim", - "wiki": "https://github.com/slimphp/Slim/wiki" + "source": "https://github.com/slimphp/Slim/tree/3.x" }, - "funding": [ - { - "url": "https://opencollective.com/slimphp", - "type": "open_collective" - }, - { - "url": "https://tidelift.com/funding/github/packagist/slim/slim", - "type": "tidelift" - } - ], - "time": "2020-12-01T19:41:22+00:00" + "time": "2019-11-28T17:40:33+00:00" }, { "name": "spomky-labs/otphp", @@ -2471,89 +2101,6 @@ ], "time": "2020-07-14T12:35:20+00:00" }, - { - "name": "symfony/polyfill-php80", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "reference": "eca0bf41ed421bed1b57c4958bab16aa86b757d0", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, { "name": "symfony/polyfill-util", "version": "v1.18.1", @@ -2764,97 +2311,28 @@ }, "time": "2020-02-14T14:20:12+00:00" }, - { - "name": "tuupola/callable-handler", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/tuupola/callable-handler.git", - "reference": "0bc7b88630ca753de9aba8f411046856f5ca6f8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tuupola/callable-handler/zipball/0bc7b88630ca753de9aba8f411046856f5ca6f8c", - "reference": "0bc7b88630ca753de9aba8f411046856f5ca6f8c", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0", - "psr/http-server-middleware": "^1.0" - }, - "require-dev": { - "overtrue/phplint": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "squizlabs/php_codesniffer": "^3.2", - "tuupola/http-factory": "^0.4.0|^1.0", - "zendframework/zend-diactoros": "^1.6.0|^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Tuupola\\Middleware\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mika Tuupola", - "email": "tuupola@appelsiini.net", - "homepage": "https://appelsiini.net/", - "role": "Developer" - } - ], - "description": "Compatibility layer for PSR-7 double pass and PSR-15 middlewares.", - "homepage": "https://github.com/tuupola/callable-handler", - "keywords": [ - "middleware", - "psr-15", - "psr-7" - ], - "support": { - "issues": "https://github.com/tuupola/callable-handler/issues", - "source": "https://github.com/tuupola/callable-handler/tree/1.1.0" - }, - "funding": [ - { - "url": "https://github.com/tuupola", - "type": "github" - } - ], - "time": "2020-09-09T08:31:54+00:00" - }, { "name": "tuupola/cors-middleware", - "version": "1.2.1", + "version": "0.5.2", "source": { "type": "git", "url": "https://github.com/tuupola/cors-middleware.git", - "reference": "4f085d11f349e83d18f1eb5802551353b2b093a3" + "reference": "db69d8e67b99570b16e8cd5f78c423ed1167cb21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tuupola/cors-middleware/zipball/4f085d11f349e83d18f1eb5802551353b2b093a3", - "reference": "4f085d11f349e83d18f1eb5802551353b2b093a3", + "url": "https://api.github.com/repos/tuupola/cors-middleware/zipball/db69d8e67b99570b16e8cd5f78c423ed1167cb21", + "reference": "db69d8e67b99570b16e8cd5f78c423ed1167cb21", "shasum": "" }, "require": { - "neomerx/cors-psr7": "^1.0.4", - "php": "^7.1|^8.0", - "psr/http-message": "^1.0.1", - "psr/http-server-middleware": "^1.0", - "tuupola/callable-handler": "^1.0", - "tuupola/http-factory": "^1.0.2" + "neomerx/cors-psr7": "^1.0", + "php": "^5.5 || ^7.0" }, "require-dev": { - "equip/dispatch": "^2.0", - "overtrue/phplint": "^1.0", - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "squizlabs/php_codesniffer": "^3.5", - "zendframework/zend-diactoros": "^1.0|^2.0" + "phpunit/phpunit": "^4.8", + "squizlabs/php_codesniffer": "^2.5", + "zendframework/zend-diactoros": "^1.3" }, "type": "library", "autoload": { @@ -2870,96 +2348,22 @@ { "name": "Mika Tuupola", "email": "tuupola@appelsiini.net", - "homepage": "https://appelsiini.net/", + "homepage": "http://www.appelsiini.net/", "role": "Developer" } ], - "description": "PSR-7 and PSR-15 CORS middleware", + "description": "PSR-7 CORS Middleware", "homepage": "https://github.com/tuupola/cors-middleware", "keywords": [ "cors", "middleware", - "psr-15", - "psr-7" + "slim" ], "support": { "issues": "https://github.com/tuupola/cors-middleware/issues", - "source": "https://github.com/tuupola/cors-middleware/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/tuupola", - "type": "github" - } - ], - "time": "2020-10-29T11:01:06+00:00" - }, - { - "name": "tuupola/http-factory", - "version": "1.3.0", - "source": { - "type": "git", - "url": "https://github.com/tuupola/http-factory.git", - "reference": "aa48841a9f572b9cebe9d3ac5d5d3362a83f57ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tuupola/http-factory/zipball/aa48841a9f572b9cebe9d3ac5d5d3362a83f57ac", - "reference": "aa48841a9f572b9cebe9d3ac5d5d3362a83f57ac", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0", - "psr/http-factory": "^1.0" - }, - "conflict": { - "nyholm/psr7": "<1.0" - }, - "provide": { - "psr/http-factory-implementation": "^1.0" - }, - "require-dev": { - "http-interop/http-factory-tests": "^0.7.0", - "overtrue/phplint": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0", - "squizlabs/php_codesniffer": "^3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Tuupola\\Http\\Factory\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mika Tuupola", - "email": "tuupola@appelsiini.net", - "homepage": "https://appelsiini.net/", - "role": "Developer" - } - ], - "description": "Lightweight autodiscovering PSR-17 HTTP factories", - "homepage": "https://github.com/tuupola/http-factory", - "keywords": [ - "http", - "psr-17", - "psr-7" - ], - "support": { - "issues": "https://github.com/tuupola/http-factory/issues", - "source": "https://github.com/tuupola/http-factory/tree/1.3.0" + "source": "https://github.com/tuupola/cors-middleware/tree/master" }, - "funding": [ - { - "url": "https://github.com/tuupola", - "type": "github" - } - ], - "time": "2020-10-01T07:46:32+00:00" + "time": "2016-08-12T13:12:58+00:00" } ], "packages-dev": [ @@ -3025,26 +2429,25 @@ }, { "name": "behat/gherkin", - "version": "v4.8.0", + "version": "v4.6.2", "source": { "type": "git", "url": "https://github.com/Behat/Gherkin.git", - "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd" + "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Behat/Gherkin/zipball/2391482cd003dfdc36b679b27e9f5326bd656acd", - "reference": "2391482cd003dfdc36b679b27e9f5326bd656acd", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/51ac4500c4dc30cbaaabcd2f25694299df666a31", + "reference": "51ac4500c4dc30cbaaabcd2f25694299df666a31", "shasum": "" }, "require": { - "php": "~7.2|~8.0" + "php": ">=5.3.1" }, "require-dev": { - "cucumber/cucumber": "dev-gherkin-16.0.0", - "phpunit/phpunit": "~8|~9", - "symfony/phpunit-bridge": "~3|~4|~5", - "symfony/yaml": "~3|~4|~5" + "phpunit/phpunit": "~4.5|~5", + "symfony/phpunit-bridge": "~2.7|~3|~4", + "symfony/yaml": "~2.3|~3|~4" }, "suggest": { "symfony/yaml": "If you want to parse features, represented in YAML files" @@ -3071,7 +2474,7 @@ "homepage": "http://everzet.com" } ], - "description": "Gherkin DSL parser for PHP", + "description": "Gherkin DSL parser for PHP 5.3", "homepage": "http://behat.org/", "keywords": [ "BDD", @@ -3083,9 +2486,9 @@ ], "support": { "issues": "https://github.com/Behat/Gherkin/issues", - "source": "https://github.com/Behat/Gherkin/tree/v4.8.0" + "source": "https://github.com/Behat/Gherkin/tree/master" }, - "time": "2021-02-04T12:44:21+00:00" + "time": "2020-03-17T14:03:26+00:00" }, { "name": "camspiers/json-pretty", @@ -3195,28 +2598,28 @@ }, { "name": "codeception/codeception", - "version": "4.1.21", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/Codeception/Codeception.git", - "reference": "c25f20d842a7e3fa0a8e6abf0828f102c914d419" + "reference": "e610c15ebb73b56722c67e1c799bf0565f062899" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/c25f20d842a7e3fa0a8e6abf0828f102c914d419", - "reference": "c25f20d842a7e3fa0a8e6abf0828f102c914d419", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/e610c15ebb73b56722c67e1c799bf0565f062899", + "reference": "e610c15ebb73b56722c67e1c799bf0565f062899", "shasum": "" }, "require": { "behat/gherkin": "^4.4.0", "codeception/lib-asserts": "^1.0", - "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.1.1 | ^9.0", + "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.1.1", "codeception/stub": "^2.0 | ^3.0", "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", "guzzlehttp/psr7": "~1.4", - "php": ">=5.6.0 <9.0", + "php": ">=5.6.0 <8.0", "symfony/console": ">=2.7 <6.0", "symfony/css-selector": ">=2.7 <6.0", "symfony/event-dispatcher": ">=2.7 <6.0", @@ -3224,17 +2627,17 @@ "symfony/yaml": ">=2.7 <6.0" }, "require-dev": { - "codeception/module-asserts": "1.*@dev", - "codeception/module-cli": "1.*@dev", - "codeception/module-db": "1.*@dev", - "codeception/module-filesystem": "1.*@dev", - "codeception/module-phpbrowser": "1.*@dev", + "codeception/module-asserts": "*@dev", + "codeception/module-cli": "*@dev", + "codeception/module-db": "*@dev", + "codeception/module-filesystem": "*@dev", + "codeception/module-phpbrowser": "*@dev", "codeception/specify": "~0.3", "codeception/util-universalframework": "*@dev", "monolog/monolog": "~1.8", "squizlabs/php_codesniffer": "~2.0", "symfony/process": ">=2.7 <6.0", - "vlucas/phpdotenv": "^2.0 | ^3.0 | ^4.0 | ^5.0" + "vlucas/phpdotenv": "^2.0 | ^3.0 | ^4.0" }, "suggest": { "codeception/specify": "BDD-style code blocks", @@ -3278,34 +2681,28 @@ ], "support": { "issues": "https://github.com/Codeception/Codeception/issues", - "source": "https://github.com/Codeception/Codeception/tree/4.1.21" + "source": "https://github.com/Codeception/Codeception/tree/4.0" }, - "funding": [ - { - "url": "https://opencollective.com/codeception", - "type": "open_collective" - } - ], - "time": "2021-05-28T17:43:39+00:00" + "time": "2020-01-14T14:44:10+00:00" }, { "name": "codeception/lib-asserts", - "version": "1.13.2", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/Codeception/lib-asserts.git", - "reference": "184231d5eab66bc69afd6b9429344d80c67a33b6" + "reference": "263ef0b7eff80643e82f4cf55351eca553a09a10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/184231d5eab66bc69afd6b9429344d80c67a33b6", - "reference": "184231d5eab66bc69afd6b9429344d80c67a33b6", + "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/263ef0b7eff80643e82f4cf55351eca553a09a10", + "reference": "263ef0b7eff80643e82f4cf55351eca553a09a10", "shasum": "" }, "require": { "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3 | ^9.0", "ext-dom": "*", - "php": ">=5.6.0 <9.0" + "php": ">=5.6.0 <8.0" }, "type": "library", "autoload": { @@ -3338,32 +2735,39 @@ ], "support": { "issues": "https://github.com/Codeception/lib-asserts/issues", - "source": "https://github.com/Codeception/lib-asserts/tree/1.13.2" + "source": "https://github.com/Codeception/lib-asserts/tree/1.13.1" }, - "time": "2020-10-21T16:26:20+00:00" + "time": "2020-08-28T07:49:36+00:00" }, { - "name": "codeception/module-asserts", - "version": "1.3.1", + "name": "codeception/lib-innerbrowser", + "version": "1.3.2", "source": { "type": "git", - "url": "https://github.com/Codeception/module-asserts.git", - "reference": "59374f2fef0cabb9e8ddb53277e85cdca74328de" + "url": "https://github.com/Codeception/lib-innerbrowser.git", + "reference": "7bdcee4cf654cfeeedd00405edd4f06f85255659" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/59374f2fef0cabb9e8ddb53277e85cdca74328de", - "reference": "59374f2fef0cabb9e8ddb53277e85cdca74328de", + "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/7bdcee4cf654cfeeedd00405edd4f06f85255659", + "reference": "7bdcee4cf654cfeeedd00405edd4f06f85255659", "shasum": "" }, "require": { "codeception/codeception": "*@dev", - "codeception/lib-asserts": "^1.13.1", - "php": ">=5.6.0 <9.0" + "ext-dom": "*", + "ext-json": "*", + "ext-mbstring": "*", + "php": ">=5.6.0 <8.0", + "symfony/browser-kit": ">=2.7 <6.0", + "symfony/dom-crawler": ">=2.7 <6.0" }, "conflict": { "codeception/codeception": "<4.0" }, + "require-dev": { + "codeception/util-universalframework": "dev-master" + }, "type": "library", "autoload": { "classmap": [ @@ -3376,49 +2780,168 @@ ], "authors": [ { - "name": "Michael Bodnarchuk" + "name": "Michael Bodnarchuk", + "email": "davert@mail.ua", + "homepage": "http://codegyre.com" }, { "name": "Gintautas Miselis" - }, - { - "name": "Gustavo Nieves", - "homepage": "https://medium.com/@ganieves" } ], - "description": "Codeception module containing various assertions", - "homepage": "https://codeception.com/", + "description": "Parent library for all Codeception framework modules and PhpBrowser", + "homepage": "http://codeception.com/", "keywords": [ - "assertions", - "asserts", + "codeception" + ], + "support": { + "issues": "https://github.com/Codeception/lib-innerbrowser/issues", + "source": "https://github.com/Codeception/lib-innerbrowser/tree/master" + }, + "time": "2020-07-05T14:21:45+00:00" + }, + { + "name": "codeception/module-asserts", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-asserts.git", + "reference": "32e5be519faaeb60ed3692383dcd1b3390ec2667" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/32e5be519faaeb60ed3692383dcd1b3390ec2667", + "reference": "32e5be519faaeb60ed3692383dcd1b3390ec2667", + "shasum": "" + }, + "require": { + "codeception/codeception": "*@dev", + "codeception/lib-asserts": "^1.13.1", + "php": ">=5.6.0 <8.0" + }, + "conflict": { + "codeception/codeception": "<4.0" + }, + "require-dev": { + "codeception/util-robohelpers": "dev-master" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + }, + { + "name": "Gintautas Miselis" + }, + { + "name": "Gustavo Nieves", + "homepage": "https://medium.com/@ganieves" + } + ], + "description": "Codeception module containing various assertions", + "homepage": "https://codeception.com/", + "keywords": [ + "assertions", + "asserts", "codeception" ], "support": { "issues": "https://github.com/Codeception/module-asserts/issues", - "source": "https://github.com/Codeception/module-asserts/tree/1.3.1" + "source": "https://github.com/Codeception/module-asserts/tree/master" + }, + "time": "2020-08-28T08:06:29+00:00" + }, + { + "name": "codeception/module-phpbrowser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/Codeception/module-phpbrowser.git", + "reference": "c1962657504a2a476b8dbd1f1ee05e0c912e5645" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/c1962657504a2a476b8dbd1f1ee05e0c912e5645", + "reference": "c1962657504a2a476b8dbd1f1ee05e0c912e5645", + "shasum": "" + }, + "require": { + "codeception/codeception": "*@dev", + "codeception/lib-innerbrowser": "^1.3.2", + "guzzlehttp/guzzle": "^6.3.0|^7.0.0", + "php": ">=5.6.0 <8.0" + }, + "conflict": { + "codeception/codeception": "<4.0" + }, + "require-dev": { + "codeception/module-rest": "dev-master | ^1.0", + "codeception/util-robohelpers": "dev-master" + }, + "suggest": { + "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Bodnarchuk" + }, + { + "name": "Gintautas Miselis" + } + ], + "description": "Codeception module for testing web application over HTTP", + "homepage": "http://codeception.com/", + "keywords": [ + "codeception", + "functional-testing", + "http" + ], + "support": { + "issues": "https://github.com/Codeception/module-phpbrowser/issues", + "source": "https://github.com/Codeception/module-phpbrowser/tree/master" }, - "time": "2020-10-21T16:48:15+00:00" + "time": "2020-07-05T15:29:32+00:00" }, { "name": "codeception/phpunit-wrapper", - "version": "8.1.4", + "version": "6.8.1", "source": { "type": "git", "url": "https://github.com/Codeception/phpunit-wrapper.git", - "reference": "f41335f0b4dd17cf7bbc63e87943b3ae72a8bbc3" + "reference": "ca6e94c6dadc19db05698d4e0d84214e570ce045" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/f41335f0b4dd17cf7bbc63e87943b3ae72a8bbc3", - "reference": "f41335f0b4dd17cf7bbc63e87943b3ae72a8bbc3", + "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/ca6e94c6dadc19db05698d4e0d84214e570ce045", + "reference": "ca6e94c6dadc19db05698d4e0d84214e570ce045", "shasum": "" }, "require": { - "php": ">=7.2", - "phpunit/php-code-coverage": "^7.0", - "phpunit/phpunit": "^8.0", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0" + "phpunit/php-code-coverage": ">=4.0.4 <6.0", + "phpunit/phpunit": ">=6.5.13 <7.0", + "sebastian/comparator": ">=1.2.4 <3.0", + "sebastian/diff": ">=1.4 <4.0" + }, + "replace": { + "codeception/phpunit-wrapper": "*" }, "require-dev": { "codeception/specify": "*", @@ -3443,26 +2966,27 @@ "description": "PHPUnit classes used by Codeception", "support": { "issues": "https://github.com/Codeception/phpunit-wrapper/issues", - "source": "https://github.com/Codeception/phpunit-wrapper/tree/8.1.4" + "source": "https://github.com/Codeception/phpunit-wrapper/tree/6.8.1" }, - "time": "2020-12-28T14:00:08+00:00" + "time": "2020-03-20T08:05:05+00:00" }, { "name": "codeception/stub", - "version": "3.7.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/Codeception/Stub.git", - "reference": "468dd5fe659f131fc997f5196aad87512f9b1304" + "reference": "eea518711d736eab838c1274593c4568ec06b23d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Stub/zipball/468dd5fe659f131fc997f5196aad87512f9b1304", - "reference": "468dd5fe659f131fc997f5196aad87512f9b1304", + "url": "https://api.github.com/repos/Codeception/Stub/zipball/eea518711d736eab838c1274593c4568ec06b23d", + "reference": "eea518711d736eab838c1274593c4568ec06b23d", "shasum": "" }, "require": { - "phpunit/phpunit": "^8.4 | ^9.0" + "codeception/phpunit-wrapper": "^6.6.1 | ^7.7.1 | ^8.0.3", + "phpunit/phpunit": ">=6.5 <9.0" }, "type": "library", "autoload": { @@ -3477,37 +3001,40 @@ "description": "Flexible Stub wrapper for PHPUnit's Mock Builder", "support": { "issues": "https://github.com/Codeception/Stub/issues", - "source": "https://github.com/Codeception/Stub/tree/3.7.0" + "source": "https://github.com/Codeception/Stub/tree/master" }, - "time": "2020-07-03T15:54:43+00:00" + "time": "2019-08-10T16:20:53+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.0.5", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=5.3,<8.0-DEV" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -3521,34 +3048,20 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" + "homepage": "http://ocramius.github.com/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "homepage": "https://github.com/doctrine/instantiator", "keywords": [ "constructor", "instantiate" ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/master" }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2015-06-14T21:17:01+00:00" }, { "name": "monolog/monolog", @@ -3634,28 +3147,25 @@ }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.7.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", + "reference": "3b8a3a99ba1f6a3952ac2747d989303cbd6b7a3e", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" + "php": "^5.6 || ^7.0" }, "require-dev": { "doctrine/collections": "^1.0", "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^4.1" }, "type": "library", "autoload": { @@ -3680,41 +3190,34 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.x" }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2017-10-19T19:58:43+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.1", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", + "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" + "phar-io/version": "^1.0.1", + "php": "^5.6 || ^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -3748,24 +3251,24 @@ "issues": "https://github.com/phar-io/manifest/issues", "source": "https://github.com/phar-io/manifest/tree/master" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2017-03-05T18:14:27+00:00" }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", + "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^5.6 || ^7.0" }, "type": "library", "autoload": { @@ -3797,9 +3300,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" + "source": "https://github.com/phar-io/version/tree/master" }, - "time": "2021-02-23T14:00:09+00:00" + "time": "2017-03-05T17:38:23+00:00" }, { "name": "php-http/curl-client", @@ -4175,30 +3678,35 @@ }, { "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" }, "type": "library", "extra": { "branch-alias": { - "dev-2.x": "2.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src/" + "phpDocumentor\\Reflection\\": [ + "src" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -4222,43 +3730,47 @@ ], "support": { "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" }, - "time": "2020-06-27T09:03:43+00:00" + "time": "2017-09-11T18:02:19+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", + "version": "4.3.4", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/da3fd972d6bafd628114f7e7e036f45944b62e9c", + "reference": "da3fd972d6bafd628114f7e7e036f45944b62e9c", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0 || ^2.0.0", + "phpdocumentor/type-resolver": "~0.4 || ^1.0.0", + "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "~1.3.2" + "doctrine/instantiator": "^1.0.5", + "mockery/mockery": "^1.0", + "phpdocumentor/type-resolver": "0.4.*", + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.x-dev" + "dev-master": "4.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "phpDocumentor\\Reflection\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -4269,44 +3781,41 @@ { "name": "Mike van Riel", "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/4.x" }, - "time": "2020-09-03T19:13:55+00:00" + "time": "2019-12-28T18:55:12+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.4.0", + "version": "0.5.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" + "reference": "cf842904952e64e703800d094cdf34e715a8a3ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/cf842904952e64e703800d094cdf34e715a8a3ae", + "reference": "cf842904952e64e703800d094cdf34e715a8a3ae", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0" }, "require-dev": { - "ext-tokenizer": "*" + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -4324,42 +3833,41 @@ "email": "me@mikevanriel.com" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/master" }, - "time": "2020-09-17T18:55:26+00:00" + "time": "2017-12-30T13:23:38+00:00" }, { "name": "phpspec/prophecy", - "version": "1.13.0", + "version": "v1.10.3", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + "reference": "451c3cd1418cf640de218914901e51b064abb093" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093", + "reference": "451c3cd1418cf640de218914901e51b064abb093", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0", + "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "phpspec/phpspec": "^2.5 || ^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.10.x-dev" } }, "autoload": { @@ -4394,46 +3902,46 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + "source": "https://github.com/phpspec/prophecy/tree/v1.10.3" }, - "time": "2021-03-17T13:42:18+00:00" + "time": "2020-03-05T15:02:03+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "7.0.14", + "version": "5.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c" + "reference": "c89677919c5dd6d3b3852f230a663118762218ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bb7c9a210c72e4709cdde67f8b7362f672f2225c", - "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c89677919c5dd6d3b3852f230a663118762218ac", + "reference": "c89677919c5dd6d3b3852f230a663118762218ac", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": ">=7.2", - "phpunit/php-file-iterator": "^2.0.2", + "php": "^7.0", + "phpunit/php-file-iterator": "^1.4.2", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.1.1 || ^4.0", + "phpunit/php-token-stream": "^2.0.1", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.2.2", + "sebastian/environment": "^3.0", "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1.3" + "theseer/tokenizer": "^1.1" }, "require-dev": { - "phpunit/phpunit": "^8.2.2" + "phpunit/phpunit": "^6.0" }, "suggest": { - "ext-xdebug": "^2.7.2" + "ext-xdebug": "^2.5.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "5.3.x-dev" } }, "autoload": { @@ -4461,40 +3969,31 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.14" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/5.3" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-12-02T13:39:03+00:00" + "time": "2018-04-06T15:36:58+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "2.0.3", + "version": "1.4.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357" + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4b49fb70f067272b659ef0174ff9ca40fdaa6357", - "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4", + "reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "^8.5" + "php": ">=5.3.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -4509,7 +4008,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", + "email": "sb@sebastian-bergmann.de", "role": "lead" } ], @@ -4520,16 +4019,11 @@ "iterator" ], "support": { + "irc": "irc://irc.freenode.net/phpunit", "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/1.4.5" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:25:21+00:00" + "time": "2017-11-27T13:52:08+00:00" }, { "name": "phpunit/php-text-template", @@ -4578,28 +4072,28 @@ }, { "name": "phpunit/php-timer", - "version": "2.1.3", + "version": "1.0.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662" + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662", - "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -4614,7 +4108,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", + "email": "sb@sebastian-bergmann.de", "role": "lead" } ], @@ -4625,41 +4119,35 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:20:02+00:00" + "time": "2017-02-26T11:10:40+00:00" }, { "name": "phpunit/php-token-stream", - "version": "3.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "472b687829041c24b25f475e14c2f38a09edf1c2" + "reference": "791198a2c6254db10131eecfe8c06670700904db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/472b687829041c24b25f475e14c2f38a09edf1c2", - "reference": "472b687829041c24b25f475e14c2f38a09edf1c2", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/791198a2c6254db10131eecfe8c06670700904db", + "reference": "791198a2c6254db10131eecfe8c06670700904db", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.1" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^6.2.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4684,65 +4172,60 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-token-stream/issues", - "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.2" + "source": "https://github.com/sebastianbergmann/php-token-stream/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], "abandoned": true, - "time": "2020-11-30T08:38:46+00:00" + "time": "2017-11-27T05:48:46+00:00" }, { "name": "phpunit/phpunit", - "version": "8.5.17", + "version": "6.5.14", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "79067856d85421c56d413bd238d4e2cd6b0e54da" + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/79067856d85421c56d413bd238d4e2cd6b0e54da", - "reference": "79067856d85421c56d413bd238d4e2cd6b0e54da", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bac23fe7ff13dbdb461481f706f0e9fe746334b7", + "reference": "bac23fe7ff13dbdb461481f706f0e9fe746334b7", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.0", - "phar-io/manifest": "^2.0.1", - "phar-io/version": "^3.0.2", - "php": ">=7.2", - "phpspec/prophecy": "^1.10.3", - "phpunit/php-code-coverage": "^7.0.12", - "phpunit/php-file-iterator": "^2.0.2", + "myclabs/deep-copy": "^1.6.1", + "phar-io/manifest": "^1.0.1", + "phar-io/version": "^1.0", + "php": "^7.0", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^5.3", + "phpunit/php-file-iterator": "^1.4.3", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1.2", - "sebastian/comparator": "^3.0.2", - "sebastian/diff": "^3.0.2", - "sebastian/environment": "^4.2.3", - "sebastian/exporter": "^3.1.2", - "sebastian/global-state": "^3.0.0", + "phpunit/php-timer": "^1.0.9", + "phpunit/phpunit-mock-objects": "^5.0.9", + "sebastian/comparator": "^2.1", + "sebastian/diff": "^2.0", + "sebastian/environment": "^3.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^2.0", "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0.1", - "sebastian/type": "^1.1.3", + "sebastian/resource-operations": "^1.0", "sebastian/version": "^2.0.1" }, + "conflict": { + "phpdocumentor/reflection-docblock": "3.0.2", + "phpunit/dbunit": "<3.0" + }, "require-dev": { "ext-pdo": "*" }, "suggest": { - "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0.0" + "phpunit/php-invoker": "^1.1" }, "bin": [ "phpunit" @@ -4750,7 +4233,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.5-dev" + "dev-master": "6.5.x-dev" } }, "autoload": { @@ -4778,89 +4261,93 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.17" + "source": "https://github.com/sebastianbergmann/phpunit/tree/6.5.14" }, - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-23T05:12:43+00:00" + "time": "2019-02-01T05:22:47+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "phpunit/phpunit-mock-objects", + "version": "5.0.10", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/cd1cf05c553ecfec36b170070573e540b67d3f1f", + "reference": "cd1cf05c553ecfec36b170070573e540b67d3f1f", "shasum": "" }, "require": { - "php": ">=7.2.0" + "doctrine/instantiator": "^1.0.5", + "php": "^7.0", + "phpunit/php-text-template": "^1.2.1", + "sebastian/exporter": "^3.1" + }, + "conflict": { + "phpunit/phpunit": "<6.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5.11" + }, + "suggest": { + "ext-soap": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "5.0.x-dev" } }, "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } + "classmap": [ + "src/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Standard interfaces for event handling.", + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", "keywords": [ - "events", - "psr", - "psr-14" + "mock", + "xunit" ], "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues", + "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/5.0.10" }, - "time": "2019-01-08T18:20:26+00:00" + "abandoned": true, + "time": "2018-08-09T05:50:03+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "1.0.2", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619" + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619", - "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", "shasum": "" }, "require": { - "php": ">=5.6" + "php": "^5.6 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^5.7 || ^6.0" }, "type": "library", "extra": { @@ -4887,42 +4374,36 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:15:22+00:00" + "time": "2017-03-04T06:30:41+00:00" }, { "name": "sebastian/comparator", - "version": "3.0.3", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758" + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758", - "reference": "1071dfcef776a57013124ff35e1fc41ccd294758", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/34369daee48eafb2651bea869b4b15d75ccc35f9", + "reference": "34369daee48eafb2651bea869b4b15d75ccc35f9", "shasum": "" }, "require": { - "php": ">=7.1", - "sebastian/diff": "^3.0", + "php": "^7.0", + "sebastian/diff": "^2.0 || ^3.0", "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^6.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { @@ -4935,10 +4416,6 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" @@ -4950,6 +4427,10 @@ { "name": "Bernhard Schussek", "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], "description": "Provides the functionality to compare PHP values for equality", @@ -4961,41 +4442,34 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T08:04:30+00:00" + "time": "2018-02-01T13:46:46+00:00" }, { "name": "sebastian/diff", - "version": "3.0.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211" + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211", - "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "phpunit/phpunit": "^6.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5008,62 +4482,50 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Kore Nordmann", "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "diff" ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/diff/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:59:04+00:00" + "time": "2017-08-03T08:09:46+00:00" }, { "name": "sebastian/environment", - "version": "4.2.4", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0" + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", - "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/cd0871b3975fb7fc44d11314fd1ee20925fce4f5", + "reference": "cd0871b3975fb7fc44d11314fd1ee20925fce4f5", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^7.5" - }, - "suggest": { - "ext-posix": "*" + "phpunit/phpunit": "^6.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.2-dev" + "dev-master": "3.1.x-dev" } }, "autoload": { @@ -5090,32 +4552,26 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4" + "source": "https://github.com/sebastianbergmann/environment/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:53:42+00:00" + "time": "2017-07-01T08:51:00+00:00" }, { "name": "sebastian/exporter", - "version": "3.1.3", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e" + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e", - "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e", + "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e", "shasum": "" }, "require": { - "php": ">=7.0", + "php": "^7.0", "sebastian/recursion-context": "^3.0" }, "require-dev": { @@ -5167,38 +4623,29 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:47:53+00:00" + "time": "2019-09-14T09:02:43+00:00" }, { "name": "sebastian/global-state", - "version": "3.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b" + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b", - "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", + "reference": "e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4", "shasum": "" }, "require": { - "php": ">=7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": "^7.0" }, "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^8.0" + "phpunit/phpunit": "^6.0" }, "suggest": { "ext-uopz": "*" @@ -5206,7 +4653,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -5231,32 +4678,26 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/global-state/tree/2.0.0" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:43:24+00:00" + "time": "2017-04-27T15:39:26+00:00" }, { "name": "sebastian/object-enumerator", - "version": "3.0.4", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2" + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", - "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", "shasum": "" }, "require": { - "php": ">=7.0", + "php": "^7.0", "sebastian/object-reflector": "^1.1.1", "sebastian/recursion-context": "^3.0" }, @@ -5288,32 +4729,26 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:40:27+00:00" + "time": "2017-08-03T12:35:26+00:00" }, { "name": "sebastian/object-reflector", - "version": "1.1.2", + "version": "1.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d" + "reference": "773f97c67f28de00d397be301821b06708fca0be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", - "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", "shasum": "" }, "require": { - "php": ">=7.0" + "php": "^7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" @@ -5343,32 +4778,26 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:37:18+00:00" + "time": "2017-03-29T09:07:27+00:00" }, { "name": "sebastian/recursion-context", - "version": "3.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb" + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb", - "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", "shasum": "" }, "require": { - "php": ">=7.0" + "php": "^7.0" }, "require-dev": { "phpunit/phpunit": "^6.0" @@ -5389,14 +4818,14 @@ "BSD-3-Clause" ], "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Adam Harvey", "email": "aharvey@php.net" @@ -5406,37 +4835,31 @@ "homepage": "http://www.github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:34:24+00:00" + "time": "2017-03-03T06:23:57+00:00" }, { "name": "sebastian/resource-operations", - "version": "2.0.2", + "version": "1.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3" + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3", - "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", + "reference": "ce990bb21759f94aeafd30209e8cfcdfa8bc3f52", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=5.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { @@ -5458,71 +4881,9 @@ "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/master" }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:30:19+00:00" - }, - { - "name": "sebastian/type", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4", - "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/1.1.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-30T07:25:11+00:00" + "time": "2015-07-28T20:34:47+00:00" }, { "name": "sebastian/version", @@ -5572,124 +4933,39 @@ "time": "2016-10-03T07:35:21+00:00" }, { - "name": "symfony/console", - "version": "v5.3.2", + "name": "symfony/browser-kit", + "version": "v3.4.45", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1" + "url": "https://github.com/symfony/browser-kit.git", + "reference": "2084c70ace7605fb0984991fd0f575814bfcc8fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/649730483885ff2ca99ca0560ef0e5f6b03f2ac1", - "reference": "649730483885ff2ca99ca0560ef0e5f6b03f2ac1", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/2084c70ace7605fb0984991fd0f575814bfcc8fe", + "reference": "2084c70ace7605fb0984991fd0f575814bfcc8fe", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" - }, - "conflict": { - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0" + "php": "^5.5.9|>=7.0.8", + "symfony/dom-crawler": "~2.8|~3.0|~4.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "symfony/css-selector": "~2.8|~3.0|~4.0", + "symfony/process": "~2.8|~3.0|~4.0" }, "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", "symfony/process": "" }, "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v5.3.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" } - ], - "time": "2021-06-12T09:42:48+00:00" - }, - { - "name": "symfony/css-selector", - "version": "v5.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", - "reference": "fcd0b29a7a0b1bb5bfbedc6231583d77fea04814", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\CssSelector\\": "" + "Symfony\\Component\\BrowserKit\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -5704,86 +4980,15 @@ "name": "Fabien Potencier", "email": "fabien@symfony.com" }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.3.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-26T17:40:38+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "A generic function and convention to trigger deprecation notices", + "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/browser-kit/tree/v3.4.45" }, "funding": [ { @@ -5799,53 +5004,57 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2020-09-02T16:06:40+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v5.3.0", + "name": "symfony/console", + "version": "v3.4.45", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce" + "url": "https://github.com/symfony/console.git", + "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/67a5f354afa8e2f231081b3fa11a5912f933c3ce", - "reference": "67a5f354afa8e2f231081b3fa11a5912f933c3ce", + "url": "https://api.github.com/repos/symfony/console/zipball/b28996bc0a3b08914b2a8609163ec35b36b30685", + "reference": "b28996bc0a3b08914b2a8609163ec35b36b30685", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.15" + "php": "^5.5.9|>=7.0.8", + "symfony/debug": "~2.8|~3.0|~4.0", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" }, "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "psr/log-implementation": "1.0" }, "require-dev": { "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/error-handler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" + "symfony/config": "~3.3|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~2.8|~3.0|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.3|~4.0" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "Symfony\\Component\\Console\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -5865,10 +5074,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "description": "Symfony Console Component", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.3.0" + "source": "https://github.com/symfony/console/tree/v3.4.45" }, "funding": [ { @@ -5884,108 +5093,34 @@ "type": "tidelift" } ], - "time": "2021-05-26T17:43:10+00:00" + "time": "2020-09-09T05:09:37+00:00" }, { - "name": "symfony/event-dispatcher-contracts", - "version": "v2.4.0", + "name": "symfony/css-selector", + "version": "v3.4.45", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" + "url": "https://github.com/symfony/css-selector.git", + "reference": "9ccf6e78077a3fc1596e6c7b5958008965a11518" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/9ccf6e78077a3fc1596e6c7b5958008965a11518", + "reference": "9ccf6e78077a3fc1596e6c7b5958008965a11518", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "dev-master": "3.4-dev" } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-03-23T23:28:01+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", - "reference": "0ae3f047bed4edff6fd35b26a9a6bfdc92c953c6", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" }, - "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" + "Symfony\\Component\\CssSelector\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -6000,15 +5135,19 @@ "name": "Fabien Potencier", "email": "fabien@symfony.com" }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Finds files and directories via an intuitive fluent interface", + "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.3.0" + "source": "https://github.com/symfony/css-selector/tree/v3.4.45" }, "funding": [ { @@ -6024,44 +5163,44 @@ "type": "tidelift" } ], - "time": "2021-05-26T12:52:38+00:00" + "time": "2020-03-16T08:31:04+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.23.0", + "name": "symfony/debug", + "version": "v3.4.45", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab" + "url": "https://github.com/symfony/debug.git", + "reference": "9109e4414e684d0b75276ae203883467476d25d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/24b72c6baa32c746a4d0840147c9715e42bb68ab", - "reference": "24b72c6baa32c746a4d0840147c9715e42bb68ab", + "url": "https://api.github.com/repos/symfony/debug/zipball/9109e4414e684d0b75276ae203883467476d25d0", + "reference": "9109e4414e684d0b75276ae203883467476d25d0", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^5.5.9|>=7.0.8", + "psr/log": "~1.0" }, - "suggest": { - "ext-intl": "For best performance" + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/http-kernel": "~2.8|~3.0|~4.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "3.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + "Symfony\\Component\\Debug\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6070,26 +5209,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", + "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.23.0" + "source": "https://github.com/symfony/debug/tree/3.4" }, "funding": [ { @@ -6105,47 +5236,45 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2020-09-08T22:19:14+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.23.0", + "name": "symfony/dom-crawler", + "version": "v3.4.45", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "url": "https://github.com/symfony/dom-crawler.git", + "reference": "82fe363780d2d2089066e34495a7f8bd56f2bf84" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/82fe363780d2d2089066e34495a7f8bd56f2bf84", + "reference": "82fe363780d2d2089066e34495a7f8bd56f2bf84", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^5.5.9|>=7.0.8", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "symfony/css-selector": "~2.8|~3.0|~4.0" }, "suggest": { - "ext-intl": "For best performance" + "symfony/css-selector": "" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "3.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + "Symfony\\Component\\DomCrawler\\": "" }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6154,26 +5283,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", + "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + "source": "https://github.com/symfony/dom-crawler/tree/3.4" }, "funding": [ { @@ -6189,44 +5310,52 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2020-09-02T16:06:40+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.23.0", + "name": "symfony/event-dispatcher", + "version": "v3.4.45", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8", + "reference": "0bb9ea263b39fce3a12ac9f78ef576bdd80dacb8", "shasum": "" }, "require": { - "php": ">=7.1" + "php": "^5.5.9|>=7.0.8" + }, + "conflict": { + "symfony/dependency-injection": "<3.3" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~2.8|~3.0|~4.0", + "symfony/debug": "~3.4|~4.4", + "symfony/dependency-injection": "~3.3|~4.0", + "symfony/expression-language": "~2.8|~3.0|~4.0", + "symfony/stopwatch": "~2.8|~3.0|~4.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "dev-master": "3.4-dev" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Component\\EventDispatcher\\": "" }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6235,24 +5364,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v3.4.45" }, "funding": [ { @@ -6268,123 +5391,35 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2020-09-18T12:06:50+00:00" }, { - "name": "symfony/service-contracts", - "version": "v2.2.0", + "name": "symfony/finder", + "version": "v3.4.45", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1" + "url": "https://github.com/symfony/finder.git", + "reference": "52140652ed31cee3dabd0c481b5577201fa769b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1", - "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1", + "url": "https://api.github.com/repos/symfony/finder/zipball/52140652ed31cee3dabd0c481b5577201fa769b4", + "reference": "52140652ed31cee3dabd0c481b5577201fa769b4", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.0" - }, - "suggest": { - "symfony/service-implementation": "" + "php": "^5.5.9|>=7.0.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "dev-master": "3.4-dev" } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/master" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2020-09-07T11:33:47+00:00" - }, - { - "name": "symfony/string", - "version": "v5.3.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "0732e97e41c0a590f77e231afc16a327375d50b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/0732e97e41c0a590f77e231afc16a327375d50b0", - "reference": "0732e97e41c0a590f77e231afc16a327375d50b0", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" }, - "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\String\\": "" + "Symfony\\Component\\Finder\\": "" }, - "files": [ - "Resources/functions.php" - ], "exclude-from-classmap": [ "/Tests/" ] @@ -6395,26 +5430,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.2" + "source": "https://github.com/symfony/finder/tree/v3.4.45" }, "funding": [ { @@ -6430,27 +5457,27 @@ "type": "tidelift" } ], - "time": "2021-06-06T09:51:56+00:00" + "time": "2020-09-02T16:06:40+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.1.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9", + "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" + "php": "^7.0" }, "type": "library", "autoload": { @@ -6474,45 +5501,34 @@ "issues": "https://github.com/theseer/tokenizer/issues", "source": "https://github.com/theseer/tokenizer/tree/master" }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2019-06-13T22:48:21+00:00" }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389", + "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", + "php": "^5.3.3 || ^7.0 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" + "vimeo/psalm": "<3.9.1" }, "require-dev": { - "phpunit/phpunit": "^8.5.13" + "phpunit/phpunit": "^4.8.36 || ^7.5.13" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" @@ -6536,39 +5552,33 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.9.1" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2020-07-08T17:02:28+00:00" }, { "name": "woohoolabs/yang", - "version": "2.3.2", + "version": "0.9.0", "source": { "type": "git", "url": "https://github.com/woohoolabs/yang.git", - "reference": "da65122971fa6add83751497ec76af1fb6cccf77" + "reference": "00dc9820d48780364cd214537604b032d751a781" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/woohoolabs/yang/zipball/da65122971fa6add83751497ec76af1fb6cccf77", - "reference": "da65122971fa6add83751497ec76af1fb6cccf77", + "url": "https://api.github.com/repos/woohoolabs/yang/zipball/00dc9820d48780364cd214537604b032d751a781", + "reference": "00dc9820d48780364cd214537604b032d751a781", "shasum": "" }, "require": { - "php": "^7.2.0||^8.0.0", - "php-http/httplug": "^1.0.0|^2.0.0", - "psr/http-message-implementation": "^1.0.0" + "php": "^5.6.0||^7.0.0", + "php-http/client-implementation": "^1.0.0", + "php-http/httplug": "^1.0.0" }, "require-dev": { - "guzzlehttp/psr7": "^1.4.0", - "php-http/guzzle6-adapter": "^2.0.0", - "phpstan/phpstan": "^0.12.0", - "phpstan/phpstan-phpunit": "^0.12.0", - "phpstan/phpstan-strict-rules": "^0.12.0", - "phpunit/phpunit": "^7.0.0||^8.2.0||^9.0.0", - "squizlabs/php_codesniffer": "^3.5.1", - "woohoolabs/coding-standard": "^1.0.0", - "woohoolabs/releaser": "^1.1.0" + "php-http/guzzle6-adapter": "^1.1.0", + "phpunit/phpunit": "^5.4.0", + "squizlabs/php_codesniffer": "^2.3.1" }, "suggest": { "php-http/guzzle6-adapter": "Allows to use Guzzle 6 as the HTTP client implementation" @@ -6590,18 +5600,18 @@ } ], "description": "Woohoo Labs. Yang", + "homepage": "http://yang.woohoolabs.com", "keywords": [ "Woohoo Labs.", "Yang", "json api", - "psr-18", "psr-7" ], "support": { "issues": "https://github.com/woohoolabs/yang/issues", "source": "https://github.com/woohoolabs/yang" }, - "time": "2020-11-15T08:55:55+00:00" + "time": "2016-12-21T20:37:46+00:00" } ], "aliases": [], diff --git a/db/migrations/5.1.13_add_twillo_support.php b/db/migrations/5.1.13_add_twillo_support.php new file mode 100644 index 0000000000000000000000000000000000000000..0a65ddfcb72d6ecbe4643820921e8e07d78ed47e --- /dev/null +++ b/db/migrations/5.1.13_add_twillo_support.php @@ -0,0 +1,164 @@ +<?php + +class AddTwilloSupport extends Migration +{ + public function description() + { + return "Adds Twillo to OER Campus."; + } + + public function up() + { + DBManager::get()->exec(" + ALTER TABLE `oer_material` + ADD COLUMN `uri` varchar(1000) NOT NULL DEFAULT '' AFTER `license_identifier`, + ADD COLUMN `uri_hash` char(32) NOT NULL DEFAULT '' AFTER `uri`, + ADD COLUMN `published_id_on_twillo` varchar(50) DEFAULT NULL AFTER `uri_hash`, + ADD KEY `uri_hash` (`uri_hash`) + "); + $statement = DBManager::get()->prepare(" + SELECT * + FROM `oer_material` + WHERE `host_id` IS NULL + "); + $statement->execute(); + $update_uri = DBManager::get()->prepare(" + UPDATE `oer_material` + SET `uri` = :uri, + `uri_hash` = :uri_hash + WHERE `material_id` = :material_id + "); + while ($material_data = $statement->fetch()) { + $uri = ($GLOBALS['OER_PREFERRED_URI'] ?: $GLOBALS['ABSOLUTE_URI_STUDIP']) + . "dispatch.php/oer/market/details/" + . $material_data['material_id']; + $update_uri->execute([ + 'uri' => $uri, + 'uri_hash' => md5($uri), + 'material_id' => $material_data['material_id'] + ]); + } + DBManager::get()->exec(" + ALTER TABLE `licenses` + ADD COLUMN `twillo_licensekey` varchar(16) DEFAULT NULL AFTER `description`, + ADD COLUMN `twillo_cclicenseversion` varchar(8) DEFAULT NULL AFTER `twillo_licensekey` + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_BY', + `twillo_cclicenseversion` = '1.0' + WHERE `identifier` = 'CC-BY-1.0' + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_BY', + `twillo_cclicenseversion` = '2.0' + WHERE `identifier` = 'CC-BY-2.0' + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_BY', + `twillo_cclicenseversion` = '2.5' + WHERE `identifier` = 'CC-BY-2.5' + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_BY', + `twillo_cclicenseversion` = '3.0' + WHERE `identifier` = 'CC-BY-3.0' + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_BY', + `twillo_cclicenseversion` = '4.0' + WHERE `identifier` = 'CC-BY-4.0' + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_BY_SA', + `twillo_cclicenseversion` = '1.0' + WHERE `identifier` = 'CC-BY-SA-1.0' + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_BY_SA', + `twillo_cclicenseversion` = '2.0' + WHERE `identifier` = 'CC-BY-SA-2.0' + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_BY_SA', + `twillo_cclicenseversion` = '2.5' + WHERE `identifier` = 'CC-BY-SA-2.5' + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_BY_SA', + `twillo_cclicenseversion` = '3.0' + WHERE `identifier` = 'CC-BY-SA-3.0' + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_BY_SA', + `twillo_cclicenseversion` = '4.0' + WHERE `identifier` = 'CC-BY-SA-4.0' + "); + DBManager::get()->exec(" + UPDATE `licenses` + SET `twillo_licensekey` = 'CC_0', + `twillo_cclicenseversion` = '1.0' + WHERE `identifier` = 'CC0-1.0' + "); + + DBManager::get()->exec( + "INSERT IGNORE INTO `config` + (`field`, `value`, `type`, `range`, + `section`, + `mkdate`, `chdate`, + `description`) + VALUES + ('OERCAMPUS_ENABLE_TWILLO', '0', 'boolean', 'global', + 'OERCampus', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), + 'Soll der Upload zu twillo.de vom OERCampus möglich sein? Folgen Sie dazu der Installationsanleitung.')" + ); + DBManager::get()->exec( + "INSERT IGNORE INTO `config` + (`field`, `value`, `type`, `range`, + `section`, + `mkdate`, `chdate`, + `description`) + VALUES + ('OERCAMPUS_TWILLO_APPID', '', 'string', 'global', + 'OERCampus', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), + 'Welche ID hat dieses Stud.IP, wenn es mit twillo.de kommuniziert?')" + ); + DBManager::get()->exec( + "INSERT IGNORE INTO `config` + (`field`, `value`, `type`, `range`, + `section`, + `mkdate`, `chdate`, + `description`) + VALUES + ('OERCAMPUS_TWILLO_DFNAAIID_DATAFIELD', '', 'string', 'global', + 'OERCampus', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), + 'Welches Datenfeld eines Nutzers trägt dessen DFN-AAI-ID?')" + ); + + SimpleORMap::expireTableScheme(); + } + + public function down() + { + DBManager::get()->exec(" + ALTER TABLE `licenses` + DROP COLUMN `twillo_licensekey`, + DROP COLUMN `twillo_cclicenseversion` + "); + DBManager::get()->exec(" + ALTER TABLE `oer_material` + DROP COLUMN `uri`, + DROP COLUMN `uri_hash` + "); + } +} + diff --git a/lib/bootstrap-autoload.php b/lib/bootstrap-autoload.php index 994a2bde948b1228aecd765d63268df05b5a71a8..05d424a623833058eac53ab45393ca9d47da9471 100644 --- a/lib/bootstrap-autoload.php +++ b/lib/bootstrap-autoload.php @@ -100,3 +100,21 @@ StudipAutoloader::addClassLookup( ['xmlrpc_server'], 'composer/phpxmlrpc/phpxmlrpc/lib/xmlrpcs.inc' ); + +//Edu-Sharing helper classes for twillo connector +StudipAutoloader::addClassLookup( + 'EduSharingHelper', + 'vendor/edu-sharing-plugin/edu-sharing-helper.php' +); +StudipAutoloader::addClassLookup( + 'EduSharingHelperBase', + 'vendor/edu-sharing-plugin/edu-sharing-helper-base.php' +); +StudipAutoloader::addClassLookup( + 'EduSharingAuthHelper', + 'vendor/edu-sharing-plugin/edu-sharing-auth-helper.php' +); +StudipAutoloader::addClassLookup( + 'EduSharingNodeHelper', + 'vendor/edu-sharing-plugin/edu-sharing-node-helper.php' +); diff --git a/lib/classes/TwilloConnector.php b/lib/classes/TwilloConnector.php new file mode 100644 index 0000000000000000000000000000000000000000..e91d912e912396d6ea4e65451fca2f3081448d8f --- /dev/null +++ b/lib/classes/TwilloConnector.php @@ -0,0 +1,274 @@ +<?php + +/** + * Class TwilloConnector manages all transactions between Stud.IP and twillo.de. + */ +class TwilloConnector +{ + /** + * Caches the edusharing EDU-ticket for the same request. + * @var null|string + */ + static protected $ticket = null; + + /** + * Returns the DFN-AAI-ID for the given user. This ID must be the content of a datafield with the + * datafield_id in the global config OERCAMPUS_TWILLO_DFNAAIID_DATAFIELD. If either this config or + * the content of the datafield is null, this method returns false; + * @param null $user_id + * @return false|string + */ + public static function getTwilloUserID($user_id = null) + { + $user_id || $user_id = User::findCurrent()->id; + if (Config::get()->OERCAMPUS_TWILLO_DFNAAIID_DATAFIELD) { + $entry = DatafieldEntryModel::findOneBySQL('`datafield_id` = :datafield_id AND `range_id` = :user_id ', [ + 'datafield_id' => Config::get()->OERCAMPUS_TWILLO_DFNAAIID_DATAFIELD, + 'user_id' => $user_id + ]); + if ($entry) { + return $entry['content'] ?: false; + } + } + return false; + } + + /** + * Transfers the material to twillo. + * @param OERMaterial $material : the material to transfer + * @param null|string $user_id : The user in whose filesystem of twillo the material should be uploaded to. + * @return bool|string : true on success, on failure a text-string as error-message + * @throws Exception + */ + public static function uploadMaterial(OERMaterial $material, $user_id = null) + { + $user_id || $user_id = User::findCurrent()->id; + $base = new EduSharingHelperBase( + 'https://www.twillo.de/edu-sharing', + file_get_contents($GLOBALS['STUDIP_BASE_PATH']."/config/twillo-private.key"), + Config::get()->OERCAMPUS_TWILLO_APPID // 'data-quest-Test' + ); + $authHelper = new EduSharingAuthHelper($base); + if (!static::$ticket) { + static::$ticket = $authHelper->getTicketForUser(TwilloConnector::getTwilloUserID($user_id)); + } + + //the use this edu-ticket to authenticate. + + if (!$material['published_id_on_twillo']) { //Anlegen des materials als Dateihülle: + //frage, ob es einen Ordner gibt: + $header = []; + $header[] = "Authorization: EDU-TICKET ".static::$ticket; + $header[] = "Content-Type: application/json"; + $header[] = "Accept: application/json"; + + $cr = curl_init(); + curl_setopt($cr, CURLOPT_URL, 'https://www.twillo.de/edu-sharing/rest/node/v1/nodes/-home-/-userhome-/children'); + curl_setopt($cr, CURLOPT_HTTPHEADER, $header); + curl_setopt($cr, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($cr, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($cr, CURLOPT_SSL_VERIFYHOST, false); + $body = curl_exec($cr); + $error = curl_error($cr); + if ($error) { + return $error; + } + curl_close($cr); + $body = json_decode($body, true); + + + $subfolder_id = null; + + foreach ($body['nodes'] as $nodedata) { + if ($nodedata['name'] === "OERCampusPublications") { + $subfolder_id = $nodedata['ref']['id']; + break; + } + } + + if (!$subfolder_id) { + //erstelle den Ordner, wenn es ihn nicht gibt: + $header = []; + $header[] = "Authorization: EDU-TICKET ".static::$ticket; + $header[] = "Content-Type: application/json"; + $header[] = "Accept: application/json"; + + $cr = curl_init(); + curl_setopt($cr, CURLOPT_POST, 1); + curl_setopt($cr, CURLOPT_URL, 'https://www.twillo.de/edu-sharing/rest/node/v1/nodes/-home-/-userhome-/children?type=cm%3Afolder&renameIfExists=false&assocType=&versionComment='); + curl_setopt($cr, CURLOPT_HTTPHEADER, $header); + curl_setopt($cr, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($cr, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($cr, CURLOPT_SSL_VERIFYHOST, false); + $postbody = json_encode([ + 'cm:edu_forcemetadataset' => ['true'], + 'cm:edu_metadataset' => ['mds'], + 'cm:name' => ['OERCampusPublications'] + ]); + curl_setopt($cr, CURLOPT_POSTFIELDS, $postbody); + $body = curl_exec($cr); + curl_close($cr); + $body = json_decode($body, true); + + $subfolder_id = $body['node']['ref']['id']; + } + + //Erstelle die Datei als Link: + $header = []; + $header[] = "Authorization: EDU-TICKET ".static::$ticket; + $header[] = "Content-Type: application/json"; + $header[] = "Accept: application/json"; + + $cr = curl_init(); + curl_setopt($cr, CURLOPT_POST, 1); + curl_setopt($cr, CURLOPT_URL, 'https://www.twillo.de/edu-sharing/rest/node/v1/nodes/-home-/'.$subfolder_id.'/children?type=ccm%3Aio&renameIfExists=true'); + curl_setopt($cr, CURLOPT_HTTPHEADER, $header); + curl_setopt($cr, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($cr, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($cr, CURLOPT_SSL_VERIFYHOST, false); + $postbody = json_encode([ + 'ccm:wwwurl' => [$material->getDownloadUrl()], + 'ccm:linktype' => ["USER_GENERATED"], + //'cm:name' => [$material['name']] + ]); + curl_setopt($cr, CURLOPT_POSTFIELDS, $postbody); + $body = curl_exec($cr); + curl_close($cr); + + $body = json_decode($body, true); + $material['published_id_on_twillo'] = $body['node']['ref']['id']; + $material->store(); + } + + + $header = []; + $header[] = "Authorization: EDU-TICKET ".static::$ticket; + $header[] = "Content-Type: application/json"; + $header[] = "Accept: application/json"; + + $cr = curl_init(); + curl_setopt($cr, CURLOPT_POST, 1); + curl_setopt($cr, CURLOPT_URL, 'https://www.twillo.de/edu-sharing/rest/node/v1/nodes/-home-/'.$material['published_id_on_twillo'].'/metadata?versionComment=METADATA_UPDATE'); + curl_setopt($cr, CURLOPT_HTTPHEADER, $header); + curl_setopt($cr, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($cr, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($cr, CURLOPT_SSL_VERIFYHOST, false); + $old_base = URLHelper::setBaseURL($GLOBALS['ABSOLUTE_URI_STUDIP']); + $permalink = URLHelper::getLink("dispatch.php/oer/market/details/".$material->getId()); + URLHelper::setBaseURL($old_base); + $topics = array_map(function ($t) { return $t['name'];}, $material->getTopics()); + $postbody = json_encode([ + 'ccm:original' => [""], + 'cm:created' => [(string) $material['mkdate']], + 'virtual:commentcount' => ["0"], + 'ccm:metadatacontributer_creatorVCARD_ORG' => [""], + 'cclom:version' => ["1.0"], + 'virtual:usagecount' => ["0"], + 'sys:node-uuid' => [$material['published_id_on_twillo']], + 'virtual:childobjectcount' => ["0"], + 'cclom:title' => [$material['name']], + 'ccm:linktype' => ['USER_GENERATED'], + 'ccm:lifecyclecontributer_authorVCARD_SURNAME' => ["Nachname"], + 'ccm:lifecyclecontributer_authorVCARD_URL' => [""], + 'ccm:lifecyclecontributer_authorVCARD_COUNTRY' => [''], + 'ccm:lifecyclecontributer_author' => ['BEGIN:VCARD\nN:Nachname;Vorname\nFN:Vorname Nachname\nVERSION:3.0\nEND:VCARD'], + 'ccm:lifecyclecontributer_authorVCARD_REGION' => [''], + 'ccm:lifecyclecontributer_authorVCARD_ORG' => [""], + 'ccm:lifecyclecontributer_authorVCARD_TITLE' => [""], + 'ccm:lifecyclecontributer_authorVCARD_STREET' => [''], + 'ccm:lifecyclecontributer_authorVCARD_PLZ' => [''], + 'ccm:lifecyclecontributer_authorVCARD_GIVENNAME' => ['Vorname'], + 'ccm:lifecyclecontributer_authorVCARD_CITY' => [''], + 'ccm:lifecyclecontributer_authorFN' => ["Vorname Nachname"], + 'ccm:lifecyclecontributer_authorVCARD_EMAIL' => [""], + 'ccm:lifecyclecontributer_authorVCARD_TEL' => [''], + 'ccm:metadatacontributer_creatorVCARD_CITY' => [''], + 'ccm:metadatacontributer_creatorVCARD_URL' => [''], + 'ccm:ccm:metadatacontributer_creatorVCARD_REGION' => [''], + 'ccm:metadatacontributer_creatorVCARD_PLZ' => [''], + 'ccm:metadatacontributer_creator' => ['BEGIN:VCARD\nVERSION:3.0\nN:OER-Campus, Stud.IP\nFN:Stud.IP\nORG:\nURL:\nTITLE:\nTEL;TYPE=WORK,VOICE:\nADR;TYPE=intl,postal,parcel,work:;;;;;;\nEMAIL;TYPE=PREF,INTERNET:\nEND:VCARD'], + 'ccm:metadatacontributer_creatorVCARD_TEL' => [''], + 'ccm:metadatacontributer_creatorVCARD_COUNTRY' => [''], + 'ccm:metadatacontributer_creatorVCARD_EMAIL' => [''], + 'ccm:metadatacontributer_creatorVCARD_TITLE' => [''], + 'ccm:metadatacontributer_creatorVCARD_GIVENNAME' => ['open'], + 'ccm:metadatacontributer_creatorVCARD_STREET' => [''], + 'ccm:metadatacontributer_creatorVCARD_SURNAME' => ["Stud.IP"], + 'ccm:metadatacontributer_creatorFN' => ["open cast"], + 'sys:store-protocol' => ['workspace'], + 'sys:store-identifier' => ['SpacesStore'], + 'ccm:version_comment' => ['METADATA_UPDATE'], + 'ccm:educationallearningresourcetype' => ['exercise'], //? + 'ccm:create_version' => ['true'], + 'cm:modifiedISO8601' => [date("/r", $material['chdate'])], + 'ccm:author_freetext' => [''], + 'sys:node-dbid' => ['836'], + 'ccm:wwwurl' => [$material->getDownloadUrl()], + 'cm:edu_metadataset' => ['mds'], + 'cm:creator' => ['Stud.IP OER-Campus'], + 'cm:autoVersion' => ['false'], + 'virtual:permalink' => [$permalink], + 'cm:versionLabel' => ['1.0'], + 'cm:versionable' => ['false'], + 'cm:created_LONG' => [(string) $material['mkdate']], + 'virtual:primaryparent_nodeid' => [$subfolder_id], + 'cm:createdISO8601' => ['2020-11-20T14:00:17.805Z'], + 'ccm:ph_action' => ['PERMISSION_ADD'], + 'cclom:general_description' => [$material['description']], + 'cm:modified' => [(string) $material['chdate']], + 'cm:edu_forcemetadataset' => ['false'], + 'cm:modifier' => ['Stud.IP OER-Campus'], + 'ccm:educationallearningresourcetype_DISPLAYNAME' => ['Übung'], + 'cm:autoVersionOnUpdateProps' => ['false'], + "cclom:location" => ["ccrep://repo/".$material['published_id_on_twillo']], + 'ccm:educontextname' => ["default"], + 'cm:modified_LONG' => [(string) $material['chdate']], + 'ccm:questionsallowed' => ["true"], + 'cm:automaticUpdate' => ["true"], + 'cm:name' => [$material['filename']], + 'cm:initialVersion' => ["false"], + 'cclom:general_keyword' => $topics, + 'ccm:commonlicense_key' => [$material->license['twillo_licensekey']], + 'ccm:commonlicense_cc_version' => [$material->license['twillo_cclicenseversion']], + 'virtual:licenseicon' => [''], + 'virtual:licenseurl' => [''], + ]); + curl_setopt($cr, CURLOPT_POSTFIELDS, $postbody); + curl_exec($cr); + $error = curl_error($cr); + curl_close($cr); + if ($error) { + return $error; + } + return true; + } + + public static function deleteFromTwillo($oer_id, $user_id = null) + { + $user_id || $user_id = User::findCurrent()->id; + + $base = new EduSharingHelperBase( + 'https://www.twillo.de/edu-sharing', + file_get_contents($GLOBALS['STUDIP_BASE_PATH']."/config/twillo-private.key"), + Config::get()->OERCAMPUS_TWILLO_APPID // 'data-quest-Test' + ); + $authHelper = new EduSharingAuthHelper($base); + if (!static::$ticket) { + static::$ticket = $authHelper->getTicketForUser(TwilloConnector::getTwilloUserID($user_id)); + } + + $header = []; + $header[] = "Authorization: EDU-TICKET " . static::$ticket; + $header[] = "Content-Type: application/json"; + $header[] = "Accept: application/json"; + + $cr = curl_init(); + curl_setopt($cr, CURLOPT_CUSTOMREQUEST, "DELETE"); + curl_setopt($cr, CURLOPT_URL, 'https://www.twillo.de/edu-sharing/rest/node/v1/nodes/-home-/'.$oer_id); + curl_setopt($cr, CURLOPT_HTTPHEADER, $header); + curl_setopt($cr, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($cr, CURLOPT_SSL_VERIFYHOST, false); + curl_exec($cr); + curl_close($cr); + } +} diff --git a/lib/models/OERMaterial.php b/lib/models/OERMaterial.php index 65acaa4e953e234a00bbca89f5ee81dd8228c74a..d718d60ebbb070b43eca5631882de7d421fd9f2f 100755 --- a/lib/models/OERMaterial.php +++ b/lib/models/OERMaterial.php @@ -23,6 +23,7 @@ class OERMaterial extends SimpleORMap 'foreign_key' => 'license_identifier' ]; $config['serialized_fields']['structure'] = 'JSONArrayObject'; + $config['registered_callbacks']['before_store'][] = "cbHashURI"; $config['registered_callbacks']['before_delete'][] = "cbDeleteFile"; parent::configure($config); } @@ -181,6 +182,11 @@ class OERMaterial extends SimpleORMap @unlink($this->getFilePath()); } + public function cbHashURI() + { + $this['uri_hash'] = md5($this['uri']); + } + public function getTopics() { $statement = DBManager::get()->prepare(" @@ -235,7 +241,7 @@ class OERMaterial extends SimpleORMap $base = URLHelper::setBaseURL($GLOBALS['ABSOLUTE_URI_STUDIP']); $url = $this['host_id'] ? $this->host->url."download/".$this['foreign_material_id'] - : URLHelper::getURL("dispatch.php/oer/market/download/".$this->getId()); + : URLHelper::getURL("dispatch.php/oer/endpoints/download/".$this->getId()); URLHelper::setBaseURL($base); return $url; } @@ -373,6 +379,25 @@ class OERMaterial extends SimpleORMap } } + /** + * Uploads this material to twillo.de. This is not actually an upload but rather a link with metadata. + * @return bool|string : true on success, on failure a text-string as error-message + */ + public function uploadToTwillo() + { + return TwilloConnector::uploadMaterial($this); + } + + /** + * Removes this material from twillo.de if able. + */ + public function deleteFromTwillo() + { + TwilloConnector::deleteFromTwillo($this['published_id_on_twillo']); + $this['published_id_on_twillo'] = null; + $this->store(); + } + public function fetchData() { if ($this['host_id']) { diff --git a/vendor/edu-sharing-plugin/edu-sharing-auth-helper.php b/vendor/edu-sharing-plugin/edu-sharing-auth-helper.php new file mode 100644 index 0000000000000000000000000000000000000000..071c0c6f561275db713d5a5e1ebc0ed38bfdb899 --- /dev/null +++ b/vendor/edu-sharing-plugin/edu-sharing-auth-helper.php @@ -0,0 +1,101 @@ +<?php +require_once "edu-sharing-helper-abstract.php"; + +class EduSharingAuthHelper extends EduSharingHelperAbstract { + + /** + * Gets detailed information about a ticket + * Will throw an exception if the given ticket is not valid anymore + * @param string $ticket + * The ticket, obtained by @getTicketForUser + * @return array + * Detailed information about the current session + * @throws Exception + * Thrown if the ticket is not valid anymore + */ + public function getTicketAuthenticationInfo(string $ticket) { + $curl = curl_init($this->base->baseUrl . '/rest/authentication/v1/validateSession'); + curl_setopt_array($curl, [ + CURLOPT_HTTPHEADER => [ + $this->getRESTAuthenticationHeader($ticket), + 'Accept: application/json', + 'Content-Type: application/json', + ], + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_CONNECTTIMEOUT => 5, + CURLOPT_TIMEOUT => 5 + ]); + $data = json_decode(curl_exec($curl), true); + curl_close($curl); + if ( is_null( $data ) ) { + throw new Exception( 'No answer from repository. Possibly a timeout while trying to connect' ); + } + if($data['statusCode'] !== 'OK') { + throw new Exception('The given ticket is not valid anymore'); + } + return $data; + } + + /** + * Fetches the edu-sharing ticket for a given username + * @param string $username + * The username you want to generate a ticket for + * @return string + * The ticket, which you can use as an authentication header, see @getRESTAuthenticationHeader + * @throws Exception + */ + public function getTicketForUser(string $username, $bodyparams = null) { + if ($bodyparams === null) { + $bodyparams = [ + "primaryAffiliation" => "employee", + "skills" => [ + "string" + ], + "types" => [ + "string" + ], + "extendedAttributes" => [ + 'affiliation' => ["employee"] + ], + "vcard" => "string", + "firstName" => User::findCurrent()->vorname, + "lastName" => User::findCurrent()->nachname, + "email" => User::findCurrent()->email, + "avatar" => "string", + "about" => "string" + ]; + } + $curl = curl_init($this->base->baseUrl . '/rest/authentication/v1/appauth/' . rawurlencode($username)); + curl_setopt_array($curl, [ + CURLOPT_POST => 1, + CURLOPT_FAILONERROR => false, + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_HTTPHEADER => $this->getSignatureHeaders($username), + CURLOPT_CONNECTTIMEOUT => 5, + CURLOPT_TIMEOUT => 5 + ]); + curl_setopt( + $curl, + CURLOPT_POSTFIELDS, + is_array($bodyparams) ? json_encode($bodyparams) : (string) $bodyparams + ); + + $output = curl_exec($curl); + $data = json_decode($output, true); + + $err = curl_errno( $curl ); + $info = curl_getinfo($curl); + curl_close($curl); + if ($err === 0 && $info["http_code"] === 200 && $data['userId'] === $username) { + return $data['ticket']; + } else { + if ( is_null( $data ) ) { + $data = ['error' => $output]; + } + throw new Exception( + 'edu-sharing ticket could not be retrieved: HTTP-Code ' . + $info["http_code"] . ': ' . $data['error'] + ); + } + } +} diff --git a/vendor/edu-sharing-plugin/edu-sharing-helper-abstract.php b/vendor/edu-sharing-plugin/edu-sharing-helper-abstract.php new file mode 100644 index 0000000000000000000000000000000000000000..d531eecb5baf054393517d701cdd4916992c0189 --- /dev/null +++ b/vendor/edu-sharing-plugin/edu-sharing-helper-abstract.php @@ -0,0 +1,43 @@ +<?php + +abstract class EduSharingHelperAbstract { + protected $base; + public function __construct( + EduSharingHelperBase $base + ) { + $this->base = $base; + } + + /** + * Generates the header to use for a given ticket to authenticate with any edu-sharing api endpoint + * @param string $ticket + * The ticket, obtained by @getTicketForUser + * @return string + */ + public function getRESTAuthenticationHeader(string $ticket) { + return 'Authorization: EDU-TICKET ' . $ticket; + } + + + protected function getSignatureHeaders( + string $signString, + $accept = 'application/json', + $contentType = 'application/json' + ) { + $ts = time() * 1000; + $toSign = $this->base->appId . $signString . $ts; + $signature = $this->sign($toSign); + return [ + 'Accept: ' . $accept, + 'Content-Type: ' . $contentType, + 'X-Edu-App-Id: ' . $this->base->appId, + 'X-Edu-App-Signed: ' . $toSign, + 'X-Edu-App-Sig: ' . $signature, + 'X-Edu-App-Ts: ' . $ts, + ]; + } + + protected function sign(string $toSign) { + return $this->base->sign($toSign); + } +} \ No newline at end of file diff --git a/vendor/edu-sharing-plugin/edu-sharing-helper-base.php b/vendor/edu-sharing-plugin/edu-sharing-helper-base.php new file mode 100644 index 0000000000000000000000000000000000000000..ac3e2f64e0ac060d91953c09cb7e8acd0db303ef --- /dev/null +++ b/vendor/edu-sharing-plugin/edu-sharing-helper-base.php @@ -0,0 +1,42 @@ +<?php + +class EduSharingHelperBase { + public $baseUrl; + public $privateKey; + public $appId; + public $language = 'de'; + + /** + * @param string $baseUrl + * The base url to your repository in the format "http://<host>/edu-sharing" + * @param string $privateKey + * Your app's private key. This must match the public key registered in the repo + * @param string $appId + * Your app id name (as registered in the edu-sharing repository) + */ + public function __construct( + string $baseUrl, + string $privateKey, + string $appId + ) { + if(!preg_match('/^([a-z]|[A-Z]|[0-9]|[-_])+$/', $appId)) { + throw new Exception('The given app id contains invalid characters or symbols'); + } + $this->baseUrl=$baseUrl; + $this->privateKey=$privateKey; + $this->appId=$appId; + } + + public function setLanguage(string $language) { + $this->language = $language; + } + + function sign(string $toSign) { + $pkeyid = openssl_get_privatekey($this->privateKey); + openssl_sign($toSign, $signature, $pkeyid); + $signature = base64_encode($signature); + openssl_free_key($pkeyid); + return $signature; + } + +} \ No newline at end of file diff --git a/vendor/edu-sharing-plugin/edu-sharing-helper.php b/vendor/edu-sharing-plugin/edu-sharing-helper.php new file mode 100644 index 0000000000000000000000000000000000000000..3c9d88413bf497e48631dcf68997acb910c7ae9c --- /dev/null +++ b/vendor/edu-sharing-plugin/edu-sharing-helper.php @@ -0,0 +1,47 @@ +<?php + +class EduSharingHelper { + /** + * generate a new key pair (private + public) to be registered in the edu-sharing repository + * Store the data somewhere in your application, e.g. database + * use the public key returned to register the application in edu-sharing + * NOTE: This function will fail on windows-based systems! + * @throws Exception + */ + public static function generateKeyPair( + ) + { + $res = openssl_pkey_new(); + if(!$res) { + throw new Exception("No result from openssl_pkey_new. Please check your php installation"); + } + openssl_pkey_export($res, $privatekey); + $publickey = openssl_pkey_get_details($res); + $publickey = $publickey["key"]; + return [ + "privatekey" => $privatekey, + "publickey" => $publickey + ]; + } + + /** + * Generates an edu-sharing compatible xml file for registering the application + * This is a very basic function and is only intended for demonstration or manual use. Data is not escaped! + */ + public static function generateEduAppXMLData(string $appId, string $publickey, string $type = 'LMS', string $publicIP = '*') { + return '<?xml version="1.0" encoding="UTF-8"?> + <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> + <properties> + <entry key="appid">' . $appId . '</entry> + <entry key="public_key">' . $publickey . '</entry> + <entry key="type">' . $type . '</entry> + <entry key="domain"></entry> + <!-- in case of wildcard host: Replace this, if possible, with the public ip from your service --> + <entry key ="host">' . $publicIP . '</entry> + <!-- must be true --> + <entry key="trustedclient">true</entry> + </properties> + '; + } + +} \ No newline at end of file diff --git a/vendor/edu-sharing-plugin/edu-sharing-node-helper.php b/vendor/edu-sharing-plugin/edu-sharing-node-helper.php new file mode 100644 index 0000000000000000000000000000000000000000..112d7d85d91c69b5b76ce67710ea4e5badcaaa9f --- /dev/null +++ b/vendor/edu-sharing-plugin/edu-sharing-node-helper.php @@ -0,0 +1,175 @@ +<?php +require_once "edu-sharing-helper-abstract.php"; + +class DisplayMode { + const Inline = 'inline'; + const Embed = 'embed'; + const Dynamic = 'dynamic'; +} +class Usage { + public $nodeId; + public $nodeVersion; + public $containerId; + public $resourceId; + public $usageId; + + public function __construct($nodeId, $nodeVersion, $containerId, $resourceId, $usageId) + { + $this->nodeId = $nodeId; + $this->nodeVersion = $nodeVersion; + $this->containerId = $containerId; + $this->resourceId = $resourceId; + $this->usageId = $usageId; + } + +} +class EduSharingNodeHelper extends EduSharingHelperAbstract { + /** + * creates a usage for a given node + * The given usage can later be used to fetch this node REGARDLESS of the actual user + * The usage gives permanent access to this node and acts similar to a license + * In order to be able to create an usage for a node, the current user (provided via the ticket) + * MUST have CC_PUBLISH permissions on the given node id + * @param string $ticket + * A ticket with the user session who is creating this usage + * @param string $containerId + * A unique page / course id this usage refers to inside your system (e.g. a database id of the page you include the usage) + * @param string $resourceId + * The individual resource id on the current page or course this object refers to + * (you may enumerate or use unique UUID's) + * @param string $nodeId + * The edu-sharing node id the usage shall be created for + * @param string|null $nodeVersion + * Optional: The fixed version this usage should refer to + * If you leave it empty, the usage will always refer to the latest version of the node + * @return Usage + * An usage element you can use with @getNodeByUsage + * Keep all data of this object stored inside your system! + */ + public function createUsage( + string $ticket, + string $containerId, + string $resourceId, + string $nodeId, + string $nodeVersion = null + ) { + $curl = curl_init($this->base->baseUrl . '/rest/usage/v1/usages/repository/-home-'); + $headers = $this->getSignatureHeaders($ticket); + $headers[] = $this->getRESTAuthenticationHeader($ticket); + curl_setopt_array($curl, [ + CURLOPT_FAILONERROR => false, + CURLOPT_POST => 1, + CURLOPT_POSTFIELDS => json_encode([ + 'appId' => $this->base->appId, + 'courseId' => $containerId, + 'resourceId' => $resourceId, + 'nodeId' => $nodeId, + 'nodeVersion' => $nodeVersion, + ]), + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_HTTPHEADER => $headers + ]); + $data = json_decode(curl_exec($curl), true); + $err = curl_errno( $curl ); + $info = curl_getinfo($curl); + curl_close($curl); + if ($err === 0 && $info["http_code"] === 200) { + return new Usage( + $data['parentNodeId'], + $nodeVersion, + $containerId, + $resourceId, + $data['nodeId'] + ); + } else { + throw new Exception('creating usage failed ' . + $info["http_code"] . ': ' . $data['error'] . ' ' . $data['message']); + } + + } + + /** + * Loads the edu-sharing node refered by a given usage + * @param Usage $usage + * The usage, as previously returned by @createUsage + * @param string $displayMode + * The displayMode + * This will ONLY change the content representation inside the "detailsSnippet" return value + * @param array $renderingParams + * @return mixed + * Returns an object containing a "detailsSnippet" repesentation + * as well as the full node as provided by the REST API + * Please refer to the edu-sharing REST documentation for more details + * @throws Exception + */ + public function getNodeByUsage( + Usage $usage, + $displayMode = DisplayMode::Inline, + array $renderingParams = null + ) + { + $url = $this->base->baseUrl . '/rest/rendering/v1/details/-home-/' . rawurlencode($usage->nodeId); + $url .= '?displayMode=' . rawurlencode($displayMode); + if($usage->nodeVersion) { + $url .= '&version=' . rawurlencode($usage->nodeVersion); + } + $curl = curl_init($url); + + $headers = $this->getSignatureHeaders($usage->usageId); + $headers[] = 'X-Edu-Usage-Node-Id: ' . $usage->nodeId; + $headers[] = 'X-Edu-Usage-Course-Id: ' . $usage->containerId; + $headers[] = 'X-Edu-Usage-Resource-Id: ' . $usage->resourceId; + + curl_setopt_array($curl, [ + CURLOPT_FAILONERROR => false, + CURLOPT_POST => 1, + CURLOPT_POSTFIELDS => json_encode($renderingParams), + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_HTTPHEADER => $headers + ]); + $data = json_decode(curl_exec($curl), true); + $err = curl_errno( $curl ); + $info = curl_getinfo($curl); + if ($err === 0 && $info["http_code"] === 200) { + return $data; + } else { + throw new Exception('fetching node by usage failed ' . + $info["http_code"] . ': ' . $data['error'] . ' ' . $data['message']); + } + } + + /** + * Deletes the given usage + * We trust that you've validated if the current user in your context is allowed to do so + * There is no restriction in deleting usages even from foreign users, as long as they were generated by your app + * Thus, this endpoint does not require any user ticket + * @param string $nodeId + * The edu-sharing node id this usage belongs to + * @param string $usageId + * The usage id + */ + public function deleteUsage( + string $nodeId, + string $usageId + ) { + $curl = curl_init($this->base->baseUrl . '/rest/usage/v1/usages/node/' . rawurlencode($nodeId) . '/' . rawurlencode($usageId)); + $headers = $this->getSignatureHeaders($nodeId.$usageId); + curl_setopt_array($curl, [ + CURLOPT_FAILONERROR => false, + CURLOPT_CUSTOMREQUEST => 'DELETE', + CURLOPT_RETURNTRANSFER => 1, + CURLOPT_HTTPHEADER => $headers + ]); + $data = json_decode(curl_exec($curl), true); + $err = curl_errno( $curl ); + $info = curl_getinfo($curl); + curl_close($curl); + if ($err === 0 && $info["http_code"] === 200) { + + } else { + throw new Exception('deleting usage failed ' . + $info["http_code"] . ': ' . $data['error'] . ' ' . $data['message']); + } + + } +} \ No newline at end of file diff --git a/vendor/edu-sharing-plugin/example/example-api.php b/vendor/edu-sharing-plugin/example/example-api.php new file mode 100644 index 0000000000000000000000000000000000000000..a961a7d172d712fd94dc97ccb7a53ca0b3a66d1c --- /dev/null +++ b/vendor/edu-sharing-plugin/example/example-api.php @@ -0,0 +1,59 @@ +<?php +define('APP_ID', 'data-quest Test'); +define('BASE_URL', 'http://localhost:8080/edu-sharing'); +define('USERNAME', 'root@studip'); + + +header('Accept: application/json'); +header('Content-Type: application/json'); + +require_once "../edu-sharing-helper.php"; +require_once "../edu-sharing-helper-base.php"; +require_once "../edu-sharing-auth-helper.php"; +require_once "../edu-sharing-node-helper.php"; + +$privatekey = @file_get_contents('private.key'); +if(!$privatekey) { + die('no private key'); +} else { + $key["privatekey"] = $privatekey; +} +// init the base class instance we use for all helpers +$base = new EduSharingHelperBase(BASE_URL, $key["privatekey"], APP_ID); +$postData = json_decode(file_get_contents('php://input')); +$action = $postData->action; +$result = null; +if ($action === 'BASE_URL') { + $result = BASE_URL; +} else if ($action === 'GET_NODE') { + $nodeHelper = new EduSharingNodeHelper($base); + $result = $nodeHelper->getNodeByUsage( + new Usage( + $postData->nodeId, + $postData->nodeVersion, + $postData->containerId, + $postData->resourceId, + $postData->usageId + ) + ); +} else if ($action === 'CREATE_USAGE') { + $nodeHelper = new EduSharingNodeHelper($base); + $result = $nodeHelper->createUsage( + $postData->ticket, + $postData->containerId, + $postData->resourceId, + $postData->nodeId + ); +} else if ($action === 'DELETE_USAGE') { + $nodeHelper = new EduSharingNodeHelper($base); + $nodeHelper->deleteUsage( + $postData->nodeId, + $postData->usageId + ); +} else if ($action === 'TICKET') { + $authHelper = new EduSharingAuthHelper($base); + $ticket = $authHelper->getTicketForUser(USERNAME); + $result = $ticket; +} + +echo json_encode($result); diff --git a/vendor/edu-sharing-plugin/example/example.php b/vendor/edu-sharing-plugin/example/example.php new file mode 100644 index 0000000000000000000000000000000000000000..e959d597cc6a0a26d2755f11c04120e3910b3381 --- /dev/null +++ b/vendor/edu-sharing-plugin/example/example.php @@ -0,0 +1,49 @@ +<?php +/** + * This is a sample file on how to use the edu-sharing remote library + * Run this script for the first time to create a private/public keypair + * On first run, a properties.xml file will be created + * Upload this file to your target edu-sharing (Admin-Tools -> Remote Systems -> Choose XML-File) + */ + +define('APP_ID', 'sample-app'); +define('USERNAME', 'tester'); +require_once "../edu-sharing-helper.php"; +require_once "../edu-sharing-helper-base.php"; +require_once "../edu-sharing-auth-helper.php"; +require_once "../edu-sharing-node-helper.php"; + +$privatekey = @file_get_contents('private.key'); +if(!$privatekey) { + $key = EduSharingHelper::generateKeyPair(); + // store the $key data inside your application, e.g. your database or plugin config + file_put_contents(APP_ID . '.properties.xml', EduSharingHelper::generateEduAppXMLData(APP_ID, $key['publickey'])); + file_put_contents('private.key', $key['privatekey']); + die('Wrote ' . APP_ID . '.properties.xml file. Upload it to edu-sharing, then run this script again'); +} else { + $key["privatekey"] = $privatekey; +} +if(count($argv) < 2) { + die('This script should be called as follow: "example.php http://localhost:8080/edu-sharing [<node-id>]"'); +} +// init the base class instance we use for all helpers +$base = new EduSharingHelperBase($argv[1], $key["privatekey"], APP_ID); +$base->setLanguage('de'); + +// authenticating (getting a ticket) and validating the given ticket +$authHelper = new EduSharingAuthHelper($base); +$ticket = $authHelper->getTicketForUser(USERNAME); +echo "Ticket validation result:\n"; +print_r($authHelper->getTicketAuthenticationInfo($ticket)); + +if(count($argv) !== 3) { + die("No node id given. Add a 3rd parameter to test create + fetching of nodes by usage"); +} +$nodeHelper = new EduSharingNodeHelper($base); +$usage = $nodeHelper->createUsage($ticket, '1', '1', $argv[2]); +echo "Usage create result:\n"; +print_r($usage); + +$node = $nodeHelper->getNodeByUsage($usage); +echo "Get node by usage:\n"; +print_r($node["node"]["name"]); \ No newline at end of file diff --git a/vendor/edu-sharing-plugin/example/index.html b/vendor/edu-sharing-plugin/example/index.html new file mode 100644 index 0000000000000000000000000000000000000000..9be18ce3ab7ccfbf660bd573b09f6f0927c0458d --- /dev/null +++ b/vendor/edu-sharing-plugin/example/index.html @@ -0,0 +1,120 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>Edu Sharing Usage Example</title> + <style> + body > div { + padding: 20px 10px; + } + pre { + border: 1px solid #eee; + padding: 10px; + margin: 10px; + } + </style> + <script> + let ticket; + let baseUrl = null; + let esWindow = null; + function openEduSharing() { + esWindow = window.open( + baseUrl + '/components/search?ticket=' + encodeURIComponent(ticket) + + '&reurl=IFRAME' + ); + } + window.addEventListener('message', receiveMessage, false); + async function receiveMessage(event){ + if(event.data.event === 'APPLY_NODE'){ // Event Name hier festlegen + esWindow.close(); + console.log(event.data.data); + usage = await createUsage(event.data.data.nodeId); + // in a real application, the usage is stored in your backend system + localStorage.setItem('usage', JSON.stringify(usage)); + await renderUsage(); + + } + } + async function renderUsage() { + if(localStorage.getItem('usage')) { + const usage = JSON.parse(localStorage.getItem('usage')); + document.querySelector('#usage').style.display = null; + document.querySelector('#delete-usage').style.display = null; + document.querySelector('#usage').innerHTML = JSON.stringify(usage, null, 4); + usage.action = 'GET_NODE'; + const render = await fetchAPI(usage) + document.querySelector('#render').innerHTML = render.detailsSnippet; + } + + } + async function createUsage(nodeId) { + return await fetchAPI({ + action: 'CREATE_USAGE', + ticket, + nodeId, + containerId: 'my_sample_page_1', + resourceId: Math.random() + }); + } + async function deleteUsage(nodeId) { + const usage = JSON.parse(localStorage.getItem('usage')); + await fetchAPI({ + action: 'DELETE_USAGE', + nodeId: usage.nodeId, + usageId: usage.usageId + }); + localStorage.removeItem('usage'); + document.querySelector('#render').style.display = 'none'; + document.querySelector('#usage').style.display = 'none'; + document.querySelector('#delete-usage').style.display = 'none'; + } + async function fetchAPI(data) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open("POST", "example-api.php", true); + xhr.onload = () => { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + resolve(JSON.parse(xhr.response)); + } else { + alert(xhr.statusText); + reject(xhr.statusText); + } + } + }; + xhr.onerror = function (e) { + alert(xhr.statusText); + }; + xhr.send(JSON.stringify(data)); + }); + } + async function getTicket() { + ticket = await fetchAPI({action: 'TICKET'}); + document.querySelector('#ticket').innerText = ticket; + document.querySelector('#edu-select').style.display = null; + + } + window.addEventListener('load', async () => { + baseUrl = await fetchAPI({action: 'BASE_URL'}); + await renderUsage(); + + await getTicket(); + }); + </script> +</head> +<body> +<div> + <button onclick="getTicket()">Re-Fetch ticket</button> + <span id="ticket">No ticket</span> +</div> +<div id="edu-select" style="display:none;"> + <button onclick="openEduSharing()">Open edu-sharing & select node</button> +</div> +<pre id="usage" style="display: none"></pre> +<div id="delete-usage" style="display: none"> + <button onclick="deleteUsage()">Delete current Usage</button> +</div> +<div id="render"></div> + +</body> +</html> \ No newline at end of file diff --git a/vendor/edu-sharing-plugin/readme.md b/vendor/edu-sharing-plugin/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..ab1f3322247dfd49566608abab0e5d29a3173edb --- /dev/null +++ b/vendor/edu-sharing-plugin/readme.md @@ -0,0 +1 @@ +This library is a changed version of https://github.com/edu-sharing/php-auth-plugin